Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Имена ограничений

Договоримся, назначая ограничение PRIMARY KEY использовать шаблон: <имя таблицы><тип ограничения>, поскольку ограничение PRIMARY KEY может быть в таблице только одно. Для ограничений FOREIGN KEY будем использовать шаблон - <имя ссылающейся таблицы><имя ссылочной таблицы><тип ограничения>. Для ограничения CHECK <имя таблицы><имя столбца><тип ограничения>, а для ограничения UNIQUE <имя таблицы><имя одного из столбцов><тип ограничения>.

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

Ограничения null и not null

Ограничение NULL (задается по умолчанию) явно указывает, что значения столбца могут быть не определены. Из условия целостности базы данных следует, что все атрибуты, входящие в первичный ключ или внешний ключ не должны содержать атрибуты с признаком NULL.

Пример 4

Задача.

Создать таблицу Subject cо столбцами IDSubject (значение которого генерируется автоматически) и NameSubject, исключив возможность неопределенных значений для обоих атрибутов.

Решение.

CREATE TABLE Subject

(IDSubject INT IDENTITY NOT NULL,

NameSubject VARCHAR (35) NOT NULL);

Ограничение primary key

Ограничение PRIMARY KEY задает значение первичного ключа на уровне столбца или таблицы.

Особенности при создании ограничения PRIMARY KEY:

  • В таблице может быть только один первичный ключ.

  • Первичный ключ не может иметь атрибутов с NULL признаком. Однако при задании первичного ключа в команде CREATE ограничение NOT NULL на атрибуты, входящие в первичный ключ назначается автоматически.

  • Одна и та же комбинация столбцов не может быть объявлена одновременно в качестве уникального и первичного ключа.

Cинтаксис предложения CONSTRAINT, задающего ограничение PRIMARYKEYна уровне таблицы.

[,СONSTRAINT <имя ограничения>] PRIMARY KEY (<список столбцов>)

Пример 5

Задача.

Создать таблицу Subject, установив ограничение первичного ключа на уровне столбца IDSubject.

Решение.

CREATE TABLE Subject

(IDSubject INT IDENTITY

CONSTRAINT SubjectPrimary PRIMARY KEY,

NameSubject VARCHAR (35) NOT NULL )

В данном случае на атрибут IDSubject можно дополнительно не накладывать ограничение NOT NULL, это произойдет автоматически при наложении ограничения PRIMARY KEY.

Пример 6

Задача.

Создать таблицу Progress, установив ограничение первичного ключа на уровне таблицы.

Решение.

CREATE TABLE Progress

(NRecordBook VARCHAR(6),

PIN INT,

IDSubject INT,

IDReport INT,

NTerm INT,

Mark SMALLINT

CONSTRAINT ProgressPrimary PRIMARY KEY (NRecordBook,

IdSubject, idReport, nTerm));

Cинтаксис предложения CONSTRAINT, задающего ограничение PRIMARY KEY на уровне столбца

[СONSTRAINT <имя ограничения>] PRIMARY KEY

Ограничение unique

Данное ограничение объявляет столбец или комбинацию столбцов уникальным ключом. Обычно используется для указания возможных ключей. Ограничение может быть назначено на уровне таблицы и на уровне столбца.

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)

CONSTRAINT StudentINNUnique UNIQUE,

StName VARCHAR(35),

IDGroup INT,

SPasport VARCHAR(4),

NPasport VARCHAR(6),

DataPasport Datetime,

NameDeptPasport VARCHAR(35),

CONSTRAINT StudentSPasportUnique UNIQUE (SPasport, NPasport, DataPasport, NameDeptPasport));

Задание 1

Создать таблицы Report, Teacher, SGroup, установив все необходимые ограничения.