SQL,两张表,一张共享主键
Posted
技术标签:
【中文标题】SQL,两张表,一张共享主键【英文标题】:SQL, two tables, one shared primary key 【发布时间】:2012-09-11 15:45:20 【问题描述】:我想要两个表,这样我就可以将旧记录移动到第二个表中,这样我就可以保持主表很小,但仍然希望能够使用一个 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 表中存储一个主键计数器,并在每次添加记录时递增它。 或
二:添加另一个表,将会话表主键和过期会话主键链接到第三个主键,然后使用第三个主键链接到我的日志表。
【问题讨论】:
您使用的是哪个 DBMS?甲骨文? PostgreSQL? DB2? 【参考方案1】:您是否考虑过使用表分区?我不太了解您的要求,但可能值得调查。
当表和索引变得非常大时,分区可以通过以下方式提供帮助 将数据划分为更小、更易于管理的部分。这 论文侧重于水平分区,其中大组 行将存储在多个单独的分区中。的定义 分区集是根据您的需要定制、定义和管理的。 Microsoft SQL Server 2005 允许您根据以下条件对表进行分区 使用定义的范围或列表的特定数据使用模式。 SQL 服务器 2005 年还为长期管理 通过添加设计的功能分区表和索引 围绕新的表和索引结构。
http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx
【讨论】:
【参考方案2】:为什么不为每个表保留单独的主键,而是添加另一列作为会话的唯一标识符,无论它位于哪个表中?我看到你有 Session_ID...如果你索引它,你甚至可以用它来查找。
【讨论】:
以上是关于SQL,两张表,一张共享主键的主要内容,如果未能解决你的问题,请参考以下文章