三大范式

1.1NF

只要字段值還可以繼續(xù)拆分,就不滿足第一范式。

范式設(shè)計(jì)得越詳細(xì),對(duì)某些實(shí)際操作可能會(huì)更好,但并非都有好處,需要對(duì)項(xiàng)目的實(shí)際情況進(jìn)行設(shè)定。

2.2NF(在滿足第一范式的前提下,其他列都必須完全依賴于主鍵列。如果出現(xiàn)不完全依賴,只可能發(fā)生在聯(lián)合主鍵的情況下)

-- 訂單表

CREATE TABLE myorder (

? ? product_id INT,

? ? customer_id INT,

? ? product_name VARCHAR(20),

? ? customer_name VARCHAR(20),

? ? PRIMARY KEY (product_id, customer_id)

);

實(shí)際上,在這張訂單表中,product_name?只依賴于?product_id?,customer_name?只依賴于?customer_id?。也就是說(shuō),product_name?和?customer_id?是沒(méi)關(guān)系的customer_name?和?product_id?也是沒(méi)有關(guān)系的。

這就不滿足第二范式:其他列都必須完全依賴于主鍵列!

CREATE TABLE myorder (

? ? order_id INT PRIMARY KEY,

? ? product_id INT,

? ? customer_id INT

);

CREATE TABLE product (

? ? id INT PRIMARY KEY,

? ? name VARCHAR(20)

);

CREATE TABLE customer (

? ? id INT PRIMARY KEY,

? ? name VARCHAR(20)

);

拆分之后,myorder?表中的?product_id?和?customer_id?完全依賴于?order_id?主鍵,而?product?和?customer?表中的其他字段又完全依賴于主鍵。滿足了第二范式的設(shè)計(jì)

3.3NF

在滿足第二范式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關(guān)系。

CREATE TABLE myorder (

? ? order_id INT PRIMARY KEY,

? ? product_id INT,

? ? customer_id INT,

? ? customer_phone VARCHAR(15)

);

表中的?customer_phone?有可能依賴于?order_id?、?customer_id?兩列,也就不滿足了第三范式的設(shè)計(jì):其他列之間不能有傳遞依賴關(guān)系。

CREATE TABLE myorder (

? ? order_id INT PRIMARY KEY,

? ? product_id INT,

? ? customer_id INT

);

CREATE TABLE customer (

? ? id INT PRIMARY KEY,

? ? name VARCHAR(20),

? ? phone VARCHAR(15)

);

修改后就不存在其他列之間的傳遞依賴關(guān)系,其他列都只依賴于主鍵列,滿足了第三范式的設(shè)計(jì)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容