複合主鍵與聯合主鍵
一、複合主鍵
所謂的複合主鍵 就是指你表的主鍵含有一個以上的欄位組成,不使用無業務含義的自增id作為主鍵。
比如
- create table test
- (
- name varchar(19),
- id number,
- value varchar(10),
- primary key (name,id)
- )
上面的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 一、什麽是主鍵、外鍵: 關系型數據庫中的一條記錄中有若幹個屬性,