web-dev-qa-db-ja.com

MySQLで1対1の関係を実装しながら外部キーを決定する

「items」と「orders」の2つの単純なテーブルがあります。簡単にするために、1つのアイテムを1つの注文にのみ含めることができる、または1つの注文に1つのアイテムのみを含めることができると仮定します。

これは単純な1対1の関係を使用して実装できるので、次のことができます。

以下のように、ordersテーブルの主キーをitemsテーブルに追加できます

//Table Items
item_id, item_name, order_id
1,        shoes,    1
2,        watch,    2

//Table Orders
order_id, customer
1,        James
2,        Rick

または、以下のように、itemsテーブルの主キーをordersテーブルに追加できます

//Table Items
    item_id, item_name
    1,        shoes
    2,        watch

//Table Orders
order_id, customer, item_id
1,        James,    1   
2,        Rick,     2

どちらが正しいのか、そしてその理由は?どのキーをどこに配置するかを決定するためのガイドラインはありますか?確かに常識は上記のような単純な例では機能しますが、複雑な例ではどのように決定しますか?

19
Jay Bhatt

One-to-Oneリレーションシップは通常、単純に1つのテーブルにマージする必要があります。矛盾がない場合、1対1の関係は、考慮されていない決定の兆候である可能性があります。

そして、あなたが本当にこの種の関係を使いたいのであれば、それは完全にあなた次第です。 FKを適用するときは、オプション性を考慮に入れることをお勧めします。ただし、MySQLでは、遅延キーがサポートされていないため、それでも真の1対1の関係にはなりません。

19