關系模式的設計問題
關系數據庫的設計理論主要包括三個方面的內容
數據依賴
范式
模式設計方法
其中數據依賴起核心作用
例:R(TNAME
ADDRESS
C#
CNAME)
限定事實
一個教師只有一個地址
一個教師可教若干門課
每門課程只有一個教師任教
所以R的鍵是(TNAME
C#)
實際使用中存在的問題
數據重復
更新異常
插入異常
刪除異常
采用對屬性間的函數依賴來解決
使用分解方法
將R分解成兩個模式
R
(TNAME
ADDRESS)
R
(TNAME
C#
CNAME)
分解後
四個問題解決基本解決
即每個教師的地址只存放一次
即使一個教師沒有教學任務
他的地址也可存放在R
中
但是這種分解並非最佳
例如要檢索教某門課的教師的地址
就需要進行聯接操作
但是代價太大
函數依賴
函數依賴的定義
設有關系模式R(A
A
…
An)或簡記為R(U)
X
Y是U的子集
r是R的任一具體關系
如果對r的任意兩個元組t
t
由t
[X]=t
[X]導致t
[Y]=t
[Y]
則稱X函數決定Y
或Y函數依賴於X
記為X→Y
X→Y為模式R的一個函數依賴
這裡的t
[X]表示元組t
在屬性集X上的值
t
[X]表示元組t
在屬性集X上的值
函數依賴是對關系R的一切可能的當前值r定義的
不是針對某個特定關系
函數依賴不是指關系模式R的某個或某些關系滿足的約束條件
而是指R的一切關系均要滿足的約束條件
不能只看到關系模式R的一個特定關系
就推斷那些函數依賴對於R成立
在關系模式R中
要判斷FD是否成立
惟一的辦法是仔細考察屬性的含義
即函數依賴實際是對現實世界的斷言
例
學習關系R(S#
SN
C#
G
CN
TN
TA)
在R中的關系r中
存在函數依賴
S#→SN(每個學號只能有一個學生姓名)
C# →CN(每個課程只能對應一門課程名)
TN →TA(每個教師只能有一個年齡)
(S#
C#) →G(每個學生學習一門課只能有一個成績)
函數依賴的邏輯蘊涵
這裡主要研究對於給定的一組函數依賴
如何判斷另外一些函數依賴是否存在
定義
設F是關系模式R的一個函數依賴集
X
Y是R的屬性子集
如果從F中的函數依賴能夠推出X→Y
則稱F邏輯蘊涵X→Y
記為F︱=X→Y
被F邏輯蘊涵的函數依賴的全體構成的集合
稱為F的閉包
記為F+
;鍵
鍵是惟一標識實體的屬性集
這裡把鍵和函數依賴結合起來
做一個准確的定義
設有關系模式R(A
…
An)
F是R上的函數依賴集
X是{A
…
An}的一個子集
如果
X→A
A
…An∈ F+
且
不存在X的真子集Y
使得Y→A
A
…An成立
則稱X是R的一個候選鍵
在定義中A
A
…An是A
∪A
∪…∪An的簡寫
表示X能惟一決定一個元組
表示X能滿足
而又無多余的屬性集
例
設關系模式R(XYZ)
已知FD是X→Y和Y→Z
那麼可以推出X→XYZ也在F+中
但X的真子集(此處是空集)不可能函數決定XYZ
因此
X是模式R的鍵
例
R(S#
SNAME
SEX
AGE)
在該模式中
S#→ (S#
SNAME
SEX
AGE)
S#不存在任何真子集
所以S#是鍵
(S#
SNAME)也可以決定R中的全部屬性
但它不是鍵
因為其中含有真子集S#
可以決定R的所有屬性
函數依賴的推理規則
armSTRONG推理規則
設有關系模式R(A
A
…
An)和屬性集U= A
A
…An
X
Y
Z
W都是U的子集
F是R上只涉及到U中屬性的函數依賴集
推理規則如下
自反律
如果YÍXÍU
則X→Y在R上成立
增廣律
如果X→Y為F所蘊涵
ZÍU
則XZ→YZ在R上成立
(XZ表示X∪Z)
傳遞律
如果X→Y和Y→Z在R上成立
則X→Z在R上也成立
合並律
如果X→Y和X→Z成立
那麼X→YZ成立
偽傳遞律
如果X→Y和WY→Z成立
那麼WX→Z成立
分解律
如果X→Y和ZÍY成立
那麼X→Z成立
From:http://tw.wingwit.com/Article/os/xtgl/201311/8598.html