Está en la página 1de 16

Maykol Elas Llanos

U201423870

Implementaci
n de Base de
Datos
Trabajo Final
Profesor: Jorge Del Mar

INDICE
1. Parte
Aplicativa........................................................................................................
.............2
1.1. Punto de vista
Funcional...............................................................................................2
1.2. Reglas de
Negocio......................................................................................................
...2
1.3. Modelo
Lgico.........................................................................................................
......3
1.4. Modelo
Fsico..........................................................................................................
......4
1.5. Modelo Conceptual Ventajas y
Desventajas..5
1.6. Scripts
.5
1.6.1. Elaboracin de Consultas SQL
1.6.2. Elaboracin de Stored Procedures
1.6.3. Elaboracin del Trigger
1.6.4. Elaboracin de Comandos DDL
1.6.5. Elaboracin de Comandos DCL
1.6.6. Plan de Ejecucin de Consulta 1
1.6.7. Plan de Ejecucin de Consulta 2
2. Parte de
Investigacin..................................................................................................
........10
2.1. Tabla Particionada
2.2. Caractersticas principales de SQL de Azure con respecto al
Transact_SQL
3. Parte de Buenas
Prcticas....................................................................................................13
3.1. Conjunto de buenas prcticas a utilizar en la Implementacin de una
Base de Datos.
3.2. Aplicacin de las buenas prcticas en una empresa

IMPLEMENTACIN DE BASE DE DATOS

1. Parte Aplicativa
1.1. Punto de vista Funcional
Visin del Producto: La Base de datos Programas se utilizar para
registrar los distintos medios de comunicacin, as como los programas
que estos emiten o transmiten (nombres de los programas, horarios,
das de transmisin, etc.) y la respectiva clasificacin de estos. La
informacin registrada se empleara para la generacin de informes
tanto de uso interno como externo (clientes).
Formulacin de la problemtica: El problema que se presenta,
bsicamente, es la duplicidad de informacin respecto a los programas
que se emiten en los distintos medios de comunicacin. As tambin, se
ha detectado una inadecuada clasificacin de estos en el momento de
registrarlos en la base de datos. Esta informacin es de vital
importancia, pues a partir de ella se efectuaran distintos reportes y
estadsticas que se presentan a los clientes.
1.2. Reglas de Negocio

Registrar los distintos medios de comunicacin


Todos los medios de comunicacin deben estar debidamente
clasificados (TV, Radio, Diarios, etc.)
En caso de las radios, adicionalmente, deber de indicar si transmite
en AM, FM o ambos.
Los programas de los medios de comunicacin, tambin deben de
clasificarse (Noticiero, Evento deportivo, Series, etc.)
Estos programas,
al registrarse, deben de tener la siguiente
informacin nombre del programa, hora de inicio y fin, das de
transmisin, tipo de programa y periodo
El periodo a registrar ser el ao y mes en que se transmite el
programa.
Debe quedar constancia del registro de los programas por el
usuario, adems, se guardara la hora y fecha del registro
Las operaciones de registro, edicin y eliminacin debern quedar
registradas para una auditoria o eventualidad.
Se deber contar con distintos tipo de usuarios, a los cuales se
aplicaran restricciones como acceso a las operaciones de
mantenimiento.
Con la informacin que se registrara de los programas se realizaran
distintos reportes y estadsticas tanto para uso interno como externo
(clientes).

IMPLEMENTACIN DE BASE DE DATOS

1.3. Modelo Lgico

1.4. Modelo Fsico

1.5. Modelo Conceptual Ventajas y Desventajas


Ventajas
Permitir un registro consistente de la informacin. Esto debido,
a que el DBMS tendr las consistencias de los campos (Check
Constraint)
Se evitara o disminuir la duplicidad de registros.
Se registraran todos los eventos respecto al mantenimiento de
los datos.
Los reportes se obtendrn de una forma rpida y eficiente.
Desventajas
Crecimiento de la tabla tbl_programa_medios, ya que esta
guardara la informacin de todos los programas de los distintos
periodos.
Aunque se consistencia el registro del periodo del programa de
un medio de comunicacin (ao y mes), se podra crear una
tabla donde se solo se registre esta informacin e identificado
con un cdigo.
1.6. Scripts

Elaboracin de Consultas SQL

Consulta que muestra la programacin de los medios de


comunicacin (TV) y el tipo de programa (NOTICIERO)
SELECT
desc_medios_comunicacion as [Medios Comunicacion],
[desc_programa] as Programa,
(SELECT desc_programa_tipo FROM tbl_programa_tipo where
id_programa_tipo=t1.id_programa_tipo) as Tipo,
[hora_ini] ,[hora_fin],[d1] ,[d2] ,[d3] ,[d4] ,[d5] ,
[d6] ,[d7] ,[aa] ,[mes]
FROM tbl_programa_medios t1 inner join
tbl_medios_comunicacion t2 ON
t1.id_medios_comunicacion=t2.id_medios_comunicacion
WHERE id_tipo_medios_comunicacion=1 and Id_programa_tipo=1

Consulta que muestra a todos los medios de comunicacin con


ms de un tipo o clasificacin para un solo programa.
SELECT [Medios Comunicacion],Programa,SUM(cantidad) as
Cantidad FROM (
SELECT desc_medios_comunicacion as [Medios Comunicacion],
[desc_programa] as Programa,COUNT(DISTINCT
id_programa_tipo ) as Cantidad
FROM tbl_programa_medios t1 inner join
tbl_medios_comunicacion t2 ON
t1.id_medios_comunicacion=t2.id_medios_comunicacion
GROUP BY
desc_medios_comunicacion,desc_programa,id_programa_tipo
) t GROUP BY [Medios Comunicacion],Programa HAVING
SUM(cantidad)>1

Elaboracin del Store Procedure

Store Procedure que muestra todos los programas de un medio de


comunicacin segn ao y rango de meses

CREATE PROCEDURE usp_reporte_progama_medio @id AS INT, @aa


AS INT, @mm1 AS TINYINT, @mm2 AS TINYINT
AS
SELECT

desc_medios_comunicacion as [Medios Comunicacion],


[desc_programa] as Programa,
desc_programa_tipo as Tipo,
[hora_ini] ,[hora_fin],[d1] ,[d2] ,[d3] ,[d4] ,[d5] , [d6] ,[d7] ,[aa] ,
[mes]
FROM tbl_programa_medios t1 inner join
tbl_medios_comunicacion t2 ON
t1.id_medios_comunicacion=t2.id_medios_comunicacion
inner join tbl_programa_tipo t3 ON
t1.id_programa_tipo=t3.id_programa_tipo
WHERE t1.id_medios_comunicacion=@id and aa=@aa and mes
between @mm1 and @mm2
ORDER BY mes, t1.id_programa_tipo, hora_ini

Store procedure que muestra cuantos programas


registrados los medios de comunicacin por ao y mes

tienen

CREATE PROCEDURE usp_reporte_programa_aa_mes


AS
SELECT
desc_medios_comunicacion as [Medios Comunicacion],aa as
Ao,mes,
COUNT(distinct desc_programa) as Nro_programas
FROM tbl_programa_medios t1 inner join
tbl_medios_comunicacion t2 ON
t1.id_medios_comunicacion=t2.id_medios_comunicacion
GROUP BY desc_medios_comunicacion,aa,mes

Elaboracin de Trigger

Se activa cuando se actualiza la tabla tbl_programa_medios y


guarda en la tabla eventos la informacin antes de actualizarse.
CREATE TRIGGER trg_ActualizaPrograma ON tbl_programa_medios
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DESC VARCHAR(500)='';
DECLARE @IDUSER INT =0;
SELECT
@IDUSER=i.id_usuario,
@DESC =@DESC + '['+cast(I.[id_programa_medios] as varchar)+
'|' +
ISNULL (cast(d.[id_medios_comunicacion] as varchar)
,cast(i.[id_medios_comunicacion] as varchar))+ '|' +
ISNULL (cast(d.[id_programa_tipo]as varchar) ,cast(i.
[id_programa_tipo]as varchar))+ '|' +
ISNULL (d.[desc_programa],i.[desc_programa]) + '|' +
ISNULL ( d.[hora_ini],i.[hora_ini])+ '|' +
ISNULL (d.[hora_fin],i.[hora_fin]) + '|' +
ISNULL (cast(d.[d1]as varchar),cast(i.[d1]as varchar)) +
'|' +

ISNULL (cast(d.[d2]as varchar),cast(i.[d2]as varchar)) +


'|' +
ISNULL (cast(d.[d3]as varchar),cast(i.[d3]as varchar)) +
'|' +
ISNULL (cast(d.[d4]as varchar),cast(i.[d4]as varchar)) +
'|' +
ISNULL (cast(d.[d5]as varchar) ,cast(i.[d5]as varchar))+
'|' +
ISNULL (cast(d.[d6]as varchar),cast(i.[d6]as varchar)) +
'|' +
ISNULL (cast(d.[d7]as varchar),cast(i.[d7]as varchar)) +
'|' +
ISNULL (cast(d.[aa]as varchar),cast(i.[aa]as varchar)) +
'|' +
ISNULL (cast(d.[mes]as varchar),cast(i.[mes]as varchar)) +
'|' +
ISNULL (cast(d.[fecha_reg]as varchar),cast(i.[fecha_reg]as
varchar))+'],'
FROM deleted d, inserted i
INSERT INTO tbl_eventos
(id_usuario,id_evento_tipo,desc_evento,fecha_hora) VALUES
(@IDUSER,2,@DESC,getdate())
END
GO

Base de Datos - Check Constraint

Restriccin para los campos de que almacenan los cdigos o Ids


para que no reciban valores igual o inferior a cero (0).
ALTER TABLE tbl_medios_comunicacion
ADD CONSTRAINT chk_id_medios CHECK

(id_medios_comunicacion>0)
GO
ALTER TABLE tbl_programa_medios
ADD CONSTRAINT chk_id_prg_medios CHECK
(id_programa_medios>0)
GO

Restriccin para el campo mes de la tabla tbl_programa_medios


para que se registren solo valores entre 1 y 12.
ALTER TABLE tbl_programa_medios
ADD CONSTRAINT chk_mes_prg_medios CHECK (mes>0 AND

mes<13)
GO

Restriccin para el campo aa (ao) de la tabla


tbl_programa_medios para que se registren solo valores mayores o
iguales a 1900.
ALTER TABLE tbl_programa_medios
ADD CONSTRAINT chk_aa_prg_medios CHECK (aa>=1900)
GO

Base de Datos ndices

Se
crea
el
ndice
index_cod_programa
en
la
tabla
tbl_programa_medios que
permitir consultar u obtener la
informacin detallada del programa.
CREATE UNIQUE INDEX index_cod_programa ON
tbl_programa_medios (id_programa_medios)

GO

Se crea el ndice index_programa_medios en la tabla


tbl_programa_medios, el cual permitir que al realizar diversas
consultas a esta tabla la informacin se obtendr de forma rpida
y eficaz.
CREATE NONCLUSTERED INDEX index_programa_medios ON
tbl_programa_medios (id_medios_comunicacion,
id_programa_tipo, aa, mes)

GO

Elaboracin de Comandos DDL

Modifica el tipo de dato de la columna mes de la tabla


ALTER TABLE tbl_programa_medios ALTER COLUMN [mes] tinyint
GO

Crea la tabla tbl_programa_tipo


CREATE TABLE tbl_programa_tipo ( id_programa_tipo int NOT
NULL,
desc_programa_tipo char(200) NOT NULL
PRIMARY KEY (id_programa_tipo)
)
Elaboracin de Comandos DCL

Otorga permisos al usuario Digitador


GRANT SELECT, INSERT, UPDATE, DELETE ON
tbl_programa_medios TO digitador
GO

Revoca o elimina permisos al usuario Digitador


REVOKE DELETE ON tbl_programa_medios TO digitador
GO

Plan de Ejecucin de Consulta 1

Plan de Ejecucin de Consulta 2

2. Parte de Investigacin
2.1. Tabla particionada y el procedimiento para crear una tabla particionada.
Brindar un ejemplo de la creacin de una tabla particionada
La particin de tablas es una tcnica que facilita el uso de tablas
grandes, es decir, nos ayuda en el mantenimiento de estas tablas y
reduce el tiempo de respuesta general para leer y cargar datos para
operaciones SQL particulares, estas solo afectan a los datos necesarios,
en lugar de a toda la tabla.
Se puede concluir que el particionamiento de tablas tiene los siguientes
objetivos

Proporcionar mltiples puntos de insercin para una misma tabla.


Mejorar el rendimiento haciendo posible que las operaciones de
lectura/escritura sean distribuidas sobre mltiples dispositivos de
datos.
Mejorar el rendimiento cuando el servidor est configurado para
realizar procesamiento paralelo de consultas, ya que puede haber
un worker processes por particin en una bsqueda basada en
particiones.

Particionamiento Vertical en tablas SQL Server


Este tipo de particionamiento es principalmente usado para incrementar
el desempeo de SQL Server especialmente en casos cuando una
consulta retorna todas las columnas de una tabla que contiene un
nmero de columnas de texto muy amplio o BLOB. En este caso, para
reducir los tiempos de acceso, las columnas BLOB pueden ser divididas
a su propia tabla. Otro ejemplo es restringir el acceso a datos sensibles,
por ejemplo contraseas, informacin salarial, etc. La particin vertical
divide una tabla en dos o ms tablas que contienen diferentes
columnas.
La particin vertical puede no ser el mtodo correcto en cada caso. Sin
embargo, si una tabla con muchos datos que no se accede
igualitariamente, tablas con datos a los que desea restringir el acceso,
o escaneos que retornan muchos datos, la particin vertical puede
ayudar.
Particionamiento Horizontal en tablas SQL Server
Es la que divide una tabla en mltiples tablas que contienen el mismo
nmero de columnas, pero menos filas. Por ejemplo, si una tabla
contiene un gran nmero de filas que representan reportes mensuales
podra ser particionada horizontalmente en tablas por aos, con cada
tabla representando todos los reportes para un ao especfico. De esta
manera las consultas que requieren datos para un ao especfico slo
referenciarn la tabla apropiada. Las tablas deberan ser particionadas
en una manera que las consultas referencian tan pocas tablas como sea
posible.
Esta particin se basa en una columna que ser usada para particionar y
los rangos asociados a cada particin. La columna de particionamiento
es usualmente una campo de fecha pero todos los tipos de datos que

son vlidos para usarse como columnas de ndice pueden ser usados
como columna de particin, excepto la de tipo de dato timestamp. Los
siguientes tipos de datos no pueden ser especificados: ntext, text,
image, xml, varchar(max), nvarchar(max), o varbinary(max), el tipo
definido por el usuario Microsoft .NET Framework common language
runtime (CLR), columnas de tipo de datos de alias.
Existen dos enfoques diferentes que se pueden usar para lograr la
particin de la tabla. El primero es crear una nueva tabla particionada y
simplemente copiar los datos desde su tabla existente en la nueva tabla
y renombrarla. El segundo enfoque es particionar una tabla existente
reconstruyendo o creando un ndice agrupado en la tabla.
Para poder generar tablas particionadas es necesario identificar la
columna mediante la cual va a ser realizar dicha particin.
Crear una funcin de particin en la que se especifica cmo
estar dividida la tabla.
Crear un esquema de particiones para especificar la ubicacin de
las particiones de una funcin de particin en los grupos de
archivos.
Cree una tabla o un ndice mediante el esquema de particiones.
Ejemplo de Particionamiento de tabla Horizontal

Se crean grupo de archivos adicionales


ALTER DATABASE bd_programas
ADD FILEGROUP 2013
GO
ALTER DATABASE bd_programas
ADD FILEGROUP 2014
GO

Ahora aadiremos el archivo .ndf a cada grupo de archivos:


ALTER DATABASE [bd_programas] ADD FILE (
NAME = [Part2013],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11
\MSSQL\DATA\bd_programas.ndf',
SIZE = 3072 KB,MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB) TO FILEGROUP [2013]
ALTER DATABASE [bd_programas] ADD FILE(
NAME = [Part2014],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11
\MSSQL\DATA\bd_programas.ndf',
SIZE = 3072 KB,MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB) TO FILEGROUP [2014]

Creamos una funcin de particin


CREATE PARTITION FUNCTION [bd_programas] (int) AS RANGE RIGHT
FOR VALUES (2013, 2014);

Se crea un esquema de la particion realizada


CREATE PARTITION SCHEME ParticionA AS PARTITION bd_programas
TO (2013,2014);

Finalmente, creamos la tabla usando el esquema de particin


ParticionA y la llenaremos con datos de prueba
CREATE TABLE Reportes (
aa_reporte int PRIMARY KEY,
desc_reporte varchar(max))
ON ParticionA (aa_reporte);
GO
INSERT INTO Reports (aa_reporte,desc_resporte)
SELECT 2013, 'Reporte2013' UNION ALL
SELECT 2014, 'Reporte2014'

2.2. Caractersticas
Transact_SQL

principales

de

SQL

de

Azure

con

respecto

al

Transact-SQL tambin es conocido por sus abreviatura como T-SQL,


como definicin es una extensin del SQL Microsoft junto son Sybase. Lo
que conocemos a SQL como el lenguaje de bsqueda estructurado lo
que viene hacer T-SQL es extender los estndares de SQL no incluyendo
programacin procedural, como algunas otras funciones para
matemticas, fechas, etc.
T-SQL es un lenguaje sumamente potente que nos ayuda a definir tareas
mientras trabajamos con bases de datos. Debido a que este lenguaje
tiene algunas restricciones en el propio lenguaje casi siempre lo vemos
utilizado en la creacin de los procedimientos almacenados, funciones
de usuario y tambin en los triggers. Podemos hacer uso de T-SQL en
lenguajes de programacin como puede ser Visual Basic. NET, C, Java.
Tambin lo podemos ejecutar en un entorno SQL Server Management
Studio.
Microsoft SQL Azure es una base de datos relacional en la nube
construida sobre la tecnologa de SQL Server. Proporciona servicios de
bases de datos altamente escalables y con altsima disponibilidad
alojados por Microsoft en la nube. Estos servicios facilitan enormemente
el despliegue de bases de datos.
El soporte para Transact-SQL en SQL Azure puede ser descrito en tres
categoras principales:
Elementos de lenguaje Transact-SQL que se admiten tal cual.
Elementos de lenguaje Transact-SQL que no son compatibles.
Elementos de lenguaje Transact-SQL que proporcionan un
subconjunto de los argumentos y las opciones en sus
correspondientes elementos de Transact-SQL en SQL Server 2008.
Caractersticas compatibles o
parcialmente soportadas por
Sql Azure
Constantes
Constraints
Cursores
Administracin
y
reconstruccin de ndices

Caractersticas de TransactSQL no son soportadas por


SQL Azure
Common
Language
Runtime (CLR)
Ubicacin de archivos de
base de datos
Creacin de Mirrors

Tablas Temporales Locales


Palabras Reservadas
Procedimientos
almacenados
Administracin
de
Estadsticas
Transacciones
Triggers
Tablas, join y variables de
tablas
Funciones definidas por
Usuarios
Vistas

Consultas distribuidas
Transacciones distribuidas
Administracin de grupos
Tablas
temporales
globales
Opciones de configuracin
de SQL Server
SQL Server Service Broker
Indicadores de traza

3. Parte de Buenas Prcticas


3.1. Conjunto de buenas prcticas a utilizar en la Implementacin de una
Base de Datos
Utilizar tipo de dato Enteros como identificador para todas las
tablas. Si un identificador no es requerido en el momento,
probablemente los sea en el futuro (para asociar tablas o
indexar).
Elegir columnas con tipos de dato Entero (o sus variantes) para
indexar. La columna con tipo varchar puede causar problemas de
rendimiento.
Es recomendable usar campos de tipo de dato Bit para almacenar
valores booleanos.
Usar enteros o varchar repercute en el
consumo innecesario de almacenamiento.
Definir acceso y restricciones a los usuarios que utilicen la base
de datos. No otorgar el rol de administrador a cada uno de ellos.
Al realizar consultas o sentencias sql evitar el "select * " a menos
de que sea necesario, extraer solo las columnas a emplear para
un mejor rendimiento.
Particionar la base de datos separando las tablas de mayor uso
de las que no se usan tanto para un mejor desempeo.
En caso de bases de datos grandes, sensibles y sistemas de
misin crtica, utilizar los servicios de recuperacin de desastres y
servicios de seguridad como el failover clustering, respaldos
automticos, replicacin, etc.
Emplear constraints (llaves foraneas, Checks, valores no nulos,
etc.) para la integridad de datos. No es recomendable efectuar
todo el control desde el cdigo de la aplicacin.
Almacenar los passwords encriptados, esto por medida de
seguridad y solo desencriptarlos en la aplicacin si es necesario.
La documentacin de una base de datos es esencial, sobre todo
en lo referente al diseo de base de datos, los esquemas de
entidad
relacionales (ER) e instrucciones. Tambin, se
recomienda escribe lneas de comentarios en los triggers,
procedimientos almacenados y otros scripts.
Utilizar ndices para scripts frecuentemente usados en tablas
grandes. Es muy recomendable emplear herramientas de anlisis,
las cuales determinan donde pueden estar definidos dichos
ndices.
El servidor de base de datos y el servidor web deben estar en
mquinas diferentes. Esto provee de mayor seguridad y separan
la carga de trabajo en dos CPUs y memoria diferentes.
Imgenes y columnas de tipo de dato Blob no deben estar
definidas en tablas de uso frecuente, con esto se evita problemas
de rendimiento. Estos tipos de datos deben estar en tablas
separadas y relacionadas por un identificador.
La normalizacin debe emplearse para optimizar la performance
de la base de datos, ya que una inapropiada normalizacin puede
repercutir en una repeticin de datos. As como, una sobre
normalizacin puede tener efectos en el rendimiento a causa de
las excesivas uniones entre tablas para extraer datos. Se debe
mantener un equilibro.
Emplear tanto tiempo como se pueda para disear la base de
datos, ya que un adecuado diseo de este, evitara, en el futuro,
un rediseo del mismo.

El utilizar SQL dinmico aumenta la posibilidad de que el usuario


inyecte cdigo y elimine o corrompa informacin. Por otro lado,
como es SQL dinmico, cada vez que ejecuta requiere la
compilacin y la generacin del plan de ejecucin, lo cual afecta
el rendimiento. Por lo tanto se recomienda evitar este tipo de
mtodo.
No permitir a las aplicaciones front-end consultar o manipular
datos directamente usando sentencias SQL. Crear procedimientos
almacenados, permitiendo as un acceso consistente en todos los
mdulos de la aplicacin y centralizando la lgica del negocio
dentro de la base de datos. Con ello, mejora el tiempo de
respuesta al mandar del back-end al front-end solamente los
datos resultados.
3.2. Aplicacin de las buenas prcticas en una empresa
Estas prcticas se pueden aplicar estableciendo protocolos de trabajo
para el personal encargado tanto del diseo e implantacin de la base
de datos como de los desarrolladores de aplicaciones. Estos protocolos o
estndares, deben acomodarse segn el manejo de la empresa.
Para ello, todo debe estar documentado e indicando, en cierta manera,
los pasos o recomendaciones a seguir, pero sin dejar de lado el criterio
del personal encargado. Esto en cuanto, a lo que, en futuro, se ir a
implementar y desarrollar, pero en lo que est en produccin, se debera
realizar un anlisis tanto de la estructura de la base de datos como de
las consultas, procedimientos, etc. Para que en un corto plazo se pueda
ir adecuando a estas buenas practicas. Y finalmente, el mantener al
personal capacitado har que estas buenas prcticas, se vayan
modificando o ampliando, puesto que los avances tecnolgicos son cada
vez mayores y se presentan en un corto tiempo.