考虑以下示例。当我写“is-a”时,我的意思是一个列,它既是其表的主键,又是另一个表的外键,以形成一对一的关系。当我写“has-a”时,我的意思是一个常规的外键列,形成一对多的关系。
- 水果篮桌。
- 一个applebasket 桌子,“is-a”水果篮。
- 橙色篮子桌,“is-a”水果篮。
- 水果桌,“有”水果篮。
- 一张苹果桌,“is-a”水果。
- 橙色的桌子,“is-a”水果。
暂时假设在 applebasket、orangebasket、apple 和 orange 中有特定于上下文的列,足以保证该表的存在,而不是用可空列或类型枚举使父表混乱。
问题:
- 将水果和水果篮关联起来,还是将苹果和苹果篮+橙子和橙子篮关联起来更好?前者似乎不那么多余,但可能具有无效的关系(例如,apple -> fruit -> fruitbasket -> orangebasket)。后者强制关系有效,但更冗余,并要求任何其他继承的水果表声明自己的篮子外键。
- 特别是对于 PostgreSQL,给定第一选择(将水果与水果篮相关联),我检查关系有效性的最简单方法是什么?它必须执行三个连接。
- 还有其他建议可以干净地实施吗?
谢谢...