然而,关系的类型可能会超出最初的类型,例如:
需求:我们有用户。每个用户可以有0个或多个其他用户作为朋友。
解决方案:一个用户表和一个名为“user_user”的连接表。
然后我们发现一个新的需求:一些友谊是浪漫的,换句话说,两个用户可以以不同于友谊的方式相连。
解决方案a:向连接表添加一个包含友谊类型(朋友|伴侣|前任)等的列。
解决方案b:将'user_user'表重命名为'friendships'(这将是此方法更好的名称),并创建一个新表称为romances,也将用户连接到用户。
然后我们又发现了另一个新需求:用户可以欠其他用户钱。再次,我们可以在同一个连接表上附带或创建一个名为'debts'的新表。这次我的直觉是100%要有一个单独的表格。
每当我们发现新类型的关系或已知关系的子类型时,我们都可以向一个连接表中添加列或创建一个新的连接表。
我的问题是,什么是决定何时必须创建新表的良好规则?
当我们必须按顺序对每个有序对进行多行操作时,是否需要创建新表?例如,如果过去的关系从未被删除,因此如果两个用户在过去的两年中曾经是朋友,失去联系,然后重新成为朋友,我们也希望保留旧行,并具有开始和结束日期,但是有两行会使其他列信息重复(旧行显示一个用户欠钱,新行不显示)。
当额外的列在逻辑上不是单个关系类型的定义时,是否需要创建新表?
好的:友谊开始日期直接与友谊1对1相关。
不好:一位用户拥有另一位用户多少钱的列可以对于该关系是1对1的,但在逻辑上不是友谊的描述。
如果我们事先知道两个表将有很多多对多关系,那么是计划许多连接表的原因还是制作一个更灵活的单个连接表(即使连接的类型不是任意的)?