防止基于另一个值的重复值的最佳方法 SQL

Best way to prevent duplicate values based on another value SQL

我正在寻找防止基于另一个数据点的 table 中重复数据的最佳方法。

表:(两个实体,个人和学校之间的连接table)

CREATE TABLE with_school ( person_id INTEGER NOT NULL, school_id INTEGER NOT NULL, type_id INTEGER NOT NULL, PRIMARY KEY (person_id,school_id) );

person_idschool_id也是外键,声明在不同的语句中。

我想要的是防止一个人多次添加同一所学校。

示例:

第 1 行:

person_id = 1 school_id = 1

第 2 行:

person_id = 1 school_id = 2

没问题,但是:

第 1 行:

person_id = 1 school_id = 1

第 2 行:

person_id = 1 school_id = 1

不是。

防止此类重复的最简单方法是什么?

我试过使用触发器,但我无法让它按照我想要的方式工作:

ALTER TABLE with_school ADD CHECK ( school_id != ( SELECT school_id FROM with_school WHERE person_id = person_id ) ); (我无法区分初始 person_id 和它正在检查的那个)

您可以尝试在数据库级别创建唯一性....例如:

ALTER TABLE with_school ADD UNIQUE uniqueindex (person_id, school_id);

并且...可能还有...您可以在插入之前在应用程序级别执行 sql select 'check' 以确保您还没有那两个键。