SQL Как не вставлять дублированные значения - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать процедуру, которая вставляет данные в таблицу регистров, но я не хочу повторять второй параметр, это таблица

CREATE TABLE Inscription
(
    idClass INT references tb_class,
    idStudent INT references tb_student,
)

Идея состоит в том, что студент(idStudent) может регистрироваться в разных классах, но не в одном и том же классе (idClass), я попытался добавить уникальное ограничение в столбце idStudent, но это позволяет ученику зарегистрироваться только в одном классе.

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Я всегда предлагаю, чтобы все таблицы имели числовой первичный ключ.Кроме того, ваши ссылки на внешние ключи неверны.И что вы хотите сделать, это добавить уникальное ограничение.

Точный синтаксис зависит от базы данных.Следующее предназначено для SQL Server:

CREATE TABLE Inscriptions (
    idInscription int identity(1, 1) primary key
    idClass int references tb_classes(idClass),
    idStudent int references tb_students(idStudnt)
    unique (idClass, idStudent)
);

Обратите внимание, что я называю таблицы как множественное число сущности, но в качестве идентификатора используется единственное число.

The Inscriptions Для таблицы, вероятно, нужны и другие столбцы, такие как дата / время надписи, метод и другая связанная информация.

0 голосов
/ 02 декабря 2018

Ваш уникальный ключ должен включать в себя как idClass, так и idStudent, поэтому любая конкретная комбинация не может повторяться.

0 голосов
/ 02 декабря 2018

Вы хотите создать ограничение для вашей таблицы, которое включает в себя оба столбца idClass и idStudent.

После создания этого ограничения попытка вставить дубликат класса / ученика приведет к возникновению ошибки.

Поскольку в вашей таблице, кажется, нет первичного ключа, лучше сделать это ограничение вашим первичным ключом.

Примечание: вы не сказали, какую СУБД вы используете, следовательно, не может дать вам точнуюсинтаксис для использования ...

...