青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

細說數據庫范式

轉載自:http://www.cnblogs.com/KissKnife/archive/2009/10/26/1590029.html

理論性的東西,往往容易把人人都看得懂的東西寫成連鬼都看不懂,近似于主任醫生開的藥方。從前學范式的時候,把書中得概念翻來覆去看,看得痛心疾首深惡痛絕,再加上老師深切誤導,最后一塌糊涂。借助網絡資源,自己寫了一篇,自己是看懂了,希望對大家也有所幫助,有錯誤幫忙指正。

 

數據庫范式(Normal forms):是用于規范關系型數據庫設計,以減少謬誤發生的一種準則。

 

1NF(first normal form)

Table faithfully represents a relation and has no repeating groups.

數據庫表必須如實地展現“關系”,并且不允許有“重復組”出現。

 

這樣的概念真是令人痛心疾首,我們只好再搬出1NF的的作者之一Chris Date的解釋:

1. There's no top-to-bottom ordering to the rows.

(任意兩行沒有特定的順序關系。不存在一個特定的理由要某一行必須在另一行之前。)

2. There's no left-to-right ordering to the columns.

(任意兩列沒有特定的順序關系。)

3. There are no duplicate rows.

(不允許存在重復的行。如果一張表沒有Unique Key,事實上它是違反1NF。)

4. Every row-and-column intersection contains exactly one value from the applicable domain (and nothing else).

(不允許出現空值Null,這一點不同作者是有爭議的。事實上我們常常違背這點。)

5. All columns are regular [i.e. rows have no hidden components such as row IDs, object IDs, or hidden timestamps].

(不允許存在隱藏字段。不知道OracleRowid屬不屬于這個?)

 

有人從第四點的“one value”大肆挖掘,于是我們就見到了書上這樣的定義:“如果一個關系模式R的所有屬性都是原子的,即不可再分的基本數據項,則RÎ1NF”。

 

這一點被認為是1NF的核心,“關系模式R“表”,“屬性”  “列”,下面是一種與1NF不一致的情況,通常這是一類很明顯的設計缺陷:

ID

Artist

FavoriteColor

……

1

Babyface

Blue,Yellow

……

2

Sting

Green

……

 

對上例我們不能把它拆分成FavoriteColor1FavoriteColor2……因為首先我們不能確定該拆分成幾列;其次FavoriteColor1FavoriteColor2在結構、含意方面都是相同的,這實際上也是一類“repeating group”;同時這種設計會導致某些查詢困難,比如“有哪些藝人喜歡黃色?”

 

解決方案是將表拆分成兩個:

ID

Artist

……

1

Babyface

……

2

Sting

……

 

ID

FavoriteColor

1

Blue

1

Yellow

2

Green

 

總結:

1NF最核心的 “原子性”,違反此規范的可能性:接近于0%。不過,網上很多帖子說在關系型數據庫中根本不可能違背1NF,我認為這是不對的。

 

 

2NF(second normal form):

No non-prime attribute in the table is functionally dependent on a part (proper subset) of a candidate key.

不存在非主屬性對任一候選鍵的部分函數依賴。

 

如果解釋完下面幾個概念,這個定義就可以讀懂了:

Superkey:超級鍵(L,如果屬性或屬性組合能唯一標識一條記錄,則它是一個Superkey

Candidate key:候選鍵,當Superkey只包含一個屬性時,則它是一個候選鍵;當Superkey包含一組屬性時,僅當這一組屬性不包含另一Superkey時,它是一個候選鍵。換句話說,候選鍵是“純凈的”、最小化的Superkey

Non-prime attribute:非主屬性,未在任何候選鍵中出現的屬性,即為非主屬性。

 

舉例來說,對表{First_name,Last_name,Address},假定全名不重復,則:

Superkey

{First_name,Last_name}

{First_name,Last_name,Address}

Candidate key:

{First_name,Last_name}

Non-prime attribute

Address

 

淺白版:“2NF針對的是復合候選鍵(即鍵包含的字段個數>1)的情況,非主屬性不能只依賴于復合候選鍵中的一部分字段。”顯然,如果是非復合候選鍵,如果它符合1NF,那么它一定符合2NF

 

假設有這樣一張涉及藝人與唱片公司的關系表:

Artist

藝人

Company

唱片公司

DurationYears

簽約總年數

CompAddr

公司住址

Babyface

Solar

4

Indiana

Babyface

Laface

2

Indiana

 

 

 

 

顯然,{Artist,Company}為可以作為一個候選鍵,DurationYears在這沒有問題,但CompAddr是違反2NF的,它只依賴于候選鍵的一部分(依賴于Company),這是違反2NF的,為了消除這種情況,我們可以:

Artist

藝人

CompID

唱片公司

DurationYears

簽約總年數

Babyface

1

4

Babyface

2

2

 

ID

Company

唱片公司

CompAddr

公司住址

1

Solar

Indiana

2

Laface

Indiana

 

總結:

對于2NF,如果關系中的候選鍵只包含一個屬性,可以直接略過。

 

在考慮2NF的過程中,不要把幾個無關的實體的屬性雜揉放在一個關系中,比如Artist是一個實體、Company是一個實體,它們可以有一系列的關聯表(也是實體),但在關聯表中盡量不要引入前兩個實體的無關屬性。

 

 

3NF(Third normal form)

Every non-prime attribute is non-transitively dependent on every key of the table.

不存在非主屬性對任一鍵(候選鍵)的傳遞依賴。

 

傳遞依賴,你可以顧名思義,這里就不再引入定義了,舉個例子,有下面一張表:

Tournament

賽事

Year

年份

Winner

冠軍

Winner Date of Birth

冠軍生日

Indiana Invitational

1998

Al Fredrickson

21 July 1975

Cleveland Open

1999

Bob Albertson

28 September 1968

Des Moines Masters

1999

Al Fredrickson

21 July 1975

Indiana Invitational

1999

Chip Masterson

14 March 1977

 

這里的候選鍵為{Tournament,Year},顯然有這樣的決定關系:

{Tournament,Year}→Winner

{Tournament,Year}→Winner→Winner Date of Birth

其中第二條就屬于違反3NF的情況,因為Winner Date of Birth依賴于Winner而不是直接依賴于候選鍵。這種情況下,可以將Winner,Winner Date of Birth單獨作為一張表,這里不贅述。

 

總結:

我覺得大多數人憑借直觀感覺,就可使設計的關系符合3NF,所以這些理論,你只需要姑且讀之。

 

 

BCNF(Boyce-Codd normal form)BoyceCodd是該范式的兩名作者。)

Every non-trivial functional dependency in the table is a dependency on a superkey.

表中的任何非平凡函數依賴,都必須是對superkey的依賴。

 

non-trivial functional dependency:非平凡函數依賴,如果存在一個決定關系xy,且y并非x的子集,則叫著y非平凡函數依賴于x

 

BCNF3NF的最大區別是它并不僅針對非主屬性(non-prime attribute)來說,它發生的時候常常是表中根本不存在非主屬性,以至于它不可能違反2NF3NF。而BCNF的出現就是為了擴大“打擊面”。

 

于是BCNF的主旨是:補充對發生在主屬性(prime attribute)身上的函數依賴的約束,因為對于非主屬性的約束已經在3NF中完成了。

 

例子,使用關系表描述學生、課程、教師的關系(假定一名教師只負責一門課程,一門課程則可以由多位教師負責):

Student

學生

Course

課程

Teacher

教師

S1

C1

T1

S1

C2

T2

S2

C1

T1

S2

C2

T3

S2

C3

T2

候選鍵:

{Student,Course}

{Student,Teacher}

因此這里不存在非主屬性,而在主屬性的函數依賴中,存在Teacher→Course,這屬于違反BCNF的情況。

 

可是,問題是這個表看起來還挺正常的啊?!它的毛病在于,我們無法阻止類似最后一行這樣的數據插入,而這會導致與前提“一名教師只負責一門課程”違背。所以我們還是需要將它拆分:

Student

學生

Teacher

教師

S1

T1

S1

T2

S2

T1

S2

T3

 

Teacher

教師

Course

課程

T1

C1

T2

C2

T3

C2

這樣,在“Teacher-Course”表中,借助主鍵的幫助,最后可以避免違背“一名教師只負責一門課程”這個前提。

 

那么,如果沒有這樣一個前提,是初的設計是否符合BCNF?目前看來是的。

 

真實的情況可能更為復雜,下面這個更接近于我的一些經歷:

1)學生需要學習多門課程

2)一門課程可能有多位教師負責

3)一位教師可能負責多門課程

4)某一班級的某一課程對應的教師是固定的(一位)

據此,為了描述學生、課程、教師三者的關系,從這一團亂麻中最早跳出來的大概是這樣的表:

Student

學生

Class

班級

Course

課程

Teacher

教師

 

 

 

 

 

 

 

 

 

候選鍵:

{Student,Course}

我們可以明顯地看到StudentClass違反了2NF,于是:

Student

學生

Class

班級

 

 

 

 

 

Class

班級

Course

課程

Teacher

教師

 

 

 

 

 

 

 

從這兩張表,仔細考慮,即便我們通過Class關聯兩張表,還是無法得出學生與課程的關系(只能得出可供該學生選擇的課程),所以我們需要再添加一張表:

Student

學生

Course

課程

 

 

 

 

 

最后大概是這么三張表,可能還有其它的方案,這里只是舉例說明,就不糾纏了。

 

BCNF之后,還有4NF5NFDKNF6NF,等什么時候有空了再看看是什么東東。


posted on 2011-03-31 16:31 楊粼波 閱讀(886) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩国产综合| 一区二区三区日韩精品视频| 久久精品国语| 欧美高清在线| 亚洲网站视频福利| 国产精品免费网站| 久久久久久9999| 亚洲精品久久久久久久久久久| 亚洲精品久久久一区二区三区| 欧美日韩亚洲一区三区| 亚洲欧美激情一区二区| 欧美国产综合视频| 亚洲免费视频网站| 亚洲电影第三页| 国产精品夫妻自拍| 久久精品免费观看| 久久大逼视频| 另类酷文…触手系列精品集v1小说| 久久精品官网| 一本色道综合亚洲| 欧美一级视频免费在线观看| 国产精品视频网址| 麻豆av福利av久久av| 欧美成人综合一区| 久久精品国产在热久久| 香蕉免费一区二区三区在线观看 | 99精品视频免费全部在线| 一区二区三区久久精品| 午夜精品福利一区二区三区av| 久久久久久一区二区| 欧美日韩精品在线播放| 中日韩美女免费视频网站在线观看| 亚洲成人在线网| 日韩视频不卡| 韩国三级电影一区二区| 亚洲毛片在线看| 国产精品亚洲综合色区韩国| 欧美福利一区| 99热这里只有精品8| 在线亚洲观看| 国产啪精品视频| 国产精品一区二区欧美| 亚洲欧美韩国| 99综合视频| 亚洲欧美日韩高清| 欧美阿v一级看视频| 国产精品va在线播放| 久久久久久夜精品精品免费| 欧美黄色精品| 夜夜精品视频一区二区| 久久综合九色九九| 国产精品99久久久久久久女警 | 亚洲国产综合91精品麻豆| 欧美精品一区在线| 亚洲男人天堂2024| 久久九九免费视频| 一本久道久久综合婷婷鲸鱼| 欧美肥婆在线| 日韩一级大片| 久久久久久久一区| 欧美成人黑人xx视频免费观看| 一区二区三区导航| 亚洲已满18点击进入久久| 亚洲免费视频成人| 亚洲欧美另类综合偷拍| 欧美成人午夜激情在线| 日韩视频在线免费| 午夜国产精品视频免费体验区| 悠悠资源网亚洲青| 欧美激情网友自拍| 亚洲欧洲精品一区二区三区不卡| 久久riav二区三区| 欧美大片免费观看在线观看网站推荐| 欧美福利精品| 亚洲毛片播放| 欧美日本免费一区二区三区| 亚洲视频精品在线| 亚洲人成网站影音先锋播放| 女同性一区二区三区人了人一 | 欧美午夜片在线观看| 欧美wwwwww| 美女脱光内衣内裤视频久久网站| 久久本道综合色狠狠五月| 久久人人97超碰精品888| 国产亚洲欧美日韩一区二区| 国产精品高清免费在线观看| 国产精品乱码久久久久久| 国产精品日韩欧美| 狠狠久久五月精品中文字幕| 在线观看一区| 亚洲美女黄网| 亚洲一区视频| 久久蜜桃精品| 欧美激情一区三区| 一区二区三区视频在线观看| 亚洲欧美日本精品| 老司机亚洲精品| 欧美日韩在线一区二区三区| 国产精自产拍久久久久久| 黄色国产精品| 亚洲午夜久久久久久久久电影院 | 亚洲伊人网站| 久久精品视频在线观看| 欧美精品一区二区三区久久久竹菊 | 国产一区二区中文字幕免费看| 国产主播精品在线| 亚洲毛片在线| 久久不射网站| 91久久精品美女| 性色一区二区三区| 欧美激情一区二区三区不卡| 国产乱码精品1区2区3区| 亚洲电影天堂av| 午夜精品久久久久久久男人的天堂 | 亚洲一品av免费观看| 久久人人97超碰国产公开结果| 亚洲人成网站色ww在线| 欧美一区二区三区四区在线观看地址 | 欧美刺激性大交免费视频| 国产精品免费观看在线| 亚洲人成欧美中文字幕| 欧美一区二区视频网站| 亚洲精品欧美日韩| 久久免费视频在线观看| 国产精品黄页免费高清在线观看| 1000部国产精品成人观看| 亚洲欧美日韩一区在线观看| 亚洲成人直播| 久久精品视频免费| 国产伦精品一区二区三| 亚洲视频一区在线| 欧美高清视频在线观看| 欧美诱惑福利视频| 国产精品久久| 一区二区三区国产盗摄| 亚洲福利在线看| 久久久综合视频| 国产主播一区二区三区| 亚洲欧美激情视频| 99国产精品久久久久老师| 欧美成人一区二区三区| 亚洲国产精品久久久久久女王| 久久久久久久久久看片| 亚洲免费视频观看| 国产精品国产三级国产普通话三级 | 亚洲专区一二三| 欧美日一区二区在线观看 | 欧美激情一区二区三区在线视频| 欧美一区深夜视频| 国产精品资源| 欧美亚洲视频| 亚洲制服丝袜在线| 国产乱码精品一区二区三区忘忧草| 国产精品99久久久久久久久久久久| 亚洲成色999久久网站| 另类亚洲自拍| 91久久极品少妇xxxxⅹ软件| 欧美~级网站不卡| 久久夜色精品| 亚洲国产精品国自产拍av秋霞 | 欧美欧美天天天天操| 91久久久一线二线三线品牌| 欧美国产日韩精品免费观看| 免费成人高清| 日韩亚洲视频| 日韩午夜精品视频| 国产精品国产三级国产专播精品人| 亚洲专区一区二区三区| 亚洲视频综合在线| 国产欧美一区二区三区另类精品| 久久成人精品视频| 久久精品亚洲乱码伦伦中文 | 日韩一级精品| aⅴ色国产欧美| 国产精品久久久久一区二区三区| 欧美亚洲网站| 久久福利精品| 亚洲人成人一区二区三区| 91久久夜色精品国产九色| 欧美午夜不卡在线观看免费 | 一区二区三区产品免费精品久久75| 欧美吻胸吃奶大尺度电影| 欧美一区二区三区在线视频| 久久久精品999| 日韩一级不卡| 午夜精品999| 亚洲国产婷婷综合在线精品 | 午夜精品久久久久久久白皮肤| 韩国女主播一区| 亚洲日本激情| 国产乱码精品一区二区三区五月婷| 久久青草福利网站| 欧美日本簧片| 久久久精品999| 欧美精品一区在线播放| 欧美中文在线免费| 欧美成人中文字幕| 性8sex亚洲区入口| 欧美大片第1页| 欧美在线高清|