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 19:06]
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.
  
Línea 173: Línea 177:
  
 ===== Bases de Datos ===== ===== Bases de Datos =====
-Las reglas para la creacion ​de bases de datos serán definidas por el equipo de implantación sin embargo se deben considerar las siguientes recomendaciones:​ +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 mayusculas.+  * El nombre debe estar en mayúsculas.
   * El nombre debe intuir el nombre del cliente (utilizar alias).   * El nombre debe intuir el nombre del cliente (utilizar alias).
-  * De ser posible asociar al nombre un identificador ​numerico. EJ DESARROLLO00+  * De ser posible asociar al nombre un identificador ​numérico. EJ DESARROLLO00
  
 ===== PL/SQL ===== ===== PL/SQL =====
Línea 184: Línea 188:
   * Los nombres de paquetes no pueden superar los 30 caracteres de longitud.   * Los nombres de paquetes no pueden superar los 30 caracteres de longitud.
   * No utilice palabras reservadas de Oracle para componentes de nombre del paquete.   * No utilice palabras reservadas de Oracle para componentes de nombre del paquete.
-  * Funciones+ 
 +==== Funciones ​====
   * Debe empezar por FN_   * Debe empezar por FN_
   * Los nombres de funciones no pueden exceder los 30 caracteres de longitud.   * 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.   * No utilice palabras reservadas de Oracle para componentes de nombre de función.
-  * Procedimientos Almacenados+ 
 +==== Procedimientos Almacenados ​====
   * Debe empezar por SP_   * Debe empezar por SP_
   * los nombres de procedimiento no pueden superar los 30 caracteres de longitud.   * los nombres de procedimiento no pueden superar los 30 caracteres de longitud.
Línea 195: Línea 201:
 ==== Variables ==== ==== Variables ====
  
-Alcance +=== Alcance ​=== 
-Global: g +  ​* ​Global: g 
-Local: l +  ​* ​Local: l 
-◦Tipos de Datos +  * Constantec
-▪Number: n_ +
-▪Varchar2:​ v_ +
-▪Date: dt_ +
-▪Tipos: tpy_ +
-▪Cursor: cur_ +
-▪Exception:​ exc_ +
-◦Parametros +
-▪Entrada: i +
-▪Salida: o +
-▪Entrada/​Salida:​ io +
-◦Extenciones de Archivos +
-▪Especificacion 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+
  
-Recomendaciones+=== Tipos de Datos === 
-La 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:+  * Numbern_ 
 +  * Varchar2: v_ 
 +  * Date: dt_ 
 +  * Tipos: tpy_ 
 +  * Cursor: cur_ 
 +  * Exception: exc_ 
 +  *  
 +=== Parámetros === 
 +  * Entrada: ai 
 +  * Salida: ao 
 +  * Entrada/​Salidaaio
  
-Agrupe funciones y procedimientos en paquetes. +=== Extensiones de Archivos === 
-Evite la función raise_application_error utilice en su lugar Raise y defina excepciones personalizadas utilizando ​el inicializador pragma exception_init. +Se permite ​el tipo genérico sql para todos los archivos ó según ​el tipo de objeto se permiten los siguientes tipos:
-Evite ​los operadoradores 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 consultaas select into deben estar incluidas dentro ​de un bloque being 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_CHARsi valida fechas utilice mejor el operador EXTRACT +
-◦TRUNC en variables numéricas trate de utilizar el operador matematico que desea aplicar.+
  
 +  * 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.1601924779.txt.gz · Última modificación: 2020/10/05 19:06 por carlos.torres