Создание многотабличной реляционной базы данных
Большинство трудностей, связанных со ссылочной целостностью, можно свести к минимуму, если тщательно управлять процессом обновления. В некоторых случаях необходимо каскадное удаление из родительской таблицы и ее дочерних таблиц. Чтобы при удалении строки из родительской таблицы произошли каскадные удаления, необходимо из всех дочерних таблиц удалить строки, значение внешнего ключа которых равно значению первичного ключа строки, удаляемой из главной таблицы. Рассмотрим следующий пример:
CREATE TABLE CLIENT ( | ||
ClientName | CHARACTER (30), | PRIMARY KEY, |
Address1 | CHARACTER (30), | |
Address2 | CHARACTER (30), | |
City | CHARACTER (25), | NOT NULL, |
State | CHARACTER (2), | |
PostalCode | CHARACTER (10), | |
Phone | CHARACTER (13), | |
Fax | CHARACTER (13), | |
ContactPerson | CHARACTER (30)); | |
CREATE TABLE TESTS ( | ||
TestName | CHARACTER (30) | PRIMARY KEY, |
StandardCharge | CHARACTER (30)); | |
CREATE TABLE EMPLOYEE ( | ||
EmployeeName | CHARACTER (30) | PRIMARY KEY, |
Address1 | CHARACTER (30), | |
Address2 | CHARACTER (30), | |
City | CHARACTER (25), | |
State | CHARACTER (2), | |
PostalCode | CHARACTER (10), | |
HomePhone | CHARACTER (13), | |
OfficeExtension | CHARACTER (4), | |
HireDate | DATE, | |
JobClassification | CHARACTER (10), | |
HourSalComm | CHARACTER (1)); | |
CREATE TABLE ORDERS ( | ||
OrderNumber | INTEGER | PRIMARY KEY, |
ClientName | CHARACTER (30), | |
TestOrdered | CHARACTER (30), | |
Salesperson | CHARACTER (30), | |
OrderDate | DATE); | |
CONSTRAINT NameFK FOREIGN KEY (ClientName) | ||
REFERENCES CLIENT (ClientName) | ||
ON DELETE CASCADE, | ||
CONSTRAINT TestFK FOREIGN KEY (TestOrdered) | ||
REFERENCES TESTS (TestName) | ||
ON DELETE CASCADE, | ||
CONSTRAINT SalesFK FOREIGN KEY (Salesperson) | ||
REFERENCES EMPLOYEE (EmployeeName) | ||
ON DELETE CASCADE); |