Добавлен: 06.11.2023
Просмотров: 63
Скачиваний: 1
Задача состоит в создании базы данных «ГИБДД» для информационно-справочной системы которая будет обеспечивать хранение данных о расписании приема врачей и записи пациентов на прием. База данных должна учитывать особенности работы поликлиники, такие как: врачи специалисты и участковые врачи, расписания врачей, которые не меняются на протяжении недели, работа врачей в две смены, разбитие приема на интервалы, кабинеты, в которых работают врачи в разное время, учет предоставленных услуг, медицинская страховка пациентов. Информационная система должна предоставлять возможность пациентам записаться на прием к врачу, а также врачам просмотреть очередность записанных пациентов. Администрация должна иметь доступ к данным о количестве пациентов, записавшихся и пришедших на прием, а также к сведениям о загрузке кабинетов и врачей. ER diagram
Таблицы
Ограничения целостности данных
1 Ограничение NOT NULL: Это ограничение гарантирует, что в столбцах, помеченных как NOT NULL, не будет храниться NULL-значение.
2 Ограничение UNIQUE: Это ограничение гарантирует, что значения в указанных столбцах уникальны.
3 Ограничение PRIMARY KEY: Это ограничение гарантирует, что значения в указанном столбце уникальны и не могут быть NULL.
4 Ограничение FOREIGN KEY: Это ограничение гарантирует, что значения в указанном столбце ссылаются на значения в столбце первичного ключа другой таблицы.
5 Ограничение CHECK: Это ограничение гарантирует, что значения в указанном столбце соответствуют определенным условиям
Индексы Индекс на поле Doctor_ID в таблице Appointments: CREATE INDEX idx_appointments_doctor_id ON Appointments (Doctor_ID); Индекс на поля Last_Name и First_Name в таблице Patients: CREATE INDEX idx_patients_last_name_first_name ON Patients (Last_Name, First_Name); Индекс на поле Cabinet_Number в таблице Appointment_Intervals: CREATE INDEX idx_appointment_intervals_cabinet_number ON Appointment_Intervals (Cabinet_Number); Индекс на поля Appointment_Date и Doctor_ID в таблице Appointments: CREATE INDEX idx_appointments_appointment_date_doctor_id ON Appointments (Appointment_Date, Doctor_ID); Индекс на поле Schedule_ID в таблице Doctors: CREATE INDEX idx_doctors_week_schedule_id ON Doctors (Week_Schedule_ID); Индекс на поле Service_ID в таблице Appointments: CREATE INDEX idx_appointments_service_id ON Appointments (Service_ID); Индекс на поле Area_Number в таблице Local_Doctor_Area: CREATE INDEX idx_local_doctor_area_area_number ON Local_Doctor_Area (Area_Number); Индекс на поле Doctor_ID в таблице Week_Schedule: CREATE INDEX idx_week_schedule_doctor_id ON Week_Schedule (Doctor_ID); Индекс на поле Cabinet_Name в таблице Cabinets: CREATE INDEX idx_cabinets_cabinet_name ON Cabinets (Cabinet_Name); Индекс на поля Appointment_Date и Is_Free в таблице Appointments: CREATE INDEX idx_appointments_appointment_date_is_free ON Appointments (Appointment_Date, Is_Free);триггеры для базы данных «ГИБДД»: 1 Триггер для автоматической генерации ID записей приема: CREATE TRIGGER trg_generate_appointment_id BEFORE INSERT ON Appointments FOR EACH ROW BEGIN SET NEW.Appointment_ID = CONCAT('AP', LPAD((SELECT COUNT(*) + 1 FROM Appointments), 5, '0')); END 2 Триггер для удаления связанных записей при удалении врача: CREATE TRIGGER trg_delete_related_data_on_doctor_delete BEFORE DELETE ON Doctors FOR EACH ROW BEGIN DELETE FROM Week_Schedule WHERE Doctor_ID = OLD.Doctor_ID; DELETE FROM Appointment_Intervals WHERE Doctor_ID = OLD.Doctor_ID; DELETE FROM Appointments WHERE Doctor_ID = OLD.Doctor_ID; END 3 Триггер для обновления статистики приема пациентов при добавлении новой записи на прием: CREATE TRIGGER trg_update_statistics_on_appointment_insert AFTER INSERT ON Appointments FOR EACH ROW BEGIN UPDATE Statistics SET Appointments_Count = Appointments_Count + 1, Cabinets_Load = ( SELECT COUNT(*) FROM Appointments WHERE Appointment_Date = NEW.Appointment_Date AND Cabinet_Number = NEW.Cabinet_Number ), Doctors_Load = ( SELECT COUNT(*) FROM Appointments WHERE Appointment_Date = NEW.Appointment_Date AND Doctor_ID = NEW.Doctor_ID ) WHERE Date = NEW.Appointment_Date; END