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

Mysql數(shù)據(jù)庫(kù)設(shè)計(jì)三范式實(shí)例解析

 更新時(shí)間:2020年04月15日 10:09:32   作者:cool小伙  
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)設(shè)計(jì)三范式實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

三范式

1NF:字段不可分;

2NF:有主鍵,非主鍵字段依賴主鍵;

3NF:非主鍵字段不能相互依賴;

解釋:

1NF:原子性 字段不可再分,否則就不是關(guān)系數(shù)據(jù)庫(kù);

2NF:唯一性 一個(gè)表只說明一個(gè)事物;

3NF:每列都與主鍵有直接關(guān)系,不存在傳遞依賴;

第一范式(1NF)

即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要數(shù)據(jù)庫(kù)是關(guān)系型數(shù)據(jù)庫(kù)(mysql/oracle/db2/informix/sysbase/sql server),就自動(dòng)的滿足1NF。數(shù)據(jù)庫(kù)表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng),而不能是集合,數(shù)組,記錄等非原子數(shù)據(jù)項(xiàng)。如果實(shí)體中的某個(gè)屬性有多個(gè)值時(shí),必須拆分為不同的屬性 。通俗理解即一個(gè)字段只存儲(chǔ)一項(xiàng)信息。

關(guān)系型數(shù)據(jù)庫(kù): mysql/oracle/db2/informix/sysbase/sql server 非關(guān)系型數(shù)據(jù)庫(kù): (特點(diǎn): 面向?qū)ο蠡蛘呒? NoSql數(shù)據(jù)庫(kù): MongoDB/redis(特點(diǎn)是面向文檔)

第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要我們?cè)O(shè)計(jì)一個(gè)主鍵來實(shí)現(xiàn)(這里的主鍵不包含業(yè)務(wù)邏輯)。

即滿足第一范式前提,當(dāng)存在多個(gè)主鍵的時(shí)候,才會(huì)發(fā)生不符合第二范式的情況。比如有兩個(gè)主鍵,不能存在這樣的屬性,它只依賴于其中一個(gè)主鍵,這就是不符合第二范式。通俗理解是任意一個(gè)字段都只依賴表中的同一個(gè)字段。(涉及到表的拆分)

看下面的學(xué)生選課表:

學(xué)號(hào) 課程 成績(jī) 課程學(xué)分
10001 數(shù)學(xué) 100 6
10001 語(yǔ)文 90 2
10001 英語(yǔ) 85 3
10002 數(shù)學(xué) 90 6
10003 數(shù)學(xué) 99 6
10004 語(yǔ)文 89 2

表中主鍵為 (學(xué)號(hào),課程),我們可以表示為 (學(xué)號(hào),課程) -> (成績(jī),課程學(xué)分), 表示所有非主鍵列 (成績(jī),課程學(xué)分)都依賴于主鍵 (學(xué)號(hào),課程)。 但是,表中還存在另外一個(gè)依賴:(課程)->(課程學(xué)分)。這樣非主鍵列 ‘課程學(xué)分‘ 依賴于部分主鍵列 '課程‘, 所以上表是不滿足第二范式的。

我們把它拆成如下2張表:

學(xué)生選課表:

學(xué)號(hào) 課程 成績(jī)
10001 數(shù)學(xué) 100
10001 語(yǔ)文 90
10001 英語(yǔ) 85
10002 數(shù)學(xué) 90
10003 數(shù)學(xué) 99
10004 語(yǔ)文 89

課程信息表:

課程 課程學(xué)分
數(shù)學(xué) 6
語(yǔ)文 3
英語(yǔ) 2

那么上面2個(gè)表,學(xué)生選課表主鍵為(學(xué)號(hào),課程),課程信息表主鍵為(課程),表中所有非主鍵列都完全依賴主鍵。不僅符合第二范式,還符合第三范式。

再看這樣一個(gè)學(xué)生信息表:

學(xué)號(hào) 姓名 性別 班級(jí) 班主任
10001 張三 一班 小王
10002 李四 一班 小王
10003 王五 二班 小李
10004 張小三 二班 小李

上表中,主鍵為:(學(xué)號(hào)),所有字段 (姓名,性別,班級(jí),班主任)都依賴與主鍵(學(xué)號(hào)),不存在對(duì)主鍵的部分依賴。所以是滿足第二范式。

第三范式(3NF)

滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡(jiǎn)而言之,第三范式(3NF)要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主鍵字段。就是說,表的信息,如果能夠被推導(dǎo)出來,就不應(yīng)該單獨(dú)的設(shè)計(jì)一個(gè)字段來存放(能盡量外鍵join就用外鍵join)。很多時(shí)候,我們?yōu)榱藵M足第三范式往往會(huì)把一張表分成多張表。

即滿足第二范式前提,如果某一屬性依賴于其他非主鍵屬性,而其他非主鍵屬性又依賴于主鍵,那么這個(gè)屬性就是間接依賴于主鍵,這被稱作傳遞依賴于主屬性。 通俗解釋就是一張表最多只存兩層同類型信息。

反三范式

沒有冗余的數(shù)據(jù)庫(kù)未必是最好的數(shù)據(jù)庫(kù),有時(shí)為了提高運(yùn)行效率,提高讀性能,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是: 在概念數(shù)據(jù)模型設(shè)計(jì)時(shí)遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計(jì)時(shí)考慮。降低范式就是增加字段,減少了查詢時(shí)的關(guān)聯(lián),提高查詢效率,因?yàn)樵跀?shù)據(jù)庫(kù)的操作中查詢的比例要遠(yuǎn)遠(yuǎn)大于DML的比例。但是反范式化一定要適度,并且在原本已滿足三范式的基礎(chǔ)上再做調(diào)整的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用ORM新增數(shù)據(jù)在Mysql中的操作步驟

    使用ORM新增數(shù)據(jù)在Mysql中的操作步驟

    這篇文章主要介紹了使用ORM新增數(shù)據(jù)在Mysql中,但是在這需要注意需要大家新建ORM模型,具體搭建步驟及詳細(xì)過程跟隨小編一起看看吧
    2021-07-07
  • MySQL條件查詢語(yǔ)句常用操作全面匯總

    MySQL條件查詢語(yǔ)句常用操作全面匯總

    當(dāng)用戶查看表格的大量數(shù)據(jù)是,由于數(shù)據(jù)量過于巨大會(huì)導(dǎo)致很難獲取到需要的數(shù)據(jù),在這時(shí),就需要一個(gè)方法,一個(gè)可以通過用戶輸入獲取到用戶需要的數(shù)據(jù)并回填入表格,這就是條件查詢的作用
    2022-04-04
  • MySQL轉(zhuǎn)換Oracle的需要注意的七個(gè)事項(xiàng)

    MySQL轉(zhuǎn)換Oracle的需要注意的七個(gè)事項(xiàng)

    有很多應(yīng)用項(xiàng)目, 剛起步的時(shí)候用MySQL數(shù)據(jù)庫(kù)基本上能實(shí)現(xiàn)各種功能需求,隨著應(yīng)用用戶的增多,數(shù)據(jù)量的增加,MySQL漸漸地出現(xiàn)不堪重負(fù)的情況:連接很慢甚至宕機(jī),于是就有MySQL轉(zhuǎn)換Oracle的需求,應(yīng)用程序也要相應(yīng)做一些修改。
    2010-12-12
  • InnoDB數(shù)據(jù)庫(kù)死鎖問題處理

    InnoDB數(shù)據(jù)庫(kù)死鎖問題處理

    本文給大家講解的是mysql數(shù)據(jù)庫(kù)InnoDB類型,在update表的時(shí)候出現(xiàn)死鎖現(xiàn)象的原因及解決辦法,有需要的小伙伴可以參考下。
    2016-03-03
  • MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式

    MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式

    這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)時(shí)間序列間隔查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MySQL Workbench安裝及使用詳解

    MySQL Workbench安裝及使用詳解

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性,這篇文章主要介紹了MySQL Workbench安裝及使用,需要的朋友可以參考下
    2022-10-10
  • MySQL root賬號(hào)遠(yuǎn)程新建數(shù)據(jù)庫(kù)報(bào)錯(cuò)1044問題及解決方法

    MySQL root賬號(hào)遠(yuǎn)程新建數(shù)據(jù)庫(kù)報(bào)錯(cuò)1044問題及解決方法

    這篇文章主要介紹了MySQL root賬號(hào)遠(yuǎn)程新建數(shù)據(jù)庫(kù)報(bào)錯(cuò)1044問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句示例

    MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句示例

    DML、DDL、DCL和DQL是數(shù)據(jù)庫(kù)中常用的四種語(yǔ)言,分別用于數(shù)據(jù)操作、數(shù)據(jù)定義、數(shù)據(jù)控制和數(shù)據(jù)查詢,下面這篇文章主要給大家介紹了關(guān)于MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • MYSQL開發(fā)性能研究之批量插入數(shù)據(jù)的優(yōu)化方法

    MYSQL開發(fā)性能研究之批量插入數(shù)據(jù)的優(yōu)化方法

    在網(wǎng)上也看到過另外的幾種方法,比如說預(yù)處理SQL,比如說批量提交。那么這些方法的性能到底如何?本文就會(huì)對(duì)這些方法做一個(gè)比較
    2017-07-07
  • MySQL8 全文索引的實(shí)現(xiàn)方法

    MySQL8 全文索引的實(shí)現(xiàn)方法

    MySQL8支持全文索引和全文搜索,本文主要介紹了MySQL8全文索引的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08

最新評(píng)論