
- •Практичні завдання
- •2.Робота із запитами Теоретичні відомості
- •Практичні завдання
- •3. Функції маніпулювання даними Теоретичні відомості
- •Практичні завдання
- •Теоретичні відомості
- •Практичні завдання
- •5. Об’єднання таблиць Теоретичні відомості
- •Практичні завдання
- •7. Представлення Теоретичні відомості
- •Практичні завдання
- •8. Індекси. Зовнішній ключ Теоретичні відомості
- •Практичні завдання
- •9. Транзакції Теоретичні відомості
- •Практичні завдання
- •10. Проектування власної бази даних MySql
10. Проектування власної бази даних MySql
Завдання. Створити базу даних довільної предметної області. БД повинна містити:
як мінімум 2 таблиці, мінімум 10 записів у кожній;
ключові поля в таблицях, індекси, зовнішні ключі (кількість обирається довільно, відповідно до предметної області).
До БД сформувати 3 запити, які вирішують конкретну задачу.
Якщо виникає складність при виборі предметної області, використайте одну з поданих нижче, повідомивши про це викладача.
Варіант № 6
Предметна область: Поліклініка (облік пацієнтів) .
Основні предметно- значущі сутності: Пацієнти , Лікарі.
Основні предметно- значущі атрибути сутностей :
- Пацієнти - прізвище , ім'я, по батькові , дата народження ;
- Лікарі - прізвище , ім'я, по батькові , дата народження , посада , спеціалізація .
Основні вимоги до функцій системи :
- Вибрати всі діагнози по пацієнтам або певного пацієнта ;
- Вибрати всіх пацієнтів записаних до певного лікаря на певну дату;
- Вибрати всіх лікарів , до яких записаний певний пацієнт.
Для проектування власної БД, перш за все треба її створити. Для цього як завжди переходимо до головного меню phpMyAdmin та у пункті меню, заходимо в SQL та пишемо такий код:
create database policlinic default
character set utf8 collate
utf8_general_ci
Далі до нашої БД створюємо потрібні там таблиці, такіми SQL-запитами:
Таблиця пацієнти
CREATE TABLE patients (
id int(11) NOT NULL AUTO_INCREMENT,
surname varchar(75) default NULL COMMENT 'Прізвище',
name_p varchar(75) default NULL COMMENT 'імя',
middle_name varchar(75) default NULL COMMENT 'По батькові',
birthday date default NULL COMMENT 'Дата народження',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Таблиця лікарі
CREATE TABLE doctors (
id int(11) NOT NULL AUTO_INCREMENT,
surname varchar(75) default NULL COMMENT 'Прізвище',
name varchar(75) default NULL COMMENT 'імя',
middle_name varchar(75) default NULL COMMENT 'По батькові',
birthday date default NULL COMMENT 'Дата народження',
post varchar(75) default NULL COMMENT 'Посада',
speciality varchar(75) default NULL COMMENT 'Спеціалізація',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Щоб було простіше працювати, створюему ще одну таблицю і даємо назву – Журнал
create table jurnale (
id int(11) NOT NULL AUTO_INCREMENT,
name_diagnosis varchar(75) default NULL COMMENT 'Нава_діагнозу',
date_out date default NULL COMMENT 'Дата',
patients_id int(11) default NULL COMMENT 'Пацієнт',
doctors_id int(11) default NULL COMMENT 'Лікар',
key id (id)
) engine=innodb default charset=utf8;
Далі заповнюємо таблиці наступними SQL-запитами
Для таблиці – пацієнти
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('1','Яценюк','Віктор','Іванович','1988-06-12');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('2','Головач','Олена','Петрівна','1967-02-02');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('3','Деркач','Анатолій','Миколайович','1978-04-23');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('4','Трохименко','Генадій','Петрович','1970-06-19');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('5','Самойленко','Іван','Петрович','1973-02-20');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('6','Мазняк','Віктор','Миколайович','1994-06-11');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('7','Малий','Павло','Михайлович','1999-01-11');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('8','Боровик','Антон','Петрович','1995-05-18');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('9','Бушма','Сергій','Іванович','1996-07-28');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('10','Огієнко','Дмитро','Михайлович','1995-09-12');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('11','Казаков','Олександр','Петрович','1986-02-09');
INSERT INTO`policlinic`.`patients`(`id`,`surname`,`name_p`,`middle_name`,`birthday`) VALUES ('12','Малофій','Вадим','Валерійович','2001-07-12');
Для таблиці – лікарі
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('1','Аваньков','Петро','Петрович','1973-04-10','Глав врач','Гинеколог');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('2','Абдурахман','Іван','Артемович','1971-07-11','Санитарний врач','Реаниматолог');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('3','Колилець','Василь','Васильович','1968-01-01','Глав врач','Патологоанатом');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES('4','Абрамов','Степан','Миколайович','1988-08-21','Зав відділенням','Эндоскопист');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('5','Абалмазов','Олександр','Ахмедович','1963-01-01','Глав врач','Патологоанатом');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('6','Кудря','Микола','Петрович','1986-03-26','Зав відділенням','Вирусолог');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('7','Ющенко','Марина','Анатолівна','1988-02-29','Санитарка','Педиатр');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('8','Буката','Світлана','Генадівна','1989-08-23','Мед сестра','Ортопед');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('9','Царик','Наталія','Борисівна','1990-02-25','Мед сестра','Ортопед');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('10','Середа','Людмила','Борисівна','1972-02-14','Зав відділенням','Терапевт');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('11','Боярин','Анастасія','Мандаринівна','1972-02-14','Головна мед сестра','Терапевт');
INSERT INTO`policlinic`.`doctors`(`id`,`surname`,`name`,`middle_name`,`birthday`,`post`,`speciality`) VALUES ('12','Лучшенко','Ребекка','Фоллі','1990-06-24','Головна мед сестра','Терапевт');
Для таблиці – Журнал
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('1','забiй правого полужопiя','2013-11-21','1','1');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('2','Інфаркт мікарда','2013-11-22','2','2');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('3','Герпетичний гінгівостоматит та фаринготонзиліт','2013-11-23','3','3');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('4','Оперізувальний лишай з енцефалітом','2013-11-24','4','4');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('5','Контагіозний молюск','2013-11-25','5','5');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('6','Біла Пєдра','2013-11-26','6','6');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('7','','2013-12-08','7','7');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('8','','2013-12-09','8','8');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('9','','2013-12-10','9','9');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('10','','2013-12-11','10','10');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('11','','2013-12-12','11','11');
INSERT INTO`policlinic`.`jurnale`(`id`,`name_diagnosis`,`date_out`,`patients_id`,`doctors_id`) VALUES ('12','','2013-12-13','12','12');
Далі створюємо зовнішні ключі до таблиці Журнал, та відповідно до полів – patients_id, doctors_id.
ALTER TABLE `jurnale` ADD FOREIGN KEY ( `patients_id` ) REFERENCES `policlinic`.`patients` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE ;
ALTER TABLE `jurnale` ADD FOREIGN KEY ( `doctors_id` ) REFERENCES `policlinic`.`doctors` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE ;
Щоб реалізувати запити, я використав представлення:
Представлення до першого завдання.
CREATE view medical_history as
SELECT `name_diagnosis` as name_diagnosis, name_p as Name, surname as Surname
FROM jurnale as nazva3 left outer join patients as nazva4 on nazva3.`patients_id`=nazva4.`id`
ORDER BY nazva4.id
Представлення до другого запиту.
CREATE view medical_history_2 as
SELECT `surname` as patients, surname as doctors, date_out as date
FROM doctors as nazva3 left outer join patients as nazva4 on
`jurnale`.`doctors_id`=nazva4.`id`
left outer join jurnale as nazva5 on
nazva3.`id`=nazva5. `doctors_id`
ORDER BY nazva4.id
Представлення до третього запиту.
CREATE view medical_history_3 as
SELECT `surname` as doctors, surname as patients
FROM doctors as nazva3 left outer join patients as nazva4 on
`jurnale`.`doctors_id`=nazva4.`id`
left outer join jurnale as nazva5 on
nazva3.`id`=nazva5. `doctors_id`
ORDER BY nazva4.id
Висновок: На практиці я навчився:
1. Створювати бази даних
2. Працювати із запитами
3. Працювати з функціями маніпулювання даними
4. Працювати з діями insert, update, delete
5. Об’єднувати таблиці
6. Працювати з представленням
7. Працювати з Індексами. Зовнішніми ключами
8. Працювати з Транзакціями
9. Спроектував власну базу даних MySQL