studio programacion móviles libro desarrollo curso aplicaciones sql database inheritance sql-server-2005

sql - móviles - manual de programacion android pdf



¿Herencia en la base de datos? (9)

No existe la herencia entre las tablas en SQL Server 2005, y como lo notaron los demás, puede obtener ayuda para agregar las columnas necesarias a las tablas cuando las crea, pero no será herencia como usted Lo sé.

Piénselo más como una plantilla para sus archivos de código fuente.

Tal como lo menciona GateKiller, puede crear una tabla que contenga los datos compartidos y hacer referencia a ella con una clave externa, pero deberá tener anzuelos de auditoría, desencadenantes o realizar la actualización de forma manual.

En pocas palabras: trabajo manual.

¿Hay alguna forma de usar la herencia en la base de datos (específicamente en SQL Server 2005)?

Supongamos que tengo pocos campos como CreatedOn , CreatedBy que quiero agregar en todas mis entidades. Estoy buscando una forma alternativa en lugar de agregar estos campos a cada tabla.


PostgreSQL tiene esta característica. Solo agregue esto al final de su definición de tabla:

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

La tabla secundaria tendrá todas las columnas de su elemento primario y los cambios en la tabla principal cambiarán al elemento secundario. Además, todo en la tabla secundaria aparecerá en consultas a la tabla principal (de forma predeterminada). Lamentablemente, los índices no cruzan el borde padre / hijo, lo que también significa que no puede asegurarse de que ciertas columnas sean exclusivas tanto para el padre como para el hijo.

Hasta donde yo sé, no es una característica muy utilizada.


Puede crear una plantilla en el panel de plantilla en Management Studio. Y luego use esa plantilla cada vez que quiera crear una nueva tabla.

De lo contrario, podría almacenar los campos CreatedOn y CreatedBy en una tabla de seguimiento de auditoría que hace referencia a la tabla e id originales.

En su defecto, hágalo manualmente.


Puede usar una herramienta de modelado de datos como ER / Studio o ERWin. Ambas herramientas tienen columnas de dominio donde puede definir una plantilla de columna que puede aplicar a cualquier tabla. Cuando el dominio cambia también lo hacen las columnas asociadas. ER / Studio también tiene plantillas de activación que puedes construir y aplicar a cualquier tabla. Así es como actualizamos nuestras columnas LastUpdatedBy y LastUpdatedDate sin tener que crear y mantener cientos de scripts de activación.

Si crea una tabla de auditoría, tendrá una fila por cada fila en cada tabla que use la tabla de auditoría. Eso podría ser complicado. En mi opinión, es mejor que coloque las columnas de auditoría en todas las tablas. También puede colocar una columna de marca de tiempo en todas sus tablas. Nunca se sabe cuando la concurrencia se convierte en un problema. Nuestras columnas de auditoría de DB que colocamos en cada tabla son: CreatedDt, LastUpdatedBy, LastUpdatedDt y Timestamp.

Espero que esto ayude.


Tenemos un SProc que agrega columnas de auditoría a una tabla determinada y (opcionalmente) crea una tabla de historial y desencadenadores asociados para rastrear los cambios en un valor. Desafortunadamente, la política de la compañía significa que no puedo compartir, pero realmente no es difícil de lograr.


Si está utilizando GUID, puede crear una tabla CreateHistory con columnas GUID, CreatedOn, CreatedBy. Para rellenar la tabla, deberá crear un activador para cada tabla o manejarlo en la lógica de la aplicación.


¡NO quieres usar herencia para hacer esto! Cuando la tabla B, C y D hereda de la tabla A, eso significa que la tabla de consulta A le dará registros de B, C y D. Ahora considere ...

ELIMINAR DE a;

En lugar de herencia, use LIKE en su lugar ...

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


Ramesh: implementaría esto usando relaciones de supertipo y subtipo en mi modelo ER. Existen algunas opciones físicas diferentes para implementar las relaciones también.


en el mapeo OR, la herencia se correlaciona con una tabla padre donde las tablas padre e hijo usan 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) )

SubObject tiene una relación de clave externa a Object. cuando crea una fila SubObject, primero debe crear una fila de Objeto y usar Id en ambas filas