我們已經(jīng)知道,關(guān)系數(shù)據(jù)庫(kù)是建立在關(guān)系模型上的。而關(guān)系模型本質(zhì)上就是若干個(gè)存儲(chǔ)數(shù)據(jù)的二維表,可以把它們看作很多Excel表。
表的每一行稱(chēng)為記錄(Record),記錄是一個(gè)邏輯意義上的數(shù)據(jù)。
表的每一列稱(chēng)為字段(Column),同一個(gè)表的每一行記錄都擁有相同的若干字段。
字段定義了數(shù)據(jù)類(lèi)型(整型、浮點(diǎn)型、字符串、日期等),以及是否允許為NULL。注意NULL表示字段數(shù)據(jù)不存在。一個(gè)整型字段如果為NULL不表示它的值為0,同樣的,一個(gè)字符串型字段為NULL也不表示它的值為空串''。
通常情況下,字段應(yīng)該避免允許為NULL。不允許為NULL可以簡(jiǎn)化查詢條件,加快查詢速度,也利于應(yīng)用程序讀取數(shù)據(jù)后無(wú)需判斷是否為NULL。
和Excel表有所不同的是,關(guān)系數(shù)據(jù)庫(kù)的表和表之間需要建立“一對(duì)多”,“多對(duì)一”和“一對(duì)一”的關(guān)系,這樣才能夠按照應(yīng)用程序的邏輯來(lái)組織和存儲(chǔ)數(shù)據(jù)。
例如,一個(gè)班級(jí)表:
ID 名稱(chēng) 班主任
201 二年級(jí)一班 王老師
202 二年級(jí)二班 李老師
每一行對(duì)應(yīng)著一個(gè)班級(jí),而一個(gè)班級(jí)對(duì)應(yīng)著多個(gè)學(xué)生,所以班級(jí)表和學(xué)生表的關(guān)系就是“一對(duì)多”:
ID 姓名 班級(jí)ID 性別 年齡
1 小明 201 M 9
2 小紅 202 F 8
3 小軍 202 M 8
4 小白 201 F 9
反過(guò)來(lái),如果我們先在學(xué)生表中定位了一行記錄,例如ID=1的小明,要確定他的班級(jí),只需要根據(jù)他的“班級(jí)ID”對(duì)應(yīng)的值201找到班級(jí)表中ID=201的記錄,即二年級(jí)一班。所以,學(xué)生表和班級(jí)表是“多對(duì)一”的關(guān)系。
如果我們把班級(jí)表分拆得細(xì)一點(diǎn),例如,單獨(dú)創(chuàng)建一個(gè)教師表:
ID 名稱(chēng) 年齡
A1 王老師 26
A2 張老師 39
A3 李老師 32
A4 趙老師 27
班級(jí)表只存儲(chǔ)教師ID:
ID 名稱(chēng) 班主任ID
201 二年級(jí)一班 A1
202 二年級(jí)二班 A3
這樣,一個(gè)班級(jí)總是對(duì)應(yīng)一個(gè)教師,班級(jí)表和教師表就是“一對(duì)一”關(guān)系。
在關(guān)系數(shù)據(jù)庫(kù)中,關(guān)系是通過(guò)主鍵和外鍵來(lái)維護(hù)的。我們?cè)诤竺鏁?huì)分別深入講解。