1

テーブルproductsとテーブルがあり、categoriesどちらもオプションでimagesテーブルに関連レコードを含めることができます。

images.fkの値でまたは1を指す可能性があるため、列を追加しました。categories.idproducts.idimages.related_to

使用するカテゴリとその画像を取得したい場合

WHERE categories.id = images.fk AND images.related_to = 'categories'

しかし、明らかに今、カテゴリに画像がない場合、クエリはWHERE images.related_to = 'categories'.

最初にクエリを実行してカテゴリに画像があるかどうかを確認することでこれを解決できますが、それは良い解決策とは思えません。

images.fk固有の値が含まれていないのは悪い設計と見なされますか? categories.imagesproducts.imagesテーブルを分ける必要がありますか? usersでは、 、shops、 の画像もある場合はどうなりsuppliersますか?

4

3 に答える 3

1

images多目的画​​像ストレージだったので、考えることができます。images主キーauto_incrementを作成し、イメージ fk をこのテーブルに保存しないでください: images(image_id, src, size, etc... , Primary(image_id)).

もう 1 つ (または 3 つ) テーブルを作成します (簡略化されたコード): images_on_categories (category_id, image_id, Primary(category_id, image_id)).

または: images_on_users (user_id, image_id, Primary(user_id, image_id)).

次のように FK を作成できます。FOREIGN KEY (images_on_users.user_id) REFERENCES users (users.user_id)

于 2012-07-09T17:00:09.793 に答える
1

あなたの問題を理解したら、次のようにします。

  • 製品とカテゴリ間のカーディナリティは N:M です (製品は複数のカテゴリを持つことができ、1 つのカテゴリは複数の製品に属します)
  • 「IMAGES」という別のテーブルを追加しました。1 つの製品に複数の画像を含めることができ、1 つの画像が 1 つの製品に属するため、カーディナリティは 1:N になります。

他の属性を追加するだけです。

ここに画像の説明を入力

于 2012-07-09T16:51:55.670 に答える
1

さらに2つのテーブルは言う

ProductImages(ProductId,ImageId) CategoryImages(CategoryID,ImageID)

次に、ProductImages には Products への FK と、Images への FK があります。

CategoryImages には、カテゴリへの FK と画像への FK があります。

は古典的なソリューションです。

于 2012-07-09T16:32:12.530 に答える