日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定义主键

發布時間:2025/3/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定义主键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過主鍵能夠唯一定位一條數據記錄,而且在進行外鍵關聯的時候也需要被關聯的數據表具有主鍵,所以為數據表定義主鍵是非常好的習慣。在CREATE TABLE 中定義主鍵是通過PRIMARY KEY 關鍵字來進行的,定義的位置是在所有字段定義之后。比如我們為公交車建立一張數據表,這張表中有公交車編號FNumber、駕駛員姓名FDriverName、投入使用年數FUsedYears等字段,其中公交車編號FNumber 字段要定義為主鍵,那么只要如下設計建表SQL:

MYSQL,MSSQLServer:CREATE TABLE T_Bus (FNumber VARCHAR(20),FDriverName VARCHAR(20), FUsedYears INT,PRIMARY KEY (FNumber)) Oracle: CREATE TABLE T_Bus (FNumber VARCHAR2(20),FDriverName VARCHAR2(20), FUsedYears NUMBER (10),PRIMARY KEY (FNumber)) DB2: CREATE TABLE T_Bus (FNumber VARCHAR(20) NOT NULL,FDriverName VARCHAR(20), FUsedYears INT,PRIMARY KEY (FNumber))

可以看到,主鍵定義是在所有字段后的“約束定義段”中定義的,格式為PRIMARY KEY(主鍵字段名),在有的數據庫系統中主鍵字段名兩側的括號是可以省略的,也就是可以寫成PRIMARY KEY FNumber,不過為了能夠更好的跨數據庫,建議不要采用這種不通用的寫法。

需要注意的是,在上邊列出的DB2數據庫的CREATE TABLE 語句中,我們為FNumber字段設置了非空約束。因為在DB2 中,主鍵字段必須被添加非空約束,否則會報出類似“"FNUMBER"不能是一列主鍵或唯一鍵,因為它可包含空值。”的錯誤。

有的時候數據表中是不存在一個唯一的主鍵的,比如某個行業協會需要創建一個保存個人會員信息的表,表中記錄了所屬公司名稱FCompanyName、公司內部工號FInternalNumber、姓名FName 等,由于存在同名的情況,所以不能夠使用姓名做為主鍵,同樣由于各個公司之間的內部工號也有可能重復,所以也不能使用公司內部工號做為主鍵。不過如果確定了公司名稱,那么公司內部工號也就唯一了,也就是說通過公司名稱FCompanyName 和公司內部工號FInternalNumber 兩個字段一起就可以唯一確定一個個人會員了,我們可以讓FCompanyName、FInternalNumber 兩個字段聯合起來做為主鍵,這樣的主鍵被稱為聯合主鍵(或者稱為復合主鍵)。可以有兩個甚至多個字段來做為聯合主鍵,這就可以解決一張表中沒有唯一主鍵字段的問題了。定義聯合主鍵的方式和唯一主鍵類似,只要在PRIMARY KEY后的括號中列出做為聯合主鍵的各個字段就可以了。上面的例子的建表SQL如下:

MYSQL,MSSQLServer,DB2:CREATE TABLE T_PersonalMember (FCompanyName VARCHAR(20), FInternalNumber VARCHAR(20),FName VARCHAR(20), PRIMARY KEY (FCompanyName,FInternalNumber)) Oracle: CREATE TABLE T_PersonalMember (FCompanyName VARCHAR2(20), FInternalNumber VARCHAR2(20),FName VARCHAR2(20), PRIMARY KEY (FCompanyName,FInternalNumber)) DB2: CREATE TABLE T_PersonalMember (FCompanyName VARCHAR(20) NOT NULL, FInternalNumber VARCHAR(20) NOT NULL,FName VARCHAR(20), PRIMARY KEY (FCompanyName,FInternalNumber))

同樣需要注意的是,在DB2中組成聯合主鍵的每一個字段也都必須被添加非空約束。采用聯合主鍵可以解決表中沒有唯一主鍵字段的問題,不過聯合主鍵有如下的缺點:

1,效率低。在進行數據的添加、刪除、查找以及更新的時候數據庫系統必須處理兩個字段,這樣大大降低了數據處理的速度。

2,使得數據庫結構設計變得糟糕。組成聯合主鍵的字段通常都是有業務含義的字段,這與“使用邏輯主鍵而不是業務主鍵”的最佳實踐相沖突,容易造成系統開發以及維護上的麻煩。

3,使得創建指向此表的外鍵關聯關系變得非常麻煩甚至無法創建指向此表的外鍵關聯關系。

4,加大開發難度。很多開發工具以及框架只對單主鍵有良好的支持,對于聯合主鍵經常需要進行非常復雜的特殊處理。

考慮到這些缺點,我們應該只在兼容遺留系統等特殊場合才使用聯合主鍵,而在其他場合則應該使用唯一主鍵。

轉載于:https://www.cnblogs.com/yuyu666/p/9823679.html

總結

以上是生活随笔為你收集整理的定义主键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。