9

2つのテーブル間の1対多の関係は、2つまたは3つのテーブルで実装する必要がありますか?たとえば、次のようにする必要があります。

author(id,otherAttributtes)
books(id,authorid,otherAttributes)

また

 author(id,otherAttributtes)
    books(id,otherAttributes)
    authorConnectsBooks(authorid,booksid)

私は最初のアプローチが好きですが、2番目のアプローチやより複雑なアプリケーションを何度も見てきました。最初の方法に欠点はありますか、それとも個人的な方法ですか?

4

5 に答える 5

24

最初の例は1対多の関係を示し、2番目の例は多対多の関係を示しています。

例では、最初の例を使用するとします

Author
AuthorID

Book
BookID
AuthorID

JaneとJonの両方が「Stackoverflowforfun」という本を書いたことをどのように表現しますか?この関係表ではできませんが、1人の著者が多くの本を書くことができることを表現しました。つまり、ジェーンが書いたか、ジョンが書いたかのどちらかです。そのうちの1人だけが本を書いた場合は、この関係タイプを使用できます。ただし、両方がこの本を書いたことを示したい場合は、多対多の関係が必要です。

これで、ジェーンとジョンの同じアナロジーを使用して、2番目の例を使用してこの1冊の本の両方の著者を表すことができます-多対多の関係。


1対多の関係で始まり、多対多の関係で終わる例としてStackoverflowを使用してみましょう。

Authors
Joel
Jeff

Books
Stackoverflow Joel

かわいそうなジェフ、彼は上記の例からのスタックオーバーフローでクレジットされていません...それで私たちはそれを修正する必要があります:

Author
Joel
Jeff

Books
Stackoverflow

AuthorBooks
Stackoverflow Jeff
Stackoverflow Joel

今、みんな幸せです...

于 2012-04-13T17:22:09.700 に答える
5

1対多の関係は、2つのテーブルで実装する必要があります。

しかし、あなたがあなたの例で提案する関係(著者と本の間)は1対多ではなく、多対多です。

「著者は多くの本を書くことができ、本は1人以上の著者によって書くことができます。」

また、多対多の関係は3つのテーブルで実装する必要があります。

良い一日を過ごしてください。

于 2012-04-13T17:29:38.153 に答える
4

1対多は2つのテーブルです。

2つ目は多対多です。

Authors
1 Larry Niven
2 Jerry Pournelle

Books
1 Integral Trees
2 King David's Spaceship
3 The Mote in God's eye

AuthorsBooks
1 1
2 2
1 3
2 3
于 2012-04-13T17:23:39.137 に答える
1

関係が実際に1対多の場合、リンクテーブルは必要ありません(このauthorConnectsBooks例では)。ただし、あなたの例では、1人の著者が多くの本を書くことができ、1冊の本が多くの著者によって書かれる可能性があるため、1対多の関係はありません。あなたの例では、実際には多対多の関係があります。実際に多対多の関係にある場合は、リンクテーブルが必要です(authorConnectsBooks例では)。

于 2012-04-13T17:20:15.740 に答える
0

誰もが述べたように、最初のものはあなたが余分なテーブルを必要としない1対多の関係です。2つのテーブルだけが機能するはずです。ただし、2番目のケースでは、多対多の現実であるため、ほとんどのデータベース管理システムは1対多の関係しかサポートしていないため、ジャンクションまたは相互参照テーブルと呼ばれるテーブルを追加する必要があります。 3番目のジャンクションテーブルを介してこのような関係を手動で実装します。ジャンクションテーブルの主キーは通常、接続するテーブルの主キーを使用して形成されます。これは、あなたが尋ねたのとまったく同じ例を説明するwikiページです。

リンク

于 2013-11-30T18:39:09.233 に答える