2009-07-14 4 views
0

私は自分のアドレス帳を保持するデータベースを作成しようとしていますが、私はわずかな問題に遭遇しました。 私のデータベースは、個人の連絡先と会社の連絡先を保持することになっています。それは、個人または会社のどちらにも登録することができます。知っているように、個人と企業の両方に住所があり、私は個人と住所だけでなく企業と住所との一対一の関係を欲しています。1対多テーブルを共有する方法

だから、個人が多くのアドレス や会社を持つことができますが、私はここに最善のアプローチが何であるかわからないスキーマを設計しようとすると問題がある多くのアドレス

を持っていることができます。私はアドレステーブルに2つの外部キーを置くべきでしょうか?individual_Idとcompany_Idのどちらか1つですか、個人ごとにリンクテーブルを作成して、企業との関係に対処する必要があります。

外部キーは簡単に聞こえるが、正しいアプローチであるかどうかわからない。リンクは適切なアプローチのように思えるが、多対多の関係によく使用されるので、これが過度であるかどうかわからない。

思考?

答えて

4

これにはさまざまなアプローチがあります。私たちが取ったアプローチは、連絡先テーブルに相当する「名前」テーブルを持つことでした。アドレステーブル、および電話番号テーブルを含む。

アドレスと電話番号の各テーブルには、名前テーブルの外部キーがあります。名前テーブルには、その名前が個人、会社、個人所有者などの名前であるかどうかを知るための「タイプ」フィールドがあります。

電話番号の表にもタイプフィールドがあります。電話番号がWork、Home、Cellなどであるかどうかを知ることができます。また、名前テーブルの電話番号のコピーをプライマリ電話番号として保存することもできました。

+1

+1の "type"フィールド。まさに私が書こうとしていたものです。 – bernie

関連する問題