tbd3
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ЛАБОРАТОРНАЯ РАБОТА №3-4
по дисциплине «ТЕХНОЛОГИИ БАЗ ДАНЫХ»
Кафедра ИСУиА
Выполнил:
МОСКВА, 2018 г.
Цель работы:
Разработка основных объектов базы данных и связей между ними.
Задачи:
Освоить способы создания первичного ключа; суррогатного ключа, с помощью последовательностей; отработать ввод данных, создание связей и индексов, изменение структуры таблицы с контрольными ограничениями, создание представлений:
Ход работы:
Для выполнения лабораторной работы нам понадобятся таблицы CUSTOMER, WORK и CUSTOMER_ARTIST. Для того, чтобы создать их, сделаем файл Tables1 и заполним его:
CREATE TABLE CUSTOMER(
CustomerID INT NOT NULL,
Name VARCHAR(25) NOT NULL,
Street VARCHAR(30) NULL,
City VARCHAR(35) NULL,
State VARCHAR(2) NULL,
Zip VARCHAR(5) NULL,
Area_code VARCHAR(3) NULL,
Phone_number VARCHAR(8) NULL);
ALTER TABLE CUSTOMER
ADD CONSTRAINT CustomerPK PRIMARY KEY(CustomerID);
CREATE INDEX CustomerNameIndex ON CUSTOMER(Name);
CREATE TABLE ARTIST(
ArtistID INT PRIMARY KEY,
Name VARCHAR(25) NOT NULL,
Nationality VARCHAR(30) NULL,
Birthdate DATE NULL,
DeceaseDate DATE NULL);
CREATE UNIQUE INDEX ArtistNameIndex ON ARTIST(Name);
CREATE TABLE CUSTOMER_ARTIST(
ArtistID INT NOT NULL,
CustomerID INT NOT NULL);
ALTER TABLE CUSTOMER_ARTIST
ADD CONSTRAINT CustomerArtistPK PRIMARY KEY(ArtistID, CustomerID);
Заполним созданные таблицы значениями. Для этого создадим файл Filling со следующим содержанием:
CREATE SEQUENCE CustID INCREMENT BY 1 START WITH 1000;
CREATE SEQUENCE ArtistID INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE WorkID INCREMENT BY 1 START WITH 500;
CREATE SEQUENCE TransID INCREMENT BY 1 START WITH 100;
INSERT INTO ARTIST (ArtistID, Name, Nationality) Values
(ArtistID.NextVal, 'Tobey', 'US');
INSERT INTO ARTIST (ArtistID, Name, Nationality) Values
(ArtistID.NextVal, 'Miro', 'Spanish');
INSERT INTO ARTIST (ArtistID, Name, Nationality) Values
(ArtistID.NextVal, 'Frings', 'US');
INSERT INTO ARTIST (ArtistID, Name, Nationality) Values
(ArtistID.NextVal, 'Foster', 'Eng');
INSERT INTO ARTIST (ArtistID, Name, Nationality) Values
(ArtistID.NextVal, 'van Vronkin', 'US');
INSERT INTO CUSTOMER (CustomerID, Name, Area_code, Phone_number) Values
(CustID.NextVal, 'Jeffrey Janes', '206', '555-1234');
INSERT INTO CUSTOMER (CustomerID, Name, Area_code, Phone_number) Values
(CustID.NextVal, 'David Smith', '206', '555-443');
INSERT INTO CUSTOMER (CustomerID, Name, Area_code, Phone_number) Values
(CustID.NextVal, 'Tiffany Twilight', '360', '555-1040');
Свяжем таблицы CUSTOMER_ARTIST с таблицами CUSTOMER и ARTIST по внешнему ключу. Для этого введем следующие команды:
ALTER TABLE CUSTOMER_ARTIST ADD CONSTRAINT ArtistFK
FOREIGN KEY(ArtistID) REFERENCES ARTIST ON DELETE CASCADE;
ALTER TABLE CUSTOMER_ARTIST ADD CONSTRAINT CustomerFK
FOREIGN KEY(CustomerID) REFERENCES CUSTOMER ON DELETE CASCADE;
Далее нам необходимо создать таблицы WORK и TRANSACTION. Для этого запишем в файл Tables2 следующее:
CREATE TABLE WORK(
WorkID INT PRIMARY KEY,
Description VARCHAR(1000) NULL,
Title VARCHAR(25) NOT NULL,
Copy VARCHAR(8) NOT NULL,
ArtistID INT NOT NULL);
ALTER TABLE WORK ADD CONSTRAINT WorkArtistFK
FOREIGN KEY(ArtistID) REFERENCES ARTIST;
CREATE TABLE TRANSACTION(
TransactionID INT PRIMARY KEY,
DateAcquired DATE NOT NULL,
AcquisitionPrice NUMBER(7,2) NULL,
PurchaseDate DATE NULL,
SalesPrice NUMBER(7,2) NULL,
CustomerID INT NULL,
WorkID INT NOT NULL);
ALTER TABLE TRANSACTION ADD CONSTRAINT WorkFK
FOREIGN KEY(WorkID) REFERENCES WORK;
ALTER TABLE TRANSACTION ADD CONSTRAINT WorkCustomerFK
FOREIGN KEY(CustomerID) REFERENCES CUSTOMER;
CREATE UNIQUE INDEX WorkUniqueIndex ON WORK (Title, Copy, ArtistID);
Создадим представление, соединяющее 3 таблицы с наложенным условием на столбцы AcquisitionPrice и CustomerID :
CREATE VIEW ExpensiveArt AS
SELECT Name, Copy, Title FROM ARTIST, WORK, TRANSACTION
WHERE ARTIST.ArtistID = WORK.ArtistID AND
WORK.WorkID = TRANSACTION.WorkID AND
AcquisitionPrice > 10000 AND
CustomerID IS NULL;
В ыведем содержимое таблицы CUSTOMER и описание таблицы ARTIST (рисунок 1):
Рисунок 1 – Таблицы CUSTOMER и ARTIST
З анесем 2 новые записи о художниках в таблицу ARTIST (рисунок 2):
Рисунок 2 – Ввод записей в таблицу ARTIST
Создадим 3 записи о картинах в таблице WORK (рисунок 3):
Рисунок 3 – Ввод записей в таблицу WORK
В несем 2 записи о покупателях в таблицу CUSTOMER (рисунки 4-5):
Р исунок 4 – Создание записи в таблице CUSTOMER
Рисунок 5 – Создание записи в таблице CUSTOMER
Создадим в таблице CUSTOMER_ARTIST записи, показывающие связь покупателя и художника, которого он предпочитает (рисунок 6):
Р исунок 6 – Внесение записей в таблицу CUSTOMER_ARTIST
Введем записи о покупках картин предпочитаемых художников соответственными покупателями в таблицу TRANSACTION (рисунок 7):
Р исунок 7 – Внесение записей в таблицу TRANSACTION
Последовательно выведем содержание таблиц CUSTOMER, ARTIST, WORK и TRANSACTION (рисунки 8-11):
Рисунок 8 – Содержание таблицы CUSTOMER
Р исунок 9 – Содержание таблицы ARTIST
Рисунок 10 – Содержание таблицы TRANSACTION
Рисунок 11 – Содержание таблицы WORK