Мне нужно реализовать решение с 1 базовым классом и 3 подклассами (4 класса)
Базовый класс: Пользователь< br> Подклассы: Клиент, Пользователь Office, Сотрудник
В моей базе данных есть только 3 таблицы: Пользователи, Клиенты и Сотрудники.
У меня нет таблицы OfficeUsers, так как все данные, которые мне нужны, уже есть в таблице Users.
В будущем я хочу создать отчет список клиентов, сотрудников и офисных пользователей.
Я не хочу использовать TPH, так как у меня много полей, не допускающих значения NULL, в таблице «Клиенты и сотрудники».
Должен ли я создать таблицу OfficeUsers только с UserId, чтобы реализовать TPT?
Мне кажется, это не очень хороший дизайн - у меня есть таблица только с PK, поэтому я могу правильно ее отобразить - пожалуйста, поправьте меня, если это способ сделать это.
Другой вариант состоял в том, чтобы иметь столбец UserType в таблице Users и использовать его в качестве дискриминатора, но будет ли он работать с TPT? Можно ли создать TPT с 1 отсутствующей таблицей и использовать дискриминаторы, похоже на смешение TPT и TPH, что, я думаю, невозможно.
Заранее спасибо за ваши ответы.
ИЗМЕНИТЬ:
Пожалуйста, рассмотрите также такой сценарий:
Я представляю новый класс под названием MobileUser
, который также имеет те же поля, что и User
. В этом случае у меня нет возможности узнать, сколько MobileUsers
и сколько OfficeUsers
есть в системе, не вводя новый столбец для типа пользователя.
Наличие в этом сценарии 2 пустых таблиц (только PK) лучше/хуже, чем создание зависимости в моих запросах от количества таблиц и, кроме того, предотвращение использования некоторых запросов LINQ (см. мои комментарии под ответом Ладислава Мрнки)
РЕДАКТИРОВАТЬ 2:
Есть вероятность, что в будущем мне придется добавлять поля в OfficeUser
, поэтому я начинаю думать, что пустая таблица может быть каким-то вариантом, по крайней мере, код C# (запросы) будет выглядеть чище. Дайте мне знать, если у вас есть лучший подход.