在事务表中使用rowbegindate的c#实体框架
我是一名开始与数据库架构师合作的开发人员。他正在使用一种我以前从未见过的设计,我认为这会对性能产生负面影响 在事务表中,他在每个表中使用两个字段。。rowbegindate和rowenddate。有一个父表,其中只有几个字段永远不会更改。这称为PersonHeader表。该键用于子Person表的fk。Person表的主键是PersonHeader表的fk和该行的RowBeginDate。要检索当前行,我需要始终检查是否有空的RowEndDate 我还没有详细了解这将如何影响实体框架的性能,但我怀疑这不会是有效的在事务表中使用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 我还没有详细了解这将如何影响实体框架的性能,但我
我参与过许多项目,从未见过这种方法。事务表中有这么多死记录对性能有什么影响。我认为不会有太多更新,但我估计database person表最终可能会有500000行或更多行,更不用说细节表了。在处理有审核要求的应用程序时,必须维护记录的历史版本并不少见。我使用(例如,在存储员工记录的更改历史记录时)、EmployeeID和UpdateOn字段作为键来执行类似的操作,这样我就可以获得记录的最新版本 如果表被正确地索引,并且索引不会因为复合键而变得太大,我就不会担心性能或记录的数量。我处理过包含5亿条记录的表,但性能仍然良好(不过重建索引需要一段时间) 您甚至可以从实体框架中创建一个拦截器,允许您在执行查询时过滤掉“死”记录(请参见)PersonHeader 个人密钥(PK) 人 PersonKey(主键,FK) 罗贝金达特(PK) RowEndDate (其他栏目) (我加上这句话作为回答,因为一条评论不会换行…) 人员配置 LocationTypeKey(主键,FK) PersonKey(主键,FK) 位置键(FK) RowBeginDate(不是键) RowEndDate 位置 位置键(PK) StateKey(FK) RowBeginDate(不是键)
RowEndDate如果您放置一个表模式的图表,可能会有所帮助。这里有一个缩写: