Mysql 一个图像表可以服务于两个外部表?

Mysql 一个图像表可以服务于两个外部表?,mysql,database-design,relational-database,foreign-key-relationship,Mysql,Database Design,Relational Database,Foreign Key Relationship,我有这个图像表 image_id image_title image_description image_source 我希望这个图像表与页面表关联,有时与注释表 页表 page_id ... ... 注释表 comment_id ... ... 我是否应该将页面id和注释id的外键放在图像表格中 image_id image_title image_description image_source page_id comment_id 或者我应该为每个目的创建一个map表吗 图像和页面

我有这个
图像表

image_id
image_title
image_description
image_source
我希望这个
图像表
页面表
关联,有时与
注释表

页表

page_id
...
...
注释表

comment_id
...
...
我是否应该将
页面id
注释id
外键放在
图像
表格中

image_id
image_title
image_description
image_source
page_id
comment_id
或者我应该为每个目的创建一个
map
表吗

图像和页面的
map
表格

image_id
page_id
另一张
map
表格用于图像和注释

image_id
comment_id
对于这种情况,最佳实践是什么

图像
表格行增加时,如果我使用
映射
思想,
图像
表格是否会变慢(这是另一个主要问题)

现在我做这个,

图像页面
表格

image_id
image_title
image_description
image_source
page_id
image_id
image_title
image_description
image_source
comment_id
图像注释
表格

image_id
image_title
image_description
image_source
page_id
image_id
image_title
image_description
image_source
comment_id
但这看起来不太好,因为我正在重复这些专栏,而且它看起来不是动态的

有什么想法吗

编辑:

有时图像与页面关联,有时与注释关联。上传图片有时是针对文章本身,有时是针对文章下的评论

image_id  image_title  page_id  comment_id
1         a            1        NULL
2         b            NULL     1
3         c            1        NULL
4         d            1        NULL

您的图像表很好。您应该创建一个注释表和一个页面表,并将图像ID存储在这些表中

编辑:(没有阅读所有评论)


根据页面和评论可以有多个图像的要求,唯一的方法是创建两个链接表,一个链接评论到图像,另一个链接页面到图像,目前的设计存在局限性。例如,图像不能同时与页面和注释相关。除非其数据在两个图像表中重复。第二,也是更重要的一点(正如您所说,它看起来不太好),您有两个几乎相同的列和功能的表

因此,有一个
图像
表和两个映射表看起来更好。如果您以后想存储更多(和不同)关于这些映射的信息-例如,您可能想添加上次更改的时间戳和
PageImage
的大小限制(每个图像最大100KB)和
CommentImage
的数量限制(每个注释最多3个)-您不必更改总体设计,只有这两个特定的映射表

但是,您可能会发现自己创建了一组映射表,比如一个用于
UserImage
,另一个用于
MessageImage
,还有一个用于
EmailImage
,所有这些表都具有相同(或几乎相同)的结构,这又导致了代码的重复

要消除这种重复,可以使用超类型/子类型模式。创建一个超类型
实体
,将
页面
注释
用户
消息
电子邮件
作为子类型(每个子实体都有一个主键,也是超类型
实体
的外键)


然后,您的映射可以很容易地组合到一个
EntityImage
表中(使用FKs到
Image
Entity
)。

您所说的
有时是什么意思?现在还不清楚是什么型号或问题。嗨,马特,请看我上面的编辑。希望它有意义。谢谢。“我应该为每个目的创建一个映射表吗?”这取决于一个页面/评论中是否可以有多个图像;如果是这样,那就有道理了。我曾经对联系人数据这样做过一次,可以分配给用户或公司。是的,一个页面/评论中应该允许有多个图像…OP声明(在评论中):“一个页面/评论中应该允许有多个图像。”Yikes,那么我的回答无效。在这种情况下,需要有两个链接表,一个用于注释,一个用于页面。谢谢,非常感谢你的回答。我能问一下-什么是超类型/子类型模式?它与我的OP中的
映射
表有什么区别?来自另一个问题:
各方
有你的
实体
个人
组织
表格中有您的
页面
注释
。创建超类型后,可以建立其他表与它之间的关系(1对多、1对1、多对多等等)。因此,您正在与所有子类型实体的联合建立关系。感谢您的回复。这对我来说是新的。我会花更多的时间去消化它。但是谢谢!