關係模型 主鍵 外來鍵 索引

2021-10-12 06:47:31 字數 2996 閱讀 4078

主鍵:唯一識別字段

要求:記錄一旦插入到表中,主鍵最好不要再修改,因為主鍵是用來唯一定位記錄的,修改了主鍵,會造成一系列的影響。

基本選取原則:選擇與業務無關的字段,命名id

id欄位常用型別:

自增整數bigint型別:資料庫會在插入資料時自動為每一條記錄分配乙個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;

全域性唯一guid型別:使用一種全域性唯一的字串作為主鍵,類似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。guid演算法通過網絡卡mac位址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了guid演算法,可以自己預算出主鍵。

test

id_num

id_type

other columns...1a

......2a

......2b

......

如果我們把上述表的id_numid_type這兩列作為聯合主鍵,那麼上面的3條記錄都是允許的,因為沒有兩列主鍵組合起來是相同的。

沒有必要的情況下,我們盡量不使用聯合主鍵,因為它給關係表帶來了複雜度的上公升。

idname

other columns...11班

22班......

idclass_id

name

other columns...11

小明......22

小紅......

外來鍵:在students表中,通過class_id這一字段,將資料與另一張表關聯起來,此時這個class_id,稱之為外來鍵

注!外來鍵並不是通過列名實現的,而是通過定義外來鍵約束實現的

其中,外來鍵約束的名稱fk_class_id可以任意,foreign key (class_id)指定了class_id作為外來鍵,references classes (id)指定了這個外來鍵將關聯到classes表的id列(即classes表的主鍵)

alter table students

add constraint fk_class_id

foreign key (class_id)

references classes (id);

刪除外來鍵約束:

注!刪除外來鍵約束並沒有刪除外來鍵這一列。刪除列是通過drop column ...實現的。

alter table students

drop foreign key fk_class_id;

通過乙個表的外來鍵關聯到另乙個表,我們可以定義出一對多關係。多對多」關係。就是通過兩個一對多關係實現的,即通過乙個中間表,關聯兩個一對多關係,就形成了多對多關係。例如,乙個老師可以對應多個班級,乙個班級也可以對應多個老師,因此,班級表和老師表存在多對多關係

多對多實際上是倆個一對多關係實現的,通過中間表,關聯倆個一對多的關係,行成了多對多的關係。

teachers id

name

1張老師

2趙老師

3王老師

4***

class id

name1一班

2二班teacher_class中間表 id

teacher_id

class_id11

1212

3214

2253

1642

通過中間表teacher_class,可知班級表class與老師表teachers之間的關係

同理,class到teachers的關係:

乙個表的記錄對應到另一張表的唯一記錄

關聯式資料庫中,對某一列或多個列的值進行預排序的資料結構,通過使用索引,可以讓資料庫系統不用掃瞄整個表,而是直接定位到符合條件的記錄,加快查詢速度。

建立索引:add index

索引的效率取決於索引列的值是否相同,即該列的值越不相同,那麼索引效率越高。

對於主鍵,關係型資料庫會自動建立主鍵索引,因為主鍵是唯一的,所以使用主鍵效率最高

alter table students

add index idx_score(score);

使用add index idx_score (score)就建立了乙個名稱為idx_score,使用列score的索引。

索引名稱是任意的,索引如果有多列,可以在括號裡依次寫上

alter table students

add index idx_score(name,score);

索引優缺點:

優點:提高查詢效率

缺點:在增、刪、改時,需要同時修改索引,因此,索引越多,增、刪、改速度越慢

唯一索引:

在設計關係資料表的時候,看上去唯一的列,例如身份證號、郵箱位址等,因為他們具有業務含義,因此不宜作為主鍵。

但是,這些列根據業務要求,又具有唯一性約束:即不能出現兩條記錄儲存了同乙個身份證號。這個時候,就可以給該列新增乙個唯一索引。例如,我們假設students表的name不能重複:

alter table students

add unique index uni_name (name);

通過unique關鍵字我們就新增了乙個唯一索引。

也可以只對某一列新增乙個唯一約束而不建立唯一索引。

alter table students

add constraint uni_name unique (name);

主鍵 外來鍵和索引的關係

主鍵 唯一標識一條記錄,不能有重複的,不允許為空。外來鍵 表的外來鍵是另乙個表的主鍵,外來鍵可以有重複的,可以是空值。索引 高效查詢資料記錄的一種資料結構。該欄位沒有重複值,但可以有乙個空值。1 乙個表只有乙個主鍵,但可以有多個索引 2 使用主鍵會自動建立索引 唯一索引 也可以在非主鍵上建立索引。1...

索引 主鍵 外來鍵

參 索引的優點 加快查詢表記錄的速度。索引的缺點 會減慢寫的速度 如 insert update 占用物理儲存空間。2 簡述普通索引與主鍵的約束規則。參 1 index普通索引 乙個表中可以有多個index欄位 欄位的值允許有重複,且可以賦null值 經常把做查詢條件的字段設定為index欄位 in...

主鍵 外來鍵 索引

1 主鍵 外來鍵 索引 主鍵外來鍵 索引定義 唯一標識一條記錄,不能重複,不能為空 表的外來鍵是另一張表的主鍵,外來鍵可以重複,也可以為空值 索引沒有重複,可以有乙個空值 作用用來保證資料的完整性 用來和其他表建立聯絡 提高資料查詢的速度 個數主鍵只能有乙個 乙個表可以有多個外來鍵 乙個表可以有多個...