我正在寻找防止基于另一个数据点的表中重复数据的最佳方法。
表:(两个实体,个人和学校之间的联合表)
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_id
和school_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和它正在检查的人)
答案 0 :(得分:1)
您可以尝试在数据库级别创建唯一性....例如:
ALTER TABLE with_school ADD UNIQUE uniqueindex (person_id, school_id);
而且......可能另外......你可以在插入之前在应用程序级别选择“检查”,以确保你没有这两个键。