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

时间:2015-01-05 18:45:30

标签: mysql constraints duplicate-removal duplicate-data

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

表:(两个实体,个人和学校之间的联合表)

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和它正在检查的人)

1 个答案:

答案 0 :(得分:1)

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

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

而且......可能另外......你可以在插入之前在应用程序级别选择“检查”,以确保你没有这两个键。