2

誰かが次のデータベース設計を提案できますか?

ユーザーはカタログを作成できますカタログ内でユーザーは範囲を作成できます-つまり、製品の範囲範囲内でユーザーは複数の製品を追加できます範囲内でユーザーは複数の範囲を追加できます->範囲->範囲->範囲すべてでそれらの中の製品。

私は現在私のデータベースにあります-

catalogue_range with --id、name、descriptionおよびcatalogue_product with --id、range_id、name、description

誰かが私が作ろうとしているものを見ることができますか?

私の目的は、カタログ範囲内に複数のカタログ範囲を作成し、これらのカタログ範囲のそれぞれに複数の製品を追加できるようにすることです。

これが私の現在のSQLです:

`catalogue_range` (
      `id` char(40) NOT NULL,
      `profile_id` char(40) NOT NULL,
      `type` enum('pdf','db') DEFAULT NULL,
      `status` enum('new','draft','live') NOT NULL,
      `name` varchar(64) NOT NULL,
      `description` varchar(1000) NOT NULL,
      `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `profile_id` (`profile_id`)
    )

`catalogue_product` (
  `id` char(40) NOT NULL,
  `catalogue_id` char(40) NOT NULL,
  `order` smallint(5) unsigned NOT NULL,
  `name` varchar(50) NOT NULL,
  `description` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `catalogue_id` (`catalogue_id`)
) 

前もって感謝します。

4

2 に答える 2

1

製品が一度に 1 つのカタログにのみ存在すると仮定すると、デザインはそのままでほとんど問題ありません。あなたが見逃しているのは、の再帰的な外部キーですcatalogue_rangecatalogue_rangeテーブル定義に次のようなものを追加します。

`parent_range_id` char(40) NULL,
FOREIGN KEY (`parent_range_id`) REFERENCES catalogue_range(`id`)

特定のユーザーの最上位の範囲には NULL がありparent_range_id、他のユーザーはそれを含む範囲を参照します。SQL で階層を操作するのは必ずしも簡単ではないことに注意してください。また、ネストされたセットなど、階層データをより SQL に適したものにするための手法を調べることもできます。

于 2013-01-04T13:16:09.527 に答える
1
  1. catalogue(カタログ ID、あなたのプライベート属性)
  2. product(製品 ID , #カタログ ID, あなたの非公開属性)
  3. range( range id , #range id 親, あなたの非公開属性)
  4. 商品範囲( #商品ID , #範囲ID )

コンパイルするには、ストアド プロシージャ/アプリケーション アルゴリズムが必要です。

  • 範囲の積のリスト (再帰的な sql を計算するため、mysql は oracle のように分析関数を提供しません)
  • カタログ/範囲の範囲のリスト

それが役に立てば幸い。S.

于 2013-01-04T01:25:02.263 に答える