我正在尝试在我的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)
或 ('table2', 2, 'table1', 1)
的行,则失败
是否可以通过约束来实现这一点,还是我需要在尝试插入数据之前手动执行检查?
编辑:
@Germann Arlington建议使用触发器以两种方式插入关系,但如果我在触发触发器的同一个表中执行插入操作,这不会导致无限的触发循环吗?