2009-07-27 3 views
0

のようなものであるべきアドレスが「format」異なるエンティティに「アドレス」を格納するための最良のスキーマは何でしょうか?

など、私たちは建物のためにaddreesを格納する必要がシステムを作っていると仮定し 者、車:

 
State (From a State list) 
County (From a County List) 
Street (free text, like '5th Avenue') 
Number (free text, like 'Chrysler Building, Floor 10, Office No. 10') 

(はいI私はPerson_Addressを持っているべき

  • :その情報を格納するための最良の方法だろう何

    )米国に住んでいません、Car_Address、...

  • またはアドレス情報は各エンティティの列に入れる必要があります
  • アドレステーブルを1つだけ作成して、各行を別のエンティティにリンクできますか?

また、このタイプのシナリオを処理する別の「より良い」方法がありますか?
どうすればいいですか?

答えて

0

私はアドレスがアドレステーブルに格納されたシナリオを見てきましたし、その後、多対多のリンクがあるドロップダウンリスト

1

からのルックアップですAddressTypeにフィールドを持っているでしょうねPeopleからのアドレスへのリンクを格納するテーブル - 外部キーを強制できるように、それぞれ別のテーブルがあります。リンクテーブルには、プライマリ、出荷先などの関係に関する情報が格納されることがあります。

私は、アドレスが顧客の行に格納されている場所も見てきました。これによりbill-toやship-toなどのアドレスの配列が効果的になり、その通りです。両方を扱ったので、自分のエンティティでそれらを持つ方が好きだと思います。古い非アクティブなアドレスの履歴を簡単に保持することができます。

さまざまな電話番号を格納する必要がある電話番号には、この同じ手法を使用しています。

1

David C. Hayの「データモデルのパターン - 思考の慣行」を読むことを強くお勧めします。この問題は、著者によって深く議論されています。
あなたのデザインには、幅広い2つのエンティティがあります。地理的位置の

  1. 住所
  2. /は、一般的には

アドレスに属し常駐者/オブジェクト、人や物とのアドレスを結合するための良い方法ではありません

Person(personID, name, gender, addressline1, addressline2) 

以下のように同じテーブル '詳細は、あなたのデザイン

に以下のエンティティを持つことができます
Address(number, street, countyID,stateID) 
Party(PartyID, Type) 
Person(PersonID, name, dob, gender,...,primaryPartyID) 
Car(carID, make, model, ...,primaryPartyID) 

パーティーは、人/車と住所のリンクです。 personとcarテーブルのprimaryPartyIDはパーティテーブルの外部キーです。この方法で、あなたは車と人の間で共有し、対処することができます。それぞれの人に複数のアドレスを格納する場合は、人とパーティの間に別のm:nテーブルを追加することができます。パーティーのタイプ属性は、 'Person'、 'Vehicle'などの値を取ることができます。

関連する問題