柚子快報邀請碼778899分享:數(shù)據(jù)庫 【MYSQL】表的設計
柚子快報邀請碼778899分享:數(shù)據(jù)庫 【MYSQL】表的設計
目錄
數(shù)據(jù)庫約束not null 約束unique (唯一)約束default 默認值約束primary key (主鍵)約束foreign key (外鍵)約束check 約束總結
表的設計三大范式第一范式第二范式第三范式
表的關系
數(shù)據(jù)庫約束
是關系型數(shù)據(jù)庫的一個重要功能,主要作用是保證數(shù)據(jù)的完整性,也可能理解數(shù)據(jù)的正確性(數(shù)據(jù)本身是否正確,關聯(lián)關系是否正確),人工檢查數(shù)據(jù)完整性的工作量非常的大,在數(shù)據(jù)表中定義一些約束,那么數(shù)據(jù)庫寫入數(shù)據(jù)的時候,數(shù)據(jù)庫會幫我們做校驗工作,約束一般是指定在列上的,使用在表的定義時在要約束的列的類型后加上。
not null 約束
表示該列不能存儲null值。
如果存入null會報錯。
unique (唯一)約束
表示該列中的數(shù)據(jù)不能重復(null)除外。
插入相同或者已有的值會報錯。
default 默認值約束
指定列為空時的默認值。
primary key (主鍵)約束
相當于是not null 和 unique的結合,
表示該列中的數(shù)據(jù)既不能重復也不能為空。
如果存入null會報錯。插入相同或者已有的值也會報錯。
當主鍵是整型時,我們常常加上auto_increment讓主鍵從當前最大值加1,
但是當插入錯誤時該值相當于被生成了,下一個從這個開始。
通俗將就是當前主鍵最大值為7,然后插入時報錯了,改回來后插入行主鍵為9。
一張表中最多只能定義一個主鍵,定義超了就會報錯,
要想多列為主鍵只能使用復合主鍵primary key (列名1, 列名2)。
使用復合主鍵,必須列值都相同才算重復,任一列值都不能為null。
foreign key (外鍵)約束
保證一個表中的數(shù)據(jù)匹配另一個表中的值的參照完整性。
就是將另一個表中的值作為該表中該列的范圍。
被外鍵約束的列在約束前先定義,
語法是foreign key (列名) references 外表名(外列名),
被外鍵約束的表還存在就不能刪除外表。
check 約束
該約束在5.7版本不能使用,導致兼容性不好,所以一般不用。
使用了該約束后該列只能插入被約束的值。
總結
約束類型說明示例not null 約束使用not null指定列不能為空name varchar(20) not null,unique 約束指定列為唯一的、不重復的,null除外name varchar(20) unique,default 默認值約束指定列為空時的默認值age int default 20,primary key 主鍵約束not null 和 unique 的結合id int primary key,foreign key外鍵約束關聯(lián)其他表的主鍵或唯一鍵foreign key (字段名) references 主表(列)check約束保證列中的值符合指定的條件check (gender = ‘男’ or gender =‘女’)
表的設計
一般我們編程流程如下:
OOA面向對象分析 -》OOD面向對象設計 -》OOP面向對象編程
設計表:
從需求中獲得類,類對應到數(shù)據(jù)庫中的實體,實體在數(shù)據(jù)庫中就表現(xiàn)為一張一張的表,類中的屬性就對應著表中的字段(列),確定類與類之間的關系,使用SQL去創(chuàng)建具體的表。
三大范式
設計表的時候我們一般要遵循一些規(guī)則,這些規(guī)則我們一般稱之為三大范式。 范式就是描述數(shù)據(jù)關系的模型,下面只介紹三大范式。
第一范式
第一范式就是表中的字段不可再拆分。
第一范式是關系型數(shù)據(jù)庫最基本的要求,不滿足第一范式的數(shù)據(jù)庫不是關系型數(shù)據(jù)庫。 也就是在定義表時每個字段都可以用一種數(shù)據(jù)類型來表示,那么這個表就是滿足第一范式的。
第二范式
在滿足第一范式的基礎上,不存在非關鍵字段對任意候選字段存在部分函數(shù)依賴(存在于復合主鍵的情況下)
非關鍵字段即非主鍵字段,候選字段可以理解為主鍵或者沒有主鍵時的唯一鍵。
對于由兩個或多個關鍵字段(復合主鍵)決定一條記錄的情況,如果一行數(shù)據(jù)中有些字段只與關鍵字段中的一個有關系,那么這種就說他只存在部分函數(shù)依賴。
表中沒有復合主鍵的表天然滿足第二范式。
第三范式
在第二范式的基礎上,不存在非關鍵字段,對任一候選鍵的傳遞依賴。
兩個強相關關系存在傳遞現(xiàn)象,這種傳遞關系稱為傳遞依賴。比如學生表中拿到學號,可以根據(jù)學號拿到學校,根據(jù)學校又可以拿到學院等信息。
表的關系
一對一: 比如一個人只有一個身份證一樣。一對多: 比如一個班級擁有多個學生一樣。多對多: 比如一個學生選多個課程,一個課程被多個學生選一樣。
柚子快報邀請碼778899分享:數(shù)據(jù)庫 【MYSQL】表的設計
文章來源
本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。