詳談關聯式資料庫中的「鍵」(續1)

2021-04-07 07:45:27 字數 2485 閱讀 4068

( 1

)天然主鍵

在現實生活中存在著許多看起來可以惟一地標識一行記錄的值,如:身份證號碼、汽車牌照號碼等。資料庫邏輯模式設計往往會使用這些天然的主鍵,儘管這些天然主鍵中沒有哪乙個是十分可靠的。

可以讓使用者把它們當作查詢和命名一行記錄的

「 主鍵

」 ,但絕不能把它們作為實際的主鍵。

如果必須使用乙個天然主鍵,則必須保證對於每乙個引用了這個天然主鍵的外來鍵都啟用了級聯更新選項,這樣在更新主鍵時就不會破壞參照完整性了。

( 2

) sql server

的主鍵約束

sql server

使用約束來維護主鍵和外來鍵。約束的用途在於:確保新資料滿足指定的要求,否則將拒絕相應的資料修改操作。

主鍵約束實際上是通過

unique

約束(不是空置約束)以及聚集或者非聚集惟一索引來實現的。

注:主鍵應當是沒有實際意義的、單列的、計算機生成的、不可編輯的,而且對於使用者來說應當是不可見的。另外,防止使用者檢視和操作鍵是乙個成功的數庫開發人員所要達到的主要目標之一。

企業管理器使用聚集索引建立主鍵,這種實現方法並不好。如果要使用企業管理器這個圖形工具來建立物理模式,應當手工將主鍵索引重新設定為非聚集索引。在**中,可以使用以下兩種方式之一把某個(某些)列設定為主鍵:

create table dbo.guide (

guideid int identity not null primary key nonclustered ,

... ...

或者alter table dbo.guide add constraint

pk_guide primary key nonclustered (guideid)

... ...

有兩種型別最適合於做主鍵:標識列(

idnetity

)和全域性惟一識別符號列(

guid

)。a.

使用 identity

。 到目前為止,大多數廣為使用的主鍵建立方法都與標識列的使用有關。當新的記錄行插入到資料庫中時,標識列都會為它們生成連續的整數。你還可以任意的設定標識列的種子值和增量值。

標識列具有以下的優點:

a.

整數比

guid

更容易人工識別和編輯。

b. 整數比

guid

占用空間小而且快。當然,這樣的效能差別只有當你迴圈執行數千個

select

語句才能顯現出來。

標識列的值是在插入新的記錄行時由

sql server

建立的。除非將

set insert_identity

選項設定為

true

,否則,試圖在標識列中插入資料或者更新標識列中的資料都會產生錯誤。

b. 使用

guid

。sql server

的 uniqueidentifier

資料型別與

com

的全域性惟一識別符號相對應。雖然標識列和

guid

都是惟一的,但與標識列相比,

guid

可以在更大範圍內保證唯一性。它具有如下優點:

a. 複製使用

guid

主鍵的資料庫時,不必額外作全面的檢查。

b. guid

值的隨機性可以減少資料庫的熱點。

c. guid

可以避免使用者使用具有實際意義的主鍵,或者為主鍵賦予實際的意義。

d. guid

可以避免這樣的連線錯誤,即:查詢時連線了錯誤的表,但系統依舊返回了結果。因為如果使用了

guid

,這些表的記錄行在鍵所對應的那些列上是不可能取同樣的整數值的。

e. guid

的值是用不完的。

f. 可以使用多種方法來生成

guid

的值,包括:使用列的預設值、

select

語句的表示式或者

select

語句之前的**,因此,使用

guid

程式設計要容易的多。此外,使用

guid

可以避免使用標識列時會出現的資料修改問題。

在下面的指令碼中,將

porductid

列的資料型別設定為

uniqueidentitfier

,並指定它不能夠取空值。該列的

rowguidcol

屬性被設定為

true

,這使得複製程式能夠檢測並使用它。它的預設值是新生成的

uniqueidentifier

。 product

表將它作為主鍵,它使用了非聚集的惟一索引。

create table dbo.product (

productid uniqueidentifier not null

rowguidcol  default (newid())

primary key nonclustered,

... ...

詳談關聯式資料庫中的「鍵」(續2)

詳談關聯式資料庫中的 鍵 續 今天我們來討論外來鍵。從表通過指向主表的外來鍵來與主表相關聯。人們常犯的一種錯誤是 認為參照完整性是對於主鍵的約束。但實際上,參照完整性要求的是外鍵值必須引用有效的主鍵值,所以這項約束是對於外來鍵的約束,而不是對於主鍵的約束。在 t sql 指令碼中,可以使用兩種方法來...

關聯式資料庫與非關聯式資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...

關聯式資料庫與非關聯式資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...