資料庫 一對一,一對多,多對多

2021-08-24 17:26:50 字數 2186 閱讀 6416

一對一:就是說a表中的一條記錄對應著b表的一條記錄。大家可能會覺得這不是變得複雜了嗎?其實不然,如果,當一張表的字段過於太多,而很多字段可能只有在某些情況下,才會使用到,這時也可以考慮使用一對一設計。

條件:建立單獨的表就行了,優點

1.   便於管理、可提高一定的查詢速度

2.   減輕 cpu 的 io 讀寫,提高訪問效率。

3.   符合資料庫設計的三大正規化。

4.   符合關係性資料庫的特性。 缺點

1.   增加一定的複雜程度,程式中的讀寫難度加大

一對多:顧名思義,a表一條資料對應b表多條資料。需要將a表主鍵作為b表的外來鍵。

sql語句 :a :primary key (『id』);(指定主鍵)

b:foreign key('b-id') references  'a' ('id'); (將外來鍵b-id和主鍵id關聯)

多對多: 需要一張中間表來對應他們的關係。那麼此時,a,b表並不需要其他的外來鍵。只需各有自己的主鍵就行,就像一張單獨的表一樣。

因為需要一張單獨的關係表來對映他們的關係。 

就比如這個:將orderid和productid作為聯合主鍵。然後相互對應各自的外來鍵。

有人可能就疑惑了,怎麼這裡設定了兩個主鍵?

有必要講下聯合主鍵和復合主鍵了。

一、復合主鍵

所謂的復合主鍵 就是指你表的主鍵含有乙個以上的字段組成,不使用無業務含義的自增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 表中的多行,但是 b 表中的一行只能匹配 a 表中的一行。只有當乙個相關列是乙個主鍵或具有唯一約束時,才能建立一對多關係。簡單來講就如球員與球隊的關係 一對多 從球隊角度來說乙個球隊擁有多個球員 即為一對多 多對一 從球員角...

資料庫設計 一對一 一對多 多對多)

關聯對映 一對多 多對一 存在最普遍的對映關係,簡單來講就如球員與球隊的關係 一對多 從球隊角度來說乙個球隊擁有多個球員 即為一對多 多對一 從球員角度來說多個球員屬於乙個球隊 即為多對一資料表間一對多關係如下圖 關聯對映 一對一 一對一關係就如球隊與球隊所在位址之間的關係,一支球隊僅有乙個位址,而...

資料庫設計(一對一 一對多 多對多)

一對一關係就如球隊與球隊所在位址之間的關係,一支球隊僅有乙個位址,而乙個位址區也僅有一支球隊。資料表間一對一關係的表現有兩種,一種是外來鍵關聯,一種是主鍵關聯。一對一外來鍵關聯,圖示如下 一對一主鍵關聯 要求兩個表的主鍵必須完全一致,通過兩個表的主鍵建立關聯關係。圖示如下 我們以學生和班級之間的關係...