Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.4.rtf
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
7.36 Mб
Скачать

2.1. Создание таблиц

Создание таблицы производится с помощью оператора CREATE TABLE (создать таблицу) с указанием необходимых параметров. При этом создается постоянная таблица. Чтобы удалить ее из ба­зы данных, требуется выполнить специальный SQL-оператор.

Для создания временной таблицы используется оператор CREATE TEMPORARY TABLE (создать временную таблицу). Временная таб­лица, в отличие от постоянной, существует только в течение сеанса работы с базой данных, в котором она была создана. Од­нако временная таблица может быть доступна другим пользова­телям, как и постоянная таблица. Обычно временные таблицы создаются для представления в них текущих итоговых (отчет­ных) данных, доступных нескольким пользователям базы дан­ных. Далее приведен синтаксис оператора CREATE:

CREATE [TEMPORARY] TABLE имяТаблицы (

{Столбец1 тип [(размер)] [ограничение_столбца] [, ...] }

{ [ , CONSTRAINT ограничение__таблицы] [, . . . ] }

);

Здесь квадратные и фигурные скобки, в отличие от круглых, не являются элементами синтаксиса. В квадратных скобках заклю­чены необязательные элементы, а в фигурных - элементы, кото­рые могут повторяться.

Для создания таблицы необходимо указать ее имя и определить столбцы. Определение столбца включает его имя и тип. Если указывается длина столбца, то она заключается в круглые скобки после типа. Кроме того, можно указать ограничения для столбца. Все перечисленные элементы определения столбца указываются друг за другом через пробел. Если создаваемая таблица содержит несколько столбцов, то их определения разделяются запятыми. Ограничение может быть определено и для всей таблицы, а не только для ее столбцов. В этом случае используется ключевое слово CONSTRAINT (ограничение), после которого указывается са­мо ограничение.

Только что созданная таблица пуста, т. е. не содержит ни одной записи.

Далее приведен запрос на создание простой таблицы без ограни­чений:

CREATE TABLE Студент (

ID_студента INTEGER,

ФИО CHAR(20),

Специальность CHAR(15),

Примечание VARCHAR );

Данный запрос создает таблицу Студент, содержащую четыре столбца. Первый столбец целочисленный, а три других - сим­вольные.

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

Нередко ограничения устанавливаются и отслеживаются в при­ложениях, работающих с базами данных. Тем не менее, ограни­чения могут быть установлены и могут поддерживаться многими современными СУБД. Если вы создаете таблицу посредством SQL, то также имеете возможность задать эти ограничения, а вы­полнять их будет СУБД. При этом если одна и та же база данных используется несколькими приложениями, то вам придется уста­новить ограничения только один раз, а не столько, сколько име­ется приложений.

2.1.1. Ограничения для столбцов

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

Примечание: Microsoft Access не поддерживает ключевые слова DEFAULT и CHECK в определениях ограничений.

Рассмотрим в качестве примера создание таблицы Студент (ID_студента, ФИО, Специальность, Примечание). Идентификатор студента (целочисленный столбец ID_студента) должен одно­значно идентифицировать запись о студенте, т. е. иметь опреде­ленные и уникальные значения. Таким образом, данный столбец должен быть первичным ключом. От столбца ФИО (фамилия, имя и отчество) потребуем, чтобы в нем не было неопределенных значений. Целочисленный столбец Специальность должен со­держать номера специальностей, которые не превышают 12. Тогда запрос на создание такой таблицы будет иметь вид:

CREATE TABLE Студент (

ID_студента INTEGER PRIMARY KEY, ФИО CHAR(20) NOT NULL,

Специальность INTEGER CHECK(Специальность < 12),

Примечание VARCHAR

);

Предположим, что данный запрос выполнен. Тогда следующий запроса добавление новой записи в таблицу Студент вызовет сообщение об ошибке и не будет выполнен:

INSERT INTO Студент;

Это произойдет потому, что данный запрос добавляет пустую запись, все столбцы которой содержат значение NULL, и, следова­тельно, не выполняются ограничения для первых двух столбцов. А следующий запрос, добавляющий в таблицу первую запись и устанавливающий определенные значения для столбцов, не вы­зовет проблем со стороны СУБД:

INSERT INTO Студент (ID_студента, ФИО, Специальность)

VALUES (1, 'Иванов Иван Иванович', 9);

Попытаемся вслед за данным запросом добавить еще одну запись:

INSERT INTO Студент (ID__студента, ФИО, Специальность)

VALUES (1, 'Петров Петр Петрович', 5);

Данный запрос не будет выполнен из-за нарушения ограничения, наложенного на первый столбец: его значения должны быть не только определенными (отличными от NULL), но и уникальными. Запись можно добавить, если столбцу ID_студента присвоить, например, значение 2.

Ограничения для столбцов можно выразить и иначе - через ог­раничения доменов. Домен определяется как мно­жество значений. Домен в реляционной теории связывается с атрибутом отношения и, как таковой, определяет некоторое ограничение на этот атрибут (атрибут может прини­мать значения только из этого домена). В SQL можно создать до­мен, сначала не связанный ни с какими атрибутами (столбцами), определив для него допустимые значения: тип данных и допол­нительные ограничения. Затем этот домен можно задать в каче­стве ограничений для любого столбца в любой таблице подобно тому, как задаются типы столбцов. Другими словами, домен можно связать с одним или несколькими столбцами различных таблиц. В ряде случаев этот прием очень удобен, особенно если у вас имеется несколько "однотипных" столбцов в различных таблицах базы данных.

Чтобы создать домен, используется такой синтаксис:

CREATE DOMAIN имяДомена типДанных Ограничения;

Например, таблицу Студент (ID_студента, ФИО, Специальность, Примечание) можно определить традиционным образом:

CREATE TABLE Студент (

ID_студента INTEGER PRIMARY KEY,

ФИО CHAR(20) NOT NULL,

Специальность INTEGER CHECK (Специальность < 12),

Примечание VARCHAR );

Однако можно сначала определить домен с именем specDomain, задав для него тип данных и ограничение:

CREATE DOMAIN specDomain INTEGER CHECK (Специальность < 12) ;

Обратите внимание, что в определении домена, пока не связанно­го ни с каким столбцом какой-либо таблицы, задается тип значе­ний домена и ограничение на эти значения.

С учетом того, что домен specDomain создан, определение табли­цы Студент можно задать следующим образом:

CREATE TABLE Студент (

ID_студента INTEGER PRIMARY KEY, ФИО CHAR(20) NOT NULL,

Специальность specDomain,

Примечание VARCHAR );