我有一个表products
和一个categories
表,这两个表都可以选择在images
表中包含相关记录。
images.fk
的 1
可能指向categories.id
或products.id
,因此我添加了一列images.related_to
。
当我想要检索某个类别及其图像时,我会使用
WHERE categories.id = images.fk AND images.related_to = 'categories'
但显然现在如果类别没有图片,我的查询将不会返回任何内容,因为WHERE images.related_to = 'categories'
。
我可以通过首先运行查询来查看该类别是否有图像来解决这个问题,但这似乎不是一个好的解决方案。
让images.fk
不包含唯一值会被认为是错误的设计吗?
我应该有单独的categories.images
和products.images
表吗?那么如果我还有users
,shops
,suppliers
的图片怎么办?
答案 0 :(得分:1)
另外两张桌子说
ProductImages(ProductId,ImageId)CategoryImages(CategoryID,ImageID)
然后,ProductImages拥有产品的FK和FK To Images
和
CategoryImages有一个FK到类别和一个FK到图像
是经典的解决方案。
答案 1 :(得分:1)
如果我理解你的问题我会这样做:
您只需添加其他属性即可。
答案 2 :(得分: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)