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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Рассмотрим один из операторов CREATE TABLE:

CREATE TABLE "EMPLOYEES"

("EMPLOYEE_ID" NUMBER(6,0),

"FIRST_NAME" VARCHAR2(20),

"LAST_NAME" VARCHAR2(25)

CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,

"EMAIL" VARCHAR2(25)

CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,

"PHONE_NUMBER" VARCHAR2(20),

"HIRE_DATE" DATE

CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,

"JOB_ID" VARCHAR2(10)

CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,

"SALARY" NUMBER(8,2),

"COMMISSION_PCT" NUMBER(2,2),

"MANAGER_ID" NUMBER(6,0),

"DEPARTMENT_ID" NUMBER(4,0)

)

В качестве первичного ключа обозначим столбец "EMPLOYEE_ID"

 

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

CREATE TABLE "EMPLOYEES"

("EMPLOYEE_ID" NUMBER(6,0),

"FIRST_NAME" VARCHAR2(20),

"LAST_NAME" VARCHAR2(25)

CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,

"EMAIL" VARCHAR2(25)

CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,

"PHONE_NUMBER" VARCHAR2(20),

"HIRE_DATE" DATE

CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,

"JOB_ID" VARCHAR2(10)

CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,

"SALARY" NUMBER(8,2),

"COMMISSION_PCT" NUMBER(2,2),

"MANAGER_ID" NUMBER(6,0),

"DEPARTMENT_ID" NUMBER(4,0),

CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY

("EMPLOYEE_ID") ENABLE

)

 

Следует отметить, что для проверки этого кода необходимо вначале удалить су­ществующую таблицу с помощью команды DROP TABLE EMPLOYEES

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

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

 

alter table " EMPLOYEES " add constraint

" EMP_EMP_ID_PK" primary key ("EMPLOYEE_ID ")

 

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

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

- Уточнение дополняемой части определения (согласно которому вводится огра­ничение).

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

- Тип ограничения (PRIMARY KEY).

- Столбец (столбцы), на который распространяется ограничение.

Ограничения foreign key

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

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

 

CREATE TABLE "DEPARTMENTS"

("DEPARTMENT_ID" NUMBER(4,0),

"DEPARTMENT_NAME" VARCHAR2(30)

CONSTRAINT "DEPT_NAME_NN" NOT NULL ENABLE,

"MANAGER_ID" NUMBER(6,0),

"LOCATION_ID" NUMBER(4,0),

CONSTRAINT "DEPT_LOC_FK" FOREIGN KEY

("LOCATION_ID")

REFERENCES "LOCATIONS" ("LOCATION_ID") ENABLE,

)

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

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

В отличие от первичных ключей, количество внешних ключей, заданных на та­блице, не должно ограничиваться только одним. Для любой таблицы может быть за­дано от нуля до 253 внешних ключей. Единственным условием является то, что каж­дый конкретный столбец может упоминаться только в одном внешнем ключе. Тем не менее в каждом отдельном внешнем ключе может быть задано несколько столбцов. Кроме того, предусмотрена также возможность использовать какой-то конкретный столбец в качестве назначения ссылок, заданных во внешних ключах многих таблиц.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 383; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.72.78 (0.006 с.)