Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql DB设计:如何处理具有非唯一外键的表_Mysql_Database - Fatal编程技术网

Mysql DB设计:如何处理具有非唯一外键的表

Mysql DB设计:如何处理具有非唯一外键的表,mysql,database,Mysql,Database,我有一个表产品和一个类别表,这两个表都可以在图像表中有相关记录 images.fk的值为1可以指向categories.id或products.id,因此我添加了一列images.related\u至 当我想要检索一个类别及其图像时,我使用 WHERE categories.id = images.fk AND images.related_to = 'categories' 但是很明显,现在如果类别没有图像,我的查询将不会返回任何结果,因为WHERE images.related\u to=

我有一个表
产品
和一个
类别
表,这两个表都可以在
图像
表中有相关记录

images.fk
的值为
1
可以指向
categories.id
products.id
,因此我添加了一列
images.related\u至

当我想要检索一个类别及其图像时,我使用

WHERE categories.id = images.fk AND images.related_to = 'categories'
但是很明显,现在如果类别没有图像,我的查询将不会返回任何结果,因为
WHERE images.related\u to='categories'

我可以通过首先运行一个查询来解决这个问题,看看这个类别是否有图像,但这似乎不是一个好的解决方案

使用
图像。fk
不包含唯一值是否被视为不良设计? 我应该有单独的
类别.图像
产品.图像
表格吗?那么,如果我还有
用户
商店
供应商
的图像呢

ProductImages(ProductId,ImageId)类别图像(CategoryID,ImageId)

然后ProductImages有一个FK到Products和FK到Images

类别图像有一个FK到类别和一个FK到图像


是经典的解决方案。

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

  • 产品和类别之间的基数为N:M(一个产品可以有多个类别,一个类别属于多个产品)
  • 我添加了另一个名为“IMAGES”的表,一个产品可以有多个图像,一个图像属于一个产品,因此基数为1:N
您只需添加其他属性


您可以考虑使用
图像
,因为它是一种多用途图像存储。使用
图像
主键
自动递增
,不将图像fk存储在此表中:
图像(图像id、src、大小等,主(图像id))

再创建一个(或三个)表(简化代码):
images\u on\u categories(category\u id,image\u id,Primary(category\u id,image\u id))

或者:
images\u on\u用户(用户id、图像id、主(用户id、图像id))

您可以这样创建FK:
外键(用户上的图像。用户id)引用用户(用户。用户id)