Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在数据库中存储大量相似但不同类的对象_.net_Sql Server_Inheritance_Design Patterns_Single Table Inheritance - Fatal编程技术网

.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列来保存这些附加列。如果您想查询这些列,这并不理想,但是如果您只对公共列进行筛选/排序,这可能是有意义的。您应该说出您对数据库的需求(索引、搜索等),正如几个答案所示。