4

これらのタイプの質問に対する答えは、多くの場合「場合による」と認識していますが、それでも一般的なコンセンサスはどうなのか疑問に思っています。

次のような複数のエンティティを扱っています

  1. 会社
  2. チャリティー
  3. 審査員
  4. ストックテイカー

などなど...

いずれも、電子メール、電話、住所などの連絡先情報を持っています。

連絡先情報を保存するために考えていた 2 つの設計方法は、

方法 1) contact テーブルと company、charity、auditor、stocktaker の間にロール テーブルを作成します。

  • dbo.Company -> dbo.CompanyAddress <- dbo.Address
  • dbo.Company -> dbo.Companytelephone <- dbo.telephone
  • dbo.Company -> dbo.Companyaddress <- dbo.email

  • dbo.Auditor-> dbo.AuditorAddress <- dbo.Address

  • dbo.Auditor-> dbo.Auditortelephone <- dbo.telephone
  • dbo.Auditor-> dbo.Auditoraddress <- dbo.email

利点: データベースに必要な住所、電話番号、および電子メール テーブルが 1 つだけで、各エンティティ タイプのすべての電話番号、住所、および電子メールが 1 か所に保存される 欠点: 多数の関連テーブルが作成される

方法 2) 会社、慈善団体、監査人、株式取得者ごとに個別の連絡先テーブルを作成する

  • dbo.Company -> dbo.CompanyContactAddress
  • dbo.Company -> dbo.CompanyContacttelephone
  • dbo.Company -> dbo.CompanyContactaddress

  • dbo.Auditor -> dbo.AuditorContactAddress

  • dbo.Auditor -> dbo.AuditorContacttelephone
  • dbo.Auditor -> dbo.AuditorContactaddress

これの利点は、実装と保守が容易になることです。欠点は、連絡先の詳細がデータベース全体の複数の場所に保存されることです。

誰かが他のアイデアを持っているなら、それは大歓迎です。

どうもありがとう

4

3 に答える 3

1

「場合による」と言った方が正しいです。それは、正規化された設計を検討する OLTP に使用されるデータと、他のデータ コンポーネントとインラインの連絡先情報を使用してデータを非正規化するレポート システムによって異なります。

正規化されたデータベースでは、正規化のレベルも議論される可能性があります。最初のシナリオのように連絡先情報を細かく設定する必要があると言う人もいます。私は「道の真ん中」に行きたいのですが、住所、電話番号、電子メールなど、すべての連絡先情報を 1 つのテーブルにまとめます。

Contact
ID, Address, Address2, City, State, Zip, Phone, Email

次に、別のテーブルとの関係を作成します

CompanyContact
ID, CompanyID, ContactID

ContactIDこれも、Company テーブルに a を追加するだけで、別の関係を避けて結合することで、Company テーブルに統合できます。

でテーブルを実装することもできますContactTypes

ContactType 
ID, ContactType
1, Company
2, Charity
3, Auditor
....

次に、CompanyContactテーブルでそれを指定して、関係の必要性を取り除くことができます。タイプごとに 1 つの連絡先というシナリオには適合しますが、拡張の余地はありません。

于 2010-09-03T13:26:23.133 に答える
0

私はあなたの方法 2 の方が気に入っていますが、それでも作業が多すぎるようです。PhoneNumber、Address などのすべての住所、電話番号などを格納するテーブルを用意して、それを Company、Auditor などから参照しないのはなぜですか? それはおそらく私がそれをした方法です。

于 2010-09-03T13:23:09.847 に答える
0

すべてに対して単一のテーブルを使用し、以下のようなデータ型を使用できます。 代替テキスト

于 2010-09-03T13:23:50.667 に答える