node 資料庫設計 三正規化
阿新 • • 發佈:2020-11-09
一、資料庫設計
通常我們用的較多的為第一正規化(1NF),第二正規化(2NF),第三正規化(3NF)
1)第一正規化(1NF) :要求資料庫表的每一列都是不可分割的原子項資料
姓名 | 性別 | 聯絡方式 |
---|---|---|
孫鬆 | 男 | 手機:13012345678 QQ:87625222 wx:sx23232 email:[email protected] |
以上表結構就違反了第一正規化,應拆分為:
姓名 | 性別 | 手機 | 微信 | |
---|---|---|---|---|
孫鬆 | 男 | 13012345678 | 87625222 | sx23232 |
2)第二正規化(2NF):屬性必須完全依賴主鍵
實體:現實世界中存在的可以區分的客觀的事物。例: 孫鬆、中公教育公司。
屬性:描述實體的特徵資訊。例:男,姓名,身份證號,指紋,身高,體重,愛好,,,
鍵:資料庫中基本概念。鍵指可以區分實體的屬性。例:身份證號、姓名、指紋,,
主鍵:能夠唯一區別實體的鍵。 例:身份證號
身份證號 | 姓名 | 性別 | 學號 | 選修課程號 | 選修成績 |
---|---|---|---|---|---|
610200201812 | 孫鬆 | 男 | 10001 | web01 | 98 |
以上表結構不符合第二正規化,應拆分為:
身份證號 | 姓名 | 性別 |
---|---|---|
610200201812 | 孫鬆 | 男 |
學號 | 選修課名 | 選修課成績 | 班主任姓名 |
---|---|---|---|
10001 | 語文 | 98 | 王老師 |
例如:
商品號 | 商品名 | 價格 | 贈品編號 | 贈品名稱 | 贈品規格 | 訂單號 | 數量 | 地址 | 下單時間 |
---|---|---|---|---|---|---|---|---|---|
a01 | iphone12 | 8888 | z001 | 手機殼 | 紅色 | A00120211 | 2 | 西安 | 20201104 9:10 |
以上可以拆分三個表: 商品表、贈品表、訂單表
3) 第三正規化(3NF):屬性不能傳遞依賴於主鍵
描述:滿足第二正規化前提下,如果某一屬性依賴於其他非主鍵屬性,而其他非主鍵屬性又依賴於主鍵,那麼這個屬性就屬於間接依賴於主鍵。
父親 | 兒子 | 女兒 | 女兒的芭比娃娃 | 女兒的小熊 |
---|---|---|---|---|
通俗理解: 一張表中最多隻存在2層同類資訊
以上可拆分為:
父親 | 兒子 | 女兒 |
---|---|---|
女兒 | 女兒的芭比娃娃 | 女兒的小熊 |
---|---|---|
4) 反三正規化
完全沒有冗餘的資料庫設計可以做到,但是沒有冗餘的資料庫未必是最好的,有時候為了查詢效率,就必須適當降低正規化標準,保留一些冗餘資料。具體做法:在概念設計時遵守三正規化標準,但是在具體專案資料庫實施時根據情況適當降低正規化標準,保留一些冗餘資料,達到以空間換時間的目的。