我有一个containers
可以与多个表建立多对多关系的表,假设它们是plants
,animals
和bacteria
。每个容器可以包含任意数量的植物、动物或细菌,并且每个植物、动物或细菌可以在任意数量的容器中。
到目前为止,这非常简单,但我遇到的问题是每个容器应该只包含相同类型的元素。例如,同时包含植物和动物的混合容器应该是数据库中的约束违规。
我的原始架构如下:
containers
----------
id
...
...
containers_plants
-----------------
container_id
plant_id
containers_animals
------------------
container_id
animal_id
containers_bacteria
-------------------
container_id
bacterium_id
Run Code Online (Sandbox Code Playgroud)
但是对于这个模式,我无法想出如何实现容器应该是同构的约束。
有没有办法通过参照完整性来实现这一点,并在数据库级别确保容器是同类的?
我为此使用 Postgres 9.6。