數(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)來表示。當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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前面介紹了規(guī)范化的技術(shù)以及屬性間的函數(shù)依賴的概念,還講述了利用規(guī)范化技術(shù)支持數(shù)據(jù)庫設(shè)計的好處,以及如何將樣本表格中...
    板藍根plank閱讀 1,605評論 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,198評論 0 6
  • [TOC] ER模型 實體 屬性(實體的屬性) 域(屬性的取值范圍) 候選碼(唯一標識實體的屬性或最小屬性組)必須...
    梁思宇閱讀 3,600評論 1 6
  • 檸檬,一種很有用的植物。味酸,青澀的果皮下藏著嫩黃的果肉,等它成熟的時候,吃上一個身心舒暢。大多人不愛...
    羅藝璇閱讀 174評論 0 4
  • 我們是兩個世界的人。一個高貴,一個平凡。你就像是頭戴皇冠的公主,美麗的嬌顏吸引著無數(shù)的王子。你面無表情地俯...
    于心與人閱讀 186評論 0 0

友情鏈接更多精彩內(nèi)容