最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文了解MYSQL三大范式和表約束

 更新時間:2022年04月02日 15:45:05   作者:淡沫初夏Zz  
范式是"符合某一種級別的關系模式的集合,表示一個關系內(nèi)部各屬性之間的聯(lián)系的合理化程度",下面這篇文章主要給大家介紹了關于MYSQL三大范式和表約束的相關資料,需要的朋友可以參考下

?? 一,什么是范式

范式簡言之就是,數(shù)據(jù)庫設計對數(shù)據(jù)的存儲性能,還有開發(fā)人員對數(shù)據(jù)的操作都有莫大的關系。所以建立科學的,規(guī)范的的數(shù)據(jù)庫是需要滿足一些規(guī)范的來優(yōu)化數(shù)據(jù)數(shù)據(jù)存儲方式

范式一共有六種,這里主要詳細介紹三大范式:
第一范式(1NF),第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多規(guī)范要求的稱為第二范式(2NF),其余范式以次類推。一般說來,數(shù)據(jù)庫只需滿足第三范式(3NF)就行了

?? 二,三大范式的理解

1,第一范式(確保每列保持原子性)

首先第一范式是最基本的范式,而第一范式的合理遵循要按照系統(tǒng)的需求而定,第一范式也是為了確保每列保持原子性,如果數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值,就說明該數(shù)據(jù)庫表滿足了第?范式。

例如:某些數(shù)據(jù)庫系統(tǒng)中需要用到“地址”這個屬性,本來直接將“地址”屬性設計成?個數(shù)據(jù)庫表的字段

2,第二范式(保證每列都和主鍵相關)

第?范式在第?范式的基礎之上更進?層。第?范式需要確保數(shù)據(jù)庫表中的每?列都和主鍵相關,而不能只與主鍵的某?部分相關(主要針對聯(lián)合主鍵)。也就是說在?個數(shù)據(jù)庫表中,?個表中只能保存?種數(shù)據(jù),不可以把多種數(shù)據(jù)
保存在同?張數(shù)據(jù)庫表中

例如:對于一張訂單表,應該只包括訂單信息,若第一張有數(shù)量信息,不符合第二范式,對于訂單數(shù)量應該單獨為一張表

3,第三范式(保證每列和主鍵直接相關,不能間接相關)

第三范式需要確保數(shù)據(jù)表中的每?列數(shù)據(jù)都和主鍵直接相關,而不能間接相關,即滿足第二范式前提,如果某一屬性依賴于其他非主鍵屬性,而其他非主鍵屬性又依賴于主鍵,那么這個屬性就是間接依賴于主鍵,這被稱作傳遞依賴于主屬性。 解釋就是一張表最多只存兩層同類型信息。

例如:在設計?個訂單數(shù)據(jù)表的時候,可以將客戶編號作為?個外鍵和訂單表建立相應的關系

4,表的關系

(1)一對一

一對一就是?個學生對應?個學號

(2)一對多

一對多是 ?個班級包含多個學生(用兩張表表示)

(3)多對多

?張表中的?條數(shù)據(jù)可以對應到另?張表的多條數(shù)據(jù)

??三,表的約束有哪些

??1,約束類型

表約束也是為了規(guī)范程序員正確使用表的,但表約束是預先設置的,設置之后就對所有插?和修改立即生效

? NOT NULL - 指示某列不能存儲 NULL 值。
?UNIQUE - 保證某列的每行必須有唯一的值。
?DEFAULT - 規(guī)定沒有給列賦值時的默認值。
?PRIMARY KEY - NOT NULL 和 UNIQUE 的結(jié)合。確保某列(或兩個列多個列的結(jié)合)有唯一標識,有助于更容易更快速地找到表中的一個特定的記錄。
?FOREIGN KEY - 保證一個表中的數(shù)據(jù)匹配另一個表中的值的參照完整性。
?CHECK - 保證列中的值符合指定的條件。對于MySQL數(shù)據(jù)庫,對CHECK子句進行分析,但是忽略CHECK子句

??2,表的約束

(1)非空約束:NOT NULL

創(chuàng)建的字段默認是可以為空的

而添加了非空約束之后,設置的字段就不能為空了。

語法

字段名 數(shù)據(jù)類型 NOT NULL
說明了某列不可以存儲空值

(2)主鍵約束:PRIMARY KEY

主鍵的特征:

1.主鍵可以由多個字段或單個字段組成

2. 主鍵不能為空且唯?

3. ?個表中只能有?個主鍵

獨立主鍵語法:

語法: 字段 字段類型 primary key
示例:
create table test4(id int primary key,name varchar(250));

獨立主鍵:該主鍵由一個字段組成,且該主鍵不能重復
聯(lián)合主鍵:多個字段組成的主鍵,因此字段不能重復
一個主鍵可以有多個字段,一張表只能有一個主鍵

聯(lián)合主鍵語法:

語法: primary key(字段1,字段2…)

 示例:
> create table test5(
id int,
name varchar(250),
primary key(id,name)
);

(3)唯一約束:UNIQUE

唯?約束就是對應字段的值是唯?的,不能重復,但一個表可以有多個唯一索引

語法:

字段名 數(shù)據(jù)類型 unique
示例:
CREATE TABLE student_unique (
id INT unique,
name VARCHAR(250)
);

? 唯一約束和主鍵約束區(qū)別(面試??迹?/p>

主鍵約束?個表只能有?個,?唯?約束可以有多個
主鍵約束不能有 null 值,?唯?約束可以有 null(唯?索引可以有多個 null)

(4)外鍵約束:FOREIGN KEY

外鍵用于關聯(lián)其他表的主鍵或唯?鍵

外鍵可以插入NULL,多個NULL,若外鍵指定了值,那這個值一定要有效,有效是這個值在主表存在了

語法:

foreign key (字段名) references 主表(列)

示例:

創(chuàng)建學生表student,?個學生對應?個班級,?個班級對應多個學生。使用id為主鍵,classes_id為外鍵,關聯(lián)班級表id

-- 重新設置學?表結(jié)構(gòu)
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(250) DEFAULT 'unkown',
qq_mail VARCHAR(250),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);

(5)默認值約束: DEFAULT

指定id列為主鍵

-- 重新設置學生表結(jié)構(gòu)
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

對于整數(shù)類型的主鍵,常配搭自增長auto_increment來使用。插入數(shù)據(jù)對應字段不給值時,使用最大值+1

– 主鍵是 NOT NULL 和 UNIQUE 的結(jié)合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment

總結(jié) 

到此這篇關于MYSQL三大范式和表約束的文章就介紹到這了,更多相關MYSQL三大范式和表約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • ubuntu 16.04配置MySQL主從同步的配置方法

    ubuntu 16.04配置MySQL主從同步的配置方法

    這篇文章主要介紹了ubuntu 16.04配置MySQL主從同步的配置方法,需要的朋友可以參考下
    2018-03-03
  • MySQL系列數(shù)據(jù)庫設計三范式教程示例

    MySQL系列數(shù)據(jù)庫設計三范式教程示例

    這篇文章主要為大家介紹了MySQL系列之數(shù)據(jù)庫設計三范式的教程示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • MySQL 有關MHA搭建與切換的幾個錯誤log匯總

    MySQL 有關MHA搭建與切換的幾個錯誤log匯總

    這篇文章主要介紹了MySQL 有關MHA搭建與切換的幾個錯誤log匯總,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • MySQL MyISAM 與InnoDB 的區(qū)別

    MySQL MyISAM 與InnoDB 的區(qū)別

    這篇文章主要介紹了MySQL MyISAM與InnoDB 的區(qū)別,幫助大家更好的理解和使用MySQL的存儲引擎,感興趣的朋友可以了解下
    2020-09-09
  • MySQL數(shù)據(jù)庫?觸發(fā)器?trigger

    MySQL數(shù)據(jù)庫?觸發(fā)器?trigger

    這篇文章主要介紹了MySQL數(shù)據(jù)庫?觸發(fā)器?trigger,觸發(fā)器是一種特殊類型的存儲過程,觸發(fā)器通過事件進行觸發(fā)而被執(zhí)行,可通過數(shù)據(jù)庫中的相關表實現(xiàn)級聯(lián)更改,保證數(shù)據(jù)安全,進行安全校驗
    2022-06-06
  • MySql中的存儲引擎和索引

    MySql中的存儲引擎和索引

    這篇文章主要介紹了MySql中的存儲引擎和索引,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL中json_extract()函數(shù)的使用實例

    MySQL中json_extract()函數(shù)的使用實例

    這篇文章主要介紹了MySQL中json_extract()函數(shù)的使用實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySql超長自動截斷實例詳解

    MySql超長自動截斷實例詳解

    這篇文章主要介紹了MySql超長自動截斷實例詳解的相關資料,這里通過實例來說明如何實現(xiàn)自動截斷的功能,需要的朋友可以參考下
    2017-07-07
  • MyEclipse連接MySQL數(shù)據(jù)庫報錯解決辦法

    MyEclipse連接MySQL數(shù)據(jù)庫報錯解決辦法

    我們現(xiàn)在一般網(wǎng)站都是利用的MySQL數(shù)據(jù)庫搭建網(wǎng)站的,但是在網(wǎng)上看到很多網(wǎng)友吐槽數(shù)據(jù)庫連接不上的問題,現(xiàn)在我就結(jié)合相關資料向提出一些我個人的見解,希望對大家解決問題有幫助
    2014-01-01
  • 使用java處理字符串公式運算的方法

    使用java處理字符串公式運算的方法

    本篇文章介紹了,使用java處理字符串公式運算的方法。需要的朋友參考下
    2013-04-04

最新評論

开远市| 彭州市| 卢氏县| 皋兰县| 谷城县| 巴中市| 枣阳市| 方城县| 辽阳市| 长治市| 镇宁| 定州市| 乌鲁木齐县| 新宁县| 安福县| 南岸区| 汤阴县| 珲春市| 乌兰察布市| 都昌县| 古田县| 中阳县| 丹棱县| 濉溪县| 紫云| 西林县| 榆树市| 元谋县| 吉水县| 永胜县| 娄烦县| 轮台县| 蒙城县| 宝清县| 武汉市| 当雄县| 固原市| 新民市| 金华市| 岳西县| 龙海市|