7.3. Управление таблицами

 

7.3.1. Команда создания таблицы – CREATETABLE

 

Создание таблицы выполняется при помощи команды CREATE TABLE. Обобщенный синтаксис команды следующий:

 

CREATETABLE имя_таблицы

({<определение_столбца>|<определение_ограничения_таблицы>} [,…,{<определение_столбца>|<определение_ограничения_таблицы >}])

 

Т.е. после задания имени таблицы через запятую в круглых скобках должны быть перечислены все предложения, определяющие отдельные элементы таблицы – столбцы или ограничения целостности:

имя_таблицы — идентификатор создаваемой таблицы, который в общем случае строится из имени базы данных, имени владельца таблицы и имени самой таблицы.  При этом комбинация имени таблицы и ее владельца должна быть уникальной в пределах базы данных. Если таблица создается не в текущей базе данных, в ее идентификатор необходимо включить имя базы данных.

определение_столбца — задание имени, типа данных и параметров отдельного столбца таблицы. Названия столбцов должны соответствовать правилам для идентификаторов и быть уникальными в пределах таблицы.

определение_ограничения_таблицы – задание некоторого ограничения целостности на уровне таблицы.

 

Описание столбцов

 

Как видно из синтаксиса команды CREATE TABLE, для каждого столбца указывается предложение <определение_столбца>, с помощью которого и задаются свойства столбца. Предложение имеет следующий синтаксис:

 

<Имя_столбца>  <тип_данных> 

[<ограничение_столбца> ] [,…,<ограничение_столбца>]

 

Рассмотрим назначение и использование параметров.

Имя_столбца — идентификатор, задающий имя столбца таблицы.

тип_данных — задает тип данных столбца. Если при определении столбца явно не указано ограничение на хранения значений NULL, то будут использованы свойства типа данных, т.е. если выбранный тип данных позволяет хранить значения NULL, то и в столбце можно будет хранить значения NULL. Если же при определении столбца в команде CREATE ТАBLE явно будет разрешено или запрещено хранение значений NULL, то свойства типа данных будут перекрыты установленным на уровне столбца ограничением. Например, если тип данных позволяет хранить значения NULL, а на уровне столбца будет установлен запрет, то попытка вставки значения NULL в столбец закончится ошибкой.

ограничение_столбца — с помощью этого предложения указываются ограничения, которые будут определены для столбца. Синтаксис предложения следующий:

 

<ограничение_столбца>::=[ CONSTRAINT <имя_ограничения > ]

{[ DEFAULT <выражение>]

| [ NULL | NOT NULL ]

| [ PRIMARY KEY | UNIQUE ]

| [FOREIGN KEY

REFERENCES <имя_главной_таблицы>[(<имя_столбца> [,…,n])]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

]

| [CHECK (<логическое_выражение>)] 

}

 

Рассмотрим назначение параметров.

 

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

DEFAULT — задает значение по умолчанию для столбца. Это значение будет использовано при вставке строки, если для столбца явно не указано никакое значение.

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

PRIMARYKEY — определение первичного ключа на уровне одного столбца (т.е. первичный ключ будет состоять только из значений одного столбца). Если необходимо сформировать первичный ключ на базе двух и более столбцов, то такое ограничение целостности должно быть задано на уровне таблицы. При этом следует помнить, что для каждой таблицы может быть создан только один первичный ключ.

UNIQUE — указание на создание для столбца ограничения целостности UNIQUE, что позволит гаран­тировать уникальность каждого отдельного значения в столбце в пределах этого столбца. В таблице может быть создано несколько ограничений цело­стности UNIQUE.

FOREIGNKEY ... REFERENCES — указание на то, что столбец будет служить внешним ключом для таблицы, имя которой задается с помощью параметра <имя_главной_таблицы>.

(имя_столбца [,...,n]) — столбец или список перечисленных через запятую столбцов главной таблицы, входящих в ограничение FOREIGNKEY. При этом столбцы, входящие во внешний ключ, могут ссылаться только на столбцы первичного ключа или столбцы с ограничением UNIQUE таблицы.

ONDELETE {CASCADE | NOACTION} — эти ключевые слова определяют действия, предпринимаемые при удале­нии строки из главной таблицы. Если указано ключевое слово CASCADE, то при удалении строки из главной (родительской) таблицы строка в зависимой таблице также будет удалена. При указании ключевого слова NOACTION в подобном случае будет выдана ошибка. Значением по умолчанию является вариант NOACTION.

ONUPDATE {CASCADE | NOACTION} — эти ключевые слова определяют действия, предпринимаемые при модификации строки главной таблицы. Если указано ключевое слово CASCADE, то при модификации строки из главной (родительской) таблицы строка в зависимой таблице также будет модифицирована. При использовании ключевого слова NOACTION в подобном случае будет выдана ошибка. Значением по умолчанию является вариант NOACTION.

CHECK — ограничение целостности, инициирующее контроль вводимых в столбец (или столбцы) значений.

логическое_выражение — логическое выражение, используемое для ограниче­ния CHECK.

 

Ограничения на уровне таблицы

 

Синтаксис команды CREATE TABLE предусматривает использование предложения <ограничение_таблицы>, с помощью которого определяются ограничения цело­стности на уровне таблицы. Синтаксис предложения следующий:

 

<ограничение_таблицы> ::= [ CONSTRAINT <имя_ограничения>]

{ [ { PRIMARYKEY | UNIQUE }

{(<имя_колонки> [ASC | DESC] [,…,n] )}]

| FOREIGN KEY

[ ( <имя_колонки>[,..., n ] ) ]

REFERENCES <внешняя_таблица> [ (<имя_колонки_внешней_таблицы> [, ...,n ] ) ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

|CHECK (<логическое_выражение> )

}

Назначение параметров совпадает с назначением аналогичных параметров предложения <ограничение_столбца>. Тем не менее, в предложении <ограничение_таблицы> имеются некоторые новые параметры:

имя_колонки — столбец (или список столбцов), на которые необходимо наложить ка­кие-либо ограничения целостности.

[ASC | DESC] — метод упорядочивания данных в индексе. Ин­декс создается при указании ключевых слов PRIMARYKEY, 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_Студент))

 

На все столбцы таблицы, кроме столбцов Адрес и Телефон, наложены ограничения NOTNULL, запрещающие ввод строки при неопределенном значении столбца.

 

Для создания таблицы «Дисциплины» была использована команда:

 

CREATE TABLE Дисциплины

(ID_Дисциплина  INTEGER NOT NULL,

Наименование      VARCHAR(40) NOT NULL,

PRIMARY KEY    (ID_Дисциплина),

UNIQUE               (Наименование))

 

Таблица содержит 2 столбца (ID_Дисциплина, Наименование).

На столбцы ID_Дисциплина, Наименование наложены ограничения NOTNULL, запрещающие ввод строки при неопределенном значении столбца.

Столбец 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)))

 

На все столбцы таблицы наложены ограничения NOTNULL, запрещающие ввод строки при неопределенном значении столбца.

Для значений столбца Оценка сформулировано логическое выражение, разрешающее вводить только значения от 0 до 5: 0 – незачет, 1 – зачет, 2 – неудовлетворительно, 3 – удовлетворительно, 4 – хорошо, 5 – отлично.

 

И, наконец, перечислим столбцы «Кадровый_состав»:

ID_Преподаватель – тип данных INTEGER, уникальный ключ;

Фамилия – тип данных CHAR, длина 30;

Имя - тип данных CHAR, длина 15;

Отчество - тип данных CHAR, длина 20;

Должность - тип данных CHAR, длина 20;

Кафедра - тип данных CHAR, длина 3;

Адрес - тип данных CHAR, длина 30;

Телефон - тип данных CHAR, длина 8.

Создание таблицы выполнялось с помощью следующей команды:

 

CREATETABLEКадровый_состав

(ID_ Преподаватель      INTEGERNOTNULL,

 Фамилия                      CHAR(30) NOTNULL,

 Имя                              CHAR(15) NOT NULL,

 Отчество                     CHAR(20) NOT NULL,

 Должность                            CHAR(20) NOT NULL,

 Кафедра                       CHAR(3) NOT NULL,

 Адрес                           CHAR(30),

 Телефон                       CHAR(8),

 PRIMARY KEY           (ID_Преподаватель))

 

На все столбцы таблицы, кроме столбцов Адрес и Телефон, наложены ограничения NOTNULL, запрещающие ввод строки при неопределенном значении столбца.

Для таблиц «Учебный_план» и «Сводная_ведомость» должны быть построены внешние ключи, связывающие таблицы базы данных «Сессия»:

FK_Дисциплина – внешний ключ, связывающий таблицы «Учебный_план» и «Дисциплины» по столбцу ID_Дисциплина;

FK_Кадровый_состав – внешний ключ, связывающий таблицы «Учебный_план» и «Кадровый_состав» по столбцу ID_Преподаватель;

FK_Студент – внешний ключ, связывающий таблицы «Сводная_ведомость» и «Студенты» по столбцу ID_Студент;

FK_План – внешний ключ, связывающий таблицы «Сводная_ведомость» и «Учебный_план» по столбцу ID_План.

 

Добавление внешних ключей в таблицы будет описано при рассмотрении возможностей команды ALTERTABLE.

 

 

К оглавлению

Назад к разделу "7.2.5. Определение значения по умолчанию"

Вперед к разделу "7.3.2. Изменение структуры таблицы – команда ALTER TABLE"