Варианты других баз данных
Напомним: задание ограничений целостности при создании таблиц
Ограничения накладывают определенные условия на вводимые данные. Условием может быть уникальность значения, принадлежность к некоторому интервалу или списку значений, наличие первичного ключа, соответствующего внешнему ключу (ограничения ссылочной целостности).
SQL Server поддерживает четыре типа ограничений:
primary key,
foreign key,
check
unique.
Эти ограничения можно создавать на уровне таблицы с помощью опции CONSTRAINT
Опция PRIMARY KEY
Ограничение первичного ключа требует, чтобы содержимое столбца было уникальным. Объявление первичного ключа требует однозначную идентификацию записей таблицы.
Ограничение PRIMARY KEY или UNIQUE является обязательным требованием для обеспечения ссылочной целостности посредством ограничения внешних ключей. Это означает следующее: когда вы определяете внешние ключи, ссылающиеся на другие таблицы, для внешнего ключа заранее должен быть определен первичный ключ.
Пример. Объявляется ограничение первичного ключа:
USE Торговая_фирма
CREATE TABLE Клиенты
(ID_Клиента int NOT NULL
CONSTRAINT ID_Клиента PRIMARY KEY,
Название фирмы nvarchar(100) NOT NULL,
Адрес nvarchar(100) NOT NULL)
Такой способ подходит для объявления первичных ключей, состоящих из одного столбца.
Если требуется объявить первичный ключ, состоящий из нескольких столбцов, этому ключу потребуется дать имя тоже с помощью опции CONSTRAINT .
Пример. Создается составной ключ таблицы.
Пусть используется база данных Дом_книги:
USE Дом_книги
CREATE TABLE Authors
(FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL,
CONSTRAINT author_pk PRIMARY KEY ( FirstName, LastName))
В этом примере принято допущение, что не может быть авторов с одинаковым именем и фамилией. В таком случае комбинация <имя, фамилия автора> может служить первичным ключом.
В сущности, указывать ключевое слово CONSTRAINT с именем внешнего ключа необязательно. Если имя внешнего ключа не указано, SQL Server присвоит его за вас.
У ограничения PRIMARY KEY существует альтернатива - ограничение UNIQUE.
Отличие в том, что для ограничения unique допускает ввод неопределенных значений.
Внешние ключи таблицы. Опция FOREIGN KEY
База данных представляет собой набор взаимосвязанных таблиц. Ограничение внешнего ключа позволяет обеспечить целостность данных в дочерней таблице.
При установке ограничения внешнего ключа SQL Server обращается к столбцу первичного ключа связанной таблицы и проверяет совпадение данных в общих столбцах.
Пример создания внешнего ключа (ссылочного ограничения по внешнему ключу).
В примере создается таблица, содержащая имена книг и ID авторов. Ограничение REFERENCES требует, чтобы значение поля AuthorlD уже присутствовало в таблице Authors.
USE Дом_книги
CREATE TABLE Books
(BookName varchar(250) NOT NULL,
AuthorlD i nt NOT NULL
CONSTRAINT author_fk REFERENCES Authors (AuthorlD))
Также это ограничение можно объявить на уровне таблицы с дополнительными опциями ON DELETE и ON UPDATE:
USE Дом_книги
CREATE TABLE Books
(BookName varchar(250) NOT NULL, AuthorlD int NOT NULL,
CONSTRAINT author_fk FOREIGN KEY (AuthorlD)
REFERENCES Authors (AuthorlD)
ON DELETE
ON UPDATE)
В этой команде определяется, что в случае удаления записи из родительской таблицы соответствующие записи из дочерней удаляются (это определяется в части ON DELETE команды).
Но в случае обновления данных в родительской таблице SQL Server не будет предпринимать никаких действий.
Это определяется в части ON UPDATE команды.
Ограничения внешнего ключа, состоящие из нескольких столбцов, должны объявляться на уровне таблицы. Они ссылаются на столбцы, объявленные в качестве первичных ключей или имеющие уникальные индексы.
Опция CHECK – ограничения проверки данных
В некоторых ситуациях осуществляется проверка на правильность ввода данных (как ограничение внешнего ключа).
Деловые правила могут предъявлять определенные требования к вводимым данным. Для их реализации можно воспользоваться ограничением проверки. Кроме того, ограничения проверки позволяют сравнивать данные из различных столбцов - при условии, что столбцы находятся в одной таблице, а ограничение объявлено на уровне таблицы.
Например, создается таблица Authors, хранящая только записи авторов, имена которых начинаются с буквы А (специально для издательства, которое работает только с теми авторами, чье имя начинается с А).
USE Дом_книги
CREATE TABLE Authors
(AuthorlD int NOT NULL CONSTRAINT author_pk PRIMARY KEY,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL )
ALTER TABLE
Authors ADD CONSTRAINT lastname_ck
CHECK (LastName LIKE 'A%')
Тот же пример, но с объявлением ограничения на уровне таблицы:
USE Дом_книги
CREATE TABLE Authors
(AuthorlD int NOT NULL CONSTRAINT author_pk PRIMARY KEY,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL,
CONSTRAINT astname__cfc CHECK (LastName LIKE 'A%') )
При таком объявлении проверка позволяет сравнивать данные столбца с другим столбцом в той же таблице.
Значения по умолчанию
При вводе данных в базу столбцы либо заполняются, либо остаются неопределенными (имеют значение null). Иногда неопределенные значения запрещаются. В таких случаях требуется задать значение по умолчанию.
Для этой цели используется параметр DEFAULT.
Пример определения значения по умолчанию:
USE Дом_книги
CREATE TABLE Authors (
AuthorID int NOT NULL CONSTRAINT author_pk PRIMARY KEY,
[Имя] nvarchar(50) NOT NULL,
[Фамилия] nvarchar(50) NOT NULL,
[Гражданство] nvarchar(50) NOT NULL
CONSTRAINT cit_def DEFAULT 'Россия' )
Можно сделать тo же самое объявление, но на уровне таблицы (с помощью ключевого слова for определяется конкретный столбец таблицы):
USE Дом_книги
CREATE TABLE Authors (
AuthorlD int NOT NULL CONSTRAINT author_pk PRIMARY KEY,
[Имя] nvarchar(50) NOT NULL,
[Фамилия] nvarchar(50) NOT NULL,
[Гражданство] nvarchar(50) NOT NULL,
CONSTRAINT cit_def DEFAULT ‘Россия’ FOR [Гражданство] )
Вычисляемые столбцы
Вы можете создавать виртуальные столбцы, значения которых вычисляются с использованием функций, констант или других столбцов таблицы. Вычисляемые столбцы определяются в виде SQL-выражений.
Пример таблицы с вычисляемым столбцом:
USE Дом_книги
CREATE TABLE bookPrice
(BookID int NOT NULL CONSTRAINT author_pk PRIMARY KEY,
[Оптовая цена] smallmoney NOT NULL,
[Розничная цена] smallmoney NOT NULL,
[Надбавка] AS ([Розничная цена] - [Оптовая цена])
)
В этой команде столбец Надбавка является вычисляемым. При этом результаты вычисления не хранятся в базе, а рассчитываются по мере необходимости. В итоге база занимает меньше места.
Удаление таблиц
Ненужные таблицы удаляются командой DROP.
Удаленная таблица навсегда пропадает из базы данных вместе со всеми данными. Это действие отменить невозможно.
Команда DROP TABLE имеет следующий синтаксис:
DROP TABLE имя_таблицы
Пример:
DROP TABLE Authors
Или вот пример удаления глобальной временной таблицы из предыдущего раздела:
DROP TABLE ##globalTenpTablel
Таблицу, на которую ссылаются какие-либо ограничения, удалить нельзя. Перед удалением таблицы необходимо удалить эти ограничения.
Таблица может быть удалена только владельцем.
Удаление базы данных
Удаление базы данных осуществляется командой
DROP DATABASE имя_базы данных
Удаляются все содержащиеся в БД объекты вместе с файлами, в которых они размещались.
Для удаления БД пользователь должен обладать соответствующими правами.