Вот дизайн, который является простым, самоописательным, масштабируемым, нормализованным и расширяемым. Вы можете добавлять дополнительные типы политик или типы пациентов без перекомпиляции системы. Вы не указали, какой механизм баз данных вы используете, поэтому, чтобы он работал на большинстве платформ баз данных, я бы предложил использовать TPC.
Пациент просто роль, которую человек (он же партии) играет в системе. У вас могут быть другие роли, такие как «врач», «сотрудник», «держатель политики» и т. Д., Каждый со своими собственными данными. Важно отметить, что роли временны, что означает, что одна роль может быть аннулирована, а человек выполняет другие роли в системе.
Если «Существующий», «AgeIn», «NewPatient» можно определить, просмотрев свойства Роли или Стороны, нет необходимости в PatientType. Я добавил его, потому что неясно, как определяются типы терпимости. У вас вполне может быть только свойство Patient, чтобы определить это.
Сторона представляет любое юридическое лицо. У сторон есть отношения, которые часто важны для бизнеса. Поэтому, когда «Сэм» (человек) приходит к «Доктору» (человеку, играющему роль), важно знать, что «политика» ее отца Боба (человека) будет оплачивать счет. Отсюда причина, по которой Человек отображается в другой таблице.
PolicyType определяет, какой тип политики действительно существует. В вашем случае у вас может быть 18 различных типов политик, например ExistingOriginalMediCare, AgeInOriginalMediCare и т. Д. Здесь вы можете хранить данные, которые влияют на «правила» вашей политики. Например, некоторые типы политик доступны только для людей, живущих в Калифорнии. В одной системе, в которой я работал, были тысячи типов политик, каждый из которых обладал сотнями свойств, которые приложения использовали для определения бизнес-правил. Это позволило бизнесу создавать новые типы политики и «правила» без перекомпиляции системы и всего, что от нее зависело.
Однако его можно упростить, выбирая наследование при сохранении тех же возможностей. Здесь мы предполагаем, что не будет никакой другой «роли», чем «пациент» и никакой другой «партии», чем «человек».
Тем не менее, это действительно зависит от того, будет ли данные быть повторно использованы в других приложениях и как временные данные и ассоциации на самом деле. Не стесняйтесь адаптироваться. Я часто ссылаться на эти книги при проектировании систем:
- Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
- Enterprise Model Patterns: Describing the World (UML Version)
- The Data Model Resource Book, Volume 3: Universal Patterns for Data Modeling
Они коренным образом изменили мой взгляд на "данные".
Как выглядит ваша модель класса сейчас? В частности, «Original Medicare» - это класс, отличный от «TriCare for Life», или два экземпляра одного класса? –
Я только что немного обновил сообщение ... По сути, объект-клиент является хозяином для всех этих данных. У каждого клиента есть политика Medicare, которая содержит ответы на эти вопросы (ответы да/нет или bools) ... – RSolberg
Шаблон декоратора будет вашим другом здесь с перечислением для типа и битовой маски для значений. Я нахожусь в горах с телефоном, поэтому, к сожалению, не могу подробно рассказать о них до конца.) –