МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра САПР
З В І Т
про виконання контрольної роботи
з курсу:
«Проектування банків даних для комп’ютерних систем проектування»
Львів – 2010
ПОСТАНОВКА ЗАВДАННЯ
Бібліотека обслуговує читачів. Вона складається з читальних залів. На кожного читача заведена карточка яка містить інформацію про читача і прочитані книги. В читальному залі працює персонал. Існує абонемент.
Завдання: розробити інфологічну модель бази данних (далі БД), концептуальну модель, та написати запити на мові SQL, які будуть виконувати створення БД, створення таблиць та їх заповнення, вибірки даних, сортування і фільтрування, пошук даних з використанням регулярних виразів, створення обчислюваних полів, «Проектування банків даних для комп’ютерних систем проектування», «Робота із вкладеними запитами», Об’єднання таблиць
Інфологічна модель “об’єкт – зв’язок”
Концептуальна модель
SQL запити на створення бази данних, таблиць та їх заповнення:
SQL-запит для створення бази данних «Залізна дорога»:
CREATE DATABASE `ZaliznaDoroga`;
Створення таблиць:
SQL-запит для створення таблиці «Пасажир»:
CREATE TABLE Pasagur
(
Seriya_Documenta varchar( 10 ) NOT NULL,
Prizvushche varchar( 15 ) NOT NULL,
Imya varchar( 15 ) NOT NULL,
Po_Batkovi varchar( 15 ) NOT NULL,
Nomer_bilety int( 30) default NULL ,
Nomer_poizdy int( 30) default NULL ,
PRIMARY KEY (Nomer_poizdy )
) ENGINE = MYISAM DEFAULT CHARSET = utf8
SQL-запит для створення таблиці «Поїзд»:
CREATE TABLE Poizd
(
Nomer_poizdy int( 30) default NULL auto_increment,
Tup_Poizdy varchar(30) default NULL ,
Kinceva_stanciya varchar( 30 ) NOT NULL,
Chas_vidpravlennya varchar( 15 ) NOT NULL,
Data_vidpravlennya varchar( 15 ) NOT NULL,
Chas_prubyttya varchar( 20 ) default NULL ,
Data_prubyttya varchar( 20 ) default NULL ,
PRIMARY KEY (Nomer_poizdy)
) ENGINE = MYISAM DEFAULT CHARSET = utf8
SQL-запит для створення таблиці «Білет»:
CREATE TABLE Bilet
(
Nomer_bilety int( 10 ) NOT NULL,
Misce int( 15 ) NOT NULL,
Kinceva_stanciya varchar( 15 ) NOT NULL,
Cina varchar( 15 ) NOT NULL,
Vagon int(10) default NULL,
PRIMARY KEY (Nomer_bilety)
) ENGINE = MYISAM DEFAULT CHARSET = utf8
SQL-запит для створення таблиці «Вагон»:
CREATE TABLE Vagon
(
Vagon int( 10 ) NOT NULL,
Tup_vagony varchar( 15 ) NOT NULL,
Providnuk varchar( 15 ) default NULL,
Stan_vagony varchar( 15 ) default NULL,
PRIMARY KEY (Vagon)
) ENGINE = MYISAM DEFAULT CHARSET = utf8
SQL-запит для створення таблиці «Характеристика вагону»:
CREATE TABLE Harakterustuka_vagony
(
Vagon int( 10 ) NOT NULL,
Vugotovleuy varchar( 15 ) NOT NULL,
Zavod varchar( 30 ) default NULL,
PRIMARY KEY (Vagon)
) ENGINE = MYISAM DEFAULT CHARSET = utf8
Наповнення бази даних:
Таблиця «Пасажири»:
INSERT INTO Pasagur VALUES ('HJ98986', 'Oksencuk', 'Hrustuna', 'Olexandrivna', '45', '111');
INSERT INTO Pasagur VALUES ('MY88888', 'Danulko', 'Alina', 'Olegivna', '08', '503');
INSERT INTO Pasagur VALUES ('UH97987', 'Levuckyy', 'Sergiy', 'Volodumurovuch', '48', '231');
INSERT INTO Pasagur VALUES ('FD57892', 'Pavlovskyu', 'Sergiy', 'Ivanovuch', '56', '244');
INSERT INTO Pasagur VALUES ('SA32423', 'Pavlovska', 'Olga', 'Borusivna', '57', '012');
INSERT INTO Pasagur VALUES ('KO97343', 'Stratyk', 'Valeriy', 'Anatoliyevuch', '43', '235');
INSERT INTO Pasagur VALUES ('FD43545', 'Kyznecova', 'Olga', 'Vladuslavivna', '73', '156');
INSERT INTO Pasagur VALUES ('ER87873', 'Marchak', 'Andriy', 'Tarasovuch', '54', '464');
INSERT INTO Pasagur VALUES ('JI97733', 'Hroshovuk', 'Vitaliy', 'Serhiyovuch', '54', '615');
INSERT INTO Pasagur VALUES ('SS97673', 'Hitler', 'Adik', 'Zigmyndovuch', '66', '666');
Таблиця «Поїзд»:
INSERT INTO Poizd VALUES (111,'Diesel', 'Krakiv', '15.42', '10.11.2010','06.25','12.11.2010');
INSERT INTO Poizd VALUES (503,'Electro', 'Dubno', '13.38', '08.11.2010','16.35','08.11.2010');
INSERT INTO Poizd VALUES (231,'Electro', 'Rivne', '16.22', '20.11.2010','06.45','20.11.2010');
INSERT INTO Poizd VALUES (244,'Diesel', 'Kyiv', '00.41', '16.11.2010','11.28','16.11.2010');
INSERT INTO Poizd VALUES (012,'Electro', 'Krasne', '13.38', '10.11.2010','14.38','10.11.2010');
INSERT INTO Poizd VALUES (235,'Diesel', 'Chernivci', '11.42', '12.11.2010','08.25','13.11.2010');
INSERT INTO Poizd VALUES (156,' Diesel', 'Praha', '07.12', '30.11.2010','09.92','01.12.2010');
INSERT INTO Poizd VALUES (464,' Diesel ', 'Kharkiv', '12.46', '10.11.2010','22.25','11.11.2010');
INSERT INTO Poizd VALUES (615,'Electro', 'Lutsk', '18.22', '22.11.2010','06.25','23.11.2010');
INSERT INTO Poizd VALUES (666,'Electro', 'Hell', '00.00', '01.11.2010','00.00','12.12.2012');
Таблиця «Білет»:
INSERT INTO Bilet VALUES ('123', '45', 'Krakiv', '270uah', '12');
INSERT INTO Bilet VALUES ('265','08', 'Dubno', '12uah', '08');
INSERT INTO Bilet VALUES ('356','48', 'Rivne', '15uah', '07');
INSERT INTO Bilet VALUES ('456','56', 'Kyiv', '70uah', '01');
INSERT INTO Bilet VALUES ('542','57', 'Krasne', '6uah', '11');
INSERT INTO Bilet VALUES ('623','43', 'Chernivci', '50uah', '13');
INSERT INTO Bilet VALUES ('776','73', 'Praha', '420uah', '09');
INSERT INTO Bilet VALUES ('880','54', 'Kharkiv', '90uah', '05');
INSERT INTO Bilet VALUES ('934','54', 'Lutsk', '270uah', '10');
INSERT INTO Bilet VALUES ('101','66', 'Hell', '00uah', '06');
Таблиця «Вагон»:
INSERT INTO Vagon VALUES ('12','SV', 'Nemurovskuy', 'Novuy');
INSERT INTO Vagon VALUES ('08','Zagalnuy', 'Paytash', 'Staruy');
INSERT INTO Vagon VALUES ('07','Zagalnuy', 'Kogut', 'Staruy');
INSERT INTO Vagon VALUES ('01','Plackart', 'Pukach', 'Staruy');
INSERT INTO Vagon VALUES ('11','Zagalnuy', 'Gendel', 'Novuy');
INSERT INTO Vagon VALUES ('13','Plackart', 'Babuch', 'Staruy');
INSERT INTO Vagon VALUES ('09','SV', 'Potapchuk', 'Novuy');
INSERT INTO Vagon VALUES ('05','Kype', 'Terlel', 'Staruy');
INSERT INTO Vagon VALUES ('10','Kype', 'Kabanov', 'Staruy');
INSERT INTO Vagon VALUES ('06','VIP', 'Devilovskuy', 'Novuy');
Таблиця «Характеристика вагону»:
INSERT INTO Harakterustuka_vagony VALUES ('12','2001p', 'Warshava');
INSERT INTO Harakterustuka_vagony VALUES ('08','2000p', 'Lviv');
INSERT INTO Harakterustuka_vagony VALUES ('07','1996p', 'Lviv');
INSERT INTO Harakterustuka_vagony VALUES ('01','1978p', 'Donetsk');
INSERT INTO Harakterustuka_vagony VALUES ('11','2004p', 'Lviv');
INSERT INTO Harakterustuka_vagony VALUES ('13','2000p', 'Lviv');
INSERT INTO Harakterustuka_vagony VALUES ('09','1996p', 'Warshava');
INSERT INTO Harakterustuka_vagony VALUES ('05','1989p', 'Kharkiv');
INSERT INTO Harakterustuka_vagony VALUES ('10','1988p', 'Donetsk');
INSERT INTO Harakterustuka_vagony VALUES ('06','0001p', 'Edem');
SQL запити для вибірки даних, сортування і фільтрування
SQL-запит для вибірки параметру «Кінцева станція» з таблиці «Білет».
SELECT kinceva_stanciya
FROM bilet;
SQL-запит для вибірки параметрів «Прізвище», «Ім’я» та «По батькові» з таблиці «Пасажир».
SELECT prizvushche, imya, po_batkovi,seriya_documenta
FROM pasagur;
SQL-запит для вибірки параметру «Вагон» та «Провідник» з таблиці «Вагон» з лімітом 6.
SELECT vagon,providnuk
FROM vagon
LIMIT 6;
SQL-запит для вибірки параметрів «Вагон» та «Завод» з таблиці «Характеристика вагону» - всі окрім «Завод» = Львів.
SELECT vagon, zavod
FROM harakterustuka_vagony
WHERE zavod <> 'Lviv';
SQL-запит для вибірки всіх параметрів з таблиці «Поїзд» - всі менше 250.
SELECT *
FROM poizd
WHERE nomer_poizdy < '250';
SQL-запит для вибірки всіх параметрів з таблиці «Білет» - сортувати за номером вагону.
SELECT *
FROM bilet
ORDER BY vagon ;
SQL-запит для вибірки всіх параметрів з таблиці «Поїзд» - Час відправлення від 00:00 да 12:00.
SELECT *
FROM poizd
WHERE chas_vidpravlennya BETWEEN 00.00 AND 12.00;
Пошук даних з використанням регулярних виразів. Створення обчислюваних полів
SQL-запит для пошуку параметру «№ білету» з таблиці «Білет» - сортувати за номером білету.
SELECT nomer_bilety
FROM bilet
WHERE nomer_bilety REGEXP '.56'
ORDER BY nomer_bilety;
SQL-запит для пошуку параметру «Прізвище» з таблиці «Пасажир» - сорутвати по прізвищу, всі де є буква «о».
SELECT prizvushche
FROM pasagur
WHERE prizvushche REGEXP 'o'
ORDER BY prizvushche;
SQL-запит для пошуку параметрів «Прізвище» та «Ім’я» з таблиці «Пасажир» - сортувати за прізвищем.
SELECT Concat(prizvushche, '(', imja,')')
FROM pasagur
ORDER BY prizvushche;
SQL-запит для пошуку параметрів «Кінцева станція» та «Ціна» з таблиці «Білет» - створення цінника.
SELECT Concat(RTrim(kinceva_stanciya), ' (', RTrim(cina), ')') AS Cinnuk
FROM bilet
ORDER BY kinceva_stanciya;
Групування даних
SQL-запит для групування параметру «Номер білету» з таблиці «Білет».
SELECT COUNT(*) AS nomer_bilety
FROM bilet
GROUP BY nomer_bilety;
SQL-запит для групування параметрів «Номер білету» та «Ціна» з таблиці «Білет».
SELECT nomer_bilety, COUNT(*) AS cina
FROM bilet
GROUP BY nomer_bilety;
SQL-запит для групування параметрів «Номер білету» та «Ціна» з таблиці «Білет» - групувати за номером булету, сумма в квадраті, сортування за ціною.
SELECT nomer_bilety, SUM( cina * cina )
FROM bilet
GROUP BY nomer_bilety
HAVING SUM( cina * cina )
ORDER BY cina;
Робота із вкладеними запитами
SQL-запит вибірки параметру «Місце» з таблиці «Білет» - де вагон 11й.
SELECT misce
FROM bilet
WHERE vagon = '11';
SQL-запит вибірки параметрів «Ім'я», «По батькові» та «Прізвище» з таблиці «Пасажир» - де номер поїзду 111, 12, 156.
SELECT imya , pobatkovi, prizvushche
FROM pasagur
WHERE nomer_poizdy IN (111,12,156)
SQL-запит вибірки параметру «Прізвище» з таблиці «Пасажир» - де тип поїзду дизель.
SELECT prizvushche
FROM pasagur
WHERE nomer_poizdy IN (SELECT nomer_poizdy
FROM poizd
WHERE tup_poizdy = 'diesel');
SQL-запит вибірки параметру «Провідник» з таблиці «Вагон» - де «Вагон» з таблиці «Білет», де «Кінцева станція» з таблиці «Поїзд» де є «Час прибуття».
SELECT providnuk
FROM vagon
WHERE vagon IN (SELECT vagon
FROM bilet
WHERE kinceva_stanciya IN (SELECT kinceva_stanciya
FROM poizd
WHERE chas_prubyttya));
Об’єднання таблиць
SQL-запит для об’єднання параметрів «Прізвище», «Ім’я», «Кінцева станція» та «Ціна» в таблицях «Пасажир» та «Білет».
SELECT prizvushche,imya,kinceva_stanciya,cina
FROM pasagur, bilet
WHERE pasagur.nomer_bilety=bilet.misce
ORDER BY prizvushche;
SQL-запит для об’єднання параметрів «Вагон», «Завод» та «Виготовлений» в таблицях «Характеристика» та «Білет» - де «Ціна» більша 15грн.
SELECT vagon,zavod,vugotovleuy
FROM harakterustuka_vagony
WHERE vagon in (SELECT vagon FROM bilet
WHERE cina > 15);
SQL-запит для об’єднання параметрів «Прізвище та «Ім’я» в таблиці «Пасажир» - де «Номер білету» менший числу 50.
SELECT p1.prizvushche,p2.imya
FROM pasagur AS p1,pasagur AS p2
WHERE p1.nomer_bilety = p2.nomer_bilety
AND p1.nomer_bilety < 50;
SQL-запит для створення форми квитка де знаходяться параметри «Прізвище», «Серія документу», «Дата відправлення» та «Час відправлення» з таблиць «Пасажир» та «Поїзд».
SELECT pasagur.prizvushche,pasagur.seriya_documenta,poizd.data_vidpravlennya,poizd.chas_vidpravlennya
FROM pasagur LEFT OUTER JOIN poizd
ON pasagur.nomer_poizdy = poizd.nomer_poizdy;
Висновок:
При виконанні данної контрольної роботи я освоїв основні правила і тези для створення баз данних, я навчився формувати інфологічну модель бази данних (далі БД), концептуальну модель, як правильно давати запити на мові SQL, які будуть виконувати створення БД, створення таблиць та їх заповнення, вибірки даних, сортування і фільтрування, пошук даних з використанням регулярних виразів, створення обчислюваних полів, групування даних, робота із вкладеними запитами, Об’єднання таблиць.