Estandares SQL Oracle

INST Estándar Codificación SQL y PL-SQL Convenciones de nombres y estándares de codificación para SQL y PL/SQL Objetivo:

Views 305 Downloads 66 File size 26KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INST Estándar Codificación SQL y PL-SQL Convenciones de nombres y estándares de codificación para SQL y PL/SQL Objetivo: Establecer pautas para estandarizar los nombres de objetos Oracle y la confección de código SQL y PL/SQL, para lograr: código fácil de entender y, por lo tanto, de mantener (claridad) simplificar la decisión al momento de establecer nombres uniformidad en el criterio utilizado por todos los integrantes de SziCom

Convención de nombres de objetos: General: Todos los nombres de objetos de la base de datos se deberán escribir en mayúsculas. Se utilizarán guiones bajos (_) para separar palabras. Se evitarán, en lo posible, las abreviaturas.

Tablas: Se han adoptado algunas nomenclaturas para prefijar los nombres de las tablas: Prefijo

Significado

Ejemplo

NTC_

Nominación Transporte Cliente

DESPACHO.NTC_NOMINACION

DCG_

Desbalance Cliente Gas

DESPACHO.DCG_AJUSTE_INYECCION

DCL_

Desbalance Cliente

DESPACHO.DCL_AJUSTE_CONSUMO

ABI_

Tablas que se alimentan directamente con datos del ABI de TGN

ABI_BAL, ABI_COMPENSACION

SPAC_

Tablas que se alimentan directamente con datos del SPAC de TGS

SPAC_ASIGNACION_PUNTO

MV_

Tablas Snapshot de vistas materializadas

MV_CONSUMO

Toda tabla deberá tener un breve comentario que describa su contenido.

Columnas: Nombre del objeto

Comentario

Ejemplo

ID_nombre_tabla

Prefijo ID (aplica a campos enteros)

ID_CLIENTE; ID_PUNTO

FH_acción

Prefijo FH indica fecha y hora

FH_ENVIADO

NOMINADO

Implica el prefijo VOLUMEN

NTC_NOMINACION.NOMINADO

Toda columna deberá tener un breve comentario explicativo. Otras convenciones: Los campos que correspondan a valores del tipo SI/NO, VERDADERO/FALSO, se definirán como CHAR(1) y luego mediante una constraint se limitará el contenido a las letras S o N. Los campos que registren el usuario Oracle que realizó la acción, se denominarán USUARIO, serán del tipo VARCHAR2(32), pudiendo o no tener como default: USER. Los campos Año se denominarán ANIO y se definirán como NUMBER(4). Cuando una columna refiera al ID de otra tabla (FOREIGN KEY), deberá tener (en lo posible) el mismo nombre que el campo ID de la tabla referenciada. Esto facilita que muchas herramientas de generación de diagramas establezcan de manera automática las relaciones entre tablas. Todo campo "tipo" que tenga más de 3 (tres) estados posibles deberá transformarse en un campo ID que deberá referenciar a una tabla TIPO_X convenientemente creada a tal efecto.

Constraints: El espacio de nombre de las contraints es el del esquema. Prefijo

Significado

Ejemplo

PK_xxx

Clave primaria, xxx es el nombre de la tabla

PK_CLIENTE

UK_xxx_yyy

Indice único sobre la tabla xxx y los campos yyy

UK_CLIENTE_NEMONICO

FK_xxx_yyy

Foreign Key de la tabla xxx columna yyy

FK_CESION_ID_CAMARA

NN_xxx_yyy

El campo yyy de la tabla xxx no puede ser nulo

NN_CLIENTE_FECHA_ALTA

POS_xxx_yyy El campo yyy de la tabla xxx debe ser positivo

TRANSPORTE.POS_TARIFA_TARIFA_FIRME

SN_xxx_yyy

El campo yyy de la tabla xxx debe contener S o N

DESPACHO.SN_NOMINACION_VERSION_CERRADA

CHK_xxx_yyy

El campo yyy de la tabla xxx debe cumplir el CHECK

CHK_BALANCE_MES_MES

Se recomienda no crear las constraints en el comando SQL CREATE TABLE, ya que éstas se generan como System Named. Si se utiliza el TOAD, no utilizar las columnas PK y NOT NULL de la grilla de armado de tablas, ya que las constraints resultantes se generan como System Named.

Triggers: La primera letra del nombre indicará el momento en que disparará el trigger: B Before (Antes) A After (Después) Agregado de la letra S Si se trata de un trigger BEFORE o AFTER STATEMENT, si no se indica se supone FOR EACH ROW. Luego, las siguientes letras indicarán en el orden que se expone, qué acciones sobre la tabla involucrada disparán los triggers: I Insert U Update D Delete A continuación, el nombre de la tabla correspondiente. Ejemplos: Nombre

Significado

BIU_TARIFA

Before Insert/Update (for each row) en la tabla TARIFA

BSIUD_TARIFA

Before Statement Insert/Update/Delete en la tabla TARIFA

AIU_TARIFA

After Insert/Update (for each row) en la tabla TARIFA

Secuencias: Se prefijará SEQ_ y luego se indicará el nombre de la tabla que tiene uno o más triggers que a su vez utilizan la secuencia. Ejemplos: SEQ_CAMARA_BALANCE SEQ_GNC_CONTRATO_GAS

Packages: Se prefijará PK_ y luego se indicará con una o más palabras el ámbito al que corresponde el package. Ejemplos: PK_NOMINACION PK_CONTROL_FACTURACION PK_CONTRATO

PK_VENTANA

Vistas: Los nombres de las vistas se prefijarán según el siguiente criterio: Prefijo

Significado

V_

Vista estándar

VA_

Vista de valores acumulados

MV_

Vista materializada

VD_

Vista para desnormalizar tablas

X_, XX_

Vistas intermedias, utilizadas por lo general para no incluir subquerys en la vista final

Al momento de redactar las vistas: Introducir un breve comentario explicativo, a renglón siguiente de la cláusula SELECT y antes de comezar a enumerar los campos. Prefijar las tablas/vistas utilizadas en la selección, con el esquema al que pertenecen. Cuando se trate de joins de tablas o vistas, establecer alias y utilizarlos al referenciar los campos, tanto en la cláusula SELECT como en las clásulas WHERE, ORDER BY o GROUP BY.

Estándares de codificación para SQL y PL/SQL: Notación: Prefijo

Significado

Ejemplo

p

Parámetro de función/procedimiento

pID_CLIENTE, pDIA_OPERATIVO

v

Variable local al procedimiento/función

vCONT, vFECHA_DESDE

g

Variable global del package

gDIA_OPERATIVO

k

Constante

kID_MERCADO_GU, kID_DISTCO

c

Cursor

cCLIENTES_ACTIVOS

e

Variable del tipo EXCEPTION

eNO_VIGENTE

r

Registro, fila de un cursor, tupla

rCLIENTE_ACTIVO

t

Tipo

tARR_NOMINACION

a

Array

aNOMINACION

Comentarios: Cabecera de métodos: Es obligatorio escribir un comentario en la cabecera de un método (procedimiento o función). Se debe indicar al inicio del comentario las iniciales del programador que creó o modificó el método. El comentario no debe exceder las 2 líneas. Si se requiere más detalle se deberá recurrir a la especificación que motivó la creación o cambio del método, que seguramente tendrá el contexto. Historial de cambios: limitarlos a una línea por cambio y si una línea no es suficiente, hacer referencia al requerimiento (issue) que dio origen al cambio. Si son varios issues se indicarán. Ejemplo:

-- Replicar el contrato para el cliente con los mismos servicios y la misma vigencia -- Autor. CSZ (20/12/2009)-Tomado de la version 2. -- Modif. ACM (20/01/2009)-Replicar adecuadamente las tarifas y replicar volumenes. -RAV (02/02/2009)-Issue DESPACHO-153.

Nota: Este tipo de comentario dejará de utilizarse cuando se implemente svn para Oracle. Comentarios en un bloque interno de código: Valen las mismas consideraciones que para los comentarios de cabecera. Por ejemplo: descripción de un cursor. Comentarios adicionales: Corresponden a información que no es evidente, que no se puede deducir del comentario estandar y que el programador considera importante. Ejemplos:

-- Controlar que no se haya creado antes la misma cesión. -- Recorremos la lista de clientes que reciben, asignando hasta terminar el excedente

Pautas generales: Nombrar los objetos de cada esquema con el prefijo del esquema, aunque sea redundante. Ejemplos:

SELECT ID_CLIENTE, NEMONICO FROM CI.CLIENTE vFIRME_CONTRATADO := CI.PK_CONTRATO.FIRME_CONTRATADO;

Utilizar tipo de variables enteras cuando los operandos sean enteros y el resultado un entero (PLS_INTEGER). Evitar el uso de "Números mágicos". Definir constantes con nombres representativos, prefijadas con k. Evitar el uso de EXIT o RETURN para salir de un ciclo FOR o WHILE. Utilizar nombres de variables en los ciclos que aporten mayor información que el simple uso de I, J, K, etc. Ejemplos:

-- Cuando no es un simple conteo de iteraciones... FOR vMES IN 1..12 LOOP -- Cuando se trata de un registro de un cursor... FOR rCLIENTE IN cCLIENTES_ACTIVOS LOOP

Todo procedimiento o función deberá incluirse en un package afin. Escribir el nombre del procedimiento o función en el END de cierre (permite diferenciarlo fácilmente de otros ENDs del código).

Ejemplo:

END BORRAR_APERTURA_NTC_NOM_CLIE;

Longitud máxima para un procedimiento/función/trigger: 30 líneas de código. Evitar el uso de IF para asignar valores a variables booleanas. Ejemplo:

-- Usar: vVENCIDO := vFECHA_HASTA