Я часто нахожу лучший способ для этого - использовать модель наследования.Все общие поля входят в таблицу 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
Примечание. Приведенная выше схема довольно наивна и не обрабатывает случаи, когда пользователь может быть бесплатным пользователем, затем платным, а затем снова бесплатным.Как вы разрабатываете для этого действительно зависит от вашего приложения и бизнес-правил.