2

ご縁があります

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, EventName} であるため、TeamName がキーの一部でさえない場合、どのようにチーム関係を BCNF に含めることができますか?

4

1 に答える 1

3

質問に書き留めた FD のセットは、単一の関係スキーマに適用されます。特定のリレーション スキーマに適用される FD のセットによって、そのリレーション スキーマに対するキーが決定されます

たとえば、5 つの FD のセットは、最初に使用した 7 列の関係スキーマに対応しています。そして、その FD のセットにより、7 列の関係スキーマのキーが実際に {PID EventName} であることを判断できます。

しかし、その 7 列のスキーマを部分に分割すると、どの FD が引き続き適用可能で、どの部分に適用できるかという結果が生じます。

例えば。あなたが選び出したとします

 Team(_TeamName_, TeamCoach)

そして去る

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

個々の FD ごとに、個々の FD が適用される 2 つの新しい関係スキーマのどちらに適用するかを決定する必要があります。

手元の例では:

 Team(_TeamName_, TeamCoach)
 TeamName --> TeamCoach

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

これで、2 つの関係スキーマだけでなく、それぞれに適用される FD の 2 つの異なるセットもできました。teamname->teamcoach FD は、(改訂された) 競技者関係スキーマには適用されなくなり、チーム スキーマのみに適用されるようになりました。これにより、TeamName がTeam schemaのキーになると結論付けることができます。

ところで、最初に使用したすべての FD を常に保持できるとは限りません。属性の全体的なセット (左側と右側) が、スキーマの分割後に、これらすべての属性を含む関係スキーマが存在しないような FD であり、そのような FD は単純に表現できなくなります。結果の設計では、FD (/key) の形式をとらないデータベース制約として復元する必要があります。それが「依存関係の保存」の問題です。

于 2012-10-15T20:16:01.777 に答える