0

mysqlとデータベースについて無知で申し訳ありませんが、私はそれを学んでいます。

したがって、次の状況を想定します。

さまざまな色のボールの定義(ball_definitions)を含むテーブルがあります。

id color
1 red
2 blue
3 green
...
N

ここで、idはプライマリ値です。

そして、私は人の定義を持つ2番目のテーブル(人)を持っています:

id name
1 John
2 Peter
3 Michel
...
M

(ここで、idは主キーです)

さて、私は各人、その人が所有するボールの量、概念的には次のようなものに関連したいと思います。

john: 1 red ball, 3 green ball, 0 blue ball
peter: 3 red ball, 2 green ball, 1 blue ball.
...

MとNの両方が変化する可能性があるような方法で(移植性の理由から)。

私の最初の難しさは、各列が各色を参照しているN列を人のテーブルに持たせることでしたが、それは移植性がありません(ball_definitionsの変更で各変更のトリガーが必要であり、クエリするのは非常に難しいようです)。

一方、「ManyToMany」リレーションを持つ新しいテーブルを作成するには、次のようにします。

persons_id ball_definitions_id amount
1 1 1
1 2 3
1 3 0
2 1 3
2 2 2
2 3 1

人の数やボールの数が変わると、ちょっとした努力のように思えました。

より良い解決策はありますか?

乾杯、ホルヘ

4

1 に答える 1

2

いいえ、これ以上の解決策はありません。

N対N(多対多)の関係を持つ2つのテーブルがある場合は、中間テーブルを使用する必要があります。

別の方法は、ボールの種類ごとに人物テーブルに列を作成するか、説明しているソリューションよりも手間がかかるすべての人物のボールテーブルに列を作成することです。ボールや人を追加する必要がある場合、物事は非常に複雑で厄介になります。あなたは最良の解決策を説明しました。

于 2012-11-03T19:53:19.607 に答える