Ограничения на уровне таблицы. Синтаксис команды create Table предусматривает использование предложения <ограничение таблицы>, с помощью которого определяются ограничения целостности на уровне таблицы.
Синтаксис предложения следующий:
<ограничение_таблицы> := [ CONSTRAINT <имя_ограничения>] { [ { PRIMARY KEY | UNIQUE } { (<имя_колонки> [ASC I DESC] [,..., n] )}] | FOREIGN KEY
[ ( <имя колонки>[,..., n ] ) ] REFERENCES <внешняя_таблица> [(<имя_колонки_внешней_таблицы> [, ..., n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] | CHECK (логическое выражение> ) }
Назначение параметров совпадает с назначением аналогичных параметров предложения <ограничение_столбца>. Тем не менее в предложении <ограничение_таблицы> имеются некоторые новые параметры:
<имя_колонки> — столбец (или список столбцов), на которые необходимо наложить какие-либо ограничения целостности;
[ASC | DESC] — метод упорядочения данных в индексе. Индекс создается при указании ключевых слов primary
key, unique. При указании значения ASC данные в индексе будут упорядочены по возрастанию, при указании значения DESC — по убыванию. По умолчанию используется значение ASC.
Примеры создания таблиц. В качестве примера рассмотрим инструкции создания таблиц базы данных Сессия: Таблица Студенты состоит из следующих столбцов:
ID_студент — тип данных integer, уникальный ключ;
Фамилия — тип данных char, длина 30;
Имя — тип данных char, длина 15;
Отчество — тип данных CHAR, длина 20;
Номер_группы — тип данных char, длина 6;
Адрес — тип данных char, длина 30;
Телефон — тип данных char, длина 8.
Создание таблицы выполнялось с помощью следующей команды:
CREATE TABLE Студенты
(ID_Студент INTEGER NOT NULL,
Фамилия CHAR(30) NOT NULL,
Имя CHAR(15) NOT NULL,
Отчество CHAR(20) NOT NULL,
Номер_группы INTEGER NOT NULL,
Адрес . CHAR(30),
Телефон CHAR(8),
PRIMARY KEY (ID_Студент) )
На все столбцы таблицы, кроме столбцов Адрес и Телефон, наложены ограничения not null, запрещающие ввод строки при неопределенном значении столбца.
Для создания таблицы Дисциплины была использована команда:
CREATE TABLE Дисциплины
(ID_Дисциплина INTEGER NOT NULL, Наименование VARCHAR(40) NOT NULL, PRIMARY KEY(ID_Дисциплина) ,UNIQUE (Наименование))
Таблица содержит два столбца (ID_Дисциплина, Наименование).
На столбцы ID_Дисциплина, Наименование наложены ограничения not null, запрещающие ввод строки при неопределенном значении столбца.
Столбец ID_Дисциплина объявлен первичным ключом, а на значения, вводимые в столбец Наименование, наложено условие уникальности.
Таблица Учебный_план включает в себя следующие столбцы:
ID_план — тип данных integer, столбец уникального ключа;
ID_Дисциплина — тип данных integer;
Семестр — тип данных integer;
Количество_часов — тип данных INTEGER;
ID_Преподаватель — тип данных INTEGER.
Создание таблицы выполнялось с помощью следующей команды:
CREATE TABLE Учебный_план
(ID_План INTEGER NOT NULL,
ID_Дисциплина INTEGER NOT NULL,
Семестр INTEGER NOT NULL,
Количество_часов INTEGER,
ID_Преподаватель INTEGER,
PRIMARY KEY (ID_План),
CHECK ((Семестр >= 1) OR (Семестр <= 10)))
Для значений столбца Семестр сформулировано логическое выражение, разрешающее вводить только значения от 1 до 10.
Таблица Сводная_ведомость состоит из следующих столбцов:
ID_Студент — тип данных integer, столбец уникального ключа;
ID_План — тип данных integer, столбец уникального ключа;
Оценка — тип данных INTEGER;
Дата_сдачи — тип данных DATETIME;
ID_Преподаватель — ТИП данных INTEGER.
Создание таблицы выполнялось с помощью следующей команды:
CREATE TABLE Сводная_ведомость
(ID_Студент INTEGER NOT NULL,
ID_План INTEGER NOT NULL,
Оценка INTEGER NOT NULL,
Дата_сдачи DATETIME NOT NULL,
PRIMARY KEY (ID_Студент, ID_Дисциплина),
CHECK ((Оценка >= 0) OR (Оценка <= 5)))
На все столбцы таблицы наложены ограничения not null, запрещающие ввод строки при неопределенном значении столбца.
Для значений столбца Оценка сформулировано логическое выражение, разрешающее вводить только значения от 0 до 5: 0 — незачет, 1 — зачет, 2 — неудовлетворительно, 3 — удовлетворительно, 4 — хорошо, 5 — отлично.
И наконец, перечислим столбцы таблицы Кадровый_состав:
ID_Преподаватель — тип данных INTEGER, уникальный ключ;
Фамилия — тип данных char, длина 30;
Имя — тип данных char, длина 15;
Отчество — тип данных char, длина 20;
Должность — тип данных char, длина 20;
Кафедра — тип данных CHAR, длина 3;
Адрес — тип данных char, длина 30;
Телефон — тип данных CHAR, длина 8.
Создание таблицы выполнялось с помощью следующей команды:
CREATE TABLE Кадровый_состав
(ID_ Преподаватель INTEGER NOT NULL, :
Фамилия CHAR(30) NOT NULL,
Имя CHAR(15) NOT NULL,
Отчество CHAR(20) NOT NULL,
Должность CHAR(20) NOT NULL,
Кафедра CHAR(3) NOT NULL,
Адрес CHAR(30),
Телефон CHAR(8),
PRIMARY KEY (ID_Преподаватель))
На все столбцы таблицы, кроме столбцов Адрес и Телефон, наложены ограничения not null, запрещающие ввод строки при неопределенном значении столбца.
Для таблиц Учебный_план и Сводная ведомость должны быть построены внешние ключи, связывающие таблицы базы данных Сессия:
FК_Дисциплина — внешний ключ, связывающий таблицы Учебный_план и Дисциплины по столбцу ID_Дисциплина;
FK Kадровый_состав — внешний ключ, связывающий таблицы Учебный_план и Кадровый состав по столбцу
ID_Преподаватель;
FK_Cтудент — внешний ключ, связывающий таблицы Сводная_ведомость и Студенты ПО столбцу ID_Студент;
fk_План — внешний ключ, связывающий таблицы Сводная_ведомость и Учебный_план ПО столбцу ID_План.
Добавление внешних ключей в таблицы будет описано при рассмотрении возможностей команды alter table.
Изменение структуры таблицы (ALTER TABLE)
Как бы тщательно ни планировалась структура таблицы, иногда возникает необходимость внести в нее некоторые изменения. Предположим, что в уже сформированную таблицу Преподаватели необходимо добавить номер домашнего телефона и домашний адрес. Эту операцию можно выполнять различными путями. Например, можно удалить таблицу со старой структурой и создать вместо нее новую таблицу с нужной структурой. Недостатком этого метода является то, что необходимо будет куда-то скопировать имеющиеся в таблице данные и переписать их в новую таблицу после ее создания.
Специальная команда alter table предназначена для модификации структуры таблицы. С ее помощью можно изменять свойства существующих столбцов, удалять или добавлять в таблицу столбцы, а также управлять ограничениями целостности как на уровне столбца, так и на уровне таблицы, т. е. выполнять следующие функции:
добавить в таблицу определение нового столбца;
удалить столбец из таблицы;
изменить значение по умолчанию для какого-либо столбца;
добавить или удалить первичный ключ таблицы;
добавить или удалить внешний ключ таблицы;
добавить или удалить условие уникальности;
добавить или удалить условие на значение.
Рассмотрим обобщенный синтаксис команды alter table:
ALTER TABLE <имя_таблицы>
[ALTER COLUMN <имя_столбца> [SET DEFAULT <выражение>]|
[DROP DEFAULT]]
|[ADD <определение_столбца>]
|DROP COLUMN <имя_столбца> [CASCADE]|[RESTRICT]]
|[ADD [<определение первичного ключа>] |
[<определение_внешнего ключа>] |
[<условие_уникальности>] |
[<условие_на_значение>]]|[DROP CONSTRAINT <имя_ограничения> [CASCADE]|[RESTRICT]]
Команда alter table берет на себя все действия по копированию данных во временную таблицу, удалению старой таблицы, созданию вместо нее новой таблицы с нужной структурой и последующим переписыванием в нее данных.
Назначение многих параметров и ключевых слов команды alter table аналогично назначению соответствующих параметров и ключевых слов команды create table (например, синтаксис конструкции <определение_столбца> совпадает с синтаксисом аналогичной конструкции команды create table).
Основные режимы использования команды alter table следующие:
добавление столбца;
удаление столбца;
модификация столбца;
изменение, добавление и удаление ограничений (первичных и внешних ключей, значений по умолчанию).
Достарыңызбен бөлісу: |