欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL?數(shù)據(jù)庫范式化設(shè)計(jì)理論總結(jié)

 更新時間:2022年04月22日 09:27:02   作者:心城以北?  
這篇文章主要介紹了MySQL?數(shù)據(jù)庫范式設(shè)計(jì)理論總結(jié),數(shù)據(jù)庫的規(guī)劃化范式設(shè)計(jì),在邏輯結(jié)構(gòu)上可以讓結(jié)構(gòu)更加細(xì)粒度,容易理解,下文我們就來了解具體的內(nèi)容介紹吧

一、設(shè)計(jì)范式

問題: 什么是范式化設(shè)計(jì),為什么需要反規(guī)范化設(shè)計(jì) ?

范式來自來自英文Normal From 。開發(fā)過程中要設(shè)計(jì)一個好的數(shù)據(jù)庫邏輯關(guān)系,必須滿足一定的約束條件,此約束條件形成了開發(fā)范式,分成幾個等級,一級比一級嚴(yán)格。

滿足這些范式理論上可以讓我們的數(shù)據(jù)庫邏輯結(jié)構(gòu)更加簡潔、清晰。

以下是常見的四種范式:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
  • 第四范式(BCNF)

1.第一范式(1NF)

  • 每一列都是不可再分的屬性值,確保每一列的原子性;
  • 兩列的屬性相近或者相似或者一樣,盡量合并屬性一樣的列,確保不產(chǎn)生冗余數(shù)據(jù);
  • 單一屬性的列為基本數(shù)據(jù)類型構(gòu)成;
  • 設(shè)計(jì)出來的表都是簡單的二維表。

舉例:用戶收貨地址 反例:

姓名電話地址
張三138000000北京市-朝陽區(qū)-酒仙橋街道

正例:

姓名電話區(qū)街道
張三138000000-北京市朝陽區(qū)酒仙橋街道

總結(jié):每列都是不可再分的原子值(一個列不可再分,比如通訊地址和省、市、區(qū))

2.第二范式(2NF)

  • 第二范式(2NF)是在第一范式的基礎(chǔ)上建立起來的。
  • 第二范式(2NF)要求實(shí)體的屬性完全依賴與主鍵關(guān)聯(lián)。所謂完成依賴是指不能存在與存在依賴關(guān)鍵字的部分屬性,如果存在那么這個屬性和關(guān)鍵字部分應(yīng)該分離出來形成一個新的實(shí)體,新實(shí)體與原實(shí)體是一對多的關(guān)系。

反例:

產(chǎn)品 ID用戶ID產(chǎn)品名稱用戶姓名購買數(shù)量下單時間
1001微波爐 A102王麻子12022-08-08

正例: 訂單表

產(chǎn)品 ID用戶ID購買數(shù)量下單時間
100112022-08-08

產(chǎn)品表

產(chǎn)品 ID產(chǎn)品名稱
100微波爐 A102

用戶表

用戶ID用戶姓名
1王麻子

總結(jié):消除列對主鍵的部分函數(shù)依賴(對于組合主鍵的部分依賴,比如:產(chǎn)品ID + 用戶ID 為主鍵,存在用戶名稱,產(chǎn)品名稱等部分主鍵依賴字段)

3.第三范式 (3NF)

  • 滿足第三范式(3NF)必須滿足第二范式(2NF)。
  • 第三范式(3NF) 要求一個數(shù)據(jù)表中不包含已在其他表中包含的非主鍵關(guān)鍵字信息,即數(shù)據(jù)不能存在傳遞關(guān)系,即每個屬性都跟主鍵有關(guān)系直接關(guān)系而不是間接關(guān)系。

反例:

訂單ID用戶ID產(chǎn)品ID產(chǎn)品名稱產(chǎn)品廠家
11100微波爐 A102美的
22200變頻空調(diào) B101海爾

正例: 訂單表

訂單ID用戶ID產(chǎn)品ID
11100
22200

商品信息表

產(chǎn)品ID產(chǎn)品名稱產(chǎn)品廠家
100微波爐 A102美的
200變頻空調(diào) B101海爾

總結(jié):消除字段對非主鍵的傳遞依賴(就是需要取消訂單中比如商品名稱、商品地址等冗余信息)。

二、范式化設(shè)計(jì)

在真正的數(shù)據(jù)庫規(guī)范定義上,非常的嚴(yán)謹(jǐn),比如第二范式(2NF)的定義“若某關(guān)系 R 術(shù)語第一范式,且每個非主屬性完全函數(shù)依賴于候選碼,則關(guān)系 R 屬于第二范式”。

結(jié)論:并不是說完全符合規(guī)范化理論的設(shè)計(jì)是最完美的設(shè)計(jì),而是要看具體的業(yè)務(wù)場景反復(fù)實(shí)踐總結(jié)最合適的設(shè)計(jì)。

三、反規(guī)范化設(shè)計(jì)

所謂反規(guī)范化設(shè)計(jì),就是針對規(guī)范化而言的。 1、為了性能和讀取效率而適當(dāng)?shù)倪`反對數(shù)據(jù)庫范式設(shè)計(jì)的要求; 3、為了查詢的性能,允許存在部分(少量)冗余數(shù)據(jù)。換句話說,反規(guī)范化設(shè)計(jì)就是直接用空間換時間。

  • 商品信息
ID商品名稱商品價格商品描述商品圖片地址
1微波爐 A101$100.99可以加熱食物的微波爐tupian.baidu.com
  • 分類信息
分類 ID分類名稱
1電器
  • 商品分類對應(yīng)關(guān)系表
商品ID分類ID
11
  • 商品信息反規(guī)范化設(shè)計(jì)
ID商品名稱分類名稱商品價格商品描述商品圖片地址
11電器$100.99可以加熱食物的微波爐tupian.baidu.com

四、設(shè)計(jì)總結(jié)

  • 數(shù)據(jù)庫的規(guī)劃化范式設(shè)計(jì),在邏輯結(jié)構(gòu)上可以讓結(jié)構(gòu)更加細(xì)粒度,容易理解。
  • 但是我們在實(shí)際的開發(fā)過程中,需要考慮性能和時間成本,往往或多或少,會允許數(shù)據(jù)冗余(反規(guī)范化設(shè)計(jì)),通??梢赃_(dá)到 2NF。

到此這篇關(guān)于MySQL 數(shù)據(jù)庫范式設(shè)計(jì)理論總結(jié)的文章就介紹到這了,更多相關(guān)MySQL 數(shù)據(jù)庫設(shè)計(jì)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例

    MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例

    這篇文章主要介紹了MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作,結(jié)合實(shí)例形式分析了MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作基本命令、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • 詳解Mysql主從同步配置實(shí)戰(zhàn)

    詳解Mysql主從同步配置實(shí)戰(zhàn)

    這篇文章主要介紹了詳解Mysql主從同步實(shí)戰(zhàn),實(shí)例分析了Mysql主從同步的原理和實(shí)現(xiàn),非常具有實(shí)用價值,需要的朋友可以參考下。
    2017-03-03
  • mysql多表聯(lián)合查詢返回一張表的內(nèi)容實(shí)現(xiàn)代碼

    mysql多表聯(lián)合查詢返回一張表的內(nèi)容實(shí)現(xiàn)代碼

    在使用mysql多表聯(lián)合查詢時怎樣可以做到只返回返回一張表的內(nèi)容,本文將詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12
  • Mysql中SUM()函數(shù)使用方法

    Mysql中SUM()函數(shù)使用方法

    這篇文章主要給大家介紹了關(guān)于Mysql中SUM()函數(shù)使用的相關(guān)資料,MySQL 的 SUM 函數(shù)可以用來對某個列進(jìn)行求和,但是如果你想要按照某個條件進(jìn)行求和,可以使用帶有WHERE子句的SUM函數(shù),需要的朋友可以參考下
    2023-08-08
  • MySQL最基本的命令使用匯總

    MySQL最基本的命令使用匯總

    這篇文章為大家分享了MySQL最基本的命令使用匯總,MySQL最基本的命令使用,包括如何正確連接MySQL(和PHP搭配之最佳組合),修改密碼與增加新用戶等相關(guān)內(nèi)容的描述,感興趣的小伙伴們可以參考一下
    2015-11-11
  • PHP MYSQL注入攻擊需要預(yù)防7個要點(diǎn)

    PHP MYSQL注入攻擊需要預(yù)防7個要點(diǎn)

    這篇文章主要介紹了PHP MYSQL開發(fā)中,對于注入攻擊需要預(yù)防的7個要點(diǎn),大家需要注意了
    2013-11-11
  • MySQL?中的count(*)?與?count(1)?誰更快一些?

    MySQL?中的count(*)?與?count(1)?誰更快一些?

    這篇文章主要討論MySQL?中?count(*)?與?count(1)?誰更快一些?以下討論基于?InnoDB?存儲引擎,并且再文末單獨(dú)說一下MyISAM?,感興趣的小伙伴可以參考一下
    2022-02-02
  • MySQL中關(guān)于臨時表的一些基本使用方法

    MySQL中關(guān)于臨時表的一些基本使用方法

    這篇文章主要介紹了MySQL中關(guān)于臨時表的一些基本使用方法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 通過MySQL慢查詢優(yōu)化MySQL性能的方法講解

    通過MySQL慢查詢優(yōu)化MySQL性能的方法講解

    今天小編就為大家分享一篇關(guān)于通過MySQL慢查詢優(yōu)化MySQL性能的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 解決sql server不支持variant數(shù)據(jù)類型的問題

    解決sql server不支持variant數(shù)據(jù)類型的問題

    在數(shù)據(jù)庫中,數(shù)據(jù)類型是非常重要的,但有時候我們可能會遇到 SQL Server 不支持的數(shù)據(jù)類型,例如 Variant,在本篇博文中,我們將探討問題的背景,提供解決思路,并總結(jié)如何解決 SQL Server 不支持 Variant 數(shù)據(jù)類型的挑戰(zhàn)
    2023-09-09

最新評論