DDL Урок 1. Создание таблиц
И, внезапно, продолжение уроков по SQL. Продолжим изучение языка с той его подчасти на которой закончили. DDL — Data Definition Language — это язык, который служит для описания структур данных в SQL сервере. Иными словами, если в первом цикле SQL мы занимались тем, что строили запросы к некоторой базе данных, которая пришла к нам из неоткуда или мы ее создали в каком — нить графическом редакторе, то теперь мы займемся тем, что будем создавать свою базу данных с помощью скриптов, а конкретно с помощью DDL. Почему мы не остановимся на графическом интерфейсе? Зачем делать что — то руками, если проще и удобней все сделать там? Оказывается графический интерфейс не всегда удобен, а также, когда вы программируете в нем, то могут возникнуть проблемы с переносом базы данных на другой сервер. Итак, выбор тру кодеров писать базу данных руками в чем нам и поможет DDL. Естественно первое, что мы хотим научиться сделать это создавать новые таблицы. Как было показано в предыдущем курсе для того, чтобы создать простенькую табличку достаточно воспользоваться упрощенным синтаксисом CREATE TABLE:
CREATE TABLE имя_таблица
( имя_столбца тип [NULL | NOT NULL])
Но так, как мы уже более менее понимаем зачем нужны базы данных и с чем их едят, то научимся на столбцы накладывать ограничения (Constraint)
Ограничение на первичный ключ — это такое ограничение, которое показывает, что данный столбец является первичным ключом. Обязательные условия:
- Таблица может содержать только один первичный ключ
- Первичный ключ должен быть всегда уникальным
- Все столбцы, помеченные как первичный ключ не могут быть NULL
Покажем как навешивать ограничения на первичный ключ в коде:
CREATE TABLE Book
(
ID INT NOT NULL IDENTITY CONSTRAINT PK_Book PRIMARY KEY,
)
Как вы могли догадаться, CONSTRAINT — ключевое слово, PK_Employee — название ограничения, а PRIMARY KEY — это ключевые слова, которые показывают тип ограничения.
Кроме этого первичный ключ можно задавать не в объявлении самого поля, а внутри таблицы:
CREATE TABLE Category
(
ID INT NOT NULL IDENTITY,
CONSTRAINT PK_Category PRIMARY KEY (ID)
)
Если вам нужен составной Primary Key, то вы можете создать его так:
CREATE TABLE BookCategories
(
CategoryID INT NOT NULL,
BookID INT NOT NULL,
CONSTRAINT PK_BookCategories PRIMARY KEY (CategoryID, BookID)
)
Если ваш Primary Key одна строка то используете объявление в поле, а если составной, то используйте объявление в таблице.
Вопрос, который должен возникнуть у вас, а что означает IDENTITY? Данное свойство задает полю автоинкремент, таким образом первая запись будет иметь ID=1, следующая ID=2 и так далее, при этом нам не нужно самим явно задавать значения поля ID. Кроме этого, если вас не устраивает прирост на 1, начиная с 1, то вы можете задать свои параметры. IDENTITY(0,2) означает, что записи будут нумероваться с нуля четными числами. Использование уникального идентификатора ID при создании таблицы называется искусственным первичным ключом. Данный способ стоит применять в том случае, если у вас нет подходящего естественного ключа, т.е вы не можете составить ключ из нужных полей таблицы. Например, у вас есть таблица Student в которой есть только два поля FIO и Age, тогда
Внешний ключ задает связь поля с полем из некоторой таблицы.
- Связь можно установить только с первичным ключом или столбцом, на который наложен уникальный индекс (UNIQUE)
- Если полю с ограничением внешнего ключа задается значение отличное от NULL, то оно должно присутствовать в связанном столбце.
- Ссылаться можно только на поля, которые находятся в той же базе на том же сервере, что и ваша таблица
- Ограничение должно ссылаться на столько же столбцов в другой таблице, на скольких столбцах оно определено
Свяжем нашу таблицу BookCategories с таблицами Category и Book. Поле BookID свяжется с полем ID таблицы Book, а поле CategoryID будет ссылаться на ID в таблице Category.
Ограничение на уникальность — это такое ограничение, что все значения в этом столбце должны быть уникальны, притом для каждого такого ограничения строится индекс.
Чтобы навесить уникальность на поле Name в таблице Employee можно использовать следующий код:
CREATE UNIQUE INDEX UI_Employee_Name ON Employee(Name)
Продолжим разговор о DDL в следующих уроках.
-
Роман Головач