簡體   English   中英

SQL,兩個表,一個共享主鍵

[英]SQL, two tables, one 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 session主鍵鏈接到第三個主鍵的表,然后使用第三個主鍵鏈接到我的日志表。

您是否考慮過使用表分區? 我對您的要求了解不多,但值得調查。

當表和索引變得很大時,分區可以通過將數據划分為更小,更易於管理的部分來提供幫助。 本文着重於水平分區,其中大行組將存儲在多個單獨的分區中。 分區集的定義是根據您的需求進行定制,定義和管理的。 Microsoft SQL Server 2005允許您使用定義的范圍或列表,根據特定的數據使用模式對表進行分區。 SQL Server 2005還通過添加圍繞新表和索引結構設計的功能,為分區表和索引的長期管理提供了許多選項。

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

您為什么不只為每個表保留單獨的主鍵,而是添加另一個列作為會話的唯一標識符,無論該表位於哪個表中? 我看到您擁有Session_ID ...如果對它進行索引,則甚至可以將其用於查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM