数据库的三大范式以及五大约束
實體:表; 屬性:表中的數(shù)據(jù)(字段); 關(guān)系:表與表之間的關(guān)系;
?????數(shù)據(jù)庫設(shè)計三大范式(重點):
第一范式(1NF):數(shù)據(jù)表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性;
????????????????????????????? ??例如:userInfo:山東省煙臺市? 131777368781 ???????? ?userAds:山東0省煙臺市? userTel:131777368781
第二范式(2NF):滿足1NF后,要求表中的所有列,都必須依賴于主鍵,而不能有任何一列與主鍵沒有關(guān)系,也就是說一個表只描述一件事情;
?????????????????????????????? ?例如:訂單表只描述訂單相關(guān)的信息,所以所有字段都必須與訂單id相關(guān) ????? 產(chǎn)品表只描述產(chǎn)品相關(guān)的信息,所以所有字段都必須與產(chǎn)品id相 關(guān);因此不能在一張表中同時出現(xiàn)訂單信息與產(chǎn)品信息;如下圖所示:
第三范式(3NF):必須先滿足第二范式(2NF),要求:表中的每一列只與主鍵直接相關(guān)而不是間接相關(guān),(表中的每一列只能依賴于主鍵);
??????????????????????????????? ?例如:訂單表中需要有客戶相關(guān)信息,在分離出客戶表之后,訂單表中只需要有一個用戶id即可,而不能有其他的客戶信息。因為其他的客戶信息直接關(guān)聯(lián)于用戶id,而不是直接與訂單id直接相關(guān)。
【如何更好的區(qū)分三大范式】
???????? 第?一范式和第二范式在于有沒有分出兩張表,第二范式是說一張表中包含了所種不同的實體屬性,那么要必須分成多張表, 第三范式是要求已經(jīng)分成了多張表,那么一張表中只能有另一張表中的id(主鍵),而不能有其他的任何信息(其他的信息一律用主鍵在另一表查詢)。
【數(shù)據(jù)庫五大約束】
1.primary KEY:設(shè)置主鍵約束;
2.UNIQUE:設(shè)置唯一性約束,不能有重復(fù)值;
3.DEFAULT 默認值約束,height DOUBLE(3,2)DEFAULT 1.2 height不輸入是默認為1,2
4.NOT NULL:設(shè)置非空約束,該字段不能為空;
5.FOREIGN key :設(shè)置外鍵約束。
【主鍵】
1.主鍵的注意事項?
主鍵默認非空,默認唯一性約束,只有主鍵才能設(shè)置自動增長,自動增長一定是主鍵,主鍵不一定自動增長;
2.設(shè)置主鍵的方式?
在定義列時設(shè)置:ID INT PRIMARY KEY
在列定義完之后設(shè)置:primary KEY(id)
【外鍵】
1.設(shè)置外鍵的注意事項: ??
只有INNODB的數(shù)據(jù)庫引擎支持外鍵,修改my.ini文件設(shè)置default-storage-engine=INNODB ?? 外鍵必須與參照列的數(shù)據(jù)類型必須相同(數(shù)值型要求長度和無符號都相同,字符串要求類型相同,長度可以不同)。
2設(shè)置外鍵的語法:
?? CONSTRAINT 外鍵名 FOREIGN KEY (外鍵字段)REFERENCES 參照表 (參照字段) ?? ON DELETE SET NULL ON UPDATE CASCADE 設(shè)置參照完整性
3.外鍵約束的參照操作? ?
? 參照表的完整性操作:當對參照表的參照字段進行刪除或更新時,外鍵表中的外鍵如何應(yīng)對; ??
參照操作可選值:
????? RESTRICT拒絕參照表刪除或更新參照字段; ??????????????
??? ? RESTRICT和NO ACTION相同,但這個指令只在mysql生效; ???????????????
?? ? ?CASCADE刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除更新; ??????????????
???? ?SET NULL 刪除或更新參照表的參照字段時,外鍵表的外鍵設(shè)為NULL;
轉(zhuǎn)載于:https://blog.51cto.com/12945177/1950791
總結(jié)
以上是生活随笔為你收集整理的数据库的三大范式以及五大约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美方首次起诉4名俄黑客 其中两人系俄安全
- 下一篇: 数据库事务系列-事务模型基础