2012-10-15 80 views
2

我有一個關係BCNF中的這種關係?

Competitor(PID, EventName, Pname, TeamName, TeamCoach,EventDate, TeamRating). 

,我有我的FD

PID -> Pname 
PID --> TeamName 
TeamName --> TeamCoach 
EventName --> EventDate 
TeamName, EventName --> TeamRating 

將形成進入我的關係

Competitor(_PID_, Pname, TeamName*) 
Team(_TeamName_, TeamCoach) 
Event(_EventName_, EventDate) 
Rating(_TeamName_*, _EventName_*, TeamRating) 
Entry(_PID_*, _EventName_*) 

然而,由於我的候選鍵值{PID,事件名稱}如果TeamName甚至不是關鍵的一部分,團隊關係怎麼能在BCNF?

回答

3

在您的問題中寫下的一組FD適用於單個關係模式。適用於給定關係模式的FD集合確定該關鍵模式的密鑰將爲

例如,您的一組5個FD對應於您開始的7列關係模式。並且該組FD允許確定您的7列關係模式的關鍵字確實是{PID EventName}。

但是,如果您將這個7列架構分成幾部分,那麼這會影響哪些FD仍然適用,以及哪些部分可用。

例如。假設你挑出

Team(_TeamName_, TeamCoach) 

,並留下

Competitor(PID, EventName, Pname, TeamName, EventDate, TeamRating). 

爲每個單獨的文件描述符,你現在必須決定哪個單獨FD適用於這兩個新的關係模式中。

在這個例子中,在手:

Team(_TeamName_, TeamCoach) 
TeamName --> TeamCoach 

Competitor(PID, EventName, Pname, TeamName, EventDate, TeamRating) 
PID -> Pname 
PID --> TeamName 
EventName --> EventDate 
TeamName, EventName --> TeamRating 

你現在有沒有隻有兩個關係模式,也兩套不同文件描述符分別適用於他們。現在,teamname-> teamcoach FD不再適用於(修訂後的)競爭對手關係模式,而只適用於Team模式。這使您可以得出結論:TeamName將成爲團隊架構的關鍵

順便說一句,並不總是有可能保留全部您開始使用的FD。一個FD的整體屬性集合(左手邊和右手邊)使得在模式拆分之後,不再有任何包含所有這些屬性的關係模式,這樣的FD可以簡單地不再被表達,並且必須作爲一個數據庫約束在結果設計中恢復,該約束不採用FD(/鍵)的形式。這是「依賴保存」的問題。

+0

謝謝歐文。也得到了我的單親導師的澄清。他說了同樣的話。 – bigubosu