SQL SERVER 数据库主键和外键的思考
SQL SERVER 數(shù)據(jù)庫主鍵和外鍵的思考
什么是主鍵: 主鍵是指表中一個(gè)列或者列的組合,其值能夠唯一的標(biāo)識表中的每一個(gè)行。這樣的一列或者多列成為表的主鍵,通過它可以強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或者更改表時(shí)可以通過定義PRIMARY KEY約束來創(chuàng)建主鍵,一個(gè)表只能有一個(gè)主鍵約束,而且主鍵約束中什么是主鍵:
? ? ? ? 主鍵是指表中一個(gè)列或者列的組合,其值能夠唯一的標(biāo)識表中的每一個(gè)行。這樣的一列或者多列成為表的主鍵,通過它可以強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或者更改表時(shí)可以通過定義PRIMARY KEY約束來創(chuàng)建主鍵,一個(gè)表只能有一個(gè)主鍵約束,而且主鍵約束中的列不能是空值,由于主鍵約束確保唯一數(shù)據(jù),所一經(jīng)常來定義標(biāo)識列。
每一個(gè)表都必須定義一個(gè)主鍵嗎?
? ? ? ? 我個(gè)人認(rèn)為這個(gè)問題要看我們的表的功能,利用來存儲大量數(shù)據(jù),并需要經(jīng)常查詢的,建立主鍵可以加快查詢效率,從而降低服務(wù)器的負(fù)擔(dān),但是如果沒有這樣的需求,建立主鍵反而消耗資源,所以這種情況下就沒有必要建立主鍵了。
? ? ? ? 有些人認(rèn)為:雖然在有些數(shù)據(jù)庫中,主鍵不是必須的,但是最好為每個(gè)表都設(shè)置一個(gè)主鍵,不管是但主鍵還是復(fù)合主鍵,它存在代表著表結(jié)構(gòu)的完整性,表的記錄必須得有唯一區(qū)分的字段,主鍵主要是用于其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。
?
主鍵的作用:
1、? 從上面的定義可以看出,主鍵是用于唯一標(biāo)識數(shù)據(jù)庫表中一行數(shù)據(jù)的。
2、? 作為一個(gè)可以被外鍵有效引用的對象。
主鍵的設(shè)計(jì)原則:
1、? 主鍵應(yīng)當(dāng)是對用戶沒有意義的,比如說用戶登陸一個(gè)系統(tǒng)的時(shí)候的登錄id;而這種情況就不可能了:“學(xué)生表”需要支持這樣的需求“學(xué)生注銷后,可以重新激活自己的信息,而且還要保持自己的號碼跟原來的一直”,這樣的話主鍵就不能滿足要求了。
2、? 唯一性,這個(gè)原則就不用多說了。
3、? 非空性:主鍵的值是不可重復(fù)的,也不可以為空。
什么是外鍵:
? ? ? ? 外鍵是建立于表與表之間的聯(lián)系,方便程序的編寫。
外鍵的特點(diǎn):
1、? 外鍵保證了數(shù)據(jù)的完整性
2、? 使用外鍵,簡單直觀,可以直接在數(shù)據(jù)模型中體現(xiàn),無論是設(shè)計(jì)、維護(hù)等等。
3、? 外鍵在調(diào)試程序的時(shí)候可能會帶來一些麻煩。
如何插入外鍵:
?
如上圖所示,數(shù)據(jù)庫中有三個(gè)表,下面我們給news和category表設(shè)置關(guān)系
?
如圖所示,郵件單擊“數(shù)據(jù)庫關(guān)系圖”,選擇“新建數(shù)據(jù)庫關(guān)系圖”
?
出現(xiàn)上面的“添加表”
選擇要添加的表的名稱,將這三個(gè)表全部添加到里面去(如下圖所示)
?
我們將news的categoryId設(shè)置為category的Id的外鍵
?
單擊添加按鈕
?
選擇上邊的“表和列規(guī)范”左邊的三個(gè)小點(diǎn)號的按鈕,點(diǎn)開后如下圖所示
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的SQL SERVER 数据库主键和外键的思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7(windows 7)系统下安装
- 下一篇: 用JDBC直连方式访问SQL Serve