Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 10 - Создание и модификация БД.docx
Скачиваний:
7
Добавлен:
25.11.2019
Размер:
85.33 Кб
Скачать

Варианты других баз данных

Напомним: задание ограничений целостности при создании таблиц

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

SQL Server поддерживает четыре типа ограничений:

  1. primary key,

  2. foreign key,

  3. check

  4. 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 имя_базы данных

Удаляются все содержащиеся в БД объекты вместе с файлами, в которых они размещались.

Для удаления БД пользователь должен обладать соответствующими правами.