數(shù)據(jù)庫基礎(chǔ)Database4-數(shù)據(jù)庫設(shè)計

數(shù)據(jù)庫基礎(chǔ)Database4-數(shù)據(jù)庫設(shè)計

六 關(guān)系設(shè)計庫設(shè)計

一個關(guān)系模式: R(U, F)

其中:

  • 關(guān)系名R是符號化的元組定義
  • U為一組屬性
  • F為屬性組U上的一組數(shù)據(jù)依賴

函數(shù)依賴和碼

6.1.1 函數(shù)依賴

數(shù)據(jù)依賴是一個關(guān)系內(nèi)部屬性與屬性之間的一種約束關(guān)系。這種約束關(guān)系是通過屬性間值的相等與否體現(xiàn)出來的數(shù)據(jù)間相關(guān)聯(lián)系。數(shù)據(jù)依賴包括:函數(shù)依賴(Functional Dependency, FD)和多值依賴(Multi-Value Dependency, MVD)。

函數(shù)依賴非常普遍舶担,我們可以用y=f(x)來表示。當(dāng)x確定的時候柿赊,y也就確定趋急。那么我們稱y函數(shù)依賴于x蒋川,記作: x->y

比如: 對于關(guān)系r(id, name, dept_name, address)廉油。根據(jù)id可以確定唯一的一個人惠险。那么顯而易見: id->name, id->dept_name, id->address

定義1 設(shè)R(U)是屬性集U上的關(guān)系模式,X抒线,Y是U的子集班巩。若對于R(U)的任意一個可能的關(guān)系r,r中不可能存在兩個元組在X上的屬性值相等十兢,而在Y上的屬性值不等趣竣,則稱X函數(shù)確定Y或Y函數(shù)依賴于X,記作X -> Y (參照前面的y=f(x))旱物。

下面介紹一些術(shù)語和記號:

  • X->Y, 但Y?X遥缕,則稱X->Y是非平凡的函數(shù)依賴
  • X->Y, 但Y?X宵呛,則稱X->Y是平凡的函數(shù)依賴单匣。(對任何非空集都成立,因為X真包含Y)
  • 若X->Y宝穗,則X稱為這個函數(shù)依賴的決定屬性組户秤,也稱決定因素(determinant)。
  • 若X->Y, Y->X逮矛,則記作X<-->Y.
  • 若Y不依賴于X鸡号,則記作Y?X.

定義2 ?在R(U)中,如果X->Y须鼎,并且對與X的任何一個真子集X’鲸伴,都有X’?Y,則稱Y對X完全函數(shù)依賴晋控,記作X->FY. (每一個y=f(x)汞窗,這種映射是一一對應(yīng))

????若X->Y, 但Y不完全函數(shù)依賴于X,則稱Y對X部分依賴(partial functional dependency),記作:X->PY.

注意:完全依賴和不完全依賴兩個符號有問題赡译,F(xiàn)和P是在->正上面仲吏,請搜一下。

6.1.2 碼(后面我都稱作鍵)

定義4 設(shè)K為R(U,F)的屬性或?qū)傩越M合蝌焚,若K->FU裹唆,則K為R的候選鍵(Candidate Key). 如果U部分依賴于K,即K->PU只洒,則稱K為超鍵(Superkey)品腹。候選鍵是最小的超鍵,即K的任意一個真子集都不能成為一個候選鍵红碑。

若候選鍵多于一個舞吭,則選取其中一個為主鍵(Primary Key)。否則主鍵就是候選鍵析珊。

包含在任何一個候選鍵中的屬性成為主屬性(prime attribute)羡鸥;其他的稱為非主屬性(nonprime attribute)。最極端的情況是忠寻,整個屬性組都是主屬性惧浴,成為全鍵(all-key)。

后面奕剃,把主鍵或者候選鍵簡稱為鍵衷旅。

定義5 關(guān)系模式R中屬性或?qū)傩越MX并非R的鍵捐腿,但X是另一個關(guān)系模式的鍵,則稱X是R的外鍵(Foreign Key).

6.2 第一范式 (First Normal Form, 1NF)

關(guān)系數(shù)據(jù)庫中的設(shè)計是要滿足一定要求的柿顶,滿足不同程度要求的為不同范式茄袖。

一個低一級范式的關(guān)系模式通過模式分解(schema decomposition)可以轉(zhuǎn)換為若干個高一級范式的關(guān)系模式的集合,這種過程就叫規(guī)范化(Normalization)。

各范式之間:5NF?4NF?3NF?2NF?1NF

對于關(guān)系模式R,一個域是原子的鼓蜒,如果該域的元素被認為是不可分割的單元。我們稱一個關(guān)系模式R屬于第一范式: R∈1NF蝗羊。

組合單元由不可分割單元或組合單元構(gòu)成。比如street, city, provice 和 zipcode是不可分的仁锯,但是包含了這些屬性的Address是可分的耀找,是組合單元。

6.3 第二范式 (Second Normal Form业崖, 2NF)

若R∈1NF,且每一個非主屬性完全函數(shù)依賴于任何一個候選鍵涯呻,則稱R屬于第二范式:R∈2NF。

一個關(guān)系模式如果不屬于2NF腻要,就會出現(xiàn)如下問題:

  1. 插入異常
  2. 刪除異常
  3. 修改復(fù)雜

6.4 第三范式 (Third Normal Form, 3NF)

設(shè)關(guān)系模式R<U,F>∈1NF,若R中不存在這樣的鍵X复罐,屬性組Y及非主屬性Z(Z?Y)是的X->Y, Y->Z成立,Y?X,則稱R<U,F>∈3NF雄家。

6.5 BCNF(Boycee Codd Normal Form)

關(guān)系模式R<U,F>∈1NF效诅,若X->Y且Y?X時必含有鍵,則R<U,F>∈BCNF趟济。

也就是說關(guān)系模式R<U,F>中乱投,每一個決定因素都包含鍵,則R<U,F>∈BCNF顷编。

由BCNF的定義可以得到結(jié)論戚炫,一個滿足BCNF的關(guān)系模式有:

  • 所有非主屬性對每一個鍵都是完全函數(shù)依賴
  • 所有主屬性對每一個不包含它的鍵也是完全函數(shù)依賴
  • 沒有任何屬性完全函數(shù)依賴于非鍵的任何一組屬性

BCNF?3NF。

注意:對范式的講解媳纬,這里是摘抄自《數(shù)據(jù)庫系統(tǒng)概論》5th(王珊双肤,薩師煊)。我覺得《數(shù)據(jù)庫系統(tǒng)概念》6th, (Abraham Silberschatz ...)例子更多钮惠,更容易理解一點茅糜。

6.5 多值依賴(Multi-Value Dependency)

暫時省略

以后會修改關(guān)于范式的講解

七 E-R模型

7.1 實體-聯(lián)系(entity relationship, E-R)

實體-聯(lián)系數(shù)據(jù)模型的提出旨在方便數(shù)據(jù)庫的設(shè)計,它是通過允許定義代表數(shù)據(jù)庫全局邏輯結(jié)構(gòu)的企業(yè)模式實現(xiàn)的素挽。

E-R數(shù)據(jù)模型采用了三個基本概念:

  • 實體集
  • 聯(lián)系集
  • 屬性集

E-R模型的相關(guān)圖形表示是E-R圖蔑赘。

實體(entity)是現(xiàn)實世界中可區(qū)別所有其他對象的一個“事務(wù)”或“對象”。實體集(entity set)是相同類型即具有相同性質(zhì)(或?qū)傩裕┑囊粋€實體集合。

實體通過屬性(attibute)來表示缩赛。屬性是實體集中每個成員所擁有的描述性性質(zhì)耙箍。每個實體的每個屬性都有一個值。

屬性分為簡單(simple)屬性復(fù)合(composite)屬性酥馍。簡單屬性不可再劃分為更小的部分辩昆。復(fù)合屬性可以再劃分為更小的部分。

屬性也可以被分為單值屬性物喷、多值屬性

聯(lián)系(relationship)是指多個實體間的相互關(guān)聯(lián)遮斥。聯(lián)系集(relationship set)峦失。實體集間的關(guān)聯(lián)稱為參與(participate)

7.2 約束

7.2.1 映射基數(shù)(mapping cardinality)

映射基數(shù)或基數(shù)比率术吗,表示一個實體通過一個聯(lián)系能關(guān)聯(lián)的實體的個數(shù)尉辑。

對于實體集A和B之間的二元聯(lián)系集R來說,映射基數(shù)必然是以下情況之一:

  • 一對一(one-to-one)较屿。A中的一個實體至多與B中的一個實體相關(guān)聯(lián)隧魄,并且B中的一個實體也至多與A中的一個實體相關(guān)聯(lián)。
  • 一對多(one-to-many)隘蝎。A中一個實體可以與B中任意數(shù)目(零個或多個)實體相關(guān)聯(lián)购啄,而B中的一個實體至多與A中的一個實體相關(guān)聯(lián)。
  • 多對一(many-to-one)嘱么。A中一個實體至多與B中的一個實體相關(guān)聯(lián)狮含,而B中的一個實體可以與A中任意數(shù)目(零個或多個)實體相關(guān)聯(lián)。
  • 多對多(many-to-many)曼振。A中的一個實體可以與B中的任意數(shù)目實體相關(guān)聯(lián)几迄,B中的一個實體可以與A中的任意數(shù)目實體相關(guān)聯(lián)。

7.2.2 參與約束

如果實體集E中的每個實體都參與到聯(lián)系集R中的至少一個聯(lián)系中冰评,實體集E在聯(lián)系集R中的參與稱為全部的(total)映胁。如果E中只有部分實體參與到聯(lián)系集R中,則<稱實體集E在聯(lián)系集R中的參與是部分的(partial)甲雅。

7.3 實體聯(lián)系圖

舉個例子:

實體集:(主鍵用下劃線標出)

instructor(<u>ID</u>, name, salary)

student(<u>ID</u>, name, tot_cred)

屬性集:

advisor:關(guān)聯(lián)教師和學(xué)生

分別用一對一解孙、一對多、多對多來表示:

er_stud

《數(shù)據(jù)庫系統(tǒng)概念》中用的是箭頭抛人。有的用的是數(shù)字(比如維基百科)妆距。有不同的表示方法.

映射基數(shù):

![er_stud_cardinality]

advisor左邊0..*表示,每個instructor對應(yīng)0個或多個學(xué)生函匕。advisor右邊1..1表示每個學(xué)生對應(yīng)1個(最少1個娱据,最大1個)教師。 這個圖還表示了,student在advisor中的參與是完全的中剩。忌穿、

下面是用MySQL Workbench根據(jù)上面副圖(映射基數(shù))來畫的:

workbench_er_stud

黃色的是主鍵。student中instructor_ID是外鍵结啼,引用instructor的主鍵ID掠剑。

7.4 轉(zhuǎn)化為SQL語句:

下面是前一節(jié)MySQL Workbench導(dǎo)出的SQL:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`instructor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`instructor` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `salary` INT NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`student`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`student` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `tot_cred` INT NULL,
  `instructor_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  INDEX `fk_student_instructor_idx` (`instructor_ID` ASC),
  CONSTRAINT `fk_student_instructor`
    FOREIGN KEY (`instructor_ID`)
    REFERENCES `mydb`.`instructor` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

[er_stud_cardinality]:https://upload-images.jianshu.io/upload_images/11086962-2a904c3849dc7330.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市郊愧,隨后出現(xiàn)的幾起案子朴译,更是在濱河造成了極大的恐慌,老刑警劉巖属铁,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眠寿,死亡現(xiàn)場離奇詭異,居然都是意外死亡焦蘑,警方通過查閱死者的電腦和手機盯拱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來例嘱,“玉大人狡逢,你說我怎么就攤上這事∑绰眩” “怎么了奢浑?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腋腮。 經(jīng)常有香客問我殷费,道長,這世上最難降的妖魔是什么低葫? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任详羡,我火速辦了婚禮,結(jié)果婚禮上嘿悬,老公的妹妹穿的比我還像新娘实柠。我一直安慰自己,他們只是感情好善涨,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布窒盐。 她就那樣靜靜地躺著,像睡著了一般钢拧。 火紅的嫁衣襯著肌膚如雪蟹漓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天源内,我揣著相機與錄音葡粒,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛嗽交,可吹牛的內(nèi)容都是我干的卿嘲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼夫壁,長吁一口氣:“原來是場噩夢啊……” “哼拾枣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盒让,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梅肤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邑茄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姨蝴,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年撩扒,在試婚紗的時候發(fā)現(xiàn)自己被綠了似扔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吨些。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡搓谆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豪墅,到底是詐尸還是另有隱情泉手,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布偶器,位于F島的核電站斩萌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屏轰。R本人自食惡果不足惜颊郎,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霎苗。 院中可真熱鬧姆吭,春花似錦、人聲如沸唁盏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厘擂。三九已至昆淡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刽严,已是汗流浹背昂灵。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倔既。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓恕曲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渤涌。 傳聞我的和親對象是個殘疾皇子佩谣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前面介紹了規(guī)范化的技術(shù)以及屬性間的函數(shù)依賴的概念,還講述了利用規(guī)范化技術(shù)支持數(shù)據(jù)庫設(shè)計的好處实蓬,以及如何將樣本表格中...
    板藍根plank閱讀 1,427評論 0 1
  • 數(shù)據(jù)字典 數(shù)據(jù)庫系統(tǒng)中存放三層結(jié)構(gòu)定義的數(shù)據(jù)庫稱為數(shù)據(jù)字典(DD)茸俭,對數(shù)據(jù)庫的操作都要通過DD才能實現(xiàn)。DD系統(tǒng)中...
    panda_say閱讀 1,092評論 0 6
  • [TOC] ER模型 實體 屬性(實體的屬性) 域(屬性的取值范圍) 候選碼(唯一標識實體的屬性或最小屬性組)必須...
    梁思宇閱讀 3,523評論 1 6
  • 檸檬安皱,一種很有用的植物调鬓。味酸,青澀的果皮下藏著嫩黃的果肉酌伊,等它成熟的時候腾窝,吃上一個身心舒暢。大多人不愛...
    羅藝璇閱讀 147評論 0 4
  • 我們是兩個世界的人居砖。一個高貴虹脯,一個平凡。你就像是頭戴皇冠的公主奏候,美麗的嬌顏吸引著無數(shù)的王子循集。你面無表情地俯...
    于心與人閱讀 168評論 0 0