Как смоделировать таблицы классов / базы данных? - PullRequest
1 голос
/ 22 сентября 2010

Мне нужно смоделировать классы и таблицы базы данных для сущности "Пользователь".

Эта сущность "Пользователь" имеет следующие свойства:

User
  Name
  Age
  Gender
  Email

Но у меня есть 2 типа пользователей: «Платные пользователи» и «Бесплатные пользователи». У каждого свои свойства:

Paid User
  Fee  
  Rate

Free User
  Expiration Date
  Level

«Платный пользователь» и «Бесплатный пользователь» различны, но оба «Пользователь».

Я использую ASP.NET MVC, NHibernate и Fluent Maps.

Каков наилучший способ и правильный шаблон проектирования для моделирования этих классов и таблиц базы данных?

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Я часто нахожу лучший способ для этого - использовать модель наследования.Все общие поля входят в таблицу User.Сначала вы создаете запись в User, а затем с помощью результирующего UserID создаете дополнительные записи в Paid User или Free User при необходимости.

User 
  UserID
  Name 
  Age 
  Gender 
  Email 

Paid User 
  UserID <-- FK to User
  Fee   
  Rate 

Free User 
  UserID <-- FK to User
  Expiration Date 
  Level 

Затем вы можете выбрать (или создатьVIEW) вот так:

select u.UserID, U.Name, ...
    pu.Fee, pu.Rate,
    fu.ExpirationDate, fu.Level,
    case when pu.UserID is null then 0 else 1 end as IsPaidUser,
    case when fu.UserID is null then 0 else 1 end as IsFreeUser
from User u
left outer join PaidUser pu on u.UserID = pu.UserID
left outer join FreeUser fu on u.UserID = fu.UserID

Примечание. Приведенная выше схема довольно наивна и не обрабатывает случаи, когда пользователь может быть бесплатным пользователем, затем платным, а затем снова бесплатным.Как вы разрабатываете для этого действительно зависит от вашего приложения и бизнес-правил.

2 голосов
/ 22 сентября 2010

Предполагая, что в вашей Объектной модели пользователь будет считаться абстрактным, рассмотрите следующее определение таблицы пользователя:

Пользователь
Имя пользователя
Возраст
Пол
Электронная почта
Введите <- Бесплатно / Платно / и т. Д. </p>

Платный пользователь
ID
Идентификатор пользователя <--- FK к таблице пользователей <br>Плата
Стоимость

Бесплатный пользователь
ID
UserID <--- FK для таблицы пользователей <br>Дата истечения срока действия
Уровень

Это позволит вам делать запрос следующим образом:

Выберите * у Пользователя, где Тип = Свободно

0 голосов
/ 22 сентября 2010

Какие операции для этих типов пользователей?

Любой проект должен начинаться с операций, а не со структур данных, а не наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...