1

我想要两个表,这样我就可以将旧记录移动到第二个表中,这样我就可以保持主表很小,但仍然希望能够使用一个 int 主键链接到两个表。

例如:(我已经根据我的真实表中的内容简化了这个示例)我正在跟踪会话并希望将过期的会话移动到 Expired_Sessions 表中,但我还将会话链接到像 Login_Attempts 表这样的日志表,但我没有不想破坏这些表的链接。

Sessions
--------------------
PKey       | int
Session_ID | varchar


Expired_Sessions
--------------------
PKey       | int
Session_ID | varchar

Login_Attempts
--------------------
Session_FKey | int
Count        | int

我确实想到了两种可行的方法,但我认为应该有更好的方法来做到这一点?

一:在我的 sys_constants 表中存储一个主键计数器,并在每次添加记录时递增它。或者

二:添加另一个表,将会话表主键和过期会话主键链接到第三个主键,然后使用第三个主键链接到我的日志表。

4

2 回答 2

1

您是否考虑过使用表分区?我对您的要求知之甚少,但可能值得调查。

当表和索引变得非常大时,分区可以通过将数据划分为更小、更易于管理的部分来提供帮助。本文重点关注水平分区,其中大组行将存储在多个单独的分区中。分区集的定义是根据您的需要定制、定义和管理的。Microsoft SQL Server 2005 允许您使用定义的范围或列表基于特定的数据使用模式对表进行分区。SQL Server 2005 还通过添加围绕新表和索引结构设计的功能,为分区表和索引的长期管理提供了许多选项。

http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx

于 2012-09-11T15:57:41.647 回答
0

为什么不为每个表保留单独的主键,而是添加另一列作为会话的唯一标识符,无论它在哪个表中?我看到你有 Session_ID ...如果你索引它,你甚至可以用它来查找。

于 2012-09-11T15:51:52.300 回答