Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
在事务表中使用rowbegindate的c#实体框架_C#_Sql Server_Entity Framework_Database Design - Fatal编程技术网

在事务表中使用rowbegindate的c#实体框架

在事务表中使用rowbegindate的c#实体框架,c#,sql-server,entity-framework,database-design,C#,Sql Server,Entity Framework,Database Design,我是一名开始与数据库架构师合作的开发人员。他正在使用一种我以前从未见过的设计,我认为这会对性能产生负面影响 在事务表中,他在每个表中使用两个字段。。rowbegindate和rowenddate。有一个父表,其中只有几个字段永远不会更改。这称为PersonHeader表。该键用于子Person表的fk。Person表的主键是PersonHeader表的fk和该行的RowBeginDate。要检索当前行,我需要始终检查是否有空的RowEndDate 我还没有详细了解这将如何影响实体框架的性能,但我

我是一名开始与数据库架构师合作的开发人员。他正在使用一种我以前从未见过的设计,我认为这会对性能产生负面影响

在事务表中,他在每个表中使用两个字段。。rowbegindate和rowenddate。有一个父表,其中只有几个字段永远不会更改。这称为PersonHeader表。该键用于子Person表的fk。Person表的主键是PersonHeader表的fk和该行的RowBeginDate。要检索当前行,我需要始终检查是否有空的RowEndDate

我还没有详细了解这将如何影响实体框架的性能,但我怀疑这不会是有效的


我参与过许多项目,从未见过这种方法。事务表中有这么多死记录对性能有什么影响。我认为不会有太多更新,但我估计database person表最终可能会有500000行或更多行,更不用说细节表了。

在处理有审核要求的应用程序时,必须维护记录的历史版本并不少见。我使用(例如,在存储员工记录的更改历史记录时)、EmployeeID和UpdateOn字段作为键来执行类似的操作,这样我就可以获得记录的最新版本

如果表被正确地索引,并且索引不会因为复合键而变得太大,我就不会担心性能或记录的数量。我处理过包含5亿条记录的表,但性能仍然良好(不过重建索引需要一段时间)

您甚至可以从实体框架中创建一个拦截器,允许您在执行查询时过滤掉“死”记录(请参见)

PersonHeader 个人密钥(PK)

人 PersonKey(主键,FK) 罗贝金达特(PK) RowEndDate (其他栏目)

(我加上这句话作为回答,因为一条评论不会换行…) 人员配置 LocationTypeKey(主键,FK) PersonKey(主键,FK) 位置键(FK) RowBeginDate(不是键) RowEndDate

位置 位置键(PK) StateKey(FK) RowBeginDate(不是键)
RowEndDate

如果您放置一个表模式的图表,可能会有所帮助。这里有一个缩写: