Данное ограничение объявляет столбец или комбинацию столбцов уникальным ключом. Обычно используется для указания возможных ключей. Ограничение может быть назначено на уровне таблицы и на уровне столбца.
Cинтаксис предложения CONSTRAINT, задающего ограничение UNIQUE на уровне столбца
[СONSTRAINT <имя ограничения>] UNIQUE
Пример 7
Задача.
Создать ограничение UNIQUE в таблице Subject для столбцаNameSubject.
Решение.
Ограничение затрагивает только один столбец, и оно может быть задано на уровне столбца.
CREATE TABLE Subject
(IDSubject INT IDENTITY
CONSTRAINT SubjectPrimary PRIMARY KEY,
NameSubject VARCHAR(35) NOT NULL
CONSTRAINT SubjectNameSubjectUnique UNIQUE);
В этом случае целесообразно установить ограничение NOT NULL на атрибут NameSubject, так как автоматически оно не устанавливается.
Синтаксис на уровне таблицы
[, СONSTRAINT <имя ограничения>] UNIQUE (<список столбцов>)
Пример 8
Задача.
Установить ограничения UNIQUE в таблице Student.
Решение.
При установлении ограничений следует обратить внимание на следующее: в отношении студент существует несколько множеств атрибутов, которые могут однозначно идентифицировать любую строку в таблице. Во-первых, это ИНН, во-вторых, Номер зачетки, в-третьих, так называемые паспортные данные, которые включают в себя Номер паспорта, Серию паспорта, Наименование организации, выдавшей паспорт и Дату выдачи. В качестве первичного ключа был выбран Номер зачетки, поскольку именно значение этого атрибута не меняется в процессе жизни базы данных, по крайней мере, его значение определяется внутренними требованиями ВУЗа и может быть ими же отрегулировано. Вероятность изменения ИНН, как это не грустно, существует, а что касается третьего множества, то первой причиной того, чтобы отвергнуть его использование в качестве первичного ключа, является то, что оно составное, во-вторых, вероятность того, что его значения будут меняться в процессе жизни базы данных, очень велика. Для этого студентке нужно просто выйти замуж и сменить фамилию, или кому-то из студентов потерять паспорт. Таким образом, создавая таблицу Student, целесообразно кроме ограничения PRIMARY KEY создать два ограничения UNIQUE.
|
|
CREATE TABLE Student
(NRecordBook VARCHAR (6)
CONSTRAINT StudentPrimary PRIMARY KEY,
INN VARCHAR(10)