具有版本控制的db多态的一致性与性能数据库设计

时间:2010-08-16 08:34:55

标签: sql sql-server database

我需要为2种类型的农民(组织和房东)创建一个数据库,这些农民有不同的列需要存储,我还需要对其信息进行版本化。

我想出的一个db设计是:(一致的)

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 个答案:

答案 0 :(得分:1)

我认为你的第二个版本没有任何特别的困难。第一个版本在Organizations表和Landlords表中有一个FType列,这似乎没有必要,因为它对所有行都是相同的。

在同一个表中拥有每个条目的多个版本,当前版本的最新结束日期为NULL似乎也很好;您可以创建一个视图'Current_Landlords',其中只显示当前行;这样的观点是可以更新的。可能需要一些索引来帮助它。