- Patient (пациент)
- Doctor (врач)
- Medical Facility (медицинское учереждение, больница, клиника)
- Appointment (встреча с врачом по записи)
- Prescription (рецепт от врача)
- Record (запись состояния пациента, показатели)
Данные отношения находятся в 2НФ, так как они находятся во 1НФ и каждый не ключевой атрибут неприводимо зависит от любого потенциального ключа. Разберём подробнее возможные потенциальные ключи для каждой таблицы:
patient- толькоpatient_id.phone_number,emailне подходят, так как могут бытьNULL.doctor- толькоdoctor_id.medical_facility-facility_idи (state,city,address).appointment- толькоappointment_id. (patient_id,appointment_dttm,is_active) и (doctor_id,appointment_dttm,is_active) не подходят, так какis_activeможет бытьfalse.prescription-prescription_idи (patient_id,medication_name,prescription_dt).record-record_idи (patient_id,assessment_dttm).
Таблица record будет версионной, ведь состояние пациента изменяется с течением времени. SCD (Slowly changing dimensions) будет типа
Patient:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
patient_id |
Идентификатор | INTEGER | PRIMARY KEY |
name |
ФИО | VARCHAR(50) | NOT NULL |
birth_dt |
Дата рождения | DATE | NOT NULL |
gender |
Пол | VARCHAR(10) | NOT NULL |
phone_number |
Телефон | VARCHAR(15) | |
email |
Email-адрес | VARCHAR(30) |
Doctor:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
doctor_id |
Идентификатор | INTEGER | PRIMARY KEY |
name |
ФИО | VARCHAR(50) | NOT NULL |
specialty |
Специальность | VARCHAR(25) | NOT NULL |
phone_number |
Телефон | VARCHAR(15) | |
email |
Email-адрес | VARCHAR(30) | |
primary_facility_id |
Базовое мед. учреждение | INTEGER | FOREIGN KEY REFERENCES medical_facility(facility_id) |
Medical Facility:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
facility_id |
Идентификатор | INTEGER | PRIMARY KEY |
name |
Название | VARCHAR(50) | NOT NULL |
type |
Тип | VARCHAR(20) | NOT NULL |
address |
Адрес (улица, здание) | VARCHAR(30) | NOT NULL |
city |
Город (населённый пункт) | VARCHAR(20) | NOT NULL |
state |
Штат (регион) | VARCHAR(20) | NOT NULL |
zipcode |
Почтовый индекс | INTEGER | |
phone_number |
Контактный телефон | VARCHAR(15) |
Appointment:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
appointment_id |
Идентификатор | INTEGER | PRIMARY KEY |
patient_id |
Пациент | INTEGER | FOREIGN KEY REFERENCES patient(patient_id) |
doctor_id |
Доктор | INTEGER | FOREIGN KEY REFERENCES doctor(doctor_id) |
facility_id |
Учреждение, где происходит встреча | INTEGER | FOREIGN KEY REFERENCES medical_facility(facility_id) |
appointment_dttm |
Дата и время встречи | TIMESTAMP | NOT NULL |
reason |
Причина встречи | VARCHAR(30) | |
notes |
Замечания | VARCHAR(50) | |
is_active |
В силе ли встреча? | BOOLEAN | NOT NULL |
Prescription:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
prescription_id |
Идентификатор | INTEGER | PRIMARY KEY |
patient_id |
Пациент | INTEGER | FOREIGN KEY REFERENCES patient(patient_id) |
doctor_id |
Доктор | INTEGER | FOREIGN KEY REFERENCES doctor(doctor_id) |
medication_name |
Выписанное лекарство | VARCHAR(30) | NOT NULL |
dosage |
Дозировка | VARCHAR(30) | |
quantity |
Количество препаратов | INTEGER | |
prescription_dt |
Дата рецепта | DATE | NOT NULL |
notes |
Замечания | VARCHAR(50) |
Record:
| Название | Описание | Тип данных | Ограничение |
|---|---|---|---|
record_id |
Идентификатор | INTEGER | PRIMARY KEY |
patient_id |
Пациент | INTEGER | FOREIGN KEY REFERENCES patient(patient_id) |
assessment_dttm |
Дата и время измерений | TIMESTAMP | NOT NULL |
systolic_pressure |
Cистолическое давление | INTEGER | |
diastolic_pressure |
Диастолическое давление | INTEGER | |
temperature |
Температура | REAL | |
heart_rate |
Пульс | REAL |

