防止基于另一个值的重复值的最佳方法 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_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 和它正在检查的那个)
您可以尝试在数据库级别创建唯一性....例如:
ALTER TABLE with_school ADD UNIQUE uniqueindex (person_id, school_id);
并且...可能还有...您可以在插入之前在应用程序级别执行 sql select 'check' 以确保您还没有那两个键。
我正在寻找防止基于另一个数据点的 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_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 和它正在检查的那个)
您可以尝试在数据库级别创建唯一性....例如:
ALTER TABLE with_school ADD UNIQUE uniqueindex (person_id, school_id);
并且...可能还有...您可以在插入之前在应用程序级别执行 sql select 'check' 以确保您还没有那两个键。