То, что мы имеем здесь, является примером полуструктурированных данных, один из способов справиться с этим - использовать поле типа XML для ExamDetails
. Вы могли бы иметь:
<root>
<ExamName></ExamName>
<ExamResult></ExamResult>
<FreeText></FreeText>
</root>
Не все элементы должны присутствовать в каждой записи. Вы бы использовали свои возможности XML БД для запроса поля. Все мэры БД (MS SQl Server, Oracle, DB2) могут хранить и запрашивать XML.
Еще несколько нот :
У меня было бы минимум три таблицы: пациент, доктор, экзамен
TABLE Patient (ID (PK), Name, other patient details...)
TABLE Doctor (ID (PK), Name, other doctor details...)
TABLE Exam (ID (PK), PatientID (FK), DoctorID (FK), Date, ExamDetails XML, more here...)
Если и врач, и пациент оказываются людьми (в отличие от ветеринарной клиники или осмотра дома), вы можете добавить таблицу «Пациент» и «Пациент» и «Подкатегория» к таблице «Персона» - таким образом легко врач в поликлинике тоже как пациент. Например:
TABLE Person (ID (PK), FirstName, LastName, Phone, Address, other details common to people...)
TABLE Patient (PersonID (PK, FK), ...specific patient details only)
TABLE Doctor (PersonID (PK, FK), ...specific doctor details only)
TABLE Exam (ID (PK), PatientID (FK), DoctorID (FK), Date, ExamDetails XML, more here...)
Поскольку «Пациент» и «Доктор» относятся к типу лиц, PersonID должен совпадать с номером в таблице «Персона».