我有一张桌子employee
,他们每个人都可以扮演不同的角色,比如inspector
和constructor
。我还有另一个表,其中有一列可以存储检查员的工作内容。
人们可以扮演不同的角色,但角色不必动态添加;为员工的每个角色提供一列就足够了。这也很方便,因为我们目前资源有限,并且我们的用户使用 Postico 来维护数据(目前),因此更可取的是简单的数据模型。通过外键,我们可以使用 Postico 的 1:N 选择器。
我试图为(物化)视图创建外键约束,但 Postgresql 不支持。也不允许使用以下外键:
FOREIGN KEY("inspector_id", TRUE) REFERENCES employee("id", "is_inspector")
除了在多个表中复制数据之外,我还有其他选择吗?
首先,您不必复制数据。
如果添加
inspector
表格,则不会重复。您需要在模型中添加一个“检查员”实体,然后添加一个“检查员”表。只有inspector_id
值会被复制,这很好。所以,这是解决方案A。is_inspector
解决方案 B 可能是在您希望拥有外键的表中添加一列并将该列限制为TRUE
:我每次都会选择解决方案 A,但如果解决方案 B 出于某种原因简化了您的应用程序代码,它仍然可以解决问题并强制执行相同的要求。但是,如果您以后需要其他表来引用“检查员”,那么每个表中都需要一个布尔列。因此,解决方案 A 是更简单的方法,因为它根本不需要任何此类布尔列(即使在
employee
表中,您也可以通过加入inspector
表来找到检查员)。