在關聯式資料庫中,一張表中的每一行資料被稱為一條記錄。一條記錄就是由多個字段組成的。例如,students
表的兩行記錄:
idclass_id
name
gender
score11
小明m902
1小紅f95
每一條記錄都包含若干定義好的字段。同乙個表的所有記錄都有相同的字段定義。
對於關係表,有個很重要的約束,就是任意兩條記錄不能重複。不能重複不是指兩條記錄不完全相同,而是指能夠通過某個字段唯一區分出不同的記錄,這個欄位被稱為主鍵。
例如,假設我們把name
字段作為主鍵,那麼通過名字小明
或小紅
就能唯一確定一條記錄。但是,這麼設定,就沒法儲存同名的同學了,因為插入相同主鍵的兩條記錄是不被允許的。
對主鍵的要求,最關鍵的一點是:記錄一旦插入到表中,主鍵最好不要再修改,因為主鍵是用來唯一定位記錄的,修改了主鍵,會造成一系列的影響。
由於主鍵的作用十分重要,如何選取主鍵會對業務開發產生重要影響。如果我們以學生的身份證號作為主鍵,似乎能唯一定位記錄。然而,身份證號也是一種業務場景,如果身份證號公升位了,或者需要變更,作為主鍵,不得不修改的時候,就會對業務產生嚴重影響。
因此,身份證號、手機號、郵箱位址這些看上去可以唯一的字段,均不可用作主鍵。
作為主鍵最好是完全業務無關的字段,我們一般把這個字段命名為id
。常見的可作為id
欄位的型別有:
自增整數型別:資料庫會在插入資料時自動為每一條記錄分配乙個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;
全域性唯一guid型別:使用一種全域性唯一的字串作為主鍵,類似8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。guid演算法通過網絡卡mac位址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了guid演算法,可以自己預算出主鍵。
對於大部分應用來說,通常自增型別的主鍵就能滿足需求。我們在students
表中定義的主鍵也是bigint not null auto_increment
型別。
如果使用int自增型別,那麼當一張表的記錄數超過2147483647(約21億)時,會達到上限而出錯。使用bigint自增型別則可以最多約922億億條記錄。
關聯式資料庫實際上還允許通過多個字段唯一標識記錄,即兩個或更多的字段都設定為主鍵,這種主鍵被稱為聯合主鍵。
對於聯合主鍵,允許一列有重複,只要不是所有主鍵列都重複即可:
id_num
id_type
other columns...1a
...2
a...2b
...如果我們把上述表的id_num
和id_type
這兩列作為聯合主鍵,那麼上面的3條記錄都是允許的,因為沒有兩列主鍵組合起來是相同的。
沒有必要的情況下,我們盡量不使用聯合主鍵,因為它給關係表帶來了複雜度的上公升。
主鍵是關係表中記錄的唯一標識。主鍵的選取非常重要:主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null
。
可以使用多個列作為聯合主鍵,但聯合主鍵並不常用。
關係型資料庫和主鍵外來鍵
二 主鍵和外來鍵 定義 表與表之間的聯絡 實現方法 通過設定不同形式的外來鍵來體現表和表的不同關係 既可以把錶a的主鍵充當表b的外來鍵,也可以把錶b的主鍵充當表a的外來鍵 乙個人只有一把鑰匙,一把鑰匙只給乙個人 一對多 把錶a的主鍵充當表b的外來鍵 乙個部門有多個員工,乙個員工只能在乙個部門 在多的...
關係型資料庫 非關係型資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
關係型資料庫 非關係型資料庫
2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...