/ /テーブルA - > Bの外部キー、およびテーブルB - > Aの外部キー。これはどのように行われますか? - mysql、スキーマ、データベース

テーブルA - > Bの外部キー、およびテーブルB - > Aの外部キー。これはどのように行われますか? - mysql、スキーマ、データベース

私は2つのテーブルを持っています - "business"と "business_contacts"。

business_contactテーブルには多対1がありますビジネステーブルとの関係さらに、各ビジネスには、「プライマリコンタクト」フィールドがあります。これは、business_contactsテーブルとの1対多の関係です。

もちろん、この問題は、データ挿入のためのcatch-22いずれのフィールドもnullにはならないので、対応するビジネスがあるまでbusiness_contactを挿入することはできませんが、対応するbusiness_contactがあるまでビジネスを挿入することはできません。

もし誰かが私の頭を手伝ってくれれば、相互に1対多の関係がどのように扱われているのか、私は最も感謝しています。

(もし何か違いがあればMySQLでプロジェクトが行われます)

回答:

回答№1は2

"プライマリコンタクト"をビジネステーブルから削除し、代わりにbusiness_contactテーブルに移動することができます。

 business
- business_id
- name
- address
- blah

business_contact
- business_contact_id
- business_id
- is_primary_contact (bit field)

したがって、ビジネスのプライマリコンタクトを決定することは次のようになります。

SELECT * FROM business_contact
WHERE business_id = <somevalue> AND is_primary_contact = 1

回答№2の場合は0

あなたはあなたの主キーを参照する外部キーを作成したいだけです business

ビジネス・テーブルに直接プライマリ・コンタクトを持ち、business_contactsテーブルに「セカンダリ・コンタクト」を保持することをお勧めします。

擬似コード:

table business ( id PRIMARY KEY, col1, col2, col3, zip, street, country );
table business_contacts ( contact_id PRIMARY KEY, business_id FOREIGN KEY REFERENCES business.id,
zip, street, country );

回答№3の場合は0

あなたは "プライマリコンタクト"をヌル可能にすることはできますか? 次にビジネスを挿入してからbusiness_contactを入力し、「プライマリコンタクト」フィールドを設定することができます。

また、MySQLのために行うことができます(しかし私はそれをお勧めしません):

/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

... your statements ...

/*!40014 SET FOREIGN_KEY_CHECKS=1 */;