
- •Содержание
- •Введение
- •1 Построение инфологической концептуальной модели
- •1.1 Анализ предметной области и выявление необходимого набора сущностей
- •1.2 Обоснование требуемого набора атрибутов для каждой сущности и выделение идентифицирующих атрибутов
- •1.3 Определение связей между объектами
- •1.4 Описание полученной модели на языке инфологического проектирования
- •2 Построение схемы реляционной бд
- •2.1 Построение набора необходимых отношений базы данных
- •2.2 Задание первичных и внешних ключей определенных отношений
- •2.3 Приведение отношений бд к третьей нормальной форме
- •2.4 Определение ограничений целостности для внешних ключей отношений и для отношений в целом
- •2.5 Графическое представление связей между внешними и первичными ключами
- •3 Создание спроектированной базы данных
- •4 Запись выражений, указанных в варианте задания типов запросов на языке sql
- •5 Выбор и обоснование средств разработки приложения
- •6 Реализация законченного приложения, работающего с созданной базой данных
- •6.1 Разработка и построение интерфейса главной и рабочих форм
- •6.2 Построение главного меню и кнопок панели инструментов
- •6.3 Выполнение программного кода в среде Microsoft Visual Studio
- •6.4 Тестирование и отладка
- •Заключение
- •Список использованных источников
- •Приложения
4 Запись выражений, указанных в варианте задания типов запросов на языке sql
Язык SQL стал фактически стандартным языком доступа к базам данных. Все СУБД, претендующие на название «реляционные», реализуют тот или иной диалект SQL. Многие нереляционные системы также имеют в настоящее время средства доступа к реляционным данным.
Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например, вместо «отношений» используются «таблицы», вместо «кортежей» - «строки», вместо «атрибутов» - «колонки» или «столбцы».
Язык SQL является реляционно полным. Это означает, что любой оператор реляционной алгебры может быть выражен подходящим оператором SQL.
Запишем выражения, указанные в варианте задания типов запросов на языке SQL.
Запрос, возвращающий адрес данного больного, дата последнего посещения поликлиники и диагноз:
SELECT
TOP (1)
patient.address,
visit.date,
visit.diagnosis
FROM visit
INNER JOIN patient
ON visit.patient_id = patient.id
WHERE patient.surname LIKE '%Иванова%'
ORDER BY visit.id DESC
Запрос, возвращающий пациента, который чаще всего посещает врачей, определенной специализации:
SELECT patient.surname,
patient.name,
patient.middlename,
COUNT(visit.patient_id) AS amount
FROM visit
INNER JOIN doctor
ON visit.doctor_id = doctor.id
INNER JOIN patient
ON visit.patient_id = patient.id
WHERE doctor.competence LIKE '%врач-терапевт%'
GROUP BY visit.patient_id,
patient.surname,
patient.name,
patient.middlename
Запрос, возвращающий фамилию, имя и отчество лечащего врача данного больного:
SELECT
doctor.surname,
doctor.name,
doctor.middlename,
visit.sickleave
FROM visit
INNER JOIN patient
ON visit.patient_id = patient.id
INNER JOIN doctor
ON visit.doctor_id = doctor.id
WHERE
patient.surname LIKE '%Печкурова%'
AND visit.sickleave >= GETDATE()
Запрос, возвращающий номер кабинета, дни и часы приема данного врача:
SELECT
timetable.office,
timetable.time
FROM timetable
INNER JOIN doctor
ON timetable.doctor_id = doctor.id
WHERE doctor.surname LIKE '%Есипенок%'
Запрос, возвращающий всех врачей определенной специализации с номером кабинета и временем работы:
SELECT
doctor.surname,
doctor.name,
doctor.middlename,
timetable.time,
timetable.office
FROM doctor
INNER JOIN timetable
ON doctor.id = timetable.doctor_id
WHERE competence LIKE '%терапевт%'
Запрос, возвращающий пациентов, находящихся в данный момент на лечении у данного врача:
SELECT
patient.surname,
patient.name,
patient.middlename,
visit.sickleave
FROM visit
INNER JOIN patient
ON visit.patient_id = patient.id
INNER JOIN doctor
ON visit.doctor_id = doctor.id
WHERE doctor.surname LIKE '%Литвинова%'
AND visit.sickleave > GETDATE()
Запрос, возвращающий последние назначения врача для определенного больного:
SELECT
TOP (1)
doctor.surname,
doctor.competence,
visit.date,
visit.therapy
FROM visit
INNER JOIN patient
ON visit.patient_id = patient.id
INNER JOIN doctor
ON visit.doctor_id = doctor.id
WHERE patient.surname LIKE '%Иванова%'
ORDER BY visit.id DESC
Запрос, возвращающий врача, работающего в данный момент в указанном кабинете:
SELECT
doctor.surname,
doctor.name,
doctor.middlename,
doctor.competence,
timetable.time,
timetable.office
FROM timetable
INNER JOIN doctor
ON timetable.doctor_id = doctor.id
WHERE timetable.office = 601
Запрос, возвращающий количество обращений в поликлинику указанного больного за прошедшие полгода:
SELECT
COUNT(visit.date) AS amount
FROM visit
INNER JOIN patient
ON visit.patient_id = patient.id
WHERE patient.surname LIKE '%Иванова%'
AND visit.date > DATEADD(month, -6, GETDATE())
Запрос, возвращающий количество больных, которое обслужил за прошедший месяц каждый из врачей поликлиники:
SELECT
doctor.surname,
doctor.name,
doctor.middlename,
doctor.competence,
COUNT(visit.id) AS amount
FROM doctor
LEFT JOIN visit
ON visit.doctor_id = doctor.id
WHERE visit.date > DATEADD(month, -1, GETDATE())
GROUP BY
doctor.id,
doctor.surname,
doctor.name,
doctor.middlename,
doctor.competence