日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《MySQL——数据表设计三大范式》

發布時間:2023/12/1 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MySQL——数据表设计三大范式》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 數據表設計范式
    • 第一范式
    • 第二范式
    • 第三范式

數據表設計范式

第一范式

數據表中的所有字段都是不可分割的原子值。
字段值還可以繼續拆分的,就不滿足第一范式,如下:

下面這個,更加貼合第一范式:

范式設計得越詳細,對某些實際操作可能會更好,但并非都有好處,需要對項目的實際情況進行設定。

第二范式

在滿足第一范式的前提下,其他列都必須完全依賴于主鍵列。如果出現不完全依賴,只可能發生在聯合主鍵的情況下:
我們設計一個訂單表:

-- 訂單表 CREATE TABLE myorder (product_id INT,customer_id INT,product_name VARCHAR(20),customer_name VARCHAR(20),PRIMARY KEY (product_id, customer_id) );

實際上,在這張訂單表中,product_name 只依賴于 product_id ,customer_name 只依賴于 customer_id 。也就是說,product_name 和 customer_id 是沒有關系的,customer_name 和 product_id 也是沒有關系的。
這就不滿足第二范式。
下面將主表拆分:

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 表中的其他字段又完全依賴于主鍵。滿足了第二范式的設計。

第三范式

在滿足第二范式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關系。
如下,我們在myorder 中添加customer_phone

CREATE TABLE myorder (order_id INT PRIMARY KEY,product_id INT,customer_id INT,customer_phone VARCHAR(15) );

發現,表中的 customer_phone 有可能依賴于 order_id 、 customer_id 兩列,也就不滿足了第三范式的設計:其他列之間不能有傳遞依賴關系。
我們應該這樣設計:

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) );

修改后就不存在其他列之間的傳遞依賴關系,其他列都只依賴于主鍵列,滿足了第三范式的設計!

總結

以上是生活随笔為你收集整理的《MySQL——数据表设计三大范式》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。