私はこれまでに書いたすべてのアプリケーションでこの問題を乗り越えてきました。最終的なコンセンサスの答えが欲しいです!
これは、連絡方法やその他のデータをこのパターンに沿ってデータベースに保存するための最も正規化された/効率的な/適切な方法ですか?
Contact { PK ContactId, ... }
ContactContactMethod {PK FK ContactId, PK FK ContactMethodId, Key, Comments }
AddressContactMethod {PK FK ContactMethodId, Line1, Line2, City, State, Zip }
EmailContactMethod {PK FK ContactMethodId, EmailAddress }
InstantMessengerContactMethod {PK FK ContactMethodId, IMClient, IMAddress }
PhoneContactMethod {PK FK ContactMethodId, ... }
WebsiteContactMethod {PK FK ContactMethodId, ... }
OtherContactMethod {PK FK ContactMethodId, ... }
代わりに、テーブルContactMethodData
上のXmlフィールドを検討する必要がありますか?ContactContactMethod
AddressContactMethod、EmailContactMethodなどがすべて主キーの同じ一意性を共有していることについて何かがおかしいと感じています。
連絡先データのキーと値のペアについても考えましたが、それはXmlフィールドよりもクエリを実行するのがさらに面倒です。
(設計ガイドライン:各連絡先には、各タイプの連絡方法が複数ある場合とまったくない場合があり、それぞれに「自宅、職場、赤い車など」などの一意でない「キー」とコメントがありますが、タイプ間で他の共有データ要素はありません)。