Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт_з_практики.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.1 Mб
Скачать

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