Вы находитесь на странице: 1из 15

UNIVERSIDAD DE GUAYAQUIL

Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
1








Estandares de Programacin SQL





Ing. Lenin Tello Perlaza
DBA (E)






UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
2

1. INTRODUCCIN
1.1 Propsito del documento
Este documento tiene como principal objetivo, estandarizar la nomenclatura de objetos
de base de datos SQL Server.
1.2 Alcance

Dirigido a los equipos responsables de las areas de desarrollo.

1.3 Control de Versiones


EVOLUCION DEL DOCUMENTO
Versin Fecha Autor Modificado Evolucin
0.1 23/01/2012 Ing. Lenin
Tello
Perlaza
Primera versin de los estndares
de programacin en SQL Server


















UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
3




2. NORMAS GENERALES
2.1 Base de datos

Cada Base de Datos ser creada como propiedad de un login nico para la
fase de desarrollo y un login por usuario con los permisos que les corresponda
segn indicacin de los responsables del proyecto.

Ninguna persona que no sea el DBA utilizar el login SA para ningn
propsito.

El tamao de la Base de Datos deber ser proyectado al momento de la
peticin de la creacin de la misma, para determinar la ubicacin de sta en
base a la disponibilidad de recursos. Asimismo, se recuerda que el tamao
asignado en la etapa de desarrollo ser mnimo de acuerdo a un modelo de
data que los desarrolladores determinarn para esta fase.

El cdigo de caracteres que se utilizar para las instalaciones de SQL ser el
que por default utiliza el producto (ISO); es el ms recomendado y el estndar
corporativo.

Los desarrolladores debern observar con sumo cuidado la recomendacin de
Microsoft de la NO utilizacin de palabras reservadas de MS-SQL, bajo
responsabilidad.

Los desarrolladores tendrn el manejo y la responsabilidad de la generacin de
la estructura interna de las Bases de Datos durante la etapa de desarrollo,
durante la etapa de produccin los cambios debern ser realizados por el DBA
a peticin escrita y debidamente justificada bajo un formato prediseado .
2.2 Indices

Dado que ste es el punto ms crtico dentro de todo desarrollo, se debern
indexar las columnas que sean estrictamente necesarias.

Una tabla deber tener como mximo 4 a 5 ndices.


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
4
El desarrollador tendr que tener la seguridad de que los ndices definidos
estn siendo utilizados por el SQL SERVER, de lo contrario tendrn que ser
borrados.

No olvidar que los ndices nos ayudan para consultar informacin, pero,
retarda la actualizacin de la misma.

2.3 Conexiones a servidor
Todos los sistemas a desarrollarse en SQL SERVER debern de optimizar el
uso de conexiones por usuario.
2.4 Nomenclatura

El nombre de las Bases de Datos deber ser corto, descriptivo y que permita
determinar fcilmente su propsito, por ejemplo : Sistema de Presupuesto
BD_PRESUPUESTO.

En el presente estndar, no se permiten los espacios en blanco como parte de un
identificador.

Utilizar para los nombre de objetos palabras en singular.

Para la definicin de nombre de objetos de base de datos de acuerdo al caso
se usar el caracter underscore _ para separar las palabras_del_nombre.


3. ESTANDARES DE NOMENCLATURA
3.1 Definicin de variables, parmetros y tipos de datos

Aplica a:
Stored procedures
Triggers


Nomenclatura :

@XY_NOMBRE


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
5
@ : Smbolo @ (arroba) es obligatorio anteponerlo por restricciones propias del
manejador de Base de datos.
X : Letra Mayscula que identifica el tipo de Objeto se a identificado P y L para
parmetros y variables locales respectivamente.

Y : Es una letra e identifica el tipo de dato del objeto, considerar la tabla (1), pero
con los caracteres en mayscula.

_ : Es un smbolo (raya abajo)

NOMBRE : Se detalla el nombre del objeto, toda la palabra en maysculas y no
tiene un lmite de caracteres establecido, a excepcin de los lmites del manejador
de base de datos, considerando el separador (raya abajo) para nombres de objeto
conformados por ms de una palabra


Ejemplo: @PC_CODIGO_PRESUPUESTO, @LV_DESCRIPCION


CARACTER TIPO DE DATO
C char
D datetime
S smalldatetime
I Int
N numeric
V varchar
Tabla 1


3.2 Tablas

Nomenclatura:

XXXYY_NOMBRE_TABLA

XXX : Son letras maysculas e identifican un prefijo del aplicativo. Por Ejemplo
para el proyecto Log de Auditora referido al ambito de seguridad, sera: SEG

YY : Son letras maysculas e identifican el tipo de objeto. Por Ejemplo las tablas
son objetos entonces TB


_ : Es un smbolo (raya abajo).


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
6
NOMBRE : se detalla el nombre de la tabla, toda la palabra en maysculas y no
tiene un lmite de caracteres establecido (recomendable no mayor a 15
caracteres), a excepcin de los lmites del manejador de base de datos,
considerando el separador (raya abajo) para nombres de tabla conformados por
ms de una palabra.

El nombre de la tabla debe ser descriptivo, en singular y en maysculas.

Las Tablas identifican una entidad del Sistema con un nombre completo.

Una tabla hija debe llevar el nombre de la tabla padre.

Las palabras deben ser separadas por un "_".

Ejemplo :
SEGTB_USUARIO
SEGTB_USUARIO_PERFIL

Nota : Cuando se creen tablas temporales aadir el prefijo TEM para reconocerlas

Ejemplo:
#TEMP_TABLA_TEMPORAL




3.3 Columnas

Nomenclatura:

XNOMBRE_COLUMNA

X : letra mayscula que identifica un tipo de datos ejemplo: C de char ver tabla 1
para los tipos de datos.

_ : Es un smbolo (raya abajo)

(1).
XNOMNRE_COLUMNA : Se detalla el nombre de la columna, toda la palabra en
mayuscula y no tiene un lmite de caracteres establecido, a excepcin de los
lmites del manejador de base de datos, considerando el separador (raya abajo)
para nombres de columna conformados por ms de una palabra.

Los nombres de las columnas ser descriptivos, en singular y en minsculas.


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
7
Ejemplo :
CREATE TABLE SEGTB_USUARIO
(
VCODIGO_USUARIO varchar(40) NOT NULL ,
CCODIGO_PERFILl char (3) NULL ,
CSITUACION char(1) NULL
)


3.4 Constraints

Primary Key: PK_NombreTabla
Foreign Key: FK_NombreTablaOrigen_NombreTablaReferenciada
Unique: UQ_NemnicoTabla_NombreUnique
Default: DF_NemnicoTabla_NombreColumna
Check: CK_NemonicoTabla_NombreCheck

Ejemplo:
PK_ USUARIO
FK_ USUARIO_ USUARIO_PERFIL
UQ_USUARIO_CODIGO_USUARIO
DF_ USUARIO_SITUACION
CK_ USUARIO_PERFIL

3.5 Stored procedures

Nomenclatura:

XXXX_Z_NOMBRE_STORED_PROCEDURE

XXXX : Son letras maysculas e identifican un prefijo del aplicativo. Por Ejemplo
para el proyecto Log de Auditora referido al mbito de seguridad, sera: SEG

Z : Representa el tipo de lgica del objeto, Para el caso del aplicativo Log de
Auditora se presentan los siguientes tipos identificados en la tabla (2):


CARACTER TIPO DE LOGICA
INS INSERT
UPD UPDATE
DEL DELETE
CONS SELECT

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
8
GEN GENERAL
RPT REPORTE
Tabla 2

_ : Es un smbolo (raya abajo).

NOMBRE_STORED_PROCEDURE : Se detalla el nombre del stored procedure,
toda la palabra en maysculas y no tiene un lmite de caracteres establecido, a
excepcin de los lmites del manejador de base de datos, considerando el
separador (raya abajo) para nombres de objeto conformados por ms de una
palabra.

El nombre del Procedimiento debe ser singular y en mayscula.

Ejemplo:
SEG_CONS_USUARIO
SEG_CONS_PERFILES_X_USUARIO


NOTA:

Los nombres de los Stored Procedures NO deben comenzar con sp, esto porque
generalmente el SQL piensa que son system procedures y los busca primero en la
Base de Datos master
SET NOCOUNT ON (elimina la notificacin del nro. de registros afectados por cada
sentencia SQL lo cual incrementa el performance)



Estructura del Stored Procedure:

Nombre de stored procedure
Comentarios: Todos los stored procedures deberan tener los siguientes
comentarios (Objetivo, Funcionalidad, descripcin de variables entre otros)
Procedimiento: Nombre del procedimiento
Input/Output : Descripcin de Parmetros de entrada y salida
Descripcin : Descripcin / Objetivo de funcionalidad del stored
procedure
Notas : N/A
Modificaciones : Descripcin de Modificaciones
Autor : Nombre y Apellido del autor del Procedimiento
Fecha y Hora : Fecha y hora de Creacin/ModificacinCambios
Importantes
Declaracin de Parmetros Input y/o Output
Input
Output

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
9
Declaracin Variables locales
Maysculas
Sentencias SQL
Palabras del lenguaje SQL, y funciones de sistema en MAYUSCULAS,
columnas y otras variables en Maysculas.
Sentencias legibles e identadas (cada clusula SQL en una lnea
nueva)




Ejemplo:

/*
********************************************************************
Propsito : Muestra los perfiles que posee el usuario
Creado por : David Rubios
Fecha y hora : 20/01/2009 - 04:38 pm.
Test : exe SEGSS_PERFILES_X_USUARIO
*********************************************************************
*/

CREATE PROCEDURE DBO.SEGSS_PERFILES_X_USUARIO
<Declaracin de Parmetros Input y/o Output>
AS
<Declaracin de Variables locales>
<Sentencias SQL>
GO


Para los procedimeintos de acceso nico en esta seccin debe estar
la auditoria.

NOTAS:
No utilizar prefijo sp para los stored procedures. Dicho prefijo esta reservado
para identificar stored procedures del sistema.
No usar prefijo fn para funciones definidas por el usuario, Dicho prefijo esta
reservado para identificar funciones propias del sistema.
No usar prefijo xp_, para extended stored procedures, cual es un prefijo
reservado para identificar system extended stored procedures.


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
10
Los tipos de datos VARCHAR se utilizarn slo para longitudes mayores a 20
caracteres, normalmente aplicado a campos de descripcin, nombres, etc., en
el cual no se sabe el tamao que ocupa un texto determinado.


Los tipos de datos definidos por usuario (User Defined Datatypes) debern ser
debidamente documentados.


4. PROGRAMACION SQL

Obligatoriamente todos los sistemas a desarrollarse debern invocar STORED
PROCEDURES.

No se debern poner sentencias SQL en el cliente. Esto genera una gran baja
en la performance de los sistemas.

En ningn caso el desarrollador podr forzar el uso de un ndice dentro de un
STORED PROCEDURE y tampoco deber colocar sentencias que alteren el
comportamiento de los bloqueos.
Cuando escriba sentencias SQL, use todo en appercase para elementos de
Database (base de datos), tales como tablas, columnas y vistas.
Poner cada sentencia mayor de SQL sobre lneas separadas para facilitar su
lectura y edicin, por ejemplo:
o SELECT FirstName, LastName
o FROM Customers
o WHERE State = 'WA'

No se deben usar procedimientos encriptados.

Todo aplicativo deber evitar usar cursores definidos en SQL SERVER, dado
que stos consumen muchos recursos.

En la mayora de los casos se pueden transformar los cursores a Transact-
SQL.

Las vistas debern ser utilizadas para simplificar los queries.


UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
11
En ningn caso se otorgarn permisos sobre columnas, por lo tanto se deber
crear una vista para que se le otorgue permiso de SELECT a toda la vista.

Utilizar maysculas para las sentencias propias del SQL


Ejemplo.-

SELECT NumeroDocumento,
TipoDocumento ,
ApellidoPaterno,
ApellidoMaterno,
Nombre
FROM SEGT_USUARIO
ORDER BY NumeroDocumento

Utilizar el Tabulador para separar los campos de una condicin (en la medida de lo
posible)

Ejemplo.-

SELECT 'CodigoSegmentoSAB' = CodigoDepositante,
'CodigoSegmentoCONASEV' = '00'
+SUBSTRING(NumeroRegistro,2,1),
'CodigoRetorno' = '0'
FROM SEGT_USUARIO
WHERE NumeroDocumento = @chrNumeroDocumento
AND TipoDocumento = @chrTipoDocumento
AND RelacionadorCorrelativo = @chrRelacionadorCorrelativo


Indentar el Cdigo para conservar un orden

Ejemplo.-

CREATE PROCEDURE p_BUSCARCADENA
( @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 + '%'

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
12
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 name
END
4.1 Optimizar consultas sql

Muchas veces no basta con especificar una sentencia SQL correcta, sino que adems,
hay que indicarle como tiene que hacerlo si queremos que el tiempo de respuesta sea
el mnimo. A continuacin algunas consideraciones a tomar para mejorar el tiempo de
respuesta de sentencias SQL:
Diseo de las tablas
Normaliza las tablas, al menos hasta la tercera forma normal, para asegurar que
no hay duplicidad de datos y se aprovecha al mximo el almacenamiento en las
tablas. Si hay que desnormalizar alguna tabla piensa en la ocupacin y en el
rendimiento antes de proceder.
Los primeros campos de cada tabla deben ser aquellos campos requeridos y
dentro de los requeridos primero se definen los de longitud fija y despus los de
longitud variable.
Ajusta al mximo el tamao de los campos para no desperdiciar espacio.
Es muy habitual dejar un campo de texto para observaciones en las tablas. Si este
campo se va a utilizar con poca frecuencia o si se ha definido con gran tamao,
por si acaso, es mejor crear una nueva tabla que contenga la clave primaria de la
primera y el campo para observaciones.

Gestin y eleccin de los ndices
Los ndices son campos elegidos arbitrariamente por el constructor de la base de
datos que permiten la bsqueda a partir de dicho campo a una velocidad
notablemente superior. Sin embargo, esta ventaja se ve contrarrestada por el
hecho de ocupar mucha ms memoria (el doble ms o menos) y de requerir para
su insercin y actualizacin un tiempo de proceso superior.

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
13
No indexar todos los campos de una tabla extensa ya que doblamos el tamao de
la base de datos. Igualmente, tampoco sirve de mucho el indexar todos los campos
en una tabla pequea ya que las selecciones pueden efectuarse rpidamente de
todos modos.
Un caso en el que los ndices pueden resultar muy tiles es cuando realizamos
peticiones simultneas sobre varias tablas. En este caso, el proceso de seleccin
puede acelerarse sensiblemente si indexamos los campos que sirven de nexo
entre las dos tablas.
Los ndices pueden resultar contraproducentes si los introducimos sobre campos
triviales a partir de los cuales no se realiza ningn tipo de peticin ya que, adems
del problema de memoria ya mencionado, estamos ralentizando otras tareas de la
base de datos como son la edicin, insercin y borrado. Es por ello que vale la
pena pensrselo dos veces antes de indexar un campo que no sirve de criterio
para bsquedas o que es usado con muy poca frecuencia por razones de
mantenimiento.
Campos a Seleccionar
En la medida de lo posible hay que evitar que las sentencias SQL estn
embebidas dentro del cdigo de la aplicacin. Es mucho ms eficaz usar vistas o
procedimientos almacenados por que el gestor los guarda compilados. Si se trata
de una sentencia embebida el gestor debe compilarla antes de ejecutarla.
Seleccionar exclusivamente aquellos que se necesiten
No utilizar nunca SELECT * por que el gestor debe leer primero la estructura de la
tabla antes de ejecutar la sentencia
Si utilizas varias tablas en la consulta especifica siempre a que tabla pertenece
cada campo, le ahorras al gestor el tiempo de localizar a que tabla pertenece el
campo. En lugar de SELECT Nombre, Factura FROM Clientes, Facturacion
WHERE IdCliente = IdClienteFacturado, usa: SELECT Clientes.Nombre,
Facturacion.Factura WHERE Clientes.IdCliente = Facturacion.IdClienteFacturado.

Campos de Filtro
Se procurar elegir en la clusula WHERE aquellos campos que formen parte de
la clave del fichero por el cual interrogamos. Adems se especificarn en el mismo
orden en el que estn definidos en la clave.
Interrogar siempre por campos que sean clave.
Si deseamos interrogar por campos pertenecientes a ndices compuestos es mejor
utilizar todos los campos de todos los ndices. Supongamos que tenemos un ndice

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
14
formado por el campo NOMBRE y el campo APELLIDO y otro ndice formado por
el campo EDAD. La sentencia WHERE NOMBRE='Juan' AND APELLIDO Like '%'
AND EDAD = 20 sera ms optima que WHERE NOMBRE = 'Juan' AND EDAD =
20 por que el gestor, en este segundo caso, no puede usar el primer ndice y
ambas sentencias son equivalentes por que la condicin APELLIDO Like '%'
devolvera todos los registros.

Orden de las Tablas

Cuando se utilizan varias tablas dentro de la consulta hay que tener cuidado con el
orden empleado en la clusula FROM. Si deseamos saber cuantos alumnos se
matricularon en el ao 1996 y escribimos: FROM Alumnos, Matriculas WHERE
Alumno.IdAlumno = Matriculas.IdAlumno AND Matriculas.Ao = 1996 el gestor
recorrer todos los alumnos para buscar sus matriculas y devolver las
correspondientes. Si escribimos FROM Matriculas, Alumnos WHERE Matriculas.Ao =
1996 AND Matriculas.IdAlumno = Alumnos.IdAlumnos, el gestor filtra las matrculas y
despus selecciona los alumnos, de esta forma tiene que recorrer menos registros.

5. SEGURIDAD

5.1 Acceso a la base de datos

El estndar adoptado para el acceso a las Bases de Datos es crear un nico login
con el que todos los usuarios accesarn a la BD, asimismo, se crearn tantos
logins como perfiles requiera el proyecto.En el caso de que el nmero de usuarios
no exceda los 20 se podrn crear un login para cada uno de ellos a peticin del
responsable del proyecto si es que asi lo requieren para propsitos de registro de
actividades en la BD(Log).

Todas las cuentas son creadas por el DBA.

Nota :
En ningn caso las cuentas de usuarios tendrn roles sobre el servidor ni accesos
tipo System Administrator ( DBA ).


5.2 Integridad

La integridad referencial ser manejado a travs de constraints Primary Key y
Foreign Keys.

UNIVERSIDAD DE GUAYAQUIL
Centro de Cmputo

Estandares de Desarrollo para la unidad de IT Fecha: 23/01/2012



Estndares de Programacin SQL Server
15

Los triggers debern ser utilizados solo en caso que se quiera hacer alguna
accin en cascada sobre la integridad referencial o cuando se quiera evitar que
una clave primaria sea modificada o si la funcionalidad del aplicativo asi lo
requiere, tomando en cuenta que el uso de los mismos degrada segn sea el
caso la velocidad de actualizacin de las tablas.

En caso se requieran hacer validaciones sobre columnas se deber utilizar el
constraint del tipo CHECK en vez de crear RULES, salvo que se quiera hacer
una validacin de un USER DEFINED DATATYPE.

La propiedad Identity puede ser usada para mantener Integridad de Entidad.

Вам также может понравиться