我正在尝试在我的 Web 应用程序中创建一个关系系统,该系统将依赖于定义为的单个连接表
CREATE TABLE associations (
associationId SERIAL PRIMARY KEY,
fromTable varchar(255),
fromId int,
toTable varchar(255),
toId int
);
现在我需要让它(fromTable, fromId, toTable, toId)
对每一行都是唯一的,但我需要的并不像在这四个字段上创建一个简单的唯一约束那么简单。
例如,我需要这个查询
INSERT INTO associations (fromTable, fromId, toTable, toId)
VALUES ('table1', 1, 'table2', 2);
如果表已经包含带有元组的行,则失败('table1', 1, 'table2', 2)
OR的行,则失败 ('table2', 2, 'table1', 1)
是否可以通过约束来实现这一点,或者我是否需要在尝试插入数据之前手动实施检查?
编辑:
@Germann Arlington 建议使用触发器以两种方式插入关系来执行此操作,但是如果我在触发触发器的同一个表中执行插入操作,这不会导致无限的触发器循环吗?