日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1 第一范式

該范式是為了排除 重復(fù)組 的出現(xiàn),因此要求數(shù)據(jù)庫的每個列的值域都由原子值組成;每個字段的值都只能是單一值。1971年埃德加·科德提出了第一范式。即表中所有字段都是不可再分的。

1.1 實例

重復(fù)組通常會出現(xiàn)在會計賬上,每一筆記錄可能有不定個數(shù)的值。

  • 舉例來說:

“數(shù)量”就是所謂的重復(fù)組了,而在這種情況下這份資料就不符合第一范式。

  • 再比如,如下聯(lián)系方式是一個復(fù)合屬性,就違反了該范式,在數(shù)據(jù)庫中是無法分離出來的。

1.2 解決方案

  • 想要消除重復(fù)組的話,只要把每筆記錄都轉(zhuǎn)化為單一記錄即可:
  • 簡單改動即可

即標(biāo)準(zhǔn)的二維表結(jié)構(gòu)。

2 第二范式

前提:標(biāo)準(zhǔn)的二維表,即第一范式成立

表中必須存在業(yè)務(wù)主鍵,并且非主鍵依賴于全部業(yè)務(wù)主鍵。

2.1 實例

如下博客表

給女同事講解MySQL數(shù)據(jù)庫范式與反范式,她直夸我“技術(shù)好”

 

  • 用戶字段作為PK是否可行?
    一個用戶會對應(yīng)多個博客記錄,且章節(jié)標(biāo)題也能為多個用戶所編輯,所以單列字段PK失效
  • <用戶,章節(jié),標(biāo)題>的聯(lián)合PK
    用戶積分字段只和用戶字段依賴,并不依賴整體的PK,依舊不符第二范式

2.2 解決方案

拆分將依賴的字段單獨成表

給女同事講解MySQL數(shù)據(jù)庫范式與反范式,她直夸我“技術(shù)好”

 


給女同事講解MySQL數(shù)據(jù)庫范式與反范式,她直夸我“技術(shù)好”

 

從上面可發(fā)現(xiàn):

  • 若表的PK只有一個字段,那么它本就符合第二范式
  • 若是多個字段組成,則需考慮是否符合第二范式

3 第三范式

表中的非主鍵列之間不能相互依賴

3.1 實例 - 課程表

給女同事講解MySQL數(shù)據(jù)庫范式與反范式,她直夸我“技術(shù)好”

 

一個字段的PK顯然符合第二范式,大部分字段也只依賴PK。然而對于職位字段其實依賴講師名,所以不符合第三范式。

3.2 解決方案

  • 將不與PK形成依賴關(guān)系的字段直接提出單獨成表即可:

4 三范式評價

優(yōu)點

  • 范式化的更新通常比反范式快
  • 當(dāng)數(shù)據(jù)較好的范式化后,很少或者沒有冗余數(shù)據(jù)
  • 范式化的數(shù)據(jù)比較小,放在內(nèi)存中操作較快

缺點

  • 通常需要進行關(guān)聯(lián)
    畢竟阿里規(guī)范提到

5 反范式(空間換時間)

反范式的過程就是通過冗余數(shù)據(jù)來提高查詢性能,但冗余數(shù)據(jù)會犧牲數(shù)據(jù)一致性

優(yōu)點

  • 所有的數(shù)據(jù)都在同一張表中,可以減少表關(guān)聯(lián)
  • 更好進行索引優(yōu)化

缺點

  • 存在大量冗余數(shù)據(jù)
  • 數(shù)據(jù)維護成本更高(刪除異常,插入異常,更新異常)

在企業(yè)中很好能做到嚴(yán)格意義上的范式成者反范式,一般需混合使用。

6 綜合案例

  1. 在一個網(wǎng)站實例中, 這個網(wǎng)站允許用戶發(fā)送消息,井且一些用戶是付費用戶?,F(xiàn)在想查看付費用戶最近的10條信息。在user表 和message表中都存儲用戶類型(account type),而不用完全的反范式化。這避免了完全反范式化的插入和刪除問題,因為即使沒有消息的時候也不會丟失用戶信息。這樣也不會把user_message表搞得太大,有助高效獲取數(shù)據(jù)
  2. 另一個從父表冗余些數(shù)據(jù)到子表的理由是排序的需要
  3. 緩存衍生值也是有用的。如果需要顯示每個用戶發(fā)了多少消息(類似論壇),可以每次執(zhí)行一個昂貴的子查詢來計算并顯示它;也可以在user表中建個num_messages列,每當(dāng)用戶發(fā)新消息時更新這個值。

范式設(shè)計

  • 用戶表
    用戶ID、姓名、電話、地址、郵箱
  • 訂單表
    訂單ID、用戶ID、下單時間、支付類型、訂單狀態(tài)
  • 訂單商品表
    訂單ID、商品 ID、商品價格
  • 商品表
    商品ID、名稱、描述、過期時間
SELECT b.用戶名, b.電話, b.地址, a.訂單ID,
	   SUM(c.商品價價*C.商品數(shù)量) as 訂單價格
	   // 上面這就需要三張表的關(guān)聯(lián)了,可能效率就很低了
FROM‘訂單表` a
JOIN‘用戶表’b ON a用戶ID=b.用戶ID
JOIN `訂單商品表` C ON c.訂單ID= b.訂單ID
GROUP BY b.用戶名,b.電話b.地址,a.訂單ID
1234567

反范式設(shè)計

  • 用戶表
    用戶ID、姓名、電話、地址、郵箱
  • 訂單表
    訂單ID、用戶ID、下單時間、支付類型、訂單狀態(tài)、訂單價格、用戶名、電話、地址
  • 訂單商品表
    訂單ID、商品 ID、商品數(shù)量、商品價格
  • 商品表
    商品ID、名稱、描述、過期時間
SELECT a.用戶名,a.電話.a.地址
,a.訂單ID
,a.訂單價格
FROM `訂單表` a
1234

把用戶表的地址加到了訂單表,這樣查詢地址時,就不需要把用戶表和訂單表關(guān)聯(lián)

分享到:
標(biāo)簽:范式 MySQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定