Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:sicoferpscriptsdb:process:standardandpref

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
ada:howto:sicoferp:factory:sicoferpscriptsdb:process:standardandpref [2020/10/05 18:46]
carlos.torres creado
ada:howto:sicoferp:factory:sicoferpscriptsdb:process:standardandpref [2020/12/03 14:07] (actual)
200.116.180.41 [ScriptsDB - Proceso: Estándares y Prefijos]
Línea 1: Línea 1:
-====== ScriptsDB - Proceso: ​Estandares ​y Prefijos ====== +====== ScriptsDB - Proceso: ​Estándares ​y Prefijos ====== 
-Esta sección presenta a continuación las normas de denominación de variables y objetos estándar declaradas dentro de las bases de datos relacionales (Oracle PLSQL) de la Compañía. El estandar ​ha sido generado teniendo presente el estandar ​Oracle el cual puede ser consultados ​desde [[https://​oracle-base.com/​articles/​misc/​naming-conventions|Nombres y convenciones Oracle]]+Esta sección presenta a continuación las normas de denominación de variables y objetos estándar declaradas dentro de las bases de datos relacionales (Oracle PLSQL) de la Compañía. El estándar ​ha sido generado teniendo presente el estándar ​Oracle el cual puede ser consultado ​desde [[https://​oracle-base.com/​articles/​misc/​naming-conventions|Nombres y convenciones Oracle]] 
 + 
 +===== Notas de Versión ===== 
 +^Versión^Elabora^Revisa^Aprueba^Fecha Publicación^Observaciones^ 
 +|1.0|carlos.torres,​ abdimar.estrada|daberson.henao|daberson.henao|05/​10/​2020|Versión Inicial|
  
 ===== Tablas y Entidades ===== ===== Tablas y Entidades =====
Línea 14: Línea 18:
  
 ==== Ejemplo: ==== ==== Ejemplo: ====
 +<code sql>
   * APPLICATIONS   * APPLICATIONS
   * APPLICATION_FUNCTIONS   * APPLICATION_FUNCTIONS
   * APPLICATION_FUNCTION_ROLES   * APPLICATION_FUNCTION_ROLES
 +</​code>​
 +
  
 ==== Definición de Nombres ==== ==== Definición de Nombres ====
-A continuación se establen ​los criterios para la definción ​de nombres de tablas:+A continuación se establecen ​los criterios para la definición ​de nombres de tablas:
   * Tablas de Maestros: MAE_   * Tablas de Maestros: MAE_
   * Tablas de Detalles: DET_   * Tablas de Detalles: DET_
Línea 27: Línea 34:
  
 === Ejemplo: === === Ejemplo: ===
 +<code sql>
   * APPLICATIONS = APPL (4)   * APPLICATIONS = APPL (4)
   * APPLICATION_FUNCTIONS = APFU (2:2)   * APPLICATION_FUNCTIONS = APFU (2:2)
   * APPLICATION_FUNCTION_ROLES = APFR (2:1:1)   * APPLICATION_FUNCTION_ROLES = APFR (2:1:1)
 +</​code>​
  
 ===== Vistas ===== ===== Vistas =====
Línea 42: Línea 51:
  
 ==== Ejemplo: ==== ==== Ejemplo: ====
 +<code sql>
   * V_TERCEROS ​   * V_TERCEROS ​
   * VM_TERCEROS   * VM_TERCEROS
 +</​code>​
  
 ===== Atributos y Columnas ===== ===== Atributos y Columnas =====
Línea 49: Línea 60:
  
   * No debe superar una longitud máxima de 30 caracteres.   * No debe superar una longitud máxima de 30 caracteres.
-  * Las palabras en el nombre deben estar separados por un guión ​bajo.+  * Las palabras en el nombre deben estar separados por un guion bajo.
   * Deberán evitarse las abreviaturas,​ prefiriendo palabras completas, siempre que sea posible.   * Deberán evitarse las abreviaturas,​ prefiriendo palabras completas, siempre que sea posible.
   * Los nombres de columna y componentes de nombre serán en singular, no en plural.   * Los nombres de columna y componentes de nombre serán en singular, no en plural.
Línea 58: Línea 69:
   * Los nombres de columna que se refieren a un BLOB deben empezar con BLOB_   * Los nombres de columna que se refieren a un BLOB deben empezar con BLOB_
   * Las columnas CLOB/BLOB deben inicializarse con la función EMPTY_CLOB/​EMPTY_BLOB según el tipo   * Las columnas CLOB/BLOB deben inicializarse con la función EMPTY_CLOB/​EMPTY_BLOB según el tipo
-  * No utilice tipos binarios para almacenamiento de recursos o archivo ​evalue ​el uso de BLOB o puede utilizar CLOB y almacenar el recurso en Base64 de esta formata ​optimiza el espación ​y se permite la lectura del recurso sin herramientas de terceros o visores especiales+  * No utilice tipos binarios para almacenamiento de recursos o archivo ​evalúe ​el uso de BLOB o puede utilizar CLOB y almacenar el recurso en Base64 de esta forma optimiza el espació ​y se permite la lectura del recurso sin herramientas de terceros o visores especiales
   * No utilizar palabras reservadas de Oracle en el nombre de columna.   * No utilizar palabras reservadas de Oracle en el nombre de columna.
-  * No utilizar el tipo de dato CHAR como opcion ​utilice VARCHAR2.+  * No utilizar el tipo de dato CHAR como opción ​utilice VARCHAR2.
   * Las columnas VARCHAR2 deben estar definidas en base binaria (1,​2,​4,​8,​16,​32,​64,​128,​256...).   * Las columnas VARCHAR2 deben estar definidas en base binaria (1,​2,​4,​8,​16,​32,​64,​128,​256...).
   * Las columnas DATE deben empezar con la palabra FECHA_.   * Las columnas DATE deben empezar con la palabra FECHA_.
  
 ==== Ejemplo: ==== ==== Ejemplo: ====
 +<code sql>
   * FLG_ACTIVO NUMBER   * FLG_ACTIVO NUMBER
   * FECHA_REGISTRO DATE   * FECHA_REGISTRO DATE
   * DESCRIPCION ​ VARCHAR2(256)   * DESCRIPCION ​ VARCHAR2(256)
   * CLOB_MEMO CLOB DEFAULT EMPTY_CLOB()   * CLOB_MEMO CLOB DEFAULT EMPTY_CLOB()
 +</​code>​
 +
 +===== Llaves o Claves =====
 +
 +==== Primarias ====
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesta por el alias de la tabla.
 +  * Cuando la llave primaria este compuesta de un solo campo el nombre debe ser el nombre de la tabla o su alias y debe empezar por PK_ Ej: PK_TERCERO
 +  * Cuando la llave primaria este compuesta por más de un campo el nombre debe ser el nombre de la tabla o su alias y debe empezar por PKC_ Ej: PKC_TERCERO
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +==== Foráneas ====
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesta por el alias de la tabla referenciada.
 +  * Cuando la llave foránea está compuesta por un solo campo, debe empezar por FK_[nombre de la tabla][identificador]. El identificador será el número de referencia que corresponde a la tabla asociada empezando por 01, 02, 03, 04...NM EJ: FK_TERCERO01.
 +  * Cuando la llave foránea está compuesta por varios campos, debe empezar por FKC_[nombre de la tabla][identificador]. El identificador será el número de referencia que corresponde a la tabla asociada empezando por 01, 02, 03, 04...NM EJ: FKC_TERCERO01.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +==== Únicas ====
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesta por el alias de la tabla.
 +  * Cuando la llave única está compuesta por un solo campo, debe empezar por UK_[nombre de la tabla][identificador]. El identificador será el número de referencia que corresponde a la siguiente llave única en la tabla empezando por 01, 02, 03, 04...NM EJ: UK_TERCERO01.
 +  * Cuando la llave única está compuesta por varios campos, debe empezar por UKC_[nombre de la tabla][identificador]. El identificador será el número de referencia que corresponde a la siguiente llave única en la tabla empezando por 01, 02, 03, 04...NM EJ: UKC_TERCERO01.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +==== Índices ====
 +
 +=== Índice de Clave Primaria ===
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesto por el alias de la tabla.
 +  * Debe empezar por IDX_
 +  * En lo posible utilizar el mismo nombre utilizado para la clave EJ: PK_TERCERO → IDX_TERCERO.
 +  * En lo posible almacenar los índices en un tablespace diferente al que se utilizó para la definición de la tabla.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +=== Índice de Clave Externa ===
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesto por el alias de la tabla.
 +  * Si el índice no es un índice de mapa de bits el nombre estará formado por el nombre de la restricción de clave externa y debe empezar por IDX_
 +  * Si el índice es un índice de mapa de bits debe empezar por BIDX_
 +  * En lo posible almacenar los índices en un tablespace diferente al que se utilizó para la definición de la tabla.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +=== Índice de base Función ===
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesto por el alias de la tabla.
 +  * Debe empezar por FBI_
 +  * En lo posible almacenar los índices en un tablespace diferente al que se utilizó para la definición de la tabla.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +=== Índice de Clave Única ===
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesto por el alias de la tabla.
 +  * Si el índice no es un índice de mapa de bits, ó basado en función debe empezar por IDX_.
 +  * Si el índice es un índice de mapa de bits debe empezar por BIDX_
 +  * índices únicos no se crearán a menos que exista una restricción única correspondiente.
 +  * En lo posible almacenar los índices en un tablespace diferente al que se utilizó para la definición de la tabla.
 +  * En lo posible utilizar el mismo nombre utilizado para la clave única EJ: UK_TERCERO01 → IDX_TERCERO01.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +=== Otros Índices ===
 +  * El nombre debe estar en singular.
 +  * Puede estar compuesto por el alias de la tabla.
 +  * Si el índice no es un índice de mapa de bits, ó basado en función debe empezar por IDX_.
 +  * Si el índice es un índice de mapa de bits debe empezar por BIDX_
 +  * En lo posible almacenar los índices en un tablespace diferente al que se utilizó para la definición de la tabla.
 +  * No debe superar una longitud máxima de 30 caracteres.
 +
 +===== Secuencias =====
 +  * El nombre debe empezar por SEQ_.
 +  * El nombre no puede ser superior a 30 caracteres de longitud.
 +  * No utilice palabras reservadas de Oracle para componentes de nombre de secuencia.
 +  * Cuando una secuencia es utilizado por una tabla se debe utilizar el alias de la tabla ej: SEQ_TERCEROS.
 +  * Cuando una secuencia es utilizada por varias tablas se deben usar los alias de las tablas que la utilizan ej: SEQ_TER_PLAC.
 +
 +===== Triggers =====
 +  * El nombre debe empezar por TRG_.
 +  * El nombre no puede superar los 30 caracteres de longitud.
 +  * El nombre debe seguir el siguiente convenio de denominación:​ TRG_ (activación:​ Before= B, After: A)_(operación:​ Insert= I, Update= U, Delete=D)_tabla Ej: TRG_BI_TERCERO
 +
 +===== Check Constraints =====
 +  * El nombre debe empezar CHK_
 +  * El nombre no puede superar los 30 caracteres de longitud.
 +
 +===== Roles =====
 +  * Deben empezar por ROL_
 +  * El nombre no puede superar los 30 caracteres de longitud.
 +
 +===== DBLinks =====
 +  * El nombre debe empezar por DBL_
 +  * El nombre debe seguir el siguiente convenio de denominación:​ DBL_ (Alias Base de Datos Destino)_(Alias Usuario Base de Datos). Ej: DBL_CALIDAD_PRESUP.
 +
 +===== Directorios =====
 +  * El nombre debe empezar DIR_
 +
 +===== Bases de Datos =====
 +Las reglas para la creación de bases de datos serán definidas por el equipo de implantación sin embargo se deben considerar las siguientes recomendaciones:​
 +  * El nombre debe estar en mayúsculas.
 +  * El nombre debe intuir el nombre del cliente (utilizar alias).
 +  * De ser posible asociar al nombre un identificador numérico. EJ DESARROLLO00
 +
 +===== PL/SQL =====
 +
 +==== Paquetes ====
 +  * Debe empezar por PKC_, ó PKG_
 +  * Los nombres de paquetes no pueden superar los 30 caracteres de longitud.
 +  * No utilice palabras reservadas de Oracle para componentes de nombre del paquete.
 +
 +==== Funciones ====
 +  * Debe empezar por FN_
 +  * Los nombres de funciones no pueden exceder los 30 caracteres de longitud.
 +  * No utilice palabras reservadas de Oracle para componentes de nombre de función.
 +
 +==== Procedimientos Almacenados ====
 +  * Debe empezar por SP_
 +  * los nombres de procedimiento no pueden superar los 30 caracteres de longitud.
 +  * No utilice palabras reservadas de Oracle para componentes de nombre procedimiento.
 +
 +==== Variables ====
  
 +=== Alcance ===
 +  * Global: g
 +  * Local: l
 +  * Constante: c
  
 +=== Tipos de Datos ===
 +  * Number: n_
 +  * Varchar2: v_
 +  * Date: dt_
 +  * Tipos: tpy_
 +  * Cursor: cur_
 +  * Exception: exc_
 +  * 
 +=== Parámetros ===
 +  * Entrada: ai
 +  * Salida: ao
 +  * Entrada/​Salida:​ aio
  
 +=== Extensiones de Archivos ===
 +Se permite el tipo genérico sql para todos los archivos ó según el tipo de objeto se permiten los siguientes tipos:
  
 +  * Especificación de Paquete: .pks
 +  * Cuerpo de Paquete: .pkb
 +  * Consultas: .sql
 +  * Triggers: .trg
 +  * Funciones: .fnc
 +  * Procedimientos:​ .prc
 +  * Vistas: .v
 +  * Vistas Materializadas:​ .vm
 +  * Especificación deTipo: .tps
 +  * Cuerpo de Tipo: .tpb
  
-==== Observaciones ​==== +===== Recomendaciones:​ ===== 
-  * Todos los desarrollos deben estar contenidos ​en alguno ​de los directorios expuestos arriba.+Las siguientes recomendaciones no imponen reglas de utilización sin embargo trate en lo posible ​de aplicarlas ya que el hacerlo optimiza el código generado:
  
-==== Recomendaciones ==== +  * Agrupe funciones y procedimientos en paquetes. 
-  * Descargue ​el repositorio ​en una unidad diferente ​a **C:**+  * Evite la función raise_application_error utilice en su lugar Raise y defina excepciones personalizadas utilizando ​el inicializador pragma exception_init. 
 +  * Evite los operadores SQL%, en su lugar utilice capturadores begin exception. 
 +  * Evite el uso del Open al abrir cursores en su lugar utilice el bucle for. 
 +  * Todas las consultas select into deben estar incluidas dentro de un bloque begin exception y al menos debe validar las excepciones NOT_DATA_FOUND y TOO_MANY_ROWS 
 +  * Evite el uso de las funciones de formatos en consultas pesadas 
 +  * TO_CHAR: si valida fechas utilice mejor el operador EXTRACT 
 +  * TRUNC en variables numéricas trate de utilizar el operador matemático que desea aplicar. 
 +  * Utilice los campos de las tablas de manera explícita. Evite el uso de SELECT * o INSERT INTO VALUES sin especificación de columnas. 
 +  * Siempre coloque el nombre del esquema propietario de los objetos para el uso de los mismos (Tablas, Vistas, Secuencias, Funciones, Procedimientos,​ Paquetes, Triggers, etc.). Por ejemplo TESORE01.maestro_terceros. 
 +  * Utilice la función NVL, NLV2, DECODE o CASE, en los SELECT cuando no se soporten valores nulos. 
 +  * No utilizar Caracteres especiales. 
 +  * No utilizar Carácter '​ñ'​. 
 +  * No utilizar Vocales con tilde, ni siquiera en los comentarios. 
 +  * Siempre valide las operaciones de división para evitar la división entre cero. 
 +  * Utilizar %TYPE y %ROWTYPE para la definición de variables. 
 +  * Borrar código y variables que no se usen. Si conocemos ​una parte de un código o variable que no se va usar más debemos eliminarla, asegurando previamente que no tiene más presencia en el código. Evitar el código en comentarios. 
 +  ​Evitar las conversiones implícitas de tipos de datos. Se deben utilizar las funciones predefinidas para la conversión (TO_DATE, TO_CHAR, TO_NUMBER). 
 +  ​Luego de cualquier instrucción de manipulación de Datos – DML (INSERT, UPDATE, DELETE), se debe realizar un COMMIT;. 
 +  * Al crear registros en las tablas de uso general para todos los clientes, se debe primero generar un INSERT con los valores genéricos y luego un UPDATE para valores específicos para un cliente dado.   
 +  * Tener especial cuidado en las modificaciones posteriores de una instrucción. Por ejemplo, un CREATE TABLE debe tener modificaciones posteriores con un ALTER TABLE. Una definición de Funciones, procedimientos y paquetes siempre deben manejarse con CREATE OR REPLACE. 
 +  * Las instrucciones DDL no llevan COMMIT. 
 +  * Las instrucciones ejecutables deben terminar siempre con un “;”. 
 +  * Para la ejecución de bloques ejecutables continuos (CREATE OR REPLACE) se debe colocar el “/”. 
 +  * Verificar que las consultas que se componen de subconsultas que deben retornar solo una fila, no retornen más de una fila. 
 +  * No se deben mezclar instrucciones DML con instrucciones DDL. 
 +  * No se deben utilizar comandos DROP, a menos que sean para actualizaciones. 
 +  * Toda instrucción DELETE debe tener un WHERE. 
 +  * Manejar la empresa siempre en los querys, si no necesita la empresa poner la empresa por defecto ‘9999999999’ (en los esquemas multiempresa). 
 +  * Los comentarios de línea se definen con -- 
 +  * Los comentarios de bloque se definen con /* */
    
 [[ada:​howto:​sicoferp:​factory:​sicoferpscriptsdb:​process|←Volver atrás]] [[ada:​howto:​sicoferp:​factory:​sicoferpscriptsdb:​process|←Volver atrás]]
  
ada/howto/sicoferp/factory/sicoferpscriptsdb/process/standardandpref.1601923612.txt.gz · Última modificación: 2020/10/05 18:46 por carlos.torres