【发布时间】:2021-08-28 11:34:48
【问题描述】:
我目前正在 PostgreSQL 中寻找一种方法,我可以针对给定的表限制有效外键的数量 通过定义条件可用。
所以场景是这样的
https://dbfiddle.uk/?rdbms=postgres_11&fiddle=4dbe279906dc881598b7e72093534ce7
A、B、C都代表不同的实体,每个具体的条目都列在x_entry表中。
表 A、B、C 都代表给定条目的版本,以及它们在什么时间跨度内有效。
我想确保
表 A 总是有 B 和 C 的外键
其中时间跨度 A 的条件 A.B.C == A.C。
在这里看到
违反了Ainit 范围为 2000-3000 的条件,因为binit 在时间范围2100-3000 中具有指向cinot 的外键
其中 ainit 将其外键从 cinit 更改为 cinat 违反了 A.B.C == A.C 的条件
但是我如何设置这样一个条件限制,以防止外键不违反这样的特定条件。 ? 甚至有可能吗?
【问题讨论】:
-
id BIGSERIAL REFERENCES C_entry(id), -
为什么没有意义,我在引用另一个表 id。
-
外键指另一个表中的PK(或其他一些唯一键)。那可能是一个(大)连续剧。外键本身不应该是序列号。 (这将使它与所引用的键相当独立)
-
@wildplasser 要么我理解错了,但是 postgresql 语法说明外键本身也需要指定类型。不能不指定。 postgresql.org/docs/8.3/tutorial-fk.html
-
我认为,@wildplasser 的意思是,该类型应该是 BIGINT 而不是 BIGSERIAL
标签: postgresql foreign-keys constraints