我有一个名为 category 的表。有一些表涉及类别表。例如,用户有类别,帖子有类别等。每个人都必须有自己的中间表来与类别表相关联。 (例如:帖子有很多类别)
现在有两种不同的方法:
首先:每个表(如用户,帖子......)都有自己与category
表相关的中间表。
第二:所有表都有一个中间表,由一个名为type
的列分隔(类型可以包含以下值: user ,发布等)。 (这里没有外键,因为外键是虚拟的)
哪一个更好?有什么想法吗?
答案 0 :(得分:1)
当你有不同的实体集(如User
和Post
)不是更高类型的子类型时,我建议采用第一种方法 - 制作单独的关系表。这样做的原因是要密切关注逻辑关系的基本概念,这要求每个组件/角色都有一个域。
从长远来看,这将大大简化查询和一致性。如果将不同的ID值集混合到同一列中,它将阻止您使用唯一约束和外键约束来确保完整性,并且您的查询将需要条件逻辑来处理不同的情况。
如果你有更高类型的子集 - 例如Customer
和Employee
,它们都是Person
的子集,那么理想的是创建一个超类型表,然后创建关系超类型。在设计阶段,这比使用数据填充数据库要容易得多。