假设您有一个食谱应用程序。每个配方都可以具有成分,说明和标签。 每一个都有配方的ManyToMany。
同样,方向可以是带步骤的ManyToMany,成分可以是带量的ManyToMany,量可以带量度的ManyToMany。
是否有约定使用联结表,何时使用和否?
答案 0 :(得分:1)
是的,约定称为database normalization。
如果您希望数据库采用常规形式,则每个多对多关系都需要有自己的联结表。
正常形式的目的是减少数据异常的机会。即,意外插入与其他数据相矛盾的数据。如果遵循规范化规则,则数据库仅将每个事实表示一次,因此不会出现数据异常的情况。
如果您对此表示的复杂程度感到不满意,请不要怪罪表!您要建模的真实世界信息会导致复杂性。
某些人喜欢避免使用该表,例如,将一个字符串与逗号分隔的标签列表一起存储在recipes
表中。这是反规范化的示例。在此示例中,查询配方及其标签将变得更加简单。但这会使执行其他一些类型的查询更加困难:
您可能还会喜欢我的答案:Is storing a delimited list in a database column really that bad?
通常,每种优化都会针对一种类型的查询进行优化,但会以针对相同数据的其他类型的查询为代价。
组织数据以符合规范化规则可使您的数据库更好地服务于各种查询。