
Домашние задания по БД / БД
.odtСоздание таблиц.
CREATE TABLE ACTORS
(
full_name VARCHAR(100),
Tname VARCHAR(100),
TIN INT,
title VARCHAR(100),
gender CHAR(1) CHECK (gender in ('М','Ж')),
PRIMARY KEY(TIN),
FOREIGN KEY (TIN) REFERENCES STUFF_OF_THEATER(TIN),
FOREIGN KEY (Tname) REFERENCES THEATER(Tname)
);
CREATE TABLE Directorate ( full_name VARCHAR(100),
Tname VARCHAR(100),
TIN INT,
rank VARCHAR(100),
gender CHAR(1) CHECK (gender in ('М','Ж')),
PRIMARY KEY(TIN),
FOREIGN KEY (TIN) REFERENCES STUFF_OF_THEATER(TIN),
FOREIGN KEY (Tname) REFERENCES THEATER(Tname) );
CREATE TABLE Customer ( full_name VARCHAR(50),
N_passport BIGINT,
PRIMARY KEY(N_passport) );
CREATE TABLE Peform( Data DATE,
Times TIME,
Tname VARCHAR(100),
TIN INT,
part VARCHAR(100),
PRIMARY KEY(Data,Times,TIN,Tname),
FOREIGN KEY (Data,Times,Tname) REFERENCES REPERTOIRE(Data,Times,Tname),
FOREIGN KEY (TIN) REFERENCES ACTORS(TIN) );
CREATE TABLE Place ( N_row INT,
N_seat INT,
Data DATE,
Times TIME,
Tname VARCHAR(100),
N_passport BIGINT,
PRIMARY KEY(N_row,N_seat,Data,Times,Tname),
FOREIGN KEY (Data,Times,Tname) REFERENCES REPERTOIRE(Data,Times,Tname),
FOREIGN KEY (N_passport) REFERENCES CUSTOMER(N_passport) );
CREATE TABLE Repertoire ( Data DATE,
Times TIME,
Tname VARCHAR(100),
name VARCHAR(100),
author VARCHAR(100),
genre VARCHAR(100),
PRIMARY KEY(Data,Times,Tname),
FOREIGN KEY(Tname) REFERENCES THEATER(Tname) );
CREATE TABLE Stuff_of_theater ( full_name VARCHAR(100),
Tname VARCHAR(100),
TIN INT,
gender CHAR(1) CHECK (gender in ('М','Ж')),
PRIMARY KEY(TIN),
FOREIGN KEY (Tname) REFERENCES THEATER(Tname) );
CREATE TABLE Theater ( Tname VARCHAR(100),
address VARCHAR(100),
seating_capacity INT,
PRIMARY KEY(Tname)
);
CREATE TABLE Technical_staff
(
full_name VARCHAR(100),
Tname VARCHAR(100),
TIN INT,
gender CHAR(1) CHECK (gender in ('М','Ж')),
PRIMARY KEY(TIN),
FOREIGN KEY (TIN) REFERENCES STUFF_OF_THEATER(TIN),
FOREIGN KEY (Tname) REFERENCES THEATER(Tname)
);
Виртуальные таблицы.
CREATE VIEW Counts (N_passport, conts)
AS SELECT N_passport,COUNT(N_passport)
FROM PLACE
GROUP BY N_passport
CREATE VIEW VIR (TIN, NAME,PART) AS
SELECT b.TIN, a.NAME, b.PART FROM REPERTOIRE a, PEFORM b
WHERE a.DATA=b.DATA AND a.TIMES = b.TIMES AND a.TNAME=b.TNAME
Запросы.
SELECT Tname FROM REPERTOIRE
WHERE AUTHOR='А.П.Чехов' AND DATA>='17.05.2010' AND DATA<='23.05.2010'
SELECT FULL_NAME
FROM ACTORS
WHERE TIN = ANY
(SELECT a.TIN FROM VIR AS a, VIR AS b
WHERE a.NAME!=b.NAME AND a.TIN=b.TIN)
SELECT TNAME
FROM THEATER
WHERE SEATING_CAPACITY > 5 AND TNAME = ANY
(SELECT Tname
FROM Peform AS a
WHERE "Мнимый больной"=
(SELECT Name
FROM Repertoire
WHERE Data=a.Data AND Times=a.Times AND Tname=a.Tname)
AND a.TIN = ANY
(SELECT TIN
FROM Actors
WHERE Full_name="Ю.М.Соломин")
);
SELECT FULL_NAME
FROM CUSTOMER
WHERE N_PASSPORT = ANY
(SELECT N_PASSPORT FROM COUNTS
WHERE CONTS =
(SELECT MAX(CONTS)
FROM COUNTS))
SELECT FULL_NAME FROM DIRECTORATE
WHERE TIN = ANY(SELECT a.TIN
FROM ACTORS a)