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

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
ada:howto:sicoferp:factory:sicoferpscriptsdb:process:standardandpref [2020/10/05 18:57]
carlos.torres
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 22: Línea 26:
  
 ==== 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 56: 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 65: 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_.
Línea 79: Línea 83:
 </​code>​ </​code>​
  
-===== Llaves ​ó Claves =====+===== Llaves ​Claves =====
  
 ==== Primarias ==== ==== Primarias ====
Línea 91: Línea 95:
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesta por el alias de la tabla referenciada.   * Puede estar compuesta por el alias de la tabla referenciada.
-  * Cuando la llave foránea ​esta compuesta por un solo campo, debe empezar por FK_[nombre de la tabla][identificador]. El identificador será el numero ​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 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 ​esta compuesta por varios campos, debe empezar por FKC_[nombre de la tabla][identificador]. El identificador será el numero ​de referencia que corresponde a la tabla asociada empezando por 01, 02, 03, 04...NM EJ: FKC_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.   * No debe superar una longitud máxima de 30 caracteres.
  
Línea 98: Línea 102:
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesta por el alias de la tabla.   * Puede estar compuesta por el alias de la tabla.
-  * Cuando la llave única ​esta 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 unica en la tabla empezando por 01, 02, 03, 04...NM EJ: UK_TERCERO01. +  * 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 ​esta 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 unica en la tabla empezando por 01, 02, 03, 04...NM EJ: UKC_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.   * No debe superar una longitud máxima de 30 caracteres.
  
-==== Indices ​====+==== Índices ​====
  
-=== Indice ​de Clave Primaria ===+=== Índice ​de Clave Primaria ===
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesto por el alias de la tabla.   * Puede estar compuesto por el alias de la tabla.
   * Debe empezar por IDX_   * Debe empezar por IDX_
   * En lo posible utilizar el mismo nombre utilizado para la clave EJ: PK_TERCERO → IDX_TERCERO.   * En lo posible utilizar el mismo nombre utilizado para la clave EJ: PK_TERCERO → IDX_TERCERO.
-  * En lo posible almacenar los indices ​en un tablespace diferente al que se utilizó para la definición de la tabla.+  * 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.   * No debe superar una longitud máxima de 30 caracteres.
  
-=== Indice ​de Clave Externa ===+=== Índice ​de Clave Externa ===
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesto por el alias de la tabla.   * 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 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_   * Si el índice es un índice de mapa de bits debe empezar por BIDX_
-  * En lo posible almacenar los indices ​en un tablespace diferente al que se utilizó para la definición de la tabla.+  * 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.   * No debe superar una longitud máxima de 30 caracteres.
  
-=== Indice ​de base Función ===+=== Índice ​de base Función ===
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesto por el alias de la tabla.   * Puede estar compuesto por el alias de la tabla.
   * Debe empezar por FBI_   * Debe empezar por FBI_
-  * En lo posible almacenar los indices ​en un tablespace diferente al que se utilizó para la definición de la tabla.+  * 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.   * No debe superar una longitud máxima de 30 caracteres.
  
-=== Indice ​de Clave Única ===+=== Índice ​de Clave Única ===
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesto por el alias de la tabla.   * 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 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 empzar ​por BIDX_+  * 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.   * índices únicos no se crearán a menos que exista una restricción única correspondiente.
-  * En lo posible almacenar los indices ​en un tablespace diferente al que se utilizó para la definición de la tabla. +  * 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 unica EJ: UK_TERCERO01 → IDX_TERCERO01.+  * 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.   * No debe superar una longitud máxima de 30 caracteres.
  
-=== Otros Indices ​===+=== Otros Índices ​===
   * El nombre debe estar en singular.   * El nombre debe estar en singular.
   * Puede estar compuesto por el alias de la tabla.   * 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 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 empzar ​por BIDX_ +  * Si el índice es un índice de mapa de bits debe empezar ​por BIDX_ 
-  * En lo posible almacenar los indices ​en un tablespace diferente al que se utilizó para la definición de la tabla.+  * 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.   * 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.1601924276.txt.gz · Última modificación: 2020/10/05 18:57 por carlos.torres