Pregunta

Hay alguna forma de utilizar la herencia en la base de datos (Específicamente en SQL Server 2005)?

Supongamos que tengo pocos campo como el de la CreatedOn, CreatedBy lo que quiero agregar a todos los de mi entidades.Estoy buscando una forma alternativa en lugar de la adición de estos campos para cada tabla.

¿Fue útil?

Solución

No hay tal cosa como la herencia entre tablas en SQL Server 2005, y como se ha señalado por los demás, puede llegar tan lejos como obtener ayuda de agregar las columnas necesarias para las tablas cuando se crean, pero no va a ser la herencia como la conocemos.

Piense en esto como una plantilla para sus archivos de código fuente.

Como GateKiller menciona, puede crear una tabla que contenga los datos compartidos y hacer referencia a él con una clave foránea, pero ya sea que usted tiene que tener de auditoría ganchos, disparadores, o hacer la actualización manualmente.

Línea de base:El trabajo Manual.

Otros consejos

PostgreSQL tiene esta característica.Sólo añadir esto al final de su definición de la tabla:

INHERITS FROM (tablename[, othertable...])

El niño de la tabla tendrá todas las columnas de su padre, y cambios en la tabla principal cambiará el niño.También, todo en el hijo de la tabla se ven en las consultas a la tabla principal (por defecto).Lamentablemente los índices de no cruzar el padre/hijo frontera, lo que también significa que usted no puede asegurarse que ciertas columnas son únicas a través de ambos el padre y el hijo.

Hasta donde yo sé, no es una característica que se utiliza muy a menudo.

Se podría crear una plantilla en el panel plantilla en Management Studio.Y, a continuación, utilizar esa plantilla cada vez que desee crear una nueva tabla.

En su defecto, se puede almacenar en el CreatedOn y CreatedBy campos en un registro de Auditoría de la tabla hace referencia a la tabla original y de identificación.

En su defecto, hacerlo de forma manual.

Usted podría utilizar un modelado de datos de la herramienta como la de ER/Studio o ERWin.Ambas herramientas tienen dominio de las columnas donde se puede definir una columna de plantilla que se puede aplicar a cualquier mesa.Cuando el dominio de los cambios lo hacen los asociados columnas.ER/Studio también ha gatillo plantillas que usted puede construir y aplicar a cualquier mesa.Esta es la manera de actualizar nuestra LastUpdatedBy y LastUpdatedDate columnas sin tener que construir y mantener cientos de activar scripts.

Si crea una tabla de auditoría que habría una fila para cada fila de cada tabla que utiliza la tabla de auditoría.Que podría ser caótico.En mi opinión, es mejor poner la auditoría de las columnas de cada tabla.Usted también querrá poner una columna de marca de tiempo en todas las mesas.Nunca se sabe cuando la concurrencia se convierte en un problema.Nuestra DB de auditoría de las columnas que vamos a poner en cada mesa son:CreatedDt, LastUpdatedBy, LastUpdatedDt y marca de tiempo.

Espero que esto ayude.

Tenemos un procedimiento almacenado que añade auditoría columnas a una tabla dada, y (opcionalmente) crea una tabla de historial y asociados desencadena el seguimiento de los cambios en un valor.Por desgracia, la política de la empresa significa que no puede compartir, pero realmente no es difícil de lograr.

Si usted está utilizando el Guid se podría crear una CreateHistory tabla con columnas GUID, CreatedOn, CreatedBy.Para rellenar la tabla, usted todavía tiene que crear un disparador para cada tabla o manejarlo en la lógica de la aplicación.

Usted NO desea utilizar la herencia para hacer esto!Cuando la tabla B, C y D hereda de la tabla, lo que significa que la consulta de la tabla le dará los registros de B, C y D.Ahora considere la posibilidad de...

ELIMINAR DE una;

En lugar de la herencia, que se usa COMO lugar de...

CREATE TABLE blah (
    blah_id     serial       PRIMARY KEY
    , something text         NOT NULL
    , LIKE template_table    INCLUDING DEFALUTS
);

Ramesh - me gustaría poner en práctica esta usando supertipo y el subtipo de relaciones en mi E-R modelo.Hay un par de físicos diferentes opciones que usted tiene de la implementación de las relaciones así.

en cartografía, la herencia se asigna a la tabla principal donde el padre y el hijo tablas de utilizar el mismo identificador

por ejemplo

create table Object (
    Id int NOT NULL --primary key, auto-increment
    Name varchar(32)
)
create table SubObject (
    Id int NOT NULL  --primary key and also foreign key to Object
    Description varchar(32)
)

Subobjeto tiene una relación de clave externa a Objeto.cuando se crea un Subobjeto de la fila, primero debe crear un Objeto de la fila y use el Identificador en ambas filas

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top