В реляционных базах данных таблицы состоят из записей и полей (столбцов). Чтобы создать таблицу, достаточно задать ее имя и описать поля. Описание каждого поля содержит: имя поля, тип данных в поле, (опционально можно задать размер поля и ограничения).
Создание таблиц происходит с помощью команды CREATE TABLE, синтаксис которой можно представить так:
CREATE <имя таблицы>
(<имя поля 1> <тип данных> [<размер>] [ограничения],
<имя поля 2> <тип данных> [<размер>] [ограничения],
… ,
<имя поля N> <тип данных> [<размер>] [ограничения] )
Имя таблицы и имена столбцов обычно составляются из латинских букв (хотя Access допускает использование любых алфавитных символов) и желательно без пробелов. Это связано с тем, что если Вам придется использовать созданную базу данных в приложениях, построенных на продуктах других фирм (т.е. не фирмы Microsoft), то могут возникнуть проблемы доступа к таблицам. Особенно чувствительны к именам таблиц и полей Интернет приложения.
Наиболее часто используемые типы данных в описании полей следующие:
CHAR - символьные данные;
INTEGER- числовые целые;
FLOAT - числовые с плавающей запятой;
DATE данные типа даты.
Полный список типов данных можно получить в команде «Справка» справочной системы Access (разделе: «Эквивалентные типы данных ANSI SQL»). Фрагмент справочной таблицы типов данных Access приведен ниже:
Типы данных ANSI SQL
Типы данных Microsoft Jet SQL
Синоним
Тип данных Microsoft SQLServer
BIT, BIT VARYING
BINARY
VARBINARY, BINARY VARYING BIT VARYING
BINARY, VARBINARY
DATE, TIME, TIMESTAMP
DATETIME
DATE, TIME (См. Примечания)
DATETIME
DECIMAL
DECIMAL
NUMERIC, DEC
DECIMAL
REAL
REAL
SINGLE, FLOAT4, IEEESINGLE
REAL
DOUBLE PRECISION, FLOAT
FLOAT
DOUBLE, FLOAT8, IEEEDOUBLE, NUMBER (См. Примечания)
FLOAT
SMALLINT
SMALLINT
SHORT, INTEGER2
SMALLINT
INTEGER
INTEGER
LONG, INT, INTEGER4
INTEGER
CHARACTER, CHARACTER VARYING, NATIONAL CHARACTER, NATIONAL CHARACTER VARYING
CHAR
TEXT(n), ALPHANUMERIC, CHARACTER, STRING, VARCHAR, CHARACTER VARYING, NCHAR, NATIONAL CHARACTER, NATIONAL CHAR, NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING
CHAR, VARCHAR, NCHAR, NVARCHAR
При описании типа данных в полях можно, используя специальные ключевые слова, ввести дополнительные ограничения (columns constraints) на множество допустимых значений. Ниже приведены некоторые ключевые слова, описывающие ограничения:
NOT NULL – значение поля не должно быть пустым;
UNIQUE – значение поля должно быть уникальным;
PRIMERY KEY – определяет принадлежность поля ключу;
CHECK (<условие>) – проверка условия, которому должен удовлетворять вводимое значение в поле.
Рассмотрим пример создания таблицы базы данных, учитывающей сотрудников предприятия. Положим, что таблица Employees (Сотрудники) будет содержать следующие поля: код сотрудника (E_KOD), фамилия (E_FAM), имя (E_NAM), дата рождения (E_DATE) и стаж работы (E_STAG). Создадим описание таблицы Employees с помощью запроса на SQL, выбрав для этого режим Запросы®Создать®Конструктор®Запрос®SQL и выйдем на окно редактора запросов на языке SQL. В редакторе запишем запрос на языке SQL на создание таблицы Employees:
CREATE TABLE Employees (
E_KOD CHAR (4) NOT NULL,
E_FAM CHAR (30),
E_NAM CHAR (30),
E_DATE DATE,
E_STAG INTEGER );
Выполним созданный запрос и убедимся, что в списке таблиц появилась новая таблица (Employees). Вызвав режим «Конструктор таблиц», проверим правильность описания полей. Отметим, что в созданной таблице не указано ключевое поле.
Замечание: При благополучном исполнении запроса на создание новой таблицы Access не выдает никаких сообщений. В случае же обнаружения ошибки синтаксиса или невозможности выполнения запроса будет дано соответствующее сообщение.
Усложним запрос на создание таблицы Employees, введя ограничение, которое определяет поле E_KOD как ключевое («первичный ключ»):
CREATE TABLE Employees
(E_KOD CHAR (4) NOT NULL PRIMARY KEY ,
E_FAM CHAR (30),
E_NAM CHAR (30),
E_DAT DATE,
E_STAG INTEGER);
Ограничение на поле данных можно описать так же отдельной строкой. Например, если необходимо ускорить поиск данных по коду сотрудника (поле E_KOD), то его можно проиндексировать. Иными словами, можно создать специальный список (индекс), который позволит значительно ускорить поиск по полю, к которому «привязан» индекс. Запрос на создание таблицы с индексированным ключевым полем запишется так:
CREATE TABLE Employees
(E_KOD CHAR (4) NOT NULL ,
E_FAM CHAR (30),
E_NAM CHAR (30),
E_DAT DATE,
E_STAG INTEGER,
CONSTRAINT [Index1] PRIMARY KEY (E_KOD) );
В приложении 1 можно найти полное описание всех таблиц учебной базы данных Avto.mdb (база данных магазина продаж автомобилей).
Для описания связей между таблицами и обеспечения целостности базы данных используется ключевое слово FOREIGN KEY, полный синтаксис которого следующим образом:
Например, таблица Price («Цена») связана с таблицей Orders («Заказы») через поле pnum(код строки в таблице Price). Поле pnumвтаблице Price является ключевым (т.е. оно описано как PRIMARY KEY), а в таблице Orders полеpnum играет роль «внешнего» ключа для связи (FOREIGN KEY).Обычно такая связь отображается на схемах БД как отношение «один-ко-многим» (1:М). Поэтому в таблице Orders полеpnum надо описать как внешний ключ следующим образом:
CREATE TABLE Orders
(onum CHAR (4) NOT NULL PRIMARY KEY,
odate DATE,
amont FLOAT,
cnum CHAR(4),
snum CHAR(4),
pnum CHAR(4),
FOREIGN KEY (pnum) REFERENCES Price (pnum));
Замечание: Типы данных и размер поля у первичного ключа и у поля внешнего ключа должны быть одинаковые.
Если таблица Orders связана с несколькими таблицами, то каждая связь должна быть описана аналогичным способом.
Запросы на создание индексов в таблицах
Для повышения быстродействия базы данных в режиме поиска возможно создание специальных средств типа индексов. Синтаксис команды создания индекса можно представить так:
CREATE INDEX <имя индекса> ON <имя таблицы> (<имя столбца 1> [,<имя столбца 2>] …);
Описание обязательно должно содержать: имя индекса, имя таблицы, к которой привязан индекс и хотя бы одно имя столбца.
Пример использования индекса. Если в базе данных имеется таблица, в которой хранятся данных счетов клиентов (таблица INVOICES), то очень часто требуется наитии счет по его номеру (поле NUM_INV). В этом случае целесообразно создать индекс (имя индекса INDEX1 ) для поля NUM_INV:
CREATE INDEX INDEX1 ON INVOICES (NUM_INV);
Удаление индекса производится следующей командой:
DROP INDEX <имя индекса>.
Следует заметить, что в некоторых SQL-системах создание и удаление индексов происходит автоматически в зависимости от потребностей системы. Так что пользователи могут ничего не знать о существовании индексов в системе.