あなたは、最も可能性の高い電話番号と節の間の関係を削除することができます。各電話機に1人のスタッフが応答するだけの場合は、すでに問題を解決しています。その電話に応答するスタッフメンバーに基づいて、どの電話機がセクション内にあるかを知っています。
複数のスタッフが電話に応答できる場合は、その多対多の関係を表す連想テーブルが必要です。
各スタッフのプライマリ電話を追跡する必要がある場合は、特定の電話機が特定のユーザのプライマリであることを示すために、「IsPrimary」フラグを連想テーブルに追加できます。この場合、スタッフのメンバーが複数のプライマリ電話を持たないようにするには、少なくともスタッフの参照のために連想テーブルに一意の制約を設定することをお勧めします。
電話機を複数のスタッフメンバーのプライマリにすることができないように、一意制約を追加することもできます。 2つの電話エンティティ
を処理するために
更新あなたは2つの電話エンティティを持つことにした場合でも、あなたが最も可能性の高い電話番号が両方のエンティティ全体で一意であることを確認したいと思うでしょう。相互排他的なサブタイプを実装することで、これを行うことができます。それを行う方法の良い説明はここにあります:How to Implement Referential Integrity in Subtypes
一度あなたがサブタイプを持っていれば、元のモデルを使用することができます。 SectionPhoneはサブタイプの1つになり、現在あなたのPhoneエンティティにあるものになります。 StaffPhoneは、Staffテーブルによって参照される他のサブタイプになります。
なぜ電話機にsectionNumberFKがあるのですか? SectionエンティティにStaffのようにphoneNumberへの参照を持たせてください。 –
SectionとStaffの関係を削除し、各電話番号にセクションが割り当てられているため、電話番号属性を使用してセクション番号属性を見つけることはできますか? – Ableman
各セクションには複数の番号があり、3NFでなければならないため、ERDに複数値の属性を設定することはできません。 – Ableman