Áko*_*dra 5 sql database postgresql constraints foreign-keys
是否可以在一般的 sql/postgresql 中创建部分外键(类似于部分索引)?在以下情况下,我还没有找到强制参照完整性的方法:
表 A 是可软删除的(它有一个列已删除的_at,当一行被标记为这样时,它被设置为一个值),而表 B 是可硬删除的(意味着我们实际上删除了行)
表一:
表B:
表 C:
表 A、B、C 中的行代表某个类的对象。它们之间的关系是每个 C 需要引用 A 或 B,由“类型”列的值标记,“id”将标记引用对象的哪个实例。
我想要实现的是强制完整性,以便对于表 C 中引用类型为“MyData::A”的所有行,referred_id 必须与表 A 的部分索引中的行匹配(其中deleted_at 为空),类似地对于 B
就像是
ADD CONSTRAINT name FOREIGN KEY table_C(referred_id)
REFERENCES table_A(id where deleted_at is not null)
where referred_type = 'MyData::A
ADD CONSTRAINT name FOREIGN KEY table_C(referred_id)
REFERENCES table_B(id where deleted_at is not null)
where referred_type = 'MyData::B
Run Code Online (Sandbox Code Playgroud)
这显然是虚假的语法。
如果这是不可能的,是否可以这样做,而不会在不同的表中存在两种类型的引用对象,如下所示:
CREATE VIEW A_B_ids AS SELECT id, deleted_at From table_A
UNION SELECT id, deleted_at FROM table_B
ADD CONSTRAINT name FOREIGN KEY table_C(referred_id)
REFERENCES A_B_ids(id where deleted_at is not null)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1829 次 |
| 最近记录: |