1

我有一个表products和一个categories表,两者都可以选择在images表中包含相关记录。

images.fk1可以指向categories.idor products.id,因此我添加了一列images.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

还有两张桌子说

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

然后 ProductImages 对 Products 和 FK To Images 有一个 FK

CategoryImages 具有类别的 FK 和图像的 FK

是经典的解决方案。

于 2012-07-09T16:32:12.530 回答
1

如果我理解你的问题,我会这样做:

  • products 和 Categories 之间的基数是 N:M(一个产品可以有多个类别,一个类别属于多个产品
  • 我添加了另一个名为“IMAGES”的表,一个产品可以有多个图像,一个图像属于一个产品,所以基数是 1:N

您只需要添加其他属性。

在此处输入图像描述

于 2012-07-09T16:51:55.670 回答
1

你可以想一想images,因为它是一个多用途的图像存储。制作images主键auto_increment,不要将图像 fk 存储在此表中:images(image_id, src, size, etc... , Primary(image_id)).

再创建一个(或三个)表(简化代码)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 回答