第二部分 - 關(guān)系模型與語言 - 1 - 基本術(shù)語

在目前所使用的數(shù)據(jù)處理軟件中包帚,關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relation Database Management System,RDBMS)占據(jù)了統(tǒng)治地位感混。它代表了第二代數(shù)據(jù)庫管理系統(tǒng),它是基于 E. F. Codd (1970)所提出的關(guān)系數(shù)據(jù)模型。在關(guān)系模型中蓄氧,所有數(shù)據(jù)邏輯上被組織成 關(guān)系(表)結(jié)構(gòu)。每個關(guān)系都有自己的名稱槐脏,并由數(shù)據(jù)的一些命名 屬性(表中的列)所組成喉童。每個 元組(表中的行)包含每個屬性的一個取值。關(guān)系模型的最大優(yōu)點在于其邏輯結(jié)構(gòu)簡單顿天。但這種簡單的結(jié)構(gòu)卻有著可靠地理論基礎(chǔ)堂氯,這正是第一代 DBMS 所欠缺的。

1.關(guān)系數(shù)據(jù)結(jié)構(gòu)

  • 關(guān)系(relation):關(guān)系是由行和列組成的表牌废。
    RDBMS 要求用戶感知到的數(shù)據(jù)庫就是表咽白。但需注意,這種感知只限于數(shù)據(jù)庫的邏輯結(jié)構(gòu)鸟缕,就是 ANSI-SPARC 結(jié)構(gòu)的外部層和概念層晶框。它并不適用于數(shù)據(jù)庫的物理結(jié)構(gòu),數(shù)據(jù)庫的物理結(jié)構(gòu)是通過多種存儲結(jié)構(gòu)實現(xiàn)的叁扫。

  • 屬性(property):屬性是關(guān)系中命名的列三妈。
    在關(guān)系模型中,用 關(guān)系 保存數(shù)據(jù)庫所描述對象的信息莫绣。關(guān)系用二維表表示畴蒲,表中的每行對應(yīng)一個單獨的記錄,表中的每一列則對應(yīng)一個 屬性 对室。無論屬性如何排列模燥,都是同一個關(guān)系咖祭,因此它所表達的意思也一樣。

  • 域(field):域是一個或多個屬性的取值集合蔫骂。
    域在關(guān)系模型中起著至關(guān)重要的作用么翰。必須給關(guān)系中的每一個屬性定義一個域。不同屬性可以互不相同辽旋,也可以讓兩個或兩個以上的屬性共用同一個域浩嫌。

  • 元組(tuple):關(guān)系中的每一行稱為元組。
    關(guān)系的元素就是表中的行或者說是 元組补胚。無論元組如何排列码耐,都是同一個關(guān)系,因此所表達的意思也一樣溶其。關(guān)系的結(jié)構(gòu)骚腥、域說明以及所有取值約束,統(tǒng)稱為關(guān)系的 內(nèi)涵(intension)瓶逃,它通常是固定的束铭,除非關(guān)系的意義發(fā)生改變而需要加入另外的屬性。元組集稱為關(guān)系的 外延(extension)或 狀態(tài)(state)厢绝,它經(jīng)常發(fā)生改變契沫。

  • 維數(shù):關(guān)系的維數(shù)是指關(guān)系所包含屬性的個數(shù)。
    只有一個屬性的關(guān)系的維數(shù)為1昔汉,稱為 一元 關(guān)系或是一元組埠褪。有兩個屬性的關(guān)系稱為 二元 關(guān)系,有三個屬性的關(guān)系稱為 三元 關(guān)系挤庇,這之后的一般統(tǒng)稱為 n元 關(guān)系钞速。關(guān)系的維數(shù)是關(guān)系 內(nèi)涵 的性質(zhì)之一。

  • 基數(shù):關(guān)系的基數(shù)指的是它所包含的元組的個數(shù)嫡秕。
    反過來說渴语,元組的個數(shù)稱為關(guān)系的基數(shù),在添加或刪除元組時昆咽,基數(shù)就會發(fā)生改變驾凶。基數(shù)是關(guān)系 外延 的一個性質(zhì)掷酗,它由給定時刻特定的關(guān)系實例所決定调违。

  • 關(guān)系數(shù)據(jù)庫(relational database):關(guān)系數(shù)據(jù)庫是具有不同關(guān)系名的規(guī)范化關(guān)系的集合。
    關(guān)系數(shù)據(jù)庫包含一組有合適結(jié)構(gòu)的關(guān)系泻轰。這種合適性稱為 規(guī)范化技肩。

可選術(shù)語

可選關(guān)系模型術(shù)語

2. 數(shù)學中的關(guān)系

假設(shè)有兩個集合 D1 和 D2,其中
![](http://latex.codecogs.com/gif.latex?D_1 = {1, 3, 5}, D_2 = {2, 4})
這兩個集合的笛卡爾積是一個有序?qū)Φ募细∩總€有序?qū)χ械牡谝粋€元素都是D1中的成員虚婿,第二個元素是D2中的成員旋奢,D1 X D2 包含了所有這樣的有序?qū)ΑQ一種表達方式就是然痊,找出所有第一個元素來自 D1至朗、第二個元素來自 D2 的元素組合。在這個例子中可以得出:
![](http://latex.codecogs.com/gif.latex?D_1 \times D_2 = {(2, 1), (2, 3), (2, 5), (4, 1), (4, 3), (4, 5)})
這個笛卡爾乘積的任何子集都是一個關(guān)系剧浸。例如锹引,可以找到如下的一個關(guān)系 R:
![](http://latex.codecogs.com/gif.latex?R = {(2, 1), (4, 1)})
可以通過一些選擇條件來說明關(guān)系中將會有哪些有序?qū)Α@缢粝悖绻闯觯沂撬械诙€元素為1的有序?qū)Φ募显列湍軌驅(qū)?R 表示成:
![](http://latex.codecogs.com/gif.latex?R = {x, y | x \in D_1, y \in D_2, y=1})
使用同樣的集合D1、D2袋马,還可以形成另一種關(guān)系S,它包含所有這樣的有序?qū)沼Γ渲械谝粋€元素是第二個元素的兩倍虑凛。因此,可以將 S 表示如下:
![](http://latex.codecogs.com/gif.latex?S = {x, y | x \in D_1, y \in D_2, x=2y})
或者软啼,用這個實例桑谍,
![](http://latex.codecogs.com/gif.latex?S = {(2, 1)})
因為在這個笛卡爾積中只有一個有序?qū)M足此條件』雠玻可以簡單地將關(guān)系的概念擴展到三個集合上锣披。假設(shè)有三個集合D1,D2贿条,D3雹仿。這三個集合的笛卡爾乘積將是所有這樣的有序三元組的集合,有序三元組從 D1 中取出第一個元素整以,從 D2 中取出第二個元素胧辽,從 D3 中取出第三個元素。這個笛卡爾乘積中的任何子集也是一個關(guān)系公黑。例如邑商,假設(shè)有:
![](http://latex.codecogs.com/gif.latex?D_1 = {1,3}, D_2 = {2,4}, D_3 = {5,6})
![](http://latex.codecogs.com/gif.latex?D_1 \times D_2 \times D_3 = {(1, 2, 5), (1, 2, 6), (1, 4, 5), (1, 4, 6), (3, 2, 5), (3, 2, 6), (3, 4, 5), (3, 4, 6)})
這些有序三元組的任何子集都是一個關(guān)系》惭粒可以繼續(xù)將三集合擴展人断,從而定義 n 個域上的一般關(guān)系。設(shè)D1朝蜘,D2.....Dn 為 n 個集合恶迈。它們的笛卡爾乘積定義如下:
![](http://latex.codecogs.com/gif.latex?D_1 \times D_2 \times \cdot \cdot \cdot \times D_n = {(d_1, d_2, \cdot \cdot \cdot ,d_n)|d_1 \in D_1, d_2 \in D_2, \cdot \cdot \cdot ,d_n \in D_n})
通常被表示成:
![](http://latex.codecogs.com/gif.latex?\prod_{i=1}^{n} D_1)
這個笛卡爾積中任何 n 元組的子集都是這 n 個集合上的一個關(guān)系。注意谱醇,為了定義這些關(guān)系蝉绷,必須對取值集合(即)進行說明鸭廷。

3. 數(shù)據(jù)庫中的關(guān)系

將上面所介紹的概念應(yīng)用到數(shù)據(jù)庫當中,就可以定義關(guān)系模式熔吗。

  • 關(guān)系模式:用一組屬性和域名對定義的具名的關(guān)系辆床。
  • 關(guān)系數(shù)據(jù)庫模式:關(guān)系模式的集合,集合中的每個關(guān)系都應(yīng)有不同的名字桅狠。

4. 關(guān)系的性質(zhì)

一個關(guān)系通常有如下性質(zhì):

  • 有一個關(guān)系名讼载,同一關(guān)系模式中各關(guān)系不能重名。
  • 關(guān)系中的每一個單元格都確切包含一個原子(單個)值中跌。
  • 每個屬性都有一個不同的名字咨堤。
  • 同一屬性中的各個值都取自相同的域。
  • 各元組互不相同漩符,不存在重復(fù)元組一喘。
  • 屬性的順序并不重要。
  • 理論上講嗜暴,元組的順序也不重要(但實際上凸克,這個順序?qū)⒂绊憣υM的訪問效率)。

現(xiàn)在說明這些限制的含義闷沥,關(guān)系不能包含重復(fù)組萎战。滿足這一性質(zhì)的關(guān)系稱為 規(guī)范化 關(guān)系或 第一范式 關(guān)系。
關(guān)系的大部分特有性質(zhì)都源于數(shù)學中關(guān)系的性質(zhì):

  • 當用簡單的舆逃、單值元素(如整數(shù))的集合導(dǎo)出笛卡爾積時蚂维,每個元組中的所有元素都是單值的。類似的路狮,關(guān)系的每個單元格中也只包含一個單值虫啥。但數(shù)學意義上的關(guān)系無需規(guī)范化。Codd 強調(diào)不允許重復(fù)組的出現(xiàn)是為了簡化關(guān)系數(shù)據(jù)模型奄妨。
  • 在數(shù)學關(guān)系中孝鹊,某一位置的可能取值由定義該位置的集合或域來決定。對應(yīng)的展蒂,在表中每一列的取值必須源自相同的屬性域又活。
  • 集合中沒有重復(fù)元素。同樣锰悼,關(guān)系中沒有重復(fù)的元組柳骄。
  • 因為關(guān)系是用集合定義的,集合中元素的順序無關(guān)緊要箕般,因此耐薯,關(guān)系中元組的順序也就沒有實質(zhì)意義了。

但在數(shù)學關(guān)系中,元組中各個元素的順序是很重要的曲初。例如体谒,有序?qū)Γ?,2)與有序?qū)Γ?臼婆,1)就大不相同抒痒。而對于關(guān)系模型中的關(guān)系則不一樣,它明確要求屬性的順序不具備實際意義颁褂。原因就在于每一列的標題一說明了該列的值對應(yīng)哪個屬性故响。這就意味著,關(guān)系內(nèi)涵中列標題的順序無關(guān)緊要颁独,不過一旦選定了關(guān)系的結(jié)構(gòu)彩届,其外延中元組的元素順序就必須與屬性名的順序相一致。

5. 關(guān)系關(guān)鍵字

如前所述誓酒,關(guān)系中不會出現(xiàn)重復(fù)的元組樟蠕。因此,可以指定一個或多個屬性(稱為關(guān)系關(guān)鍵字)靠柑,唯一的標識關(guān)系中的每個元組寨辩。如下所示關(guān)系Branch和關(guān)系Staff的實例:

關(guān)系Branch和關(guān)系Staff實例
  • 超關(guān)鍵字(superkey):一個屬性或?qū)傩约希芪ㄒ坏貥俗R出關(guān)系中的每個元組病往。
    超關(guān)鍵字能唯一標識關(guān)系中的每個元組。但超關(guān)鍵字中有可能包含多余屬性骄瓣,但在一般情況下停巷,人們僅對能唯一標識元組的最小屬性集合感興趣。

  • 候選關(guān)鍵字(candidate key):本身是超關(guān)鍵字但其任何子集都不在是超關(guān)鍵字榕栏。
    關(guān)系 R 中的候選關(guān)鍵字 K 有兩條性質(zhì):

    • 唯一性:R 中的每個元組在 K 上的值都可以唯一的標識該元組畔勤。
    • 不可約性:K 中的任一真子集都不具備唯一性。

    一個關(guān)系中可能會有多個候選關(guān)鍵字扒磁。當一個關(guān)鍵字中包含多個屬性時庆揪,就稱它為 合成關(guān)鍵字》镣校考慮上圖所示的關(guān)系 Branch缸榛。給定一個 city 屬性的值,可以確定出幾個分公司(例如兰伤,在 London 有兩個分公司)内颗。這個屬性不能作為候選關(guān)鍵字。另一方面敦腔,因為 DreamHome 給每個分公司分配了唯一的分公司編號均澳,那么給定的一個分公司編號值 branchNo,則可以確定至多一個元組,因此 branchNo 就是一個候選關(guān)鍵字找前。同樣糟袁,postcode 也是這個關(guān)系中的候選關(guān)鍵字。

    現(xiàn)在假設(shè)有關(guān)系 Viewing躺盛,它包含客戶查看房產(chǎn)的相關(guān)信息项戴。這個關(guān)系中包括客戶編號(clientNo)、房產(chǎn)編號(propertyNo)颗品、查看日期(viewDate)肯尺,還有一個可選擇填寫的屬性——對房產(chǎn)的評論(comment)。給定一個客戶編號 clientNo躯枢,他可能查看過幾處不同的房產(chǎn)则吟,所以會有幾條記錄與之對應(yīng)。同樣锄蹂,給定一個房產(chǎn)編號 propertyNo氓仲,也可能會有多個客戶看過該房產(chǎn)。因此得糜,clientNo 和 propertyNo 都不能單獨地作為候選關(guān)鍵字敬扛。但如果把 clientNo 和 propertyNo 結(jié)合起來,則至多可標識一個元組朝抖,因此啥箭,對于 Viewing 關(guān)系而言,clientNo 和 propertyNo 一起形成了一個(組合)候選關(guān)鍵字治宣。如果允許客戶對同一房產(chǎn)查看多次急侥,則可以在組合關(guān)鍵字中添加 viewDate 屬性。

    注意侮邀,一個關(guān)系實例無法證明某個屬性或某幾個屬性的組合能否作為候選關(guān)鍵字坏怪。事實上,在某個特定時刻绊茧,沒有重復(fù)出現(xiàn)的值并不能保證永遠不重復(fù)铝宵。但在一個關(guān)系實例中就出現(xiàn)重復(fù)值的屬性或?qū)傩越M合肯定不能作為候選關(guān)鍵字。確定候選關(guān)鍵字時华畏,必須明確這些屬性在 “現(xiàn)實世界” 中的含義鹏秋,從而確保不會出現(xiàn)重復(fù)。只有通過這種語義信息才能確定一種屬性組合是否可以作為候選關(guān)鍵字亡笑。例如拼岳,在 Staff 關(guān)系中,可能認為lName(姓氏)適合作為關(guān)系 Staff 的候選關(guān)鍵字况芒。顯然惜纸,在關(guān)系 Staff 的這個實例中雖然只有一個姓 White 的員工叶撒,但完全可能會有一個同樣姓 White 的新員工加入公司,那時 lName 作為候選關(guān)鍵字就無效了耐版。

  • 主關(guān)鍵字(Primary key):被選用于唯一標識關(guān)系中各元組的候選關(guān)鍵字祠够。
    因為關(guān)系中沒有重復(fù)元組,所以總可以唯一的標識出每一行粪牲。這就意味著古瓤,每個關(guān)系總有一個主關(guān)鍵字。最糟糕的情況是屬性全集作為主關(guān)鍵字腺阳,但一般都存在某個稍小的子集足以標識每個元組落君。沒有被選為主關(guān)鍵字的候選關(guān)鍵字稱為 可替換關(guān)鍵字(alternate key)。如果在關(guān)系 Branch 中選擇 branchNo作為主關(guān)鍵字亭引,postcode 就成了可替換關(guān)鍵字绎速。對 Viewing 關(guān)系而言,它只有一個候選關(guān)鍵字焙蚓,即 clientNo 與 propertyNo 的組合纹冤,因此這兩屬性的組合就自動地形成了主關(guān)鍵字。

  • 外部關(guān)鍵字(Foreign key):當一個關(guān)系中的某個屬性或?qū)傩约吓c另一個關(guān)系(也可能就是自己)的候選關(guān)鍵字匹配時购公,就稱這個屬性或?qū)傩约蠟橥獠筷P(guān)鍵字萌京。
    當一個屬性出現(xiàn)在兩個關(guān)系中時,它往往表示這兩個關(guān)系中對應(yīng)元組之間的某種聯(lián)系宏浩。例如知残,屬性 branchNo 同時出現(xiàn)在關(guān)系 Branch 和 Staff 中,目的就是將每個分公司與在此分公司工作的員工聯(lián)系起來比庄。在關(guān)系 Staff 中求妹,branchNo 就是一個外部關(guān)鍵字∮≌幔或者說關(guān)系 Staff 中的屬性 branchNo 指向 主關(guān)系 Branch 的 主關(guān)鍵字 ——屬性 branchNo扒最。這些公有屬性在執(zhí)行數(shù)據(jù)操作時將扮演重要角色丑勤。

6. 關(guān)系數(shù)據(jù)庫模式的表示

關(guān)系數(shù)據(jù)庫是由一些規(guī)范化關(guān)系所組成的华嘹。對應(yīng) DreamHome 案例的部分關(guān)系模式如下:

relation property
Branch (<u>branchNo</u>, street, city, postcode)
Staff (<u>saffNo</u>,fName, lName, position, sex, DOB, salary, branchNo)
PropertyForRent (<u>propertyNo</u>, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)
Client (<u>clientNo</u>, fName, lName, telNo, prefType, maxRent, eMail)
PrivateOwner (<u>ownerNo</u>, fName, lName, address, telNo, eMail, password)
Viewing (<u>clientNo</u>, <u>propertyNo</u>, viewDate, comment)
Registration (<u>clientNo</u>, <u>branchNo</u>, staffNo, dateJoined)

關(guān)系模式的習慣表示法是,給出關(guān)系名法竞,并在后面的圓括號中列出關(guān)系的屬性名耙厚。一般用下劃線標出主關(guān)鍵字。概念模型(或者說概念模式)是指數(shù)據(jù)庫中所有這種模式的集合岔霸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薛躬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呆细,更是在濱河造成了極大的恐慌型宝,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趴酣,居然都是意外死亡梨树,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門岖寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抡四,“玉大人,你說我怎么就攤上這事仗谆≈秆玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵隶垮,是天一觀的道長藻雪。 經(jīng)常有香客問我,道長岁疼,這世上最難降的妖魔是什么阔涉? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮捷绒,結(jié)果婚禮上瑰排,老公的妹妹穿的比我還像新娘。我一直安慰自己暖侨,他們只是感情好椭住,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著字逗,像睡著了一般京郑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫掉,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天些举,我揣著相機與錄音,去河邊找鬼俭厚。 笑死户魏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挪挤。 我是一名探鬼主播叼丑,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扛门!你這毒婦竟也來了鸠信?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤论寨,失蹤者是張志新(化名)和其女友劉穎星立,沒想到半個月后爽茴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绰垂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年闹啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辕坝。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡窍奋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酱畅,到底是詐尸還是另有隱情琳袄,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布纺酸,位于F島的核電站窖逗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏餐蔬。R本人自食惡果不足惜碎紊,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望樊诺。 院中可真熱鬧仗考,春花似錦、人聲如沸词爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿膨。三九已至锅锨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恋沃,已是汗流浹背必搞。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊咏,地道東北人恕洲。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像匆笤,于是被迫代替她去往敵國和親研侣。 傳聞我的和親對象是個殘疾皇子谱邪,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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