私のアプリケーションのデータベースを設計したいと思います。エンティティ間の関係を定義する方法について質問があります。データベース設計:データベース内のエンティティ間の関係を定義する
私はIDが化合物である2つの関連するエンティティを持っています。例えば:
- 特性によって識別されるアドレスエンティティ[街路番号、家の番号、都市、国]、および電話番号(XX-YYYYYY)
- 特性によって識別されたエンティティ[地域番号、番号]。 。
関係は、各アドレスについて、いくつかの電話番号がある」である私は、テーブルを定義するには2つの方法があります:すべてのIDフィールドで
- アドレスを接続
- テーブルを→ [街路番号、住宅番号、市町村、国名、地域番号、番号]
- 電話番号→ [地域番号、番号、...]
- 住所→ [ID、街路番号、家屋番号、市、国、...、]
- のPhoneNumber → [ID、領域番号、番号、...、あるAddressId]
第1の解決策では、プライマリキーはエンティティを識別するすべてのフィールドになり、第2のソートではプライマリキーはIDフィールドのみになります。
私の質問は - より良い方法は何ですか?
私の最初のアプローチでは、キーはテーブルのすべてのフィールドではなく、テーブルを他のテーブルに接続するキーだけです。 2番目のアプローチを使用すると、論理的に主キーを形成するすべてのフィールドに一意制約を追加する必要があります。一意性制約を追加すると、インデックスなしの一意性が遅くなるため、これらのフィールドにもインデックスを追加する必要があります(右?)。ところで、私のシナリオでは、IDは決して更新されないので、これらのフィールドをプライマリとして定義するのは正しかったようです。 – Andy
*あなたのフィールドのどれが*キーであるかはあまり明確ではありません。あなたの考え#1を理解していないので、キーボードなどのフィールドを作るために質問を編集する必要があります。 2番目の考えでは間違ったやり方をしています。AddressテーブルにPhoneNumberIDを定義することで、電話番号ごとに複数のアドレスに対してデータモデルを設定します。 – Tomalak