Программирование >>  Программирование баз данных 

1 ... 45 46 47 [ 48 ] 49 50 51 ... 346


Безусловно, ситуации, в которых многочисленные строки таблицы логически идентичны друг другу, встречаются весьма часто, но это не означает, что для такой таблицы возможность создания первичного ключа отсутствует. В подобных обстоятельствах может быть предусмотрено искусственное создание ключа того или иного типа. Подоб ный подход чаще всего реализуется с использованием столбца идентификации, но в некоторых ситуациях в большей степени оправдано применение идентификаторов GUID.

Первичный ключ гарантирует уникальность сочетания значений столбцов, объявленных как принадлежащие к этому первичному ключу. Сами эти )Т1икальные значения служат в качестве идентификаторов для каждой строки в таблице. Для создания первичных ключей фактически применяются два способа. Они заключаются в следующем: первичный ключ может быть создан с помощью команды CREATE TABLE во время создания таблицы или введен в действие впоследствии с помощью команды ALTER TABLE.

Создание первичного ключа при создании таблицы

Рассмотрим один из операторов CREATE TABLE, приведенных в предыдущей главе:

CREATE TABLE Customers (

CustomerNo CustomerName Addressl City State Zip

Contact Phone

int IDENTITY

NULL,

varchar(30)

NULL,

varchar(30)

NULL,

varchar(20)

NULL,

char(2)

NULL,

varchar(10)

NULL,

varchar(25)

NULL,

char(15)

NULL

Читатель уже должен быть хорошо знаком с подобными операторами CREATE, а теперь введем в него очень важную часть - ограничение PRIMARY KEY. В качестве первичного ключа обозначим столбец CustomerNo. Чем обусловлен выбор столбца CustomerNo? Более подробные сведения о том, каким требованиям должен соответствовать первичный ключ, приведены в главе 7, а на данный момент приведем лишь такое соображение: необходимо прежде всего исключить появление одинаковых значений идентификаторов заказчиков, CustomerNo, у двух или нескольких разных заказчиков. Этим и определяются наши дальнейшие действия. Мы задаем в качестве первичного ключа идентификатор заказчика CustomerNo. Подобные системы, в которых для каждого из обслуживаемых заказчиков предусмотрен уникальный идентификатор, эксплуатируются уже много лет, поэтому нет смысла снова изобретать это колесо.

Чтобы внести корректировку в рассматриваемый оператор CREATE TABLE для задания в нем ограничения PRIMARY KEY, достаточно ввести информацию об ограничении сразу после определения столбца (столбцов), который должен войти в состав первичного ключа:

CREATE TABLE Customers (

CustomerNo int IDENTITY NOT NULL

PRIMARY KEY,

CustomerName varchar(30) NOT NULL,

Addressl varchar(30) NOT NULL,

City varchar(20) NOT NULL,

State char(2) NOT NULL,

Zip varchar(10) NOT NULL,



Contact varchar(25) NOT NULL,

Phone char(15) NOT NULL

Чтобы можно было приступить к выполнению этого оператора, необходимо вначале удалить существующую таблицу Customers. После этого с помощью данного оператора снова создайте таблицу Customers, которая нам понадобится в ходе дальнейшего изучения текущей главы.

Создание первичного ключа на существующей таблице

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

Создадим типичную таблицу Employees с данными о сотрудниках. В данном случае таблица Employees создается в базе данных Accounting (исходный код сценария создания этой базы данных приведен в предьщущей главе), но читатель может создать эту таблицу в другой базе данных, при условии, что в нее будет также помещена таблица Customers (поскольку в дальнейшем эти две таблицы будут использоваться вместе). USE Accounting

CREATE TABLE Employees (

EmployeelD int IDENTITY NOT NULL,

FirstName varchar(25) NOT NULL,

Middlelnitial char(l) NULL,

LastName varchar(25) NOT NULL,

Title varchar(25) NOT NULL,

SSN varchar(11) NOT NULL,

Salary money NOT NULL,

PriorSalary money NOT NULL, LastRaise AS Salary - PriorSalary,

HireDate smalldatetime NOT NULL,

TerminationDate smalldatetime NULL,

ManagerEmpID int NOT NULL,

Department varchar(25) NOT NULL

Теперь отметим, что в операторе создания таблицы, приведенном выше в качестве примера, не был предусмотрен первичный ключ, поэтому добавим его следующим образом: USE Accounting

ALTER TABLE Employees

ADD CONSTRAINT PK EmployeeID PRIMARY KEY (EmployeelD)

Ниже описано, какие сведения передаются в СУБД SQL в рассматриваемой команде ALTER.

Происходит добавление в таблицу определенного объекта. (В этом операторе могло бы быть также предусмотрено удаление.)

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

Ограничение целостности обозначается явно заданным именем в целях его применения в дальнейшем для ссылки на ограничение.

Регламентируется тип ограничения (PRIMARY KEY).

Указывается столбец (столбцы), к которому относится ограничение целостности.



Ограничения целостности foreign key

Внешние ключи не только обеспечивают целостность данных, но и указывают на наличие связей между таблицами. После задания внешнего ключа на таблице устанавливается зависимость между таблицей, для которой определяется внешний ключ (так называемой ссылающейся таблицей), и таблицей, на которую ссылается внешний ключ (так называемой таблицей, упомянутой в ссыпке). После задания на ссылающейся таблице внешнего ключа любая строка, вставляемая в эту таблицу, должна соответствовать одному из следующих двух условий: иметь согласующуюся с ней строку в столбце (столбцах), которому соответствует внешний ключ таблицы, указанной в ссылке, или иметь значение столбца (столбцов) внешнего ключа NULL. Такое определение может показаться немного запутанным, поэтому рассмотрим, как оно применяется на примере.

В предыдущем предложении слова иметь значение NULL , указывают на то, что фактически должен содержать оператхф INSERT, применяемый к ссылающейся таблице. Как будет вскоре описано, в действительности эти данные после ввода в таблицу могут выглядеть немного иначе, в зависимости от того, какие опции заданы в объявлении FOREIGN KEY.

Создадим в базе данных Accounting еще одну таблицу и назовем ее Orders. В приведенном ниже сценарии с оператором CREATE заслуживает внимания то, что в таблицах предусмотрено применение и первичного, и внешнего ключа. С другой стороны, объявление внешнего ключа, который задается на таблице в этом сценарии, почти полностью совпадает с объявлением первичного ключа, не считая того, что в этом объявлении указана таблица, на которую ссылается внешний ключ. Синтаксическая структура объявления внешнего ключа предусматривает необходимость указания столбца или столбцов, на которые распространяется ограничение FOREIGN KEY, и выглядит примерно таким образом:

<column name> <data type> <nullability> FOREIGN KEY REFERENCES <table name>(<column name>) [ON DELETE [ON UPDATE

При выполнении этого задания использование конструкции ON не предусмотрено. Таким образом, применительно к таблице Orders может быть подготовлен сценарий, который выглядит, как показано ниже. USE Accounting

CREATE TABLE Orders (

OrderlD int IDENTITY NOT NULL

PRIMARY KEY, CustomerNo int NOT NULL

FOREIGN KEY REFERENCES Customers(CustomerNo), OrderDate smalldatetime NOT NULL, EmployeelD int NOT NULL

Следует учитывать, что столбец, на который фактически ссылается внешний ключ, должен иметь определенное на нем ограничение PRIMARY KEY или UNIQUE. (Ограничения целостности UNIQUE описаны ниже в данной главе.)

CASCADE

ACTION

NULL

DEFAULT

CASCADE

ACTION

NULL

DEFAULT



1 ... 45 46 47 [ 48 ] 49 50 51 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика