2011年1月12日 星期三

Database in Depth筆記-1 (Relation及Tuple定義)

Database in Depth: Relational Theory for Practitioners

這本書買了好幾年了,因為讀起來有點艱澀,一直沒有把它翻完(作者太龜毛了,一直在辨證Relational Model不能有NULL、SQL不是Relational Model之類對我來說沒有意義的論點),不過看在它是和EF Codd一起work on Relational Model的大師,還是應該把它翻過一遍,趁這次再翻它的機會,做一些筆記。

Tuple定義:

相對應於Table的Row。在原始的Relational Model中,是用Tuple這個概念來代表一組資料,而不是大家所熟知的Row。以下是它的定義:

假設T1,T2…,Tn(n>=0)是型別的名稱,而A1,A2…,An是代表n個不同的屬性名稱,若將每個屬性名稱Ai對應到相對的Ti型別,則如此組合成的每一個屬性名稱:型別 (Ai:Ti)就是一個屬性。若將每個屬性都賦予符合型別Ti的值Vi,則形成的屬性:值,就稱為一個Component。如此一來,n個屬性:值組成的n個Component的集合就稱為一個Tuple。而這n個Component中的屬性集合就形成讓Tuple的Heading,以集合{H}表示

Relation定義:

相當於RMDBS的Table。初學Relational Model的人可能會把關聯式資料庫的關聯想成是不同Table之間可以建立Join的關係。然而,在原始的Relational Model,Relation是較為抽象的定義。它是基於集合論而來的概念。假設Order Table有CustomerID及ProductID這兩個屬性,把CustomerID和ProductID這兩個屬性放到同一個實體來看,就是Relation的意義了。以下是CJ Date在此書中所下的定義

假設{H}是Tuple的Heading,而且t1,t2…,tm (m>=0)是帶Heading {H}的不同Tuple,則該Heading {H}與該不同Tuple的集合(t1,t2…,tm)的組合叫做Relation。此Relation就是帶有屬性A1,A2…An的關係,換句話說,該Relation的Body就是Tuple(t1,t2…,tm)的集合

1NF(一階正規化)

有了Relation及Tuple的觀念後,一階正規化就可以簡單用一句話來描述:每個Tuple的每一個屬性只能帶有單一值

沒有留言:

張貼留言