不符合原子性的列需放入新的表
模式(SCHEMA): 用于表達數據庫內的數據描述(包括列和表),以及任何相關對象和各種連接方式的描述。
一、外鍵
CREAT TABLE table_name_zibiao(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
column name VARCHAR(30) ?NOT NULL,
id_fubiao ?INT NOT NULL,
CONSTRAINT table_name_fubiao_id_fubiao_fk
FOREIGN KEY(id_fubiao) ? ? ?'此行括號內的列名代表外鍵,可隨意命名
REFERENCES? table_name_fubiao (id_fubiao)
);
外鍵在DESC中的KEY為MUL,表示這列可以存儲多個相同的值。
1. 定義和注意事項
定義:
把A表的主鍵值作為B表的一列,這種方式稱為外鍵(foreign key);
外鍵引用到另一個表的主鍵;
2. 外鍵性質
① 外鍵使用的主鍵被稱為父鍵,主鍵所在的表稱為主表;
② 外鍵的值可以是NULL,即使主鍵值不可為NULL;此時表示在父表中沒有相符的主鍵;
③ 外鍵值不需唯一,它事實上通常都沒有唯一性。
3. 外鍵約束
定義:
① 除非利用CREAT和INSERT語句制定外鍵,否則都不算是真的外鍵,創建在結構內的鍵被稱作約束(constraint),即表必須遵守的規則;
② 插入外鍵列的值必須已經存在于父表的來源列中,這是引用完整性;
③ 外鍵不一定必須是主表的主鍵,但必須有唯一性。
二、表間的關系
1. 表的對應模式
① 一對一模式
父表里的某條記錄在字表里最多只能有一條相應的記錄;
例如:如果員工信息表和工資表是2張表,主鍵和外鍵是工號,那么每一個主表里員工姓名只能在字表里找到一條工資記錄(假設每個人工資都不相同)。
② 一對多模式
A表里的某一條記錄在B表中可以對應到多條記錄,但B表中的每條記錄只會對應到A表里相應的一條記錄;
例如:如果員工信息表和ttle表是2張表,主鍵和外鍵是工號,那么每個title在員工信息表中可以找到多個人,但是每個員工在title表中只能找到1個title。
③ 多對多模式
A表里的某一條記錄在B表中可以對應到多條記錄,B表中的一條記錄也可以在A表里找到多條記錄;
例如:A表是每位女性的姓名,B表是銷售的鞋子品種,那么每位女性會購買多雙鞋,每種鞋可以被多位女性購買。
2. 連接表(junction table)
需要的原因:
如果沒有連接表,在女士和鞋子的例子中,無論怎么排列,表中都會出現姓名或者鞋子重復出現的情況,所以多對多關的表之間需要一個連接表,從而把表的關系簡化為一對多;
三、第一、第二、第三范式
1. 第一范式,1NF
條件一:數據列只包含具有原子性的值;
條件二:沒有重復的數據列。
2.各種概念
① 組合鍵:由多個數據列構成的主鍵,組合后各列形成具有唯一性的鍵,也可叫做主鍵列;O+π
② 部分函數依賴:非主鍵的列依賴于組合主鍵的某個部分(但不是完全依賴于組合主鍵),即此非主鍵列會根據主鍵列中某列的改變而改變,但是不會因為主鍵列中另一列的改變而改變;
速記符號:T.x→T.y
在關系T中,y列函數依賴于x列;從右想左解讀。
③ 傳遞函數依賴:如果改變任何非鍵列可能造成其他非鍵列的改變,即為傳遞依賴
2. 第二范式,2NF
條件一:先符合1NF;
條件二:沒有部分函數依賴。
① 已經符合1NF的表如果只有一列主鍵,那么也會符合2NF;
② 只要所有的列都是主鍵的一部分或者表中有唯一主鍵列符合1NF的表,也會符合2NF;
③ 任何具有人工主鍵且沒有組合主鍵的表都符合2NF。
3. 第三范式,3NF
條件一:符合2NF;
條件二:沒有傳遞函數依賴。