我所遇到的数据建模问题的简化示例:
我有一个域模型,其中包含一个image
表、一个camera
表、一个machine
表、图像和相机之间的外键约束(taken_by_camera
)以及相机和机器之间的FK(installed_into_machine
)。
image taken_by_camera camera
camera installed_into_machine machine
所有这些都基于我们从客户那里获得的数据。
然而,在我们的应用中,我们几乎总是以图像集的形式使用数据。因此,我们还有一个set
表。每幅图像都属于一个集合,为此我们belongs_to_set
在表上有一个 FK image
。
image belongs_to_set set
我的问题是我想限制仅包含特定机器的图像集,例如
set restricted_to_machine machine
只要这些 FK 到位,我就没有任何约束可以确保通过相机连接到特定机器的所有图像最终也通过该装置连接到同一台机器。
image_1 taken_by_camera camera_1
camera_1 installed_into_machine **machine_1**
image_1 belongs_to_set set_1
set_1 restricted_to_machine **machine_2**
我怎样才能对这样的事物进行建模(从逻辑上讲,但也在 postgres 中)。
PS:只要这些相机安装在同一台机器上,一组中应该可以有不同相机拍摄的图像。
您需要使
set
上有一个 FKmachine
,并且这应该是与其主主键一起的辅助复合唯一键。你也应该做同样的事情
camera
然后更改 FK,
image
以便它们引用那些新的唯一组合键现在,您插入的任何行
image
都不直接引用machine
表,而是通过其列引用camera
和set
表,从而确保它引用的或与具有相同的功能。machine_id
camera
set
machine_id
image
db<>小提琴