【问题标题】:Mysql one middle table for multiple similar tablesmysql 一张中间表对应多个相似表
【发布时间】:2017-02-19 19:54:48
【问题描述】:
我有一个名为 category 的表。有一些表与类别表有关。例如,用户有类别,帖子有类别等。每个人都必须有自己的中间表来与类别表相关联。 (例如:一个帖子有很多类别)
现在有两种不同的方法:
第一:每个表(如用户、帖子...)都有自己的与category 表相关的中间表。
第二个:所有表都有一个中间表,由名为type的列分隔(类型可以有这些值:user、post 等)。 (这里没有外键,因为外键是虚拟的)
哪个更好?有什么想法吗?
【问题讨论】:
标签:
mysql
database
database-design
【解决方案1】:
当您有不同的实体集(如User 和Post)不是更高类型的子类型时,我推荐第一种方法 - 制作单独的关系表。这样做的原因是紧贴逻辑关系的基本概念,即要求每个组件/角色都有一个域。
从长远来看,这将大大简化查询和一致性。如果您将不同的 ID 值集混合到同一列中,则会阻止您使用唯一约束和外键约束来确保完整性,并且您的查询将需要条件逻辑来处理不同的情况。
当您有更高类型的子集时——例如Customer 和Employee,它们都是Person 的子集,理想的做法是创建一个超类型表,然后在超类型上创建关系。这在设计阶段比在数据库中填充数据后要容易得多。