Estándares de Desarrollo, Base de Datos

De GrialWIKI

Revisión a fecha de 05:58 8 ago 2009; Admin (Discutir | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Introducción al Framework Grial

Índice

Contenido

Nominación de Tablas, Vistas, Objetos

Información General

Es importante comprender perfectamente la normativa de nominación de objetos utilizada en el desarrollo para comprender la distribución funcional de los objetos en la base de datos. Mediante el conocimiento del nombre cualquier función, módulo u objeto de la base de datos, es posible establecer su ubicación en el esquema general del sistema, su función y su interdependencia con otros objetos de la base.

Nominación de las Tablas

Todas las tablas del sistema se nominan de acuerdo al siguiente esquema: [sst]_[subg]_[nn]_[tpo]_[descripción] Utilizaremos como ejemplo la tabla: PRE_EJEC_20_CAB_COMPROMETIDO conformándose cada grupo como sigue:

[sst], Sistema, (caracteres 1 a 3): determinan el sistema al que pertenece la tabla, en nuestro ejemplo "PRE" (Presupuesto)

[subg], Subgrupo (caracteres 5 a 8): determinan el subgrupo funcional dentro el sistema al cual pertenece la tabla, en nuestro ejemplo "EJEC" (Ejecución Presupuestaria)

[nn], Número secuencial, (caracteres 10 a 11): es un número secuencial dentro de cada sistema y subgrupo, en nuestro ejemplo "01".

De esta manera, la combinación de [sst]_[subg]_[nn] ya determina un nombre único para la tabla y su sinónimo público. Todas las referencias a la tabla se realizan mediante su sinónimo público, en nuestro ejemplo: "PRE_EJEC_01"

[tpo], Tipo (caracteres 13 a 15): determinan el tipo de tabla en cuanto a su importancia y relaciones con otras tablas. El Tipo puede ser:

  • TBL: Tabla de códigos, independiente. Contiene información básica del sistema y es referenciada de una o más tablas específicas. Ejemplo: PRE_FORM_01_TBL_MEDIDAS (Tabla de Unidades de Medida)
  • CAB: Tabla de cabecera, independiente. Contiene generalmente la cabecera de un documento o transacción. Existirá una o varias tablas de detalle (tipo DET) que la referencien. Ejemplo: PRE_EJEC_20_CAB_COMPROMETIDO (Tabla de Documentos de Compromiso)
  • DET: Tabla de detalle, dependiente de una tabla Tipo CAB. Contiene generalmente los detalles de un documento o transacción. Existirá una tabla de cabecera (tipo CAB) referenciada desde esta tabla. Ejemplo: PRE_EJEC_21_DET_COMPROMISOS (Tabla de Detalles de los Documentos de Compromiso)
  • MOV: Tabla de movimientos, dependiente de más de una tabla Tipo CAB o DET. Contiene generalmente los detalles que resultan de la interrelación de mas de un documento o transacción. Existirá en esta tabla una referencia a más de una tabla, de la cuales depende. Ejemplo: PRE_ASIE_03_MOV_BANCOS (Relación entre los bancos y las cuentas Contables)
  • ARB: Tabla de estructura jerárquica (árbol). Contiene una estructura en forma de árbol, por lo que contendrá una referencia así misma (campo RELA_PADRE) Ejemplo: PRE_FORM_02_ARB_INSTITUCIONES (Tabla del Clasificador Institucional)

[descripción], Descripción (resto de los caracteres): Descripción libre aclaratoria de la función de la tabla.

Clave primaria por sistema unificado

Todas las tablas del sistema se identifican por una clave primaria normada, la cual es generada automáticamente en el momento de inserción del registro. Dada esta normalización no se permite el establecimiento de claves primarias por metadato (más de un campo o campos e información del usuario). Al ser la clave un único campo numérico se maximiza el tiempo de respuesta en las operaciones de indexado y resolución de vistas en la Base de Datos. El campo de clave primaria se compone del prefijo "ID" seguido del sinónimo público de la tabla. Para nuestro ejemplo, la clave primaria de la tabla PRE_EJEC_20_CAB_COMPROMETIDO es el campo ID_PREEJEC20.

Campos de relación

Al estar todas las tablas del sistema identificadas por una clave primaria normada, los campos de relación entre tablas responde al mismo formato y son por lo tanto únicos también. (Para relacionar una tabla con cualquier otra es necesario sólo un campo de relación) Todo campo de relación se compone del prefijo "RELA" seguido del sinónimo público de la tabla referenciada, permitiéndose así un rápido reconocimiento de la estructura relacionada de cualquier tabla, y también así facilitando la creación de vistas y consultas. Por ejemplo la tabla PRE_EJEC_21_DET_COMPROMETIDO tendrá un campo relacionándola con su tabla cabecera (PRE_EJEC_20_CAB_COMPROMETIDO). El campo de relación se denominará RELA_PREEJEC20.

Ordenamiento

Por convención se colocarán al principio de la tabla todos los campos de relación (prefijo RELA), luego se colocará el campo de identificación (clave primaria, prefijo ID) y luego los campos que representen los atributos específicos de la tabla. Este ordenamiento facilita la identificación de la estructura relacionada de cualquier tabla.

Ejemplo:

TABLE PRE_EJEC_21_DET_COMPROMISO (
  RELA_PREEJEC20 number(10) NOT NULL  --Rela a la cabecera
  ,RELA_PREFORM15 number(10) NOT NULL --Rela a otra tabla (concepto)
  ,ID_PREEJEC21 number(10) NOT NULL   --ID
  ,PREEJEC21_MONTO                    --Campos de Datos 
  ...
)

Nominación de Vistas

Las vistas se nominarán de acuerdo a su tabla troncal. La tabla troncal de una vista es aquella que tiene concordancia uno a uno de registros con la vista. El ID de la tabla troncal no se repite en la vista. Por cada registro de la tabla troncal hay un solo registro en la vista. Luego del nombre de la tabla troncal se agrega la letra "W" (por vieW) y un underscore '_' y los números correspondientes a las demás tablas involucradas. Si se incluye una tabla con un prefijo diferente a la que la precede en la lista de números, se colocarán las iniciales del prefijo antes del número.

Por ejemplo: PRE_FORM_17W_15_12_SU02_15

Es una vista con la tabla PRE_FORM_17 como tabla troncal, con joins a las tablas PRE_FORM_15 y PRE_FORM_12, y además joins a las tablas SOC_USUA_02 y SOC_USUA_15.

El orden en el que se listan las tablas joineadas a la tabla troncal con el mismo prefijo deberá adecuarse en lo posible al camino de obtención de los datos. En el caso presentado: al llamarse la vista "PRE_FORM_17W_15_12_SU02_15" se entiende que desde la PRE_FORM_17 (troncal) se accede a la PRE_FORM_15, y desde la PRE_FORM_15 se accede a la PRE_FORM_12. Las tablas accesorias de otro esquema (en este caso SU02_15) se colocan al final.

La identificación de la tabla troncal de la vista es fundamental. Por ejemplo, supongamos que la tabla PRE_EJEC_10, tiene un detalle en la tabla PRE_EJEC_12. (relación uno a muchos), y que también existe una tabla PRE_EJEC_14 con los tipos de documento.

Si existiese una vista llamada: PRE_EJEC_10W_14, se entiende que la tabla troncal será la PRE_EJEC_10, y que además ña vista contiene datos adicionales de la PRE_EJEC_14 (por ejemplo, la descripción del Tipo de comprobante). Siendo la PRE_EJEC_10 la troncal de la vista, se asume que existirá en la vista un registro por cada registro de la PRE_EJEC_10 y entonces que la relación con las demás tablas es uno a uno o mucho a uno.

En cambio, en una vista llamada PRE_EJEC_12W_10, se entiende que la tabla troncal es la PRE_EJEC_12, y que además incorpora datos de la PRE_EJEC_10 (cabecera). Se entiende entonces, que existe un registro en la vista por cada registro en la PRE_EJEC_12, y por lo tanto los datos correspondientes a la cabecera (PRE_EJEC_10) se repetirán en todos los registros del detalle.

Nominación extendida

"E", por Extendida, Tablas Implícitas

Cuando las tablas participantes son demasiadas o no es necesario especificarlas por no ser relevantes para la vista, se puede agrega la letra "E" al final de la tabla principal del grupo. Se entenderá "E" por "Extendido". Por Ejemplo: Nombre de la vista: EJE_REND_01_SU02E

Se entiende: la tabla EJE_REND_01 como troncal, con datos extendidos de la SOC_USUA_02. Conociendo el modelo está implícito que los datos extendidos de la SU02 (Puesto de un usuario del sistema) son las tablas SU01, SU15, SU08, PF11 y PF12. (Usuario, Entidad, Documento, U.Orgánica y Cargo)

"O" Outer Join

Cuando una de las tablas participantes este joineada a la tabla troncal mediante un outer join, se agregará la letra "O" DELANTE de la tabla joineada. Es necesario para diferenciar vistas con y sin outer joins. Por Ejemplo: PRE_EJEC_21W_22 <- Todos los registros de la 21 con relación en la 22 PRE_EJEC_21W_O22 <- Todos los registros de la 21 tengan o no 22

Campos en las vistas

Resultantes de Operaciones de agrupación (aggregate functions)

Los campos que resulten de operaciones de agrupación, se nominarán agregándole la operación como prefijo

Por ejemplo:

 Sum(PREEJEC12_IMPORTE) as SUM_PREEJEC12_IMPORTE
 ,Count(ID_SYSFUNCC03) as COUNT_ID_SYSFUNC03

Resultantes de Decodificaciones (DECODE)

Si una tabla tiene un campo _COD o _TIPO, codificado con valores 0..n, se creará una vista con el nombre de la tabla + "W" en la cual se incluye un campo con el decode para la descripción del campo codificado. Al campo calculado con decode se le agrega el sufijo _TEXT.

Por Ejemplo, la tabla EJE_ABAS_01 tiene un campo EJEABAS01_TIPO, codificado como: 0=Proveedor, 1=Responsable de Fondo. Se creará una vista EJE_ABAS_01W, de la siguiente forma:

CREATE VIEW EJE_ABAS_01W AS 
Select RELA_xxxx… 
      ,ID_EJEABAS01 
      ,EJEABAS01_DESCRI 
      ,EJEABAS01_TIPO 
      ,Decode(EJEABAS01_TIPO ,0,’Proveedor’, 1,’Responsable Fondo’ ,’Tipo ’||EJEABAS01_TIPO) as EJEABAS01_TIPO_TEXT 
From EJE_ABAS_01

A partir de aquí se puede utilizar esta vista "W" cada vez que se necesite tener la descripción del campo codificado. De esta manera, el decode para el campo se encuentra en un único lugar.

Campos RELA existentes en más de una tabla

Es posible que se repita un campo RELA entre las tablas que componen la vista. Se nominarán agregando como prefijo el nombre abreviado de la tabla para las tablas no-troncales.

Por Ejemplo:

Create View PRE_EJEC_10W_11_12_02 as 
Select PRE_EJEC_10.RELA_SOCUSUA02 --rela en la tabla troncal, queda como RELA_SOCUSUA02
,PRE_EJEC_11.RELA_SOCUSUA02 as PE11_RELA_SOCUSUA02 --tabla secundaria
,PRE_EJEC_02.RELA_SOCUSUA02 as PE02_RELA_SOCUSUA02 --otra tabla secundaria
...

Consideraciones Especiales

Campos de la Pre_Form_07w_13

Siendo muy probable que una vista medianamente compleja contenga dos o tres veces esta tabla, se nominarán los campos utilizando una abreviatura del metatipo del clasificador involucrado, por ejemplo:

PF07_PRG_CODIGO -> campo PREFORM07_CODIGO de un clasificador de programas 

PF07_PRG_DESCRI -> campo PREFORM13_DESCRI de un clasificador de programas

PF07_OG_DESCRI -> campo PREFORM13_DESCRI del Objeto del Gasto

Tablas con nombres de campo no normalizados

Tabla PRE_FORM_15 (Conceptos del Gasto)

Esta tabla contiene campos con nombres iguales a los de la tabla PRE_FORM_07, para evitar confusiones, usar la vista PRE_FORM_15N, que posee los campos normalizados.

Tablas PRE_FORM_01 y PRE_FORM_02 (Períodos e Instituciones)

Estas tablas contienen campos con nombres no normalizados, usar las vistas PRE_FORM_01N y PRE_FORM_02N que poseen los campos normalizados.

Tabla PRE_FORM_03 (Mov Período/Institución)

Esta tabla contiene campos con nombres no normalizados, usar las vistas PRE_FORM_03N, PRE_FORM_03W_02N y PRE_FORM_03W_02_01 que poseen los campos normalizados.

Otras Tablas Normalizadas por una Vista "N"

PRE_FORM_07N, PRE_FORM_08N, PRE_FORM_07W_13, PRE_FORM_07WN_05_18, PRE_FORM_11N (Orgánicas), PRE_FORM_12N (Cargos), PRE_FORM_16N, SOC_USUA_01N (Usuarios), SOC_USUA_02N (Identidades de usuarios), SOC_USUA_15N (Entidades), PRE_FORM_05N, PRE_FORM_06N, PRE_BIEN_02N

Regla General

Usar el nombre de la tabla seguido de la letra "N" cuando se accede a las tablas con campos no-normalizados.

En caso de hallar una tabla con campos no normalizados, utilizar la vista "N" correspondiente que posee los campos normalizados.

Por ejemplo, para acceder a la tabla PRE_FORM_07, utilizar el nombre PRE_FORM_07N



Introducción al Framework Grial <<< >>> Referencia: Controles Grial

Herramientas personales