6

I使用SQL Server 2008 R2並希望將主表和主表分區在一起。如何在主表中按MasterTypeID字段對Detail表進行分區。分區主表詳細信息表

我的分區功能是:

CREATE PARTITION FUNCTION MasterTypeFN(int) 
AS 
RANGE LEFT FOR VALUES (1,2,3) 

我的分區模式是:

CREATE PARTITION SCHEME MasterTypeScheme 
AS 
PARTITION MasterTypeFN 
TO ([FG1], [FG2], [FG3], [PRIMARY]) 

我的主表的結構是:

CREATE TABLE [dbo].Master 
(
    [MasterID] [int] NOT NULL, 
    [MasterTypeID] [int] NOT NULL, 
    ... 
) 
ON MasterTypeScheme (MasterTypeID) 

我的詳細信息表結構是:

CREATE TABLE [dbo].Detail 
(
    [DetailID] [int] NOT NULL, 
    [MasterID] [int] NOT NULL, 
    ... 
) 

我想分區關於主分區的詳細信息表。換句話說,我想將主表記錄和相關詳細信息保存在一個文件組中。

+0

這些表會變成HEAP還是會有聚集索引?如果它們是聚簇表,則分區列將需要成爲聚簇索引或主鍵的一部分。 –

回答

2

您應該在詳細信息表中定義MasterTypeID列,並對其定義權限以禁用更新此列。並在Master表上創建trigger以同步MasterTypeID列中的Master表與MasterTypeID列中的Detail表。

1

你想要的是可能的。您需要將MasterTypeID的值複製到Detail表的每一行,以便可以將分區函數應用於Detail

創建一個新列Detail.MasterTypeID並適當填充該列。在您的應用程序代碼中或在數據庫中使用觸發器。

列正確填充後,您可以應用分區功能。

+0

感謝您的回答。我如何將'Detail.MasterTypeID'和'Master.MasterTypeID'同步到一起? –

+0

'Detail.MasterTypeID'必須是隻讀列,只有在'Master.MasterTypeID'列更改時才更新。 'Detail.MasterTypeID'必須等於相關的'Master.MasterTypeID',並且必須在'Master.MasterTypeID'改變時自動改變。 –

+0

完全正確。我建議你在'Master'表'FOR INSERT,UPDATE,DELETE'中創建一個'AFTER'觸發器。您可以使用該觸發器中的'INSERTED'和'DELETED'僞表來相應地更新所有'Detail'行。這裏輸入的代碼太多了,但它很簡單。 – usr