1

這只是我創建的一個例子。 認爲這是關係我:此功能依賴項是否正確?

0NF 汽車(CarID PK,(TireID,Tire_Colour,Tire_Punctured),安全) 凡TireID,Tire_Colour,Tire_Punctured是重複組的一部分。

如果所有輪胎都沒有被刺破,汽車將被視爲安全。

請問下列函數依賴是正確的:

CardId中,TireID,Tire_Punctured - > {安全}

如果我要繼續規範和我分解關係到單獨的表我將如何表現的依賴的安全在桌子上。

Sample Data 
------------ 
CarID | TireID | Tire_Colour | Tire_Punctured | Safe | 
    1   23    black    false   true 
    1   11    blue    false   true 
    1   29    black    false   true 
    1   1    black    false   true 

    2   4    red    false   false 
    2   34    purple    false   false 
    2   24    black    true    false 
    2   64    black    false   false 
+0

安全將是汽車的一個屬性,而不是輪胎:CarID - > Safe。我在BCNF解決方案的嘗試將是:Car {CarID *,Safe},Tyre {TireID *,CarID,Tire_Courour,Tire_Punctured}。 * =鍵。 – sqlvogel

+0

安全是一個計算的字段?或者我將它留給使用數據庫的用戶手動設置每行安全值。 – Jafnee

+0

如果它總是直接從輪胎的狀態中直接推導出來,則更好地進行計算。 – sqlvogel

回答

2

經典規範化理論可以適用於這種情況只有在你認爲的(TireID,Tire_Colour,Tire_Punctured)您的架構爲表示一個* *屬性/列的一部分,該屬性/列本身有* 關係(/表)值*。現代理論中的關係價值屬性,簡稱RVA。

在這種情況下,您有兩個FD的carID - > yourRVA和yourRVA - > safe。

前者表達了一個事實,即知道我們在談論的是哪輛車,這樣我們就可以知道涉及哪一組輪胎(以及它們的狀態),第二個表示輪胎狀態決定的事實本身)汽車是否安全。如果你將這個設計(*)「解開」爲更傳統的設計(通過用它包含的標量屬性替換RVA屬性),那麼yourRVA - > safe FD就不再是可表達的,因爲顯然你的RVA不復存在。在這樣的設計中指定這樣的規則超出了功能依賴的範圍,並且不能用功能依賴來完成。 (*),如果你要在SQL系統中實現這個功能,你將被迫這樣做,因爲SQL系統(甚至是SQL語言本身)通常不支持基表中的RVA。