1. 程式人生 > >複合主鍵與聯合主鍵

複合主鍵與聯合主鍵

一、複合主鍵

  所謂的複合主鍵 就是指你表的主鍵含有一個以上的欄位組成,不使用無業務含義的自增id作為主鍵。

比如 

  1. create table test
  2. (
  3. name varchar(19),
  4. id number,
  5. value varchar(10),
  6. primary key (name,id)
  7. )

上面的name和id欄位組合起來就是你test表的複合主鍵 ,它的出現是因為你的name欄位可能會出現重名,所以要加上ID欄位這樣就可以保證你記錄的唯一性 ,一般情況下,主鍵的欄位長度和欄位數目要越少越好 。

這裡就會有一個疑惑?  主鍵是唯一的索引,那麼為何一個表可以建立多個主鍵呢?

其實“主鍵是唯一的索引”這話有點歧義的。舉個例子,我們在表中建立了一個ID欄位,自動增長,並設為主鍵,這個是沒有問題的,因為“主鍵是唯一的索引”,ID自動增長保證了唯一性,所以可以。


此時,我們再建立一個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違“主鍵是唯一的索引”這句話麼?


所以我才說“主鍵是唯一的索引”是有歧義的。應該是“當表中只有一個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為複合主鍵,複合主鍵聯合保證唯一索引”。


為什麼自增長ID已經可以作為唯一標識的主鍵,為啥還需要複合主鍵呢。因為,並不是所有的表都要有ID這個欄位,比如,我們建一個學生表,沒有唯一能標識學生的ID,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個欄位設定為主鍵,形成複合主鍵

這多個欄位聯合標識唯一性,其中,某幾個主鍵欄位值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。

二、聯合主鍵

           聯合主鍵顧名思義就是多個主鍵聯合形成一個主鍵組合(主鍵原則上是唯一的,別被唯一值所困擾。)  

           聯合主鍵的意義:用2個欄位(或者多個欄位,後面具體都是用2個欄位組合)來確定一條記錄,說明,這2個欄位都不是唯一的,2個欄位可以分別重複,這麼設定的好處,可以很直觀的看到某個重複欄位的記錄條數。

一個簡單的例子 


主鍵A跟主鍵B組成聯合主鍵 


主鍵A跟主鍵B的資料可以完全相同,聯合就在於主鍵A跟主鍵B形成的聯合主鍵是唯一的。

 
下例主鍵A資料是1,主鍵B資料也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(這就是多對多關係) 


主鍵A資料 主鍵B資料 
1      1 
2      2 
3      3 


主鍵A與主鍵B的聯合主鍵值最多也就是 


11 
12 
13 
21 
22 
23 
31 
32 
33

總結: 以我來看複合主鍵就是含有一個以上的欄位組成,如ID+name,ID+phone等,而聯合主鍵要同時是兩個表的主題組合起來的。這是和複合主鍵最大的區別!

相關推薦

複合聯合

一、複合主鍵   所謂的複合主鍵 就是指你表的主鍵含有一個以上的欄位組成,不使用無業務含義的自增id作為主鍵。 比如  create table test ( name varchar(19), id number, valu

複合聯合、索引聯合(複合)索引

前幾天面試時被問到了MySql中聯合索引使用與生效問題;回來順便看了一下複合主鍵與聯合主鍵,查漏補缺,慢慢學習吧。 一、複合主鍵與聯合主鍵 1、複合主鍵:指表的主鍵含有一個以上的欄位組成,不使用無業務含義的自增id作為主鍵。 create table test (

、候選、外來聯合複合

首先看看各種鍵的定義: 超鍵(super key):在關係中能唯一標識元組的屬性集稱為關係模式的超鍵(只要有一個鍵唯一,再隨便組其他的鍵,合起來叫主鍵) 候選鍵(candidatekey):不含有多餘屬性的超鍵稱為候選鍵(最小的超鍵,ID,身份證號) 主鍵(primary key):

SQL資料庫中 一些常使用的約束 排序 系統函式的用法 聯合

--常用的約束create table bbsReply(Rcontents varchar(30) check(len(Rcontents)>6),--規定長度大於6Ttime datetime default(getdate()),TlastReply datet

[轉]邏輯聯合,一定要討論清楚!

今天在做專案的資料庫設計時,突然發現自己在表的主鍵設定方面太過片面,對於邏輯主鍵和聯合主鍵的理解也很少。索性上網百度了一下,看到了一些論壇中的兄弟們的討論,其中很多的分析讓我頓時清醒了很多。下面開始貼上一些人的觀點和分析,如果原作者看到本文,發現有不妥之處,請郵件告之。   網友goldrain說: 我倒不反

資料庫多個聯合

建立某表,需要兩個主鍵(INST_ID,INST_RESP_CODE) CREATE TABLE CODE_CONVERTER_20170806 ( INST_ID CHARACTER(4) NO

sql------建立、外來聯合

首先建立一個使用者表,使用者id設為主鍵 create table user_login(user_id nvarchar primary key,user_passwd nvarchar,use

索引,外來的關係

簡單來講 : 主鍵用來標識記錄,索引用來加速查詢。  主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵     所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,一個表只能有一個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行資料更新、刪除的時

MySQL中的查詢約束語句和聯合、外來

查詢語句 過濾空值 過濾空值 如果該值是空的 就當做0來處理 SELECT IFNULL(欄位名,0) FROM 表名 聚合函式 排序 利用ORD

haproxy+keepalived模式配置

request address fig etc 虛擬 tab over .com ken Haproxy+Keepalived主備模式 主備節點設置 主備節點上各安裝配置haproxy,配置內容且要相同 global log 127.0.0.1 lo

eclipse中ctrl+alt+方向快捷系統快捷衝突解決

Win10系統下,在eclipse中使用快捷鍵 Ctrl + Alt + ↓/↑複製程式碼段的時候會發生螢幕顯示倒轉的現象,這是因為是eclipse的快捷鍵和Win10系統快捷鍵衝突了。按下Ctrl + Alt + ↑/↓螢幕的方向回覆正常。 解決這個衝突可以修改系統快捷鍵或者修改ec

矩陣的行

1.矩陣在記憶體中的儲存     不管是D3D還是OpenGL,使用的矩陣都是線性代數標準的矩陣,只是在儲存方式上有所不同。分別為:行主序(Direct3D),列主序(OpenGL)     儲存順序說明了線性代數中的矩陣如何線上性的記憶體陣列中儲存。     例如:

3.聯合複合

聯合主鍵 複合主鍵其實“主鍵是唯一的索引”這話有點歧義的。舉個例子,我們在表中建立了一個ID欄位,自動增長,並設為主鍵,這個是沒有問題的,因為“主鍵是唯一的索引”,ID自動增長保證了唯一性,所以可以。此時,我們再建立一個欄位name,型別為varchar,也設定為主鍵,你會發

[資料庫]聯合複合

在我的認知裡面,聯合主鍵和複合主鍵其實是一個意思,所以在這裡我統稱為聯合主鍵 其實這個不難理解,為什麼要有聯合主鍵,因為當只有一個欄位作為主鍵時,會有重複的情況,這時需要有2個(以上)的欄位共同作為主鍵,也就是作為記錄的唯一標識。 create tabl

MySQL聯合複合區別&建立

聯合主鍵:  當兩個資料表形成的是多對多的關係,那麼需要通過兩個資料表的主鍵來組成聯合主鍵,就可以確定每個資料表的其中一條記錄了 例:  學生表:student  create table student( id mediumint auto_increment co

springboot jpa 複合 聯合

開發十年,就只剩下這套架構體系了! >>>   

Navicat 導入Excel增加

cnblogs logs 無圖 ima bsp 導入excel sql 1-1 哪裏 1、當你需要導入某Excel文件時,你必須把這個lxsl文件用Excel先打開(與其他軟件的導入有點不太,其他會報錯已占用之類的) 2、設置主鍵   當你打開你導入的Excel文件時,

hybris items.xml 中表的聯合實現

實現 have option 字段 reat direct combined 指定 org 在 items.xsd中是這麽定義 unique的 <xs:attribute name="unique" type="xs:boolean" use="optional"&g

Oracle創建聯合

bsp font acl con pan span tex size 主鍵 先創建個表: 1)create table test ( sno char(12), name char(4), CONSTRAINT PK_TAB PRIMARY KEY (sno,

解決 添加數據 spec 毫無 har 程序 同時 次數 rom 轉自:http://www.cnblogs.com/longyi1234/archive/2010/03/24/1693738.html 一、什麽是主鍵、外鍵: 關系型數據庫中的一條記錄中有若幹個屬性,