6

I Utilizzare SQL Server 2008 R2 e desidera dividere in partizioni la tabella principale e la tabella dettagli. Come posso suddividere la tabella dei dettagli per il campo MasterTypeID nella tabella Master.Tabella dettagli master partizionamento

La mia funzione di partizione è:

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

mio schema di partizione è:

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

mio maestro Tabella Struttura è:

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

mio Particolare Tabella Struttura è:

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

Desidero eseguire la tabella dei dettagli del partizionamento per quanto riguarda la partizione master. In altre parole, desidero salvare il record della tabella principale e i relativi dettagli in un filegroup.

+0

Queste tabelle diventeranno HEAP o avranno un indice cluster? Se sono una tabella in cluster, la colonna di partizionamento dovrà essere parte dell'indice cluster o della chiave primaria. –

risposta

2

È necessario definire la colonna MasterTypeID nella tabella Dettagli e definire l'autorizzazione su di essa per disabilitare l'aggiornamento di questa colonna. e creare trigger sulla tabella Master per sincronizzare la colonna MasterTypeID nella tabella Master con la colonna MasterTypeID nella tabella Detail.

1

Quello che vuoi è possibile. È necessario copiare il valore di MasterTypeID in ogni riga della tabella Detail in modo che la funzione di partizione possa essere applicata a Detail.

Creare una nuova colonna Detail.MasterTypeID e riempirla in modo appropriato. O nel codice dell'applicazione o utilizzando un trigger nel database.

Dopo aver riempito correttamente la colonna, è possibile applicare la funzione di partizione.

+0

grazie per la tua risposta. come posso sincronizzare 'Detail.MasterTypeID' e' Master.MasterTypeID' insieme? –

+0

'Detail.MasterTypeID' deve essere letto solo nella colonna e si aggiorna solo quando la colonna' Master.MasterTypeID' è cambiata. anche 'Detail.MasterTypeID' deve essere uguale a' Master.MasterTypeID 'relativo e deve essere cambiato automaticamente quando 'Master.MasterTypeID' è cambiato. –

+0

Sì, esattamente. Ti suggerisco di creare un innesco 'AFTER' nella tabella' Master' 'FOR INSERT, UPDATE, DELETE'. Puoi usare le pseudo-tabelle 'INSERTED' e' DELETED' in quel trigger per aggiornare di conseguenza tutte le righe 'Detail'. Questo è troppo codice per digitare qui, ma è semplice. – usr