Estándares de Calidad para Bases de Datos SQL Server u Oracle
1.
Base de Datos Nomenclatura: Debe estar relacionado con el aplicativo. Por ejemplo: “PubBoletinOficial”. El nombre físico de la base de datos debe corresponder al nombre de la aplicación. Por ejemplo, la aplicación Publicadora del Boletín Oficial tiene como nombre PubBoletinOficial, por lo cual, los nombres físicos correspondientes son:
2.
Archivo MDF: PubBoletinOficial _Data Archivo LDF: PubBoletinOficial _Log
Definición de variables, parámetros y tipos de datos: Aplica a:
Stored procedures Triggers
Nomenclatura: @xxxYYYY… xxx : Identificador del tipo de dato YYYY: Nombre de la Variable Ejemplo: chrCODFACT, vchDIRECCION
Tipo de Dato SQL Server Bit Int Smallint Tinyint Decimal Numeric Money Smallmoney Float Real Datetime Smalldatetime Cursor Timestamp Uniqueidentifier Char Varchar Text Nchar Nvarchar Ntext Binary Varbinary Image
Identificador bit int smi tni dec num mny smm flt rea dtm sdt cur tst uid chr vch txt nch nvc ntx bin vbn img
3.
Tablas Nomenclatura: NombreTabla
El nombre de la tabla debe ser descriptivo, en singular y en mayúsculas. El nombre de la tabla debe identificar claramente a la entidad del sistema con un nombre completo. El nombre de la tabla debe comenzar con un prefijo de tres (máximo 4) letras nemónico de la aplicación. Una tabla hija debe llevar el nombre de la tabla padre hasta un máximo de un nivel. Las palabras deben ser separadas por un "_". Ejemplo:
MAT_ORDEN MAT_ORDEN_DETALLE
Nota: Cuando se creen tablas temporales añadir el prefijo TEMP_XXXX para reconocerlas. Ejemplo:
MAT_PRODUCTO_TEMP
4.1. Campos Nomenclatura: Nombrecampo
Los nombres de los campos deben ser descriptivos. Utilizar el formato siguiente xxxYyyyyy, siendo xxx el prefijo del tipo de dato (seguir la tabla que está en la definición de variables) y Yyyyyyy el nombre descriptivo. Se deben usar mayúsculas y minúsculas para diferenciar los grupos de identificación en el nombre. Ejemplo: CREATE TABLE MAT_PERSONANATURAL ( numDNI numeric (8, 0) NOT NULL, vchNombrePersona varchar (100) NULL, )
4.
Constraints SQL Server Nomenclatura Primary Key: PK_NombreTabla Nomenclatura Foreign Key: FK_NombreTablaOrigen_NombreTablaReferenciada_nn Donde: nn indica un número secuencial en caso de existir varias relaciones entre estas mismas tablas. Unique: UQ_NemónicoTabla_NombreUnique_nn Donde: nn indica un número secuencial en caso de existir varias relaciones entre estas mismas tablas
Default: DF_NemónicoTabla_NombreColumna Check: CK_NemonicoTabla_NombreCheck_nn Donde: nn indica un número secuencial en caso de existir varias restricciones del mismo tipo. Ejemplo: PK_CLIENTE FK_FACTURA_CLIENTE UQ_CLIENTE_CODIGO_CLIENTE DF_CLIENTE_FECHA CK_CLIENTE_CODIGO_CLIENTE 5.
Indices SQL Server Nomenclatura: I_Tipo de índice_NombreIndice Tipo de índice: Unique, Clustered, NonClustered Ejemplo: IUQ_CodAlumno ICL_CTarea INCL_CodComprobante
6.
(índice Unique) (índice Clustered) (índice NonClustered)
Triggers SQL Server Nomenclatura: TR + [Tipo de Trigger] + [Acción de Disparo] + _ + nombre de Tabla Tipo: A: I:
After Instead of
I: U: D:
Insert Update Delete
Acción:
Ejemplos: TRAD_NOMBRETABLA (Cuando se realiza una eliminación en la tabla). TRAU_NOMBRETABLA (Cuando se realiza una actualización en la tabla). TRAI_NOMBRETABLA (Cuando se realiza una inserción en la tabla). TRIU_NOMBRETABLA (Ocurre en vez de una sentencia de actualización en la tabla).
7.
Store Procedures Nomenclatura: (I, U, D, S, G) _ nombre del procedimiento almacenado
Siendo: I: U: D: S: G:
Por ejemplo:
Insert. Update. Delete. Select. General (Cualquier combinación de los tipos anteriores u otro tipo de procesos). I_InsertarEmpleado. (Inserta un registro a la tabla)
Nota:
Los nombres de los Stored Procedures no necesariamente deben comenzar con SP_, esto porque generalmente el S QL piens a que s on
s ys tem procedur es y los bus ca pri mero en la B as e de Datos mas ter
para el caso de SQL Server. S E T NOC OUNT ON para el caso de SQL Server elimina la notificación del nro. de registros afectados por cada sentencia SQL lo cual incrementa la performance. Obligatoriamente todos los sistemas a desarrollarse deberán invocar STORED PROCEDURES. No se deberán poner sentencias SQL en el cliente. Esto genera una gran baja en la performance de los sistemas. En el caso de los STORED PROCEDURES que son exclusivamente para mostrar información se deberán evitar usar lógicas como la siguiente : Create Proc S_LISTARCLIENTES @X tinyint, @Y char(3) as if @X=1 Select * from tabla Else Select * from tabla where codigo = @Y
No es óptimo crear STORED PROCEDURES de ese tipo dado que el SQL guarda una estadística de ejecución cada vez que se use un procedimiento, esto quiere decir, que si la primera vez se le pasó el parámetro @X = 1, el SQL no empleará índices para el SELECT, si se le pasa el @X = 2 en el cual deberá leer un código en particular el SQL tampoco usará índices debido a las estadísticas guardadas en la ejecución anterior. En caso sea necesario trabajar con este tipo de STORED PROCEDURES, deberán ser creados de la siguiente forma : Create Proc S_LISTARCLIENTES @X tinyint, @Y char(3) WITH RECOMPILE as if @X=1 Select * from tabla Else Select * from tabla where codigo = @Y
No se deben usar procedimientos encriptados.
Todo aplicativo deberá evitar en la medida de lo posible el uso de cursores definidos en SQL SERVER u Oracle, dado que éstos consumen muchos recursos. En la mayoría de los casos se pueden transformar los cursores a Transact-SQL o PL/SQL Las vistas deberán ser utilizadas para simplificar los queries. Los tipos de datos VARCHAR se utilizarán sólo para longitudes mayores a 20 caracteres, normalmente aplicadas a campos de descripción, nombres, etc., en el cual no se sabe el tamaño que ocupa un texto determinado. En el caso de tener columnas cuyo valor numérico no va a exceder de 255 se deberá emplear el tipo de dato TINYINT en el caso de SQL Server.
8.1. Estructura del Store Procedure
Identificador, nombre de stored procedure, y parámetros Comentarios: Descripción: “funcionalidad del stored procedure” Descripción de Parámetros de entrada y salida Autor: Fecha Modificación: Versión: Cambios Importantes Declaración Variables locales Mayúsculas y minúsculas Sentencias SQL Palabras del lenguaje SQL, y funciones de sistema en MAYUSCULAS, columnas y otras variables en Mayúsculas. Sentencias legibles e indentadas (cada cláusula SQL en una línea nueva)
Ejemplo:
CREATE PROCEDURE I_AgregarEmpresa( @intCODEMPRESA int, @vchRAZONSOCIAL varchar(50)) AS /*************************************** *Descripcion: Añade un registro a la tabla HUB *Fecha Crea: 19/02/2016 *Fecha Mod: 19/02/2016 *Parámetros: @CODEMPRESA: Código de la empresa * @RAZONSOCIAL: Razón Social de la Empresa * … *Autor: Charlie Brown *Versión: Final (Beta|Final) *Cambios Importantes: Inclusión de la condición se consulta (14/01/2017) */************************************** 8.
Vistas Nomenclatura: V_Nombre de la Vista Ejemplo: V_Consulta_Cursos
Nota: La estructura de la vista debe ser similar a la del stored procedure.
9.
Programación
Utilizar mayúsculas para las sentencias propias del SQL. Ejemplo: SELECT
FROM ORDER BY
NumeroDocumento, TipoDocumento, ApellidoPaterno, ApellidoMaterno, Nombre CLIENTE NumeroDocumento
Utilizar el Tabulador para separar los campos de una condición (en la medida de lo posible) Ejemplo: SELECT 'CodigoSegmentoPBO' 'CodigoRetorno' FROM CLIENTE WHERE NumeroDocumento AND TipoDocumento AND RelacionadorCorrelativo @chrRelacionadorCorrelativo
= CodigoCliente, = '0'
= @chrNumeroDocumento = @chrTipoDocumento =
Indentar el Código para conservar un orden Ejemplo: CREATE PROCEDURE BUSCARCLIENTE ( @vchVariable VARCHAR (255), @vchTipo VARCHAR (1) ="" ) AS BEGIN IF LTRIM (RTRIM (@vchVariable)) <> "*" IF @vchTipo = "" SELECT NOMBRE = name, TIPO = type, CREACION = crdate FROM sysobjects WHERE name LIKE '%'+ @vchVariable + '%' ORDER BY type, name ELSE SELECT NOMBRE = name, TIPO = type, CREACION = crdate FROM sysobjects WHERE name LIKE '%'+ @vchVariable + '%' AND type = RTRIM (LTRIM (@vchTipo))
ORDER BY END 10. Funciones Nomenclatura: F _ nombre de la función Por ejemplo: F_ObtenerFecha
name