2015-01-05 9 views
0

Я ищу лучший способ предотвратить дублирование данных в таблице, основанной на другой точке данных.Лучший способ предотвратить дублирование значений на основе другого значения 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 и одного его проверки)

+2

просто добавьте уникальный ключ в эти поля. '' alter table with_school добавить уникальный ключ 'id_restrictions' (person_id, school_id)' '. Теперь вы можете иметь только одну запись с символом '(1,1)' в качестве значения, но все же разрешить '(1,2)' и '(2,1)' –

ответ

1

вы могли бы попытаться создать уникальность на уровне базы данных .... как:

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

И ... возможно, в дополнение .... вы могли бы сделать SQL-выбрать «ч eck "на уровне приложения перед вставкой, чтобы убедиться, что у вас еще нет этих двух ключей.