SQL,两个表,一个共享主键

时间:2012-09-11 15:45:20

标签: sql shared-primary-key

我想有两个表,所以我可以将旧记录移动到第二个表中,这样我就可以保持主表的小,但仍然希望能够使用一个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表中存储主键计数器,并在每次添加记录时递增它。 或

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

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用表格分区?我对你的要求知之甚少,但值得研究。

  

当表和索引变得非常大时,分区可以提供帮助   将数据划分为更小,更易于管理的部分。这个   论文侧重于横向分区,其中大型的   行将存储在多个单独的分区中。的定义   分区集由您的需求定制,定义和管理。   Microsoft SQL Server 2005允许您根据表对表进行分区   使用定义的范围或列表的特定数据使用模式。 SQL Server   2005年还为长期管理提供了多种选择   通过添加设计的功能来划分表和索引   围绕新表和索引结构。

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

答案 1 :(得分:0)

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