2012-09-11 152 views
1

我想要有兩個表,所以我可以將舊記錄移動到第二個表,所以我保持主表小,但仍然希望能夠鏈接到兩個表使用一個int首要的關鍵。 (我已經簡化了這個例子,從我真正的表格中得到了什麼)我保留了一些會話,並且希望將過期會話移動到Expired_Sessions表中,但我也將會話鏈接到日誌表,如Login_Attempts表,我不想打破這些表的鏈接。SQL,兩個表,一個共享主鍵

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


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

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

我沒想到的兩種方法可以做到這一點的工作,但我覺得應該有一個更好的方式來做到這一點?

一:將主鍵計數器存儲在我的sys_constants表中,並在每次添加記錄時遞增。 或

二:添加另一個表,將Sessions表主鍵和Expired會話主鍵鏈接到第三個主鍵,然後使用第三個主鍵鏈接到我的日誌表。

+0

您正在使用哪個數據庫管理系統?甲骨文? PostgreSQL的? DB2? –

回答

0

爲什麼不爲每個表單獨保留不同的主鍵,而是添加另一個列作爲會話的唯一標識符,無論它在哪個表中?我看到你有Session_ID ...如果你爲它編制索引,你甚至可以使用它來進行查找。

1

你有沒有想過使用表分區?我對你的要求不夠了解,但可能值得調查。

當表和索引變得非常大時,分區可以幫助將數據分區爲更小,更易於管理的部分。這篇文章側重於水平分區,其中大量的 行將被存儲在多個單獨的分區中。分區集的定義是根據您的需求定製,定義和管理的。 Microsoft SQL Server 2005允許您使用定義的範圍或列表基於 特定數據使用模式對錶進行分區。 SQL Server 2005還通過在新表和索引結構周圍添加設計爲 的功能,爲分區表和索引的長期管理提供了多種選項。

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