Sql 活动数据结构-此模型(或类似模型)是否已存在? 活动数据结构

Sql 活动数据结构-此模型(或类似模型)是否已存在? 活动数据结构,sql,database-design,Sql,Database Design,这个概念是 您有一个表(一个包含大量记录的表) 还有n个表包含与Data1相同的列 [data2] (call these the 'inactive' tables) --------- Data2ID (req.) SysID (req.) createdDate (req.) lastUpdatedDate (req.) [mydata] (user's fields) 当用户查询记录时,会激活一个触发器,该触发器 启动对数据1(“活动”表)的搜索。 如果未找到记录,它将检查中的“非活

这个概念是

您有一个表(一个包含大量记录的表)

还有n个表包含与Data1相同的列

[data2] (call these the 'inactive' tables)
---------
Data2ID (req.)
SysID (req.)
createdDate (req.)
lastUpdatedDate (req.)
[mydata] (user's fields)

当用户查询记录时,会激活一个触发器,该触发器 启动对数据1(“活动”表)的搜索。
如果未找到记录,它将检查中的“非活动”表 下单

如果在“非活动”表中找到记录, 记录将从该表中删除并插入到 数据1(“活动”表)

新记录进入“活动”表

共享sysid的表之间永远不会有冗余记录

日常工作

  • 每个表格都指定了一个“期限”日期范围:
数据1:现在-3个月过去。
数据2:3个月-6个月
数据(n):上次定义之前的任何内容等

  • 任何行修改都将基于“活动”表应用于“非活动”表

  • “活动”表中LastUpdateDate在“非活动”表的“期限”内的任何记录都将从“活动”表中删除,并移动到相应的“非活动”表中。非活动表也会以相同的方式进行检查

利益 我的想法是,这种结构可以很容易地添加到现有结构中 臃肿的表,加快了查询性能,并且是可扩展的 只需重新定义“术语”范围并添加“非活动”表即可解决此问题

问题。。
对非活动数据的搜索显然需要更长的时间。

看起来像是您自己的分区。我建议您查看RDBMS供应商提供的分区选项。它们并不完全适合这种情况,但您可能会发现在大多数情况下允许分区修剪

其他问题

如果在select上将数据从非活动“分区”移动到活动“分区”,则select必须减慢速度以进行数据修改

数据修改往往需要比读取更重的锁。以甲骨文为例。两个查询正在尝试读取相同的记录。通常两者都只是读取值,但使用此方案,而不是仅读取记录,两者都将尝试通过在表之间移动来进行修改,其中一个将阻止另一个。

这称为。SQLServer支持一种称为水平分区的方法,它可以实现这种功能。您可以自己滚动,也可以使用NHibernate之类的透明工具

不能对select语句运行触发器。您可以创建一个视图或使用一个服务/存储库来处理数据库查询并一直搜索,直到找到匹配项为止,但我会考虑使用NHibernate或一些已经对此提供了一些测试支持的东西

[data2] (call these the 'inactive' tables)
---------
Data2ID (req.)
SysID (req.)
createdDate (req.)
lastUpdatedDate (req.)
[mydata] (user's fields)
[data(n)]
---------
Data(n)ID (req.)
SysID (req.)
createdDate (req.)
lastUpdatedDate  (req.)
[mydata] (user's fields)