Я ищу лучший способ предотвратить дублирование данных в таблице, основанной на другой точке данных.Лучший способ предотвратить дублирование значений на основе другого значения SQL
Таблица: (стыковка стол между двумя объектами, лицами и школой)
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
также внешними ключами, объявленными в другом заявлении.
Я хочу что-то, что мешает человеку добавлять одну и ту же школу более одного раза.
Примеры:
Row 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 добавить уникальный ключ 'id_restrictions' (person_id, school_id)' '. Теперь вы можете иметь только одну запись с символом '(1,1)' в качестве значения, но все же разрешить '(1,2)' и '(2,1)' –