.net 在数据库中存储大量相似但不同类的对象
我正在处理许多类似的.net 在数据库中存储大量相似但不同类的对象,.net,sql-server,inheritance,design-patterns,single-table-inheritance,.net,Sql Server,Inheritance,Design Patterns,Single Table Inheritance,我正在处理许多类似的事件类,它们需要存储在数据库中。 它们都继承自AbstractEvent,并实现接口IEvent。主要区别在于它们的特性: RainStartsEvent TimeRainStarted: Time LitresOfRainPerSquareMeter: Float RainTemperature: Integer SunUpEvent TimeSunUp: Time PersonWhoSawItFirst: Integer
事件
类,它们需要存储在数据库中。
它们都继承自AbstractEvent
,并实现接口IEvent
。主要区别在于它们的特性:
RainStartsEvent
TimeRainStarted: Time
LitresOfRainPerSquareMeter: Float
RainTemperature: Integer
SunUpEvent
TimeSunUp: Time
PersonWhoSawItFirst: Integer
Brightness: Float
SongOfTheDay: String
SomeOtherEvent
UniquePropery1: someType
StandardProperty: someType
等等。将有数十个甚至数百个事件
,它们可能没有任何共同点,除了从absactevent
继承并从IEvent
实现的内容之外
现在我需要将这些对象存储在数据库中。我曾考虑过单表继承或逐层次表继承,但由于事件的数量庞大且不断增加,因此没有意义。我将得到一个超过255个字段的表
我的另一个想法是将所有事件
存储在一个表中,并将它们的所有属性存储在不同的表中,每行一个属性,并使用事件
表的外键。但是,这意味着我必须将它们全部存储为字符串,并进行大量(反)序列化,即在具有大量事件的系统中,这可能无法很好地执行
我是否需要使用.NET对象序列化来提高性能?那会有帮助吗
还有什么可能?对于这个问题,必须有一个更标准的解决方案,某种最佳实践或设计模式。有什么想法吗
更新:数据需要连续读取,很少更新。记录将被完整读取,没有顺序,数据库中的where子句、条件语句或索引看起来就像您只想存储数据。如果你关心这些数据的索引、查询等,你没有说什么
您可以将它们转换为JSON,并在MS SQL Server(或其他大多数RDBMS)中将它们作为字符串存储,但如果您有幸拥有PostreSQL,那么它也有一些本机支持
另一种解决方案——如果该解决方案更多地是关于数据的,并且不使用关系模型是可以接受的——将使用像MongoDb或RavenDB这样的文档数据库,这样您就不会关心(或限制)关系数据库,同样,在大多数情况下,这也会影响到您。听起来您确实需要一些传统RDBMS以外的东西,因为您没有对set and get之外的数据进行任何处理。因此,您应该研究各种NoSQL选项
但是,(仅说明一下),如果要使用SQL Server:
- 如果采用非结构化方式,则使用XML字段而不是包含JSON数据的NVARCHAR。解析JSON没有固有的支持
- 如果您选择结构化路线,请参阅我在DBA.StackExchage上关于此主题的答案:
您可以使用XML列来保存这些附加列。如果您想查询这些列,这并不理想,但是如果您只对公共列进行筛选/排序,这可能是有意义的。您应该说出您对数据库的需求(索引、搜索等),正如几个答案所示。