согласованный дизайн базы данных vs peformance для полиморфизма БД с контролем версий - PullRequest
0 голосов
/ 16 августа 2010

Мне нужно создать базу данных для 2 типов фермеров (организаций и арендодателей), у которых есть разные столбцы, которые нужно хранить, и мне также нужно версия их информации.

Один дизайн БД, который я придумалс это: (непротиворечивый)

Farmers
Id
FType check(FType in ('organization', 'landlord'))
Unique(Id,Ftype)    

Organizations
Id
FType
Unique(Id, FType)
FK(Id, FType) Ref Farmers(Id, FType)

LandLords
Id
FType
Unique(Id, FType)
FK(Id, FType) Ref Farmers(Id, FType)

OrganisationVersions
Id
OrganisationId  ref Organizations(id)
--lots of stuff specific to organisation
Startdate
Endate -- if null than this is the current version

LandLordVersions
Id
LandLordId ref LandLords(id)
--lots of stuff specific to landlord
StartDate
EndDate

Второй, не такой последовательный, но гораздо меньше таблиц, выглядит так:

Farmers
Id
FType

Organizations
Id
FarmerId ref Farmers(Id)
--stuff
StartDate 
EndDate -- if null than this is the current version

LandLords
Id
FarmerId ref Farmers(Id)
--stuff
StartDate
EndDate

1 Ответ

1 голос
/ 16 августа 2010

Я не вижу особых сложностей с вашей второй версией. Первая версия имеет столбец FType в таблице Organizations и таблице Landlords, которая, по-видимому, не нужна, так как она будет одинаковой для всех строк.

Наличие нескольких версий каждой записи в одной таблице с последней датой окончания в качестве NULL для текущей версии также выглядит нормально; Вы можете создать представление «Current_Landlords», где отображается только текущая строка; такой взгляд был бы обновляемым. Для этого могут понадобиться некоторые индексы.

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