3.5
Создание таблиц
Операторы, создающие
таблицы базы данных нашего примера, показаны в листинге 3.1. Эти операторы
были оформлены в виде текстового файла под названием create_tables.sql и затем выполнены из
командной оболочки SQL*Plus посредством команды start create_tables.
Листинг 3.1.
CREATE TABLE CUSTOMER(
CustomerlD int NOT
NULL,
Name char(25) NOT
NULL,
Street char(30) NULL,
City char(35) NULL,
State char(2) NULL,
ZipPostalCode char(5) NULL,
Country varchar(50)
NULL,
AreaCode char(3) NULL,
PhoneNumber var(8) NULL,
Email varchar(100) NULL,
CONSTRAINT CustomerPK
PRIMARY KEY (CustomerlD));
CREATE TABLE ARTIST(
ArtistID int NOT
NULL,
Name char(25) NOT NULL,
Nationality varchar(30) NULL,
BirthDate numeric(4,0) NULL,
DeceasedDate numeric(4,0) NULL,
CONSTRAINT ArtistPK PRIMARY KEY (ArtistID),
CONSTRAINT ArtistAKl UNIQUE (Name),
CONSTRAINT NationalityValues
CHECK (Nationality IN
('Canadian', 'English', 'French', 'German', 'Mexican',
'Russian', 'Spanish', 'US')),
CONSTRAINT BirthValuesCheck
CHECK (BirthDate < DeceasedDate),
CONSTRAINT ValidBirthYear
CHECK ((BirthDate > 1000) AND
(BirthDate < 2100)),
CONSTRAINT ValidDeathYear
CHECK ((DeceasedDate > 1000) AND
(DeceasedDate <
2100)));
CREATE TABLE CUSTOMER_ARTIST_INT(
ArtistID int NOT
NULL,
CustomerlD int NOT
NULL,
CONSTRAINT CustomerArtistPK
PRIMARY KEY (ArtistID,
CustomerlD),
CONSTRAINT Customer_Artist_Int_ArtistFK
FOREIGN KEY (ArtistID)
REFERENCES ARTIST (ArtistID)
ON DELETE CASCADE,
CONSTRAINT
Customer_Artist_Int_CustomerFK
FOREIGN KEY (CustomerlD)
REFERENCES CUSTOMER
(CustomerlD)
ON DELETE CASCADE);
CREATE TABLE WORK(
WorkID int NOT
NULL,
Title varchar(25)
NOT NULL,
Description varchar(1000)
NULL, Copy varchar(8) NOT
NULL,
ArtistID int NOT
NULL,
CONSTRAINT WorkPK
PRIMARY KEY (WorkID),
CONSTRAINT WorkAKl
UNIQUE (Title, Copy), CONSTRAINT ArtistFK
FOREIGN KEY (ArtistID) REFERENCES ARTIST (ArtistID));
CREATE TABLE TRANSACTION(
TransactionID int NOT
NULL,
DateAcquired Date NOT
NULL,
AcquisitionPrice Numeric(8,2)
NULL, PurchaseDate Date NULL,
SalesPrice Numeric(8,2)
NULL,
AskingPrice Numeric(8,2)
NULL, CustomerlD int NULL,
WorkID int NOT
NULL,
CONSTRAINT TransactionPK
PRIMARY KEY (TransactionID),
CONSTRAINT SalesPriceRange
CHECK ((SalesPrice >
1000) AND (SalesPrice <=
200000)),
CONSTRAINT ValidTransDate
CHECK (DateAcquired <=
PurchaseDate), CONSTRAINT
TransactionWorkFK
FOREIGN
KEY (WorkID) REFERENCES WORK (WorkID),
CONSTRAINT
TransactionCustomerFK
FOREIGN KEY (CustomerlD)
REFERENCES CUSTOMER
(CustomerlD));
Выполнив эти операторы,
можно проверить состояние таблиц с помощью команды DESCRIBE. На рис. 3.9 показано
использование команды DESCRIBE для таблицы CUSTOMER. Следует обратить
внимание, что можно использовать две формы этой команды: DESCRIBE и DESC.
Рис. 3.9. Использование
команды DESCRIBE
Все таблицы базы данных
рассматриваемого примера, за исключением CUSTOMER_ARTIST_INT, имеют суррогатные ключи.
Oracle не позволяет напрямую
определять суррогатные ключи. Вместо этого необходимо использовать так
называемые последовательности.