從零學SQL——2.關係模型
做資料運營,準確的是標籤系統運營的時候,需要找資料組拿每日使用者點選情況。
拿哪些資料,就要告訴他們,我需要的指標。當時苦惱過,我要的【點選詞、點選query、APP來源】等這些組成的集合叫什麼,學了SQL了之後明白,他們每一個都是一個欄位。
主鍵
每一條記錄是不能重複的,如果資料是使用者實際點選資料,無法保證不會有兩個人點選同樣的詞。如果這裡需要區分,就需要加入一個區分它們的欄位,比如ID。能區分兩條記錄的欄位,叫做【主鍵】。
注意:
1.主鍵最好不要修改
由於主鍵的作用十分重要,如何選取主鍵會對業務開發產生重要影響。如果我們以學生的身份證號作為主鍵,似乎能唯一定位記錄。然而,身份證號也是一種業務場景,如果身份證號升位了,或者需要變更,作為主鍵,不得不修改的時候,就會對業務產生嚴重影響。
所以,選取主鍵的一個基本原則是:不使用任何業務相關的欄位作為主鍵。
因此,身份證號、手機號、郵箱地址這些看上去可以唯一的欄位,均不可用作主鍵。
作為主鍵最好是完全業務無關的欄位,我們一般把這個欄位命名為id
。
2.常見的可作為id
欄位的型別有:
-
自增整數型別:資料庫會在插入資料時自動為每一條記錄分配一個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;
-
全域性唯一GUID型別:使用一種全域性唯一的字串作為主鍵,類似
8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。GUID演算法通過網絡卡MAC地址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了GUID演算法,可以自己預算出主鍵。
對於大部分應用來說,通常自增型別的主鍵就能滿足需求。
外來鍵
通過某個欄位,可以把資料與另一張表關聯起來,這種列稱為外來鍵。
外來鍵不是通過列名實現的。就是說,想要定義一個外來鍵,不是兩個表某一列列名相同,而是要定義一個外來鍵約束。
具體程式碼見:https://www.liaoxuefeng.com/wiki/1177760294764384/1218728424164736