我有一个名为类别的表。有一些表与类别表相关。例如,用户有类别,帖子有类别等。每个人都必须有自己的中间表来与类别表相关。 (例如:一篇文章有很多类别)
现在有两种不同的方法:
第一个:每个表(如用户、帖子...)都有自己的与category
表相关的中间表。
第二个:所有表都有一个中间表,由名为 type
的列分隔(type 可以具有以下值:user , 发布等)。 (这里没有外键,因为外键是虚拟的)
哪个更好?有什么想法吗?
最佳答案
当您有不同的实体集(例如 User
和 Post
)而不是高级类型的子类型时,我建议使用第一种方法 - 制作单独的关系表。这样做的原因是要严格遵守逻辑关系的基本概念,这要求每个组件/角色都有一个域。
从长远来看,这将显着简化查询和一致性。如果将不同的 ID 值集混合到同一列中,则会阻止您使用唯一约束和外键约束来确保完整性,并且您的查询将需要条件逻辑来处理不同的情况。
当您拥有更高类型的子集时 - 例如 Customer
和 Employee
,它们都是 Person
的子集,理想的情况是创建父类(super class)型表,然后在父类(super class)型上创建关系。这在设计阶段比在数据库填充数据之后要容易得多。
关于Mysql 一张中间表多个相似表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42325574/