Рискуя тем, чтобы быть 'астронавтом архитектуры' здесь, я был бы более склонен пойти с отдельными таблицами для подклассов. Имейте первичный ключ таблиц подкласса также быть соединением внешнего ключа назад с супертипом.
главная причина для того, чтобы сделать его этот путь состоит в том, что это тогда становится намного более логически последовательным, и Вы не заканчиваете с большим количеством полей, которые являются ПУСТЫМИ и бессмысленными для той конкретной записи. Этот метод также делает намного более легким добавить дополнительные поля к подтипам, поскольку Вы выполняете итерации своего процесса проектирования.
Это действительно добавляет, что оборотная сторона добавления СОЕДИНЯЕТ с Вашими запросами, которые могут повлиять на производительность, но я почти всегда иду с идеальным дизайном сначала, и затем надеюсь оптимизировать позже, если это оказывается необходимым. Несколько раз я пошел 'оптимальным' путем сначала, я почти всегда сожалел о нем позже.
, Таким образом, мой дизайн был бы чем-то как
ЧЕЛОВЕК (personid, имя, адрес, телефон...)
SPECIALPERSON (personid ССЫЛОЧНЫЙ ЧЕЛОВЕК (personid), дополнительные поля...)
ПОЛЬЗОВАТЕЛЬ (personid ССЫЛОЧНЫЙ ЧЕЛОВЕК (personid), имя пользователя, encryptedpassword, дополнительные поля...)
, Вы могли также создать ПРЕДСТАВЛЕНИЯ позже, который агрегировал супертип и подтип, если это необходимо.
один дефект в этом подходе - то, при нахождении в большой степени подтипов связанными с супертипом particulare. Нет никакого легкого ответа на это первое, что пришло на ум, Вы могли отследить его программно при необходимости, или иначе выполнить soem глобальные запросы и кэшировать результаты. Это будет действительно зависеть от приложения.
Это отличный учебник ! Начинается с самого начала и охватывает множество деталей! Лучшее пошаговое руководство для начинающих.
Если вы используете Fluent Ribbon, на их веб-сайте имеется новая документация .