我目前有这样的设计。每个对象类都有表。然后每个表包含需要与多个状态相关联的行(对象)。
状态表
用户
其他一些对象类
ID
...
将每个对象类表链接到状态表的最佳方法是什么?我在SQL Antipatterns中描述的两种方法之间折腾:
users_has_statuses
等。这将需要每个对象类的交集表。因此,当我添加更多对象类(表)时,我需要添加一个交集表,这意味着
object_ancestor
object_ancestor_statuses
然后,每个对象类都有一个列,其外键链接到object_ancestor表中的id列。
在性能和设计优雅方面,哪种方式更好?
答案 0 :(得分:1)
我的观点是交叉表方式更好。
如果有许多具有状态的实体的表,并且您使用单个表将它们链接到状态,那么当您添加越来越多的数据时,性能将会逐渐降低(因为当DBMS查找实体的状态时,它将具有为所有其他类型的实体“通过”条目。
祖先方式的另一个问题是,通过查看数据库结构,您无法分辨哪些类型的实体具有状态。例如,如果你有人,狗和岩石,每个都有祖先表中的条目,你就不能说岩石没有状态。