6

I Use SQL Server 2008 R2 y desee particionar la tabla maestra y la tabla de detalles juntas. ¿Cómo puedo particionar la tabla de Detalle por el campo MasterTypeID en la tabla Maestra?Partición Master Detail Table

Mi función de partición es:

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

Mi Partición de esquema es:

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

Mi estructura de tabla Maestro es:

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

Mi Estructura Detalle del vector es:

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

Quiero tabla de detalle de particionamiento con respecto a la partición maestra. En otras palabras, quiero guardar el registro de la tabla maestra y los detalles relacionados en un grupo de archivos.

+0

¿Estas tablas serán HEAP o tendrán un índice agrupado? Si se trata de una tabla agrupada, la columna de partición deberá formar parte del índice agrupado o la clave principal. –

Respuesta

2

Debe definir la columna MasterTypeID en la tabla de Detalles y definir el permiso para deshabilitar la actualización de esta columna. y crear desencadenador en la tabla Master para sincronizar la columna MasterTypeID en la tabla Master con la columna MasterTypeID en la tabla Detail.

1

Lo que quiere es posible. Debe copiar el valor de MasterTypeID en cada fila de la tabla Detail para que la función de partición se pueda aplicar a Detail.

Cree una nueva columna Detail.MasterTypeID y llene esa columna adecuadamente. Ya sea en el código de tu aplicación o usando un disparador en la base de datos.

Después de que la columna esté correctamente llena, puede aplicar la función de partición.

+0

gracias por su respuesta. ¿Cómo puedo sincronizar 'Detail.MasterTypeID' y' Master.MasterTypeID' juntos? –

+0

'Detail.MasterTypeID' debe ser una columna de solo lectura y actualizar solo cuando la columna' Master.MasterTypeID' haya cambiado. también 'Detail.MasterTypeID' debe ser igual al relacionado' Master.MasterTypeID' y debe cambiarse automáticamente cuando 'Master.MasterTypeID' cambie. –

+0

Sí exactamente. Sugiero que cree un disparador 'AFTER' en la tabla' Master' 'FOR INSERT, UPDATE, DELETE'. Puede usar las pseudo-tablas 'INSERTED' y' DELETED' en ese desencadenador para actualizar todas las filas 'Detail' en consecuencia. Esto es demasiado código para escribir aquí, pero es sencillo. – usr

Cuestiones relacionadas