面試經驗複習之資料庫(三)

2021-10-03 10:53:25 字數 2874 閱讀 1498

1、資料庫第三正規化

(1)第一正規化(1nf)

在任何乙個關聯式資料庫中,第一正規化是對關係模式的基本要求,不滿足第一正規化的資料庫就不是關聯式資料庫。

所謂第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。

(2)第二正規化(2nf)

第二正規化是在第一正規化的基礎上建立起來的,即滿足第二正規化必須先滿足第一正規化。第二正規化要求資料庫表中的每個例項或行必須可以被唯一的區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。這個唯一屬性列被稱為主關鍵字或主鍵、主碼。

(3) 第三正規化

滿足第三正規化必須先滿足第二正規化。簡而言之,第三正規化要求乙個資料庫表中不包含已在其他表中已包含的非主關鍵字資訊。

2、事務

資料庫事務(database transaction),是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要 麼完全地不執行。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要稱為事務,必須滿足所謂的acid(原子性、一致性、隔離性和永續性)屬性。

事務是資料庫執行中的邏輯工作單位,由dbms中的事務管理子系統負責事務的處理。

3、觸發器

觸發器是sql server提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對乙個表進行操作(insert,delete,update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。

觸發器有如下作用:

我為什麼要用觸發器?比如,這麼兩個表:

create

table student(

-- 學生表

studentid int

primary

key,

-- 學號..

.)create

table borrowrecord(

-- 學生借書記錄表

borrowrecordno int

identity(1

,1),

-- 流水號

studentid int

,-- 學號

borrowdate datetime

,-- 借出時間

returndate datetime

,-- 歸還時間..

.)

用到的功能有:

如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);

如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。

等等。

這時候可以用到觸發器。對於1, 建立乙個update觸發器:

create

trigger trustudent

on student -- 在student表中建立觸發器

forupdate

-- 為什麼事件觸發

as-- 事件觸發後所要做的事情

ifupdate

(studentid)

begin

update borrowrecord

set studentid = i.studentid

from borrowrecord br, deleted d, inserted i -- deleted 和inserted臨時表

where br.studentid = d.studentid

end

理解觸發器裡面的兩個臨時的表:deleted,inserted。注意deleted與inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。

乙個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是:

虛擬表inserted

虛擬表deleted

在表記錄新增時

存放新增的記錄

不儲存記錄

修改時存放用來更新的新記錄

存放更新前的記錄

刪除時不儲存記錄

存放被刪除的記錄

乙個update的過程可以看作為:生成新的記錄到inserted表,複製舊的記錄到deleted表,然後刪除student記錄並寫入新紀錄。

4、儲存過程

儲存過程是在大型資料庫系統中,一組為了完成特定功能的sql語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的乙個重要物件。

例子:該例子是建立乙個簡單的儲存過程order_tot_amt,這個儲存過程根據使用者輸入的訂單id號碼(@o_id),由訂單明細表(orderdetails)中計算該訂單銷售總額【單價(unitprice) * 數量(quantity)】,這一金額通過@p_tot這一引數輸出給呼叫這一儲存過程的程式。

create

procedure order_tot_amt

@o_id

int,

@p_tot

int output

asselect

@p_tot

=sum

(unitprice*quantity)

from orderdetails

where orderid=

@o_id

go

面試複習 資料庫

1 資料庫的四個特性acid 原子性 atomicity 整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾 rollback 到事務開始前的狀態,就像這個事務從來沒有執行過一樣。一致性 correspondence 在事務開始之前和事務...

面試之「資料庫三大正規化」

為了能夠更好地理解資料庫的三大正規化,對資料庫中基本概念進行講解。資料庫的設計正規化是資料庫設計 所需要滿足的規範,滿足這些規範的資料庫是簡潔的 明晰的。同時不會發生插入 insert 刪除 delete 和更新 update 異常操作。物件 object 具有相同性質 遵循相同規則的一類事物的抽象...

JSP複習之資料庫

一.case when then else end的使用 1.判斷某個值是否為指定值 2.判斷值是我們所想要的,是則輸出內容 方法為 select case 列名 when 規定值 then 輸入內容 else end from 表名 注意事項 1.else 可省略 2.then可以輸入某個列的值 ...