2017-07-22 2 views
0

プロジェクトのデータベーススキーマを構築していますが、この問題で少し悩まされています。フィールドの2つのテーブルの間に多対1の関係を確立する方法

USERテーブル:

Id Name Contact_ID 
1 Arun 2 
2 Barath 3 
3 Charan 2 
4 Dinesh 1 

CONTACTテーブル:

ID Name Phone Mail 
1 Mahesh 1234 [email protected] 
2 Suresh 54321 [email protected] 
3 Jayesh 9876 [email protected] 
4 Ganesh 98754 [email protected] 

USERのユーザーのそれぞれが接触した接触を持つことになり、私は2つのテーブルを持っています。 ユーザーが1つの連絡先を持っている場合は、USERのContact_IDで外部キー関係を使用して、それらの間の関係を構築できます。

しかし、USERテーブルのユーザーがCONTACTテーブルに複数の連絡先を持っている場合はどうなりますか?私はそれらの間の関係をいかに構築するかについてはわかりません。

例:ユーザーCharanには1件の連絡先、2件の連絡先がありますが、1つ以上ある場合は4に連絡しますか? その場合、どうすれば多対1の関係を構築できますか?

答えて

1

あなたはそれを後方に持っているようです。 CONTACTテーブルには、CONTACTへの外部キー参照を含むUSERではなく、USERテーブルへの外部キー参照が必要です。たとえば:もちろん

USERテーブル

Id Name 
1 Arun 
2 Barath 
3 Charan 
4 Dinesh 

CONTACTテーブル

ID Name Phone Mail    USER_ID 
1 Mahesh 1234 [email protected] 1 
2 Suresh 54321 [email protected] 2 
3 Jayesh 9876 [email protected]  1 
4 Ganesh 98754 [email protected] 3 

、私はちょうど新しいUSER_ID列のための偽のデータを使用しました。ご覧のとおり、ID 1のユーザー(Arun)には、CONTACTテーブルに複数の連絡先(ID 1とID 3)があります。

+0

ありがとう –

1

関係モデル(およびERモデル)テーブルは(ビジネス/アプリケーション)リレーションシップ/アソシエーションを表します。 FK(外部キー)は、擬似関係(&擬似ER)メソッドによって "リレーションシップ"と呼ばれるです。 1 uid中:cidその後、置き換えることができることでuser & user_has_contact

-- user "id" has ... AND user "id" has contact "cid" 
user(id, name, ..., cid) 

user_has_contact場合は、1:N uid中:

-- user "id" has name "name" and ... 
user(id, name, ...) 
-- contact "id" has name "name" and ... 
contact(id, name, ...) 
-- user "uid" has contact "cid" 
user_has_contact(uid, cid) 

user_has_contact場合はNですcidあなたは置き換えることができcontact & user_has_contact by:

-- contact "id" has ... AND user "uid" has contact "id" 
contact(id, name, ..., uid) 

M:Mの最初のデザインを使用する必要があります。 (あなたは実際にを持っていませんが、結合されたテーブルは、正規化が別のテーブルを持つことによって解決するように指示する問題を呈します)。これは、関連/接合/結合/多対多/ブリッジテーブルと呼ばれます。 FKの「関係」を呼び出すメソッド。しかし、すべてのテーブルと同様に、いくつかの値についての関係/関連性を表します。 (したがって、識別されたエンティティも)。M:0または1 & 0または1:Mも処理します。他の2つのデザインもNULLを使用してこれを行うことができます。

カーディナリティがuser_has_contactにかかわらず、それは簡単なので3つの別々のものを保つことはおそらく良い考えです。 (真のERモデリングは、2つのエンティティテーブルに&という1つの関連テーブルを与えます)。しかし、にはが必要です。

FKは、テーブル内の列のリストの値が別の場所でCK(候補キー)として表示される必要があることをDBMSに通知します。 (SQLでは、他の場所ではSQL PK(プライマリキー)またはUNIQUE NOT NULLなどのスーパーキーとして表示されます)のような関係にFKが関連付けられているため、FKの「リレーションシップ」を呼び出すメソッドFKのカーディナリティと呼ばれるそれらのリレーションシップのカーディナリティでもありますが、FKの制約は単にファクトを示しており、リレーションシップ/アソシエーションではありません)。

You &情報モデリング&データベース設計の参照に従うことを見つける必要があります。

関連する問題