<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        數(shù)據(jù)庫設(shè)計原則-范式

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 16:03:03
        文檔

        數(shù)據(jù)庫設(shè)計原則-范式

        數(shù)據(jù)庫設(shè)計原則-范式:規(guī)范化-數(shù)據(jù)庫設(shè)計原則 摘要 關(guān)系型數(shù)據(jù)庫是當(dāng)前廣泛應(yīng)用的數(shù)據(jù)庫類型,關(guān)系數(shù)據(jù)庫設(shè)計是對數(shù)據(jù)進(jìn)行組織化和結(jié)構(gòu)化的過程,核心問題是關(guān)系模型的設(shè)計。對于數(shù)據(jù)庫規(guī)模較小的情況,我們可以比較輕松的處理數(shù)據(jù)庫中的表結(jié)構(gòu)。然而,隨著項目規(guī)模的不斷增長,
        推薦度:
        導(dǎo)讀數(shù)據(jù)庫設(shè)計原則-范式:規(guī)范化-數(shù)據(jù)庫設(shè)計原則 摘要 關(guān)系型數(shù)據(jù)庫是當(dāng)前廣泛應(yīng)用的數(shù)據(jù)庫類型,關(guān)系數(shù)據(jù)庫設(shè)計是對數(shù)據(jù)進(jìn)行組織化和結(jié)構(gòu)化的過程,核心問題是關(guān)系模型的設(shè)計。對于數(shù)據(jù)庫規(guī)模較小的情況,我們可以比較輕松的處理數(shù)據(jù)庫中的表結(jié)構(gòu)。然而,隨著項目規(guī)模的不斷增長,

        規(guī)范化-數(shù)據(jù)庫設(shè)計原則 摘要 關(guān)系型數(shù)據(jù)庫是當(dāng)前廣泛應(yīng)用的數(shù)據(jù)庫類型,關(guān)系數(shù)據(jù)庫設(shè)計是對數(shù)據(jù)進(jìn)行組織化和結(jié)構(gòu)化的過程,核心問題是關(guān)系模型的設(shè)計。對于數(shù)據(jù)庫規(guī)模較小的情況,我們可以比較輕松的處理數(shù)據(jù)庫中的表結(jié)構(gòu)。然而,隨著項目規(guī)模的不斷增長,

        規(guī)范化-數(shù)據(jù)庫設(shè)計原則

        摘要

        關(guān)系型數(shù)據(jù)庫是當(dāng)前廣泛應(yīng)用的數(shù)據(jù)庫類型,關(guān)系數(shù)據(jù)庫設(shè)計是對數(shù)據(jù)進(jìn)行組織化和結(jié)構(gòu)化的過程,核心問題是關(guān)系模型的設(shè)計。對于數(shù)據(jù)庫規(guī)模較小的情況,我們可以比較輕松的處理數(shù)據(jù)庫中的表結(jié)構(gòu)。然而,隨著項目規(guī)模的不斷增長,相應(yīng)的數(shù)據(jù)庫也變得更加復(fù)雜,關(guān)系模型表結(jié)構(gòu)更為龐雜,這時我們往往會發(fā)現(xiàn)我們寫出來的SQL語句的是很笨拙并且效率低下的。更糟糕的是,由于表結(jié)構(gòu)定義的不合理,會導(dǎo)致在更新數(shù)據(jù)時造成數(shù)據(jù)的不完整。因此,就有必要學(xué)習(xí)和掌握數(shù)據(jù)庫的規(guī)范化流程,以指導(dǎo)我們更好的設(shè)計數(shù)據(jù)庫的表結(jié)構(gòu),減少冗余的數(shù)據(jù),借此可以提高數(shù)據(jù)庫的存儲效率,數(shù)據(jù)完整性和可擴(kuò)展性。本文將結(jié)合具體的實例,介紹數(shù)據(jù)庫規(guī)范化的流程。

        本文的目的就是通過詳細(xì)的實例來闡述規(guī)范化的數(shù)據(jù)庫設(shè)計原則。在oracle中,簡潔、結(jié)構(gòu)明晰的表結(jié)構(gòu)對數(shù)據(jù)庫的設(shè)計是相當(dāng)重要的。規(guī)范化的表結(jié)構(gòu)設(shè)計,在以后的數(shù)據(jù)維護(hù)中,不會發(fā)生插入(insert)、刪除(delete)和更新(update)時的異常。反之,數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計不合理,不僅會給數(shù)據(jù)庫的使用和維護(hù)帶來各種各樣的問題,而且可能存儲了大量不需要的冗余信息,浪費(fèi)系統(tǒng)資源。

        要設(shè)計規(guī)范化的數(shù)據(jù)庫,就要求我們根據(jù)數(shù)據(jù)庫設(shè)計范式――也就是數(shù)據(jù)庫設(shè)計的規(guī)范原則來做。但是一些相關(guān)材料上提到的范式設(shè)計,往往是給出一大堆的公式,這給設(shè)計者的理解和運(yùn)用造成了一定的困難。因此,本文將結(jié)合具體形象的例子,盡可能通俗化地描述三個范式,以及如何在實際工程中加以優(yōu)化應(yīng)用。

        規(guī)范化

        在設(shè)計和操作維護(hù)數(shù)據(jù)庫時,關(guān)鍵的步驟就是要確保數(shù)據(jù)正確地分布到數(shù)據(jù)庫的表中。使用正確的數(shù)據(jù)結(jié)構(gòu),不僅便于對數(shù)據(jù)庫進(jìn)行相應(yīng)的存取操作,而且可以極大地簡化應(yīng)用程序的其他內(nèi)容(查詢、窗體、報表、代碼等)。正確進(jìn)行表設(shè)計的正式名稱就是"數(shù)據(jù)庫規(guī)范化"。后面我們將通過實例來說明具體的規(guī)范化的工程。關(guān)于什么是范式的定義,請參考附錄文章 1.

        數(shù)據(jù)冗余

        數(shù)據(jù)應(yīng)該盡可能少地冗余,這意味著重復(fù)數(shù)據(jù)應(yīng)該減少到最少。比如說,一個部門雇員的電話不應(yīng)該被存儲在不同的表中, 因為這里的電話號碼是雇員的一個屬性。如果存在過多的冗余數(shù)據(jù),這就意味著要占用了更多的物理空間,同時也對數(shù)據(jù)的維護(hù)和一致性檢查帶來了問題,當(dāng)這個員工的電話號碼變化時,冗余數(shù)據(jù)會導(dǎo)致對多個表的更新動作,如果有一個表不幸被忽略了,那么就可能導(dǎo)致數(shù)據(jù)的不一致性。

        規(guī)范化實例:

        為了說明方便,我們在本文中將使用一個SAMPLE數(shù)據(jù)表,來一步一步分析規(guī)范化的過程。

        首先,我們先來生成一個的最初始的表。

        CREATE TABLE "SAMPLE" (

        "PRJNUM" INTEGER NOT NULL,

        "PRJNAME" VARCHAR(200),

        "EMYNUM" INTEGER NOT NULL,

        "EMYNAME" VARCHAR(200),

        "SALCATEGORY" CHAR(1),

        "SALPACKAGE" INTEGER)

        IN "USERSPACE1";

        ALTER TABLE "SAMPLE"

        ADD PRIMARY KEY

        ("PRJNUM", "EMYNUM");

        Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE)

        values(100001, 'TPMS', 200001, 'Johnson', 'A', 2000), (100001, 'TPMS', 200002,

        'Christine', 'B', 3000), (100001, 'TPMS', 200003, 'Kevin', 'C', 4000), (100002,

        'TCT', 200001, 'Johnson', 'A', 2000), (100002, 'TCT', 200004, 'Apple', 'B',

        3000);

        表1-1


        考察表1-1,我們可以看到,這張表一共有六個字段,分析每個字段都有重復(fù)的值出現(xiàn),也就是說,存在數(shù)據(jù)冗余問題。這將潛在地造成數(shù)據(jù)操作(比如刪除、更新等操作)時的異常情況,因此,需要進(jìn)行規(guī)范化。

        第一范式

        參照范式的定義,考察上表,我們發(fā)現(xiàn),這張表已經(jīng)滿足了第一范式的要求。

        1、因為這張表中字段都是單一屬性的,不可再分;

        2、而且每一行的記錄都是沒有重復(fù)的;

        3、存在主屬性,而且所有的屬性都是依賴于主屬性;

        4、所有的主屬性都已經(jīng)定義

        事實上在當(dāng)前所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,都已經(jīng)在建表的時候強(qiáng)制滿足第一范式。因此,這張SAMPLE表已經(jīng)是一張滿足第一范式要求的表。考察表1-1,我們首先要找出主鍵。可以看到,屬性對是主鍵,其他所有的屬性都依賴于該主鍵。

        從第一范式轉(zhuǎn)化為第二范式

        根據(jù)第二范式的定義,轉(zhuǎn)化為二范式就是消除部分依賴。

        考察表1-1,我們可以發(fā)現(xiàn),非主屬性部分依賴于主鍵中的; 非主屬性都部分依賴于主鍵中的

        表1-1的形式,存在著以下潛在問題:

        1. 數(shù)據(jù)冗余:每一個字段都有值重復(fù);

        2. 更新異常:比如字段的值,比如對值"TPMS"了修改,那么就要一次更新該字段的多個值;

        3. 插入異常:如果新建了一個Project,名字為TPT, 但是還沒有Employee加入,那么將會空缺,而該字段是主鍵的一部分,因此將無法插入記錄;

        Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(100003, 'TPT', NULL, NULL, NULL, NULL)

        4. 刪除異常:如果一個員工 200003, Kevin 離職了,要將該員工的記錄從表中刪除,而此時相關(guān)的Salary信息 C 也將丟失, 因為再沒有別的行紀(jì)錄下 Salary C的信息。

        Delete from sample where EMYNUM = 200003
        Select distinct SALCATEGORY, SALPACKAGE from SAMPLE

        因此,我們需要將存在部分依賴關(guān)系的主屬性和非主屬性從滿足第一范式的表中分離出來,形成一張新的表,而新表和舊表之間是一對多的關(guān)系。由此,我們得到:

        CREATE TABLE "PROJECT" (

        "PRJNUM" INTEGER NOT NULL,

        "PRJNAME" VARCHAR(200))

        IN "USERSPACE1";

        ALTER TABLE "PROJECT"

        ADD PRIMARY KEY

        ("PRJNUM");

        Insert into PROJECT(PRJNUM, PRJNAME) values(100001, 'TPMS'), (100002, 'TCT');

        表1-2




        表1-3

        CREATE TABLE "EMPLOYEE" (

        "EMYNUM" INTEGER NOT NULL,

        "EMYNAME" VARCHAR(200),

        "SALCATEGORY" CHAR(1),

        "SALPACKAGE" INTEGER)

        IN "USERSPACE1";

        ALTER TABLE "EMPLOYEE"

        ADD PRIMARY KEY

        ("EMYNUM");

        Insert into EMPLOYEE(EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(200001,

        'Johnson', 'A', 2000), (200002, 'Christine', 'B', 3000), (200003, 'Kevin', 'C',

        4000), (200004, 'Apple', 'B', 3000);

        Employee Number Employee Name Salary Category Salary Package

        200001 Johnson A 2000

        200002 Christine B 3000

        200003 Kevin C 4000

        200004 Apple B 3000

        CREATE TABLE "PRJ_EMY" (

        "PRJNUM" INTEGER NOT NULL,

        "EMYNUM" INTEGER NOT NULL)

        IN "USERSPACE1";

        ALTER TABLE "PRJ_EMY"

        ADD PRIMARY KEY

        ("PRJNUM", "EMYNUM");

        Insert into PRJ_EMY(PRJNUM, EMYNUM) values(100001, 200001), (100001, 200002),

        (100001, 200003), (100002, 200001), (100002, 200004);

        同時,我們把表1-1的主鍵,也就是表1-2和表1-3的各自的主鍵提取出來,單獨(dú)形成一張表,來表明表1-2和表1-3之間的關(guān)聯(lián)關(guān)系:


        表1-4

        這時候我們仔細(xì)觀察一下表1-2, 1-3, 1-4, 我們發(fā)現(xiàn)插入異常已經(jīng)不存在了,當(dāng)我們引入一個新的項目 TPT 的時候,我們只需要向表1-2 中插入一條數(shù)據(jù)就可以了, 當(dāng)有新人加入項目 TPT 的時候,我們需要向表1-3, 1-4 中各插入一條數(shù)據(jù)就可以了。雖然我們解決了一個大問題,但是仔細(xì)觀察我們還是發(fā)現(xiàn)有問題存在。

        從第二范式轉(zhuǎn)化為第三范式

        考察表前面生成的三張表,我們發(fā)現(xiàn),表1-3存在傳遞依賴關(guān)系,即:關(guān)鍵字段< Employee Number > --> 非關(guān)鍵字段< Salary Category > -->非關(guān)鍵字段< Salary Package >。而這是不滿足三范式的規(guī)則的,存在以下的不足:

        1、 數(shù)據(jù)冗余:的值有重復(fù);

        2、 更新異常:有重復(fù)的冗余信息,修改時需要同時修改多條記錄,否則會出現(xiàn)數(shù)據(jù)不一致的情況;

        3、 刪除異常:同樣的,如果員工 200003 Kevin 離開了公司,會直接導(dǎo)致 Salary C 的信息的丟失。

        Delete from EMPLOYEE where EMYNUM = 200003
        Select distinct SALCATEGORY, SALPACKAGE from EMPLOYEE

        因此,我們需要繼續(xù)進(jìn)行規(guī)范化的過程,把表1-3拆開,我們得到:


        表1-5

        表1-6

        這時候如果 200003 Kevin 離開公司,我們只需要從表 1-5 中刪除他就可以了, 存在于表1-6中的Salary C信息并不會丟失。但是我們要注意到除了表 1-5 中存在 Kevin 的信息之外, 表1-4中也存在 Kevin 的信息, 這很容易理解, 因為 Kevin 參與了項目 100001, TPMS, 所以當(dāng)然也要從中刪除。

        至此,我們將表1-1經(jīng)過規(guī)范化步驟,得到四張表,滿足了三范式的約束要求,數(shù)據(jù)冗余、更新異常、插入異常和刪除異常。

        在三范式之上,還存在著更為嚴(yán)格約束的BC范式和四范式,但是這兩種形式在商業(yè)應(yīng)用中很少用到,在絕大多數(shù)情況下,三范式已經(jīng)滿足了數(shù)據(jù)庫表規(guī)范化的要求,有效地解決了數(shù)據(jù)冗余和維護(hù)操作的異常問題。

        結(jié)束:

        在本文描述的過程中,我們通過結(jié)合實例的方法,通俗地演繹了數(shù)據(jù)表規(guī)范化的過程,并展示了在此過程中數(shù)據(jù)冗余、數(shù)據(jù)庫操作異常等問題是如何得到解決的。

        在具體的工程應(yīng)用中,運(yùn)用數(shù)據(jù)庫規(guī)范化的方法來設(shè)計數(shù)據(jù)庫表,將是具有現(xiàn)實意義的。

        參考資料:

      1. Database Normalization Basics:數(shù)據(jù)庫規(guī)范化基礎(chǔ)原則

      2. Normalization principles:數(shù)據(jù)庫規(guī)范化原則和范式定義
      3. 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        數(shù)據(jù)庫設(shè)計原則-范式

        數(shù)據(jù)庫設(shè)計原則-范式:規(guī)范化-數(shù)據(jù)庫設(shè)計原則 摘要 關(guān)系型數(shù)據(jù)庫是當(dāng)前廣泛應(yīng)用的數(shù)據(jù)庫類型,關(guān)系數(shù)據(jù)庫設(shè)計是對數(shù)據(jù)進(jìn)行組織化和結(jié)構(gòu)化的過程,核心問題是關(guān)系模型的設(shè)計。對于數(shù)據(jù)庫規(guī)模較小的情況,我們可以比較輕松的處理數(shù)據(jù)庫中的表結(jié)構(gòu)。然而,隨著項目規(guī)模的不斷增長,
        推薦度:
        標(biāo)簽: 創(chuàng)建 操作 連接
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av成人一区二区三区在线播放| 亚洲激情视频网站| 亚洲综合区小说区激情区| 亚洲不卡AV影片在线播放| 久久国产亚洲精品麻豆| 亚洲不卡中文字幕| 精品女同一区二区三区免费播放 | 国产激情久久久久影院老熟女免费| a级毛片免费观看视频| xxxx日本免费| 日产乱码一卡二卡三免费| 伊人久久综在合线亚洲91| 91嫩草亚洲精品| 免费观看91视频| 国产成人免费高清在线观看| 久久精品亚洲综合一品| 亚洲精品高清国产麻豆专区| 免费国产污网站在线观看不要卡| 亚洲国产成人精品不卡青青草原| 久久亚洲国产精品五月天婷| 久久亚洲精品国产亚洲老地址| 九九久久国产精品免费热6| 嫩草影院在线免费观看| 久久国产亚洲精品无码| 窝窝影视午夜看片免费| 成人黄动漫画免费网站视频| 亚洲一区中文字幕久久| 免费精品国产日韩热久久| 亚洲成a人片在线观看无码 | 久久亚洲免费视频| 日韩版码免费福利视频| 杨幂最新免费特级毛片| 亚洲色成人网一二三区| 久久免费精品一区二区| 亚洲日日做天天做日日谢| 免费在线观看污网站| 午夜亚洲WWW湿好爽| 亚洲成AV人片天堂网无码| 免费国产黄线在线观看| 亚洲av无码国产综合专区| 亚洲精品国产精品乱码不卞|