1

私は3つのテーブルを持っています:

`brands`        (`id`, `name`)
`categories`    (`id`, `name`)
`products`      (`id`, `name`, `brand_id`, `category_id`)

他にも列がありますが、これらは問題に関連する唯一のものです。

3 つのテーブルすべてで同じものを共有したいauto_increment id(つまりid、3 つのテーブルを一意に交差させる)。後者は、適切なテーブルを参照する共通テーブルを使用することで簡単に解決できます。

`entries` (`id`, `name`, `type_id`)

問題は、元のシナリオではすべてのテーブルに外部制約があることです。

  • カテゴリが削除された場合は、NULL を設定します products.category_id
  • ブランドが削除されている場合は、products.brand_id をカスケードします。
  • 商品が削除された場合、すべてのレビューをカスケードします

代替手段は何ですか?

4

2 に答える 2

1

MySQL でこれを行う唯一の方法は、1 つのAUTO_INCREMENT列を持つ 1 つのテーブルを作成し、このテーブルに挿入し、最後に挿入された ID を取得し (これを正確に行う方法は、使用している MySQL クライアント ライブラリによって異なります)、これを使用することです。行を他のテーブルの 1 つに挿入するときの ID。

(PostgreSQL が MySQL よりも普及していないのは残念です。なぜなら、PostgreSQL はこの機能をすぐに使用できるためです。テーブル間で 1 つのシーケンス オブジェクトを共有するだけで済みます。)

于 2012-07-25T04:01:07.053 に答える
0

プロジェクト全体で一意の識別子が必要なようですが、密度や単調性は要件ではないようです... UUID () で十分でしょうか?

于 2012-08-09T12:00:09.467 に答える