Vous êtes sur la page 1sur 145

Programador

.NET 2012



















2
AUMENTA TU PRODUCTIVIDAD




































Centro de Educacin Continua
Universidad Continental
Material para fines de Estudio del Programa: Programador .NET
Elaborado por: Ing. Rolando R. Zapata Marav

Queda prohibida la reproduccin total o parcial del contenido de este documento en
cualquiera de sus formas, sean electrnicas o mecnicas, sin el consentimiento previo y
por escrito del autor y el Centro de Educacin Continua.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 1



Introduccin a
Base de Datos






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Reconocer y describir los elementos bsicos relacionados a base de datos.
Determinar y analizar la importancia de las base de datos en las organizaciones.

TEMAS:

Dato e informacin
Base de datos
Servidores
Sistema Gestor de Base de Datos (SGBD)
Herramientas de software para base de datos




SESIN
1
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 2
Visin general
A menudo establecemos contacto con diversas organizaciones de diversos rubros, por ejemplo,
cuando adquirimos un medicamento en alguna farmacia podemos observar que la persona
encargada de atender al pblico tiene contacto con una lista de medicamentos disponibles (en
medios fsicos como un papel o en medios digitales por medio de un ordenador) con su
respectivo precio y stock, de esa manera se nos brinda informacin de acuerdo a las
necesidades que tenemos. Otro ejemplo es la inclusin de su persona al presente curso, al
momento de inscribirse la persona encargada de brindar informes le hizo conocimiento de los
horarios disponibles y el costo respetivo. En cualquiera de ambos casos se necesit de
informacin para realizar con normalidad el proceso de negocio, esto nos indica que cualquier
organizacin de cualquier rubro requiere informacin para realizar sus operaciones del da a da.
a continuacin se muestran algunos tipos de negocio acompaados del tipo de informacin que
manejan.
Tipo de organizacin Informacin necesaria
Banco
Datos del cliente, tipos de cuentas de ahorro, tipos de crditos,
tipos de tarjetas de crdito, datos de los asesores de negocio,
movimientos por cliente, etc.
Colegio
Datos del alumno, datos de los docentes, cursos por grado,
secciones disponibles, alumnos destacados, etc.
Clnica
Datos del paciente, datos de los mdicos, horarios de atencin,
disponibilidad de las salas de operaciones, etc.
Supermercado Datos de los productos, vendedores, clientes, etc.
Tabla N 1
Cada organizacin requiere de algn tipo de informacin para subsistir y realizar con xito sus
procesos, es por eso que se hace importante contar con informacin automatizada,
actualizada, confiable, ntegra y disponible. Para gestionar dicha informacin podemos
hacer uso de medios fsicos como cuadernos o papales, sin embargo este tipo de medios tiene
la principal desventaja de que se deterioran con el tiempo y que en caso de contar con
abundante informacin, podra tomar tiempo ubicar detalles especficos de algn elemento, por
ejemplo, imaginemos que llevamos el control de alquiler autos en un cuaderno por ms de 10
aos, Se imagina ubicar las fechas en la que el cliente Ana Huamn Soriano alquil un auto de
marca Mercedes?, definitivamente esta operacin tomara demasiado tiempo en completarse.
Es por eso que lo ms recomendable es mantener informacin en un medio digital a travs del
algn equipo electrnico como un computador por ejemplo, de sta manera obtener
informacin tardara pocos segundos o milisegundos, y ahorraramos tiempo y dinero.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 3
Actualmente con el avance de la tecnologa existen diversos componentes y elementos para
digitalizar informacin y hacerla confiable, disponible e ntegra. Dicha informacin se aloja en lo
comnmente se denomina base de datos.
Lo que pretende este segundo paquete es ensear al lector a disear e implementar una
base de datos, para luego aplicar algunos principios bsicos de administracin de la
misma.

Dato e informacin
El dato viene a ser un smbolo descriptivo, por ejemplo en el caso de un alumno podemos
percibir los siguientes datos: Nombres, apellidos, edad, sexo, correo electrnico, apoderado,
etc. Los datos por s solos no pueden brindar demasiado conocimiento, sin embargo si
tenemos un conjunto de datos y los ordenamos, organizamos y procesamos, entonces se
convierte en informacin, por ejemplo si tenemos datos de 100 alumnos, podemos obtener
informacin del porcentaje de varones y mujeres inscritos, o quizs la edad promedio de los
alumnos o el porcentaje de alumnos que usan cuentas de correo en Gmail o Hotmail, etc.
Como podemos apreciar, para obtener informacin necesitamos primero capturar datos,
ste proceso a nivel empresarial generalmente se realiza mediante un sistema de
informacin que captura datos de acuerdo a ciertas reglas de validacin para luego
almacenarlos.

Base de datos
Es un conjunto de datos que guardan relacin entre s y estn enfocados hacia un mismo
contexto. Dentro de las organizaciones la base de datos juega un rol protagnico ya que
permite alojar informacin de sus procesos; debemos comprender que los usuarios informticos
no ingresan directamente contenido a la base de datos, sino que interactan con ella a travs
de un sistema de informacin. ste interacta con la base de datos para procesar su
contenido y mostrar informacin al usuario de acuerdo a sus necesidades y requerimientos.
En un mbito informtico, la forma ms comn de almacenar el contenido de una base de
datos es en formato de tablas, veamos el siguiente cuadro que muestra el nombre de algunas
bases de datos y sus posibles tablas:
Base de datos Posibles tablas
Universidad
Docente, alumno, carrera profesional, turno, semestre, horario, aula,
asignatura, etc.
Farmacia Medicamento, categora, vendedor, cliente, etc.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 4
Clnica
Paciente, doctor, horario de atencin, turno, consultorio, historia clnica,
receta mdica, etc.
Asistencia del
personal
Trabajador, horario, cargo, asistencia, etc.
Tabla N 2
Para poder crear una base de datos, generalmente se realizan los siguientes pasos:
Toma de requerimientos
Es la fase inicial donde se realizan entrevistas a los usuarios potenciales o interesados, se
aplican cuestionarios, se revisan documentos relacionados al negocio, etc. Todo esto
con el fin de conocer cmo funciona el negocio o escenario empresarial que estamos
abordando o enterarse de que se necesita almacenar en la futura base de datos.
Implementacin de base de datos
o Modelo conceptual
Es un diseo bsico que contiene los conceptos relacionados a la base de datos que
pensamos implementar. Por ejemplo: Si vamos a implementar una base de datos
que guardar informacin relacionada a las ventas de una compaa de
automviles, nuestro modelo conceptual sera una lista con los posibles
elementos que se quiere almacenar, como automvil, repuesto, vendedor, cliente,
etc.
sta fase es independiente de la plataforma de hardware y software donde
pensamos implementar la base de datos.
o Modelo lgico
El modelo lgico toma como referencia lo que se gener en el modelo conceptual,
pero esta vez se aplica un paradigma de diseo de base de datos. Uno de los
paradigmas para la creacin de base de datos ms utilizados y conocidos es el
Modelo Relacional, a travs de su diagrama Entidad/Relacin permite la
representacin de diversos escenarios empresariales de baja, mediana o alta
complejidad.
En la siguiente sesin abordaremos con ms detalle el modelo relacional

o Modelo fsico
El modelo fsico traslada el modelo lgico de base de datos a un software
especializado para gestionar la operatividad de la base de datos denominado
Sistema Gestor de Base de Datos SGBD, as como Microsoft Word 2010 permite
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 5
crear, editar y procesar texto, un SGBD permite aplicar una serie de procesos (crear
tablas para almacenar datos, generar copias de seguridad, crear cuentas de usuario
para el ingreso a SQL Server 2012, etc.) en una base de datos.
Administracin de base de datos
Es un proceso natural que se da luego de que la base de datos est funcionando en un
servidor. Consiste en realizar las tareas suficientes para garantizar la disponibilidad,
integridad, confiabilidad y rendimiento de la base de datos. En esta fase se realizan
tareas como: Elaborar planes para recuperacin en caso de desastres, establecer polticas
de copias de seguridad, realizar mantenimiento de ndices de base de datos, etc.

Los elementos mostrados anteriormente estn resumidos para brindar un panorama al
lector. En realidad el diseo e implementacin de base de datos es un proceso ms
complejo, en el presente material de estudio abordaremos nicamente los elementos
principales.

Servidores
A diario utilizamos ordenadores para realizar tareas comunes como redactar informes, elaborar
cuadres de presupuestos, etc. Estos ordenadores generalmente tienen instalado un sistema
operativo de usuario como Windows 8, Windows 7, Windows Vista, Windows XP, Ubuntu,
Mandriva, etc, y poseen una estructura de hardware bsica como por ejemplo 2 procesadores,
2 GB de memoria RAM y un disco duro de 500 GB, estos recursos lgicos y fsicos son
suficientes para ayudar al usuario a desarrollar sus actividades del da a da. Un servidor no es
un equipo destinado a procesar tareas cotidianas, por el contrario, realiza tareas especficas de
mediana o alta complejidad como por ejemplo atender las peticiones de diversos ordenadores
(que pueden ser decenas o cientos), para dichas tareas se hace necesario que un servidor
posea caractersticas ms fuertes a nivel de hardware y software que un ordenador comn, por
ejemplo, en un servidor podemos encontrar 8 procesadores con 16 GB de RAM y una capacidad
en disco duro en Terabytes acompaado de un sistema operativo de servidor como Windows
Server o Ubuntu Server.
El SGBD que gestiona una base de datos generalmente es instalado en un servidor que es
enlazado en red con diversos equipos, de tal manera que los equipos cliente se pueden
conectar al servidor central para realizar consultas a la base de datos. Uno de los factores que
determinan la velocidad de respuesta del servidor es las caractersticas de hardware del mismo,
en grandes organizaciones los servidores poseen un arquitectura de hardware generosa ya que
deben atender peticiones de decenas de clientes en tiempo real.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 6
Importancia de la base de datos a nivel organizacional
La base de datos viene a ser un componente fundamental a nivel organizacional, ya que
almacena todos los datos concernientes a la naturaleza del negocio, este contenido es
procesado por un sistema informtico para cubrir las diferentes necesidades de informacin,
por ejemplo en el caso de la universidad, el personal de caja necesita informacin sobre el
calendario de pensiones de un determinado alumno, mientras que un docente necesitar la
relacin de sus asignaturas y un tutor sus record de asistencias.
Como vemos, la base de datos es fundamental para el desarrollo normal de los procesos del da
a da de cualquier empresa. Ms adelante detallaremos las medidas de proteccin de datos as
como las buenas prcticas a considerar para garantizar la confiabilidad, integridad y
disponibilidad de los datos.

Sistema Gestor de Base de Datos (SGBD)
Viene a ser un software que permite gestionar la funcionalidad de una base de datos, en el
mercado informtico los Sistemas Gestores de Base de Datos lderes son ORACLE, Microsoft
SQL Server, MySQL y DB2. Cada uno de ellos cuenta con sus propias caractersticas, ventajas y
desventajas.
Cada SGBD contiene herramientas para implementar y administrar bases de datos, no
olvidemos que la implementacin contiene el modelo fsico que se origin a partir del modelo
lgico de base de datos. Por otro lado, la administracin se da cuando ya se ha implementado
la base de datos.
Para el presente mdulo usaremos Microsoft SQL Server 2012 como SGBD principal, ya
que es muy comercial a nivel nacional e internacional.

Visual Studio 2012 y SQL Server 2012 forman una slida pareja para crear diversos tipos de
aplicaciones, ambos se complementan muy bien por pertenecer a la misma compaa, sin
embargo debemos destacar que Visual Studio 2012 permite trabajar con bases de datos en
ORACLE o MySQL, lo mismo sucede con el lenguaje de programacin Java que permite trabajar
con bases de datos implementadas en SQL Server.

Herramientas de Software para base de datos
Los SGBD incluyen el modelo fsico de la base de datos, es decir, contienen los archivos fsicos
reales de la base de datos que se irn trabajando en el da a da por medio de los sistemas de
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 7
informacin. Sin embargo, para realizar el modelo lgico tambin existen algunas herramientas
como Erwin, Visio, Rational Rose, etc.
Por otro lado, si elaboramos nuestro modelo lgico con papel y lpiz tambin es perfectamente
vlido, lo que pretenden algunas de las herramientas listadas en el prrafo anterior es
reemplazar el papel por un software. La eleccin de utilizar cualquier de ellos es una cuestin
de comodidad por la parte de la persona encargada de disear la base de datos.

Para elaborar nuestros modelos lgicos de base de datos usaremos Erwin, que es una
herramienta muy comercial para el diseo de base de datos.







Asignacin domiciliaria
1. Elaborar una lista de diferencias entre las principales SGBD lderes del mercado
(ORACLE, SQL Server y MySQL).
2. Elaborar una lnea de tiempo acerca de las versiones de SQL Server.
3. Describir brevemente algunas de las Certificaciones Microsoft relacionadas a SQL Server
(Preferentemente sobre las ltimas versiones).
4. Elaborar un breve resumen sobre las principales caractersticas de cada edicin de SQL
Server 2012.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 8



Modelo Relacional






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Analizar situaciones cotidianas en trminos de base de datos.
Conocer de manera terica y prctica el diagrama Entidad/Relacin.

TEMAS:

El modelo relacional
Partes fundamentales del diagrama Entidad/Relacin
Demostracin







SESIN
2
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 9
El modelo relacional
El modelo relacional es una manera muy popular de representar bases de datos, es el ms
utilizado actualmente ya que provee facilidad para representar situaciones de la realidad en
trminos de base de datos. Se basa fundamentalmente en 2 conceptos, Entidad y Relacin
que revisaremos ms adelante.
El modelo de base de datos almacena informacin en forma de entidades (en forma lgica) que
luego se convertirn en tablas (en forma fsica), el modelo sugiere que las entidades no pueden
estar aisladas una de otra, sino que de alguna forma se relacionan por el mismo hecho de
pertenecer al mismo giro de negocio.
Debemos comprender que no la nica manera de disear una base de datos, ya que
existen algunos modelos adicionales como el Orientado a Objetos, Jerrquico, de Red,
entre otros.

Partes fundamentales del diagrama
Entidad/Relacin
El diagrama entidad relacin se compone principalmente de 2 elementos:
Entidad
Representa algn elemento de la realidad, por ejemplo un libro, un comprobante de pago,
un docente, un alumno, un producto, etc. Las entidades poseen atributos o campos para
expresar los datos que debe almacenar, a continuacin se listan una serie de entidades
cada una de ellas con algunos atributos bsicos:
o Libro (ttulo, autor, editorial, ao de publicacin, resumen)
o Computadora (nmero de serie, marca, modelo, capacidad de disco duro,
cantidad de memoria RAM)
o Paciente (DNI, nombres, apellidos, edad, sexo, tipo de sangre, nmero de
telfono, estatura)

Llave primaria
Adicionalmente, se recomienda que las entidades posean una llave primaria, sta viene a
ser aquel campo que no se repite y que hace a cada registro nico, por ejemplo, la
entidad Paciente podra tomar como llave primaria el DNI, ya que no pueden existir
pacientes con el mismo nmero de DNI.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 10
Tipos de datos
Cada atributo que posea una entidad debe tener asignado un tipo de dato, que expresa la
naturaleza del valor que se desea almacenar en dicho atributo. Esto es muy similar a los
tipos de datos que se aplican a una variable en Visual Basic .Net, slo que esta vez lo
estamos aplicando a base de datos. La siguiente tabla muestra la entidad Paciente con un
conjunto de atributos y sus respectivos tipos de datos.
Entidad Atributos Tipo de datos
Paciente
DNI Texto
Nombres Texto
Apellidos Texto
Edad Numrico
Sexo Texto
Nmero de telfono Texto
Estatura Numrico
Tabla N 3
Quizs se estn preguntando, Por qu el DNI viene a ser de tipo Texto si contiene
nicamente nmeros al igual que el nmero de telfono?, bueno la respuesta es que
segn las buenas prcticas de implementacin de base de datos, nicamente se debe
establecer un tipo de dato numrico a aquellos campos con los cuales vamos a realizar
operaciones, por ejemplo es muy extrao sumar los nmero de DNI de 2 pacientes, o
quizs obtener el promedio de todos los nmeros telefnicos de mis pacientes, como estas
operaciones no se van a realizar, entonces lo ms adecuado es establecer un tipo de dato
texto. Por otro lado, es ms comn obtener el promedio de edades de mis pacientes o
quizs obtener el paciente con edad mayor, como estas operaciones son ms cotidianas
entonces es necesario asignar un tipo de dato numrico al atributo edad.
Los tipos de datos texto, numrico, fecha o lgico (Verdadero o Falso) vienen a ser tipos de
datos genricos que se pueden aplicar a nuestro modelo lgico, sin embargo, en el
momento de trasladar nuestro modelo lgico a un modelo fsico, los tipos de datos vienen a
convertirse en especficos, y esto es dependiente del Sistema Gestor de Base de Datos
que vayamos a utilizar. Por ejemplo en Microsoft SQL Server 2012, para especificar un tipo
de dato texto podemos utilizar un Char, Varchar, nChar, nVarchar y algunos otros, para
representar nmeros podemos usar un tinyint, int, decimal, entre otros.
Relacin
Generalmente las entidades no pueden quedar aisladas unas de otras, ellas mantienen
vnculos que se representan por medio de una relacin. Bsicamente existen 3 tipos de
relaciones:
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 11
o Uno a Uno
Se produce cuando a un elemento de una entidad le corresponde un elemento de
otra entidad, por ejemplo si vamos a implementar una base de datos para un
colegio, podemos listar a las entidades docente y alumno.
Docente
DNI
Nombres
Apellidos
FechaDeNacimiento
Sexo
Profesin
Especialidad

Alumno
DNI
Nombres
Apellidos
FechaDeNacimiento
Sexo
CdigoMatricula
FechaDeInscripcion

Ambas entidades tienen datos en comn, por lo que podemos agruparlos en una
tercera entidad denominada Persona, y luego crear una relacin de uno a uno de
Persona a Alumno y de Persona a Docente, ya que a un docente le corresponde
una persona y a un alumno le corresponde una persona.
Aquellos datos que no son comunes entre ambos se ubicaran en su respectiva
entidad.
Persona
DNI
Nombres
Apellidos
FechaDeNacimiento
Sexo

Alumno
CdigoMatricula
FechaDeInscripcion

Docente
Profesin
Especialidad

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 12
o Uno a Muchos
Este tipo de relacin se manifiesta cuando a un elemento de la primera entidad le
corresponden muchos elementos de una segunda entidad y a un elemento de la
segunda entidad le corresponde un nico elemento de la primera entidad.
Algunos ejemplos son:
TipoDeDocente y Docente
En alguna universidad de puede manejar dos tipos de docentes, por horas
y a tiempo completo. Cada docente tiene asignado un solo tipo, y un tipo
de docente podra incluir a un conjunto de docentes.
Producto y categora
Algunas bodegas y tiendas de abarrotes poseen una gran cantidad de
productos agrupados por categoras (lcteos, condimentos, primera
necesidad, limpieza, embutidos, etc). Cada producto tiene una nica
categora mientras que una categora podra abarcar a varios
productos.
o Muchos a muchos
Se produce cuando a un elemento de la primera entidad le corresponden una
serie de elementos de una segunda entidad y viceversa.
Docente y Curso
Un docente puede dictar muchos cursos y un curso puede ser dictado por
muchos docentes.
Boleta y Producto
En una venta una boleta podra incluir la descripcin de mltiples
productos, y un mismo producto podra ser incluido en mltiples boletas o
comprobantes.
Cuando identificamos una relacin de muchos a muchos, debemos romper dicha
relacin utilizando una tabla intermedia, que lleva las llaves principales de las
entidades que se relacionan de muchos a muchos. Como recomendacin se debe
tener en cuenta que el nombre de la nueva tabla puede ser la combinacin de
ambas tablas de origen.


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 13
Demostracin
Para crear entidades y relaciones, vamos a utilizar una herramienta muy popular en el diseo
de base de dato denominada ERwin. Esta herramienta nos va a permitir elaborar prototipos de
modelos lgicos que luego se convertirn en modelo fsico utilizando Microsoft SQL Server
2012.
Para abrir ERwin, hacemos click en el botn inicio, ubicamos el cursor sobre All Programs, y
ubicamos la carpeta Computer Associates, luego seleccionamos la opcin ERwin Data
Modeler.

Figura N 1
Una vez que inicie el programa, vamos dar click en el men File, opcin New, para crear un
nuevo modelo lgico.

Figura N 2
En la siguiente pantalla vamos a seleccionar la opcin Logical, y hacemos click en el botn OK.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 14

Figura N 3
ERwin nos muestra el rea de trabajo en blanco donde comenzaremos a agregar entidades a
travs de la siguiente barra:

Figura N 4

Damos un click en la segunda herramienta empezando del lado izquierdo, y hacemos un click
en una zona vaca del rea de trabajo, obtendremos el siguiente resultado:

Figura N 5
Escribimos Paciente en el primer recuadro que pertenece al nombre de la entidad, el segundo
recuadro pertenece a la zona de llave(s) primaria(s) y el tercero a los atributos comunes. Para
trasladarnos de recuadro presionamos la tecla Intro.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 15

Figura N 6
La llave primaria de una entidad puede ser simple o compuesta, se dice que es simple en
el caso de que la llave primaria est conformada por un solo campo, y es compuesta si la
llave primaria se forma por 2 o ms campos.

Vamos a modificar la entidad para mostrar el siguiente resultado:

Figura N 7
Para establecer los tipos de datos a cada atributo, hacemos doble click en la entidad y se nos
mostrar la siguiente figura:

Figura N 8
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 16
Seleccionamos DNI y en el panel derecho seleccionamos el tipo de dato String, que representa
datos de tipo texto.

Figura N 9
Otorgamos los tipos de datos adecuados y siguiendo los pasos anteriores, vamos a crear otra
entidad llamada Tipo que representar al tipo de paciente de una clnica, tal y como muestra la
siguiente figura:

Figura N 10
Ambas entidades tienen una relacin de muchos a uno, ya que una persona tiene nicamente
un tipo de paciente y un tipo de paciente puede incluir varias personas. Para realizar la
representacin grfica de la relacin, vamos a dar un click en la siguiente herramienta:

Figura N 11
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 17
La primera herramienta marcada en crculo empezando de la izquierda, pertenece a una
relacin de uno a muchos de tipo identificada, y la primera herramienta marcada iniciando
desde la derecha corresponde a una relacin no identificada.
Cuando se establece una relacin de uno a muchos identificada, la llave primaria de la entidad
independiente pasa a formar parte de la llave primaria de la entidad dependiente. Por otro lado,
si aplicamos una relacin no identificada, la llave primaria de la entidad independiente pasa a
formar parte de los campos de la entidad dependiente. Para ste utilizaremos una relacin no
identificada, ya que se supone que no debe existir pacientes con dos nmeros de DNI iguales.

Figura N 12

Si estableceramos una relacin identificada, la llave de la entidad Paciente se formara
por la combinacin del DNI del mismo con el tipo de cliente, lo cual indicara podran
existir 2 nmeros de DNI iguales.

El modelo que estamos elaborando, tiene por defecto la notacin IDEF1X, vamos a cambiar esa
notacin a un tipo ms conocido como la notacin IE (Information Engineering), para ello
vamos a dar click en el men Tools y seleccionamos la opcin Model Properties.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 18

Figura N 13
En la ficha Notation vamos a seleccionar la opcin IE (Information Engineering), luego
hacemos click en el botn OK.

Figura N 14

De esa manera el modelo cambia un poco su formato, veamos el resultado.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 19

Figura N 15
Hemos elaborado un modelo lgico bastante simple que nos sirve de ejemplo para aplicar los
conceptos vistos anteriormente y conocer el manejo bsico de ERwin como herramienta de
elaboracin de modelo lgico de base de datos.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 20



Desarrollo de caso
empresarial






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Desarrollar modelos bsicos de base de datos a nivel lgico.

TEMAS:

Caso




SESIN
3
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 21
Caso
Enunciado
Yiyi es una empresa dedicada a la venta de abarrotes, ofrece al pblico diversos tipos de
productos como leche, mermelada, crema de afeitar, etc. Cada producto que se ofrece
pertenece a un nica categora (lcteos, embutidos, belleza, etc.), pero una categora puede
involucrar una seria de productos.
Cada fin de mes o cuando se agota el stock de un producto, el administrador se contacta con
sus proveedores (por medio de un nmero telefnico que incluye el proveedor) para
incrementar el stock de aquellos productos que no tienen stock disponible o que superaron el
stock mnimo permitido. Al momento que un proveedor hace entrega de los productos, se lleva
una pequea ficha donde figura el nombre del producto con su respectivo precio de compra, la
fecha en que se realiza la entrega el cdigo del vendedor que hace la recepcin.
Al momento de realizar la venta, se emite un recibo que incluye el nombre y apellido del cliente,
su nmero de DNI, la fecha de la compra, la lista de productos que incluye la venta incluyendo
el subtotal (precio unitario del producto por la cantidad) y el total.

Resolucin
Lo primero que haremos es crear un nuevo modelo lgico en ERwin y lo guardaremos con el
nombre Demostracion01.
Luego vamos a crear la entidad producto, que almacenar todos los productos disponibles que
la empresa, por lo que se puede apreciar en el caso, los atributos seran: Nombre del producto,
precio sugerido de venta, vstock actual, stock mnimo y adicionalmente agregaremos un cdigo
que nos servir como llave primaria.

Figura N 16
El caso tambin nos menciona que cada producto pertenece a una nica categora, as que
crearemos una entidad Categora y ya que el ejercicio no nos indica demasiado sobre sus
atributos, asumiremos los atributos codigoCategoria, nombre y descripcin.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 22
Es recomendable no asignar tildes y ni usar la letra en los nombres de las entidades y
en los nombres de los campos, esto se debe a que la mayora de software destinado al
trabajo con base de datos son elaborados en pases que tienen como lengua materno al
ingls, y en dicho idioma no se usa estos caracteres..


Figura N 17

Con respecto al proveedor, guardaremos los siguientes datos: Cdigo de proveedor, nombre del
proveedor, nombre del representante y un telfono de contacto.


Figura N 18

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 23
En el caso de hace referencia al cliente, del cual se solicita su nmero de DNI y su nombre
completo, vamos a utilizar el DNI como llave primaria ya que es un dato que por su naturaleza
no se repite.

Figura N 19

Ahora vamos a representar el proceso de venta, el enunciado menciona que una venta incluye
el DNI del cliente junto con su nombre y apellido, adicionalmente se incluye la fecha de compra
y la lista de productos. El siguiente paso es crear la entidad Venta, y como esta incluye los
datos del cliente, entonces vamos a identificar qu tipo de relacin se debe aplicar entre cliente
y venta. Veamos:

Un CLIENTE puede participar en muchas VENTAS SI
Una VENTA puede incluir muchos CLIENTES NO, solamente uno por cada VENTA

Por lo tanto, concluimos que se trata de una relacin de uno a muchos (de Cliente hacia venta).
Es hora de averiguar si se trata de una relacin identificada o no identificada, para ello
debemos analizar si es necesario que la llave primaria de ventas sea simple o compuesta. A
cada venta le vamos a establecer un cdigo numrico distinto, por lo cual no necesitara la llave
principal del cliente para formar su llave primaria, por lo tanto vamos a utilizar una relacin no
identificada para vincular ambas entidades.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 24

Figura N 20

Una venta se compone un solo producto o de varios, y un producto puede incluirse en varias
ventas, por lo tanto entre la entidad Venta y Producto tenemos una relacin de muchos a
muchos, no olvidemos que para estos casos debemos crear una tabla intermedia que rompa la
relacin de muchos a muchos.
En esta nueva tabla vamos a incluir la cantidad de productos que se vendieron, incluyendo su
precio de venta. Observemos que no incluimos el subtotal porque viene a ser un dato calculado
por medio de la multiplicacin de la cantidad de unidades del producto por el precio de venta;
de igual manera sucede con el total, que vendra a ser la suma de todos los subtotales.


Figura N 21
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 25
Vamos a relacionar de una vez la entidad Producto con Categoria, recordemos que el enunciado
nos da a entender que un producto nicamente puede pertenecer a una categora, mientras
que una categora puede involucrar una serie de productos.

Figura N 22

Podemos observar que la entidad Proveedor se encuentra suelta por el momento, segn el caso
menciona, un proveedor brinda una serie de productos a Yiyi. Analicemos el tipo de relacin
entre ambos, un Proveedor puede brindar varios productos, y un producto puede ser brindado
por varios proveedores, por lo tanto se crea otra relacin de muchos a muchos que debemos
romper con una tabla intermedia.

Figura N 23

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 26
Notemos que en el modelo se muestran 3 tipos de precios, un precio base que es el precio
normal de un producto, un precio de venta que es el precio real al que se vende un producto
(que no necesariamente es igual al precio base en todos los casos) y un precio de compra que
es el precio adquirimos con el proveedor. Por otro lado, hemos utilizado una relacin de uno a
muchos identificada para indicar que no puede existir el mismo cdigo del producto con
el mismo cdigo del proveedor 2 o ms veces.
Finalmente vamos a agregar la entidad vendedor con algunos datos bsico:


Figura N 24






Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 27



Ejercicios
Propuestos






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Aplicar los conceptos principales de diseo de base de datos en escenarios empresariales
reales.
Identificar los escenarios comunes de aplicacin de buenas prcticas de diseo de base
de datos.

TEMAS:

Ejercicios propuestos



SESIN
4
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 28
Ejercicios propuestos
A continuacin se muestra una lista de ejercicios propuestos para aplicar lo desarrollado en
sesiones anteriores, elabore el Diagrama Entidad/Relacin de cada uno de ellos teniendo en
cuenta las buenas prcticas de diseo de base de datos y normalizacin. Considere que se
pueden realizar suposiciones en caso de que exista informacin incompleta.

1. Una tienda de comunicaciones desea almacenar informacin acerca de sus equipos
celulares y accesorios que ofrece al pblico en general, cada equipo cuenta con marca,
modelo, color (podran existir combinaciones, por ejemplo azul y gris), nmero de serie,
dimensiones (largo por ancho por altura), precio base y fabricante. Por el lado de los
accesorios se tienen 2 categoras: Internos (batera, memoria, etc.) y Externos
(auriculares, estuche, parlantes, cargador, cable de datos, etc). Actualmente la tienda pega
un sticker de color amarillo a aquellos celulares que se encuentran de moda y un sticker de
color rojo a aquellos modelos desfasados.
Considere que cada producto tiene un empleado registrador, aquel que ingresa los datos
del celular o accesorio; y un empleado de salida, que es aquel que solicita un producto
para realizar alguna venta. Sobre los empleados se necesita almacenar los nombres,
apellidos (paterno y materno), sexo, correo electrnico, fecha de inicio de labores, DNI,
sueldo base (entre 1000.00 y 9999.99 nuevos soles).
2. La empresa en desarrollo Candys Bell desea digitalizar el proceso de control de asistencia
del personal, bsicamente desean conocer los horarios de entrada y salida de cada
trabajador.
Considere las siguientes reglas de negocio:
Un trabajador puede tener asignado 2 turnos como mximo en un solo da.
Existen horarios rotativos, es decir, un trabajador puede laborar los das lunes, martes
y mircoles de 7:00 A.M. a 03:00 P.M., y los das jueves y viernes de 09:00 A.M. a
05:00 P.M.
Cada trabajador tiene un cargo especfico, y se aplica un descuento mensual de
acuerdo al mismo.
El tercer da de cada mes se generan el reporte de asistencia de cada trabajador, dicho
informe muestra las horas y/o minutos de tardanza, cantidad de faltas, cantidad de
veces que se retir antes de terminar su horario de trabajo y la cantidad de marcas
que hizo en el mes acompaado de la fecha y horario respectivo.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 29
3. Una empresa dedicada al rubro de transportes desea informatizar sus principales procesos,
todos los das se envan buses desde su terminal central ubicado cerca del mercado Central.
Cada salida consta de un bus, origen, destino, fecha y hora de salida, piloto, copiloto y
auxiliar; por cada bus se desea saber el nmero de placa, cantidad de asientos, cdigo
interno, cantidad de pisos, marca y modelo. Por otro lado los pilotos y los copilotos
comparten los mismos datos, estos son: Nombres, apellidos, sexo, nmero de celular,
brevete, fecha de inicio de labores, fecha de nacimiento y nivel de conocimiento de
mecnica automotriz (nula, bsica, intermedia o avanzada). Sobre los auxiliares se desea
saber sus nombres, apellidos, sexo, fecha de inscripcin y nmero de celular.
En cada viaje se puede tener como mximo una cantidad de pasajeros que no supere la
cantidad de asientes del bus respectivo, adems, cada pasajero debe viajar con su boleto
respectivo que contiene su nombre completo, edad, DNI, origen de viaje, destino de viaje,
fecha y hora de salida, valor del boleto (en nmeros y letras), nmero de asiento y el
nombre de usuario del vendedor que lo atendi.
El Gerente sugiere que cada vendedor debe tener un nombre de usuario asignado con su
respectiva clave de acceso (que debe ser encriptada para brindar mayor seguridad),
adicionalmente se debe guardar el nombre, apellido paterno, apellido materno, fecha de
nacimiento, fecha de inicio de labores, telfono fijo, nmero de celular (indicando el
operador y si es ordinario, RPM o RPC), observaciones, estado civil, sexo y correo
electrnico.
Adicionalmente considere que los vendedores pueden realizar una reserva va telfono o de
manera presencial indicando el nmero de su DNI y su nombre completo, recuerde que las
reservas en caso de que no sean confirmadas se deben eliminar automticamente 1 hora
antes de la salida del viaje.


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 30



Microsoft SQL
Server 2012






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Identificar correctamente las partes principales de Microsoft SQL Server 2012.
Conocer los principales componentes de Microsoft SQL Server 2012.

TEMAS:

Conociendo Microsoft SQL Server 2012
Modos de autenticacin
Elementos principales del entorno de trabajo







SESIN
5
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 31
Conociendo Microsoft SQL Server 2012
Microsoft SQL Server 2012 es la ltima versin del Sistema Gestor de Base de Datos ms
popular de la compaa Microsoft, posee una serie de caractersticas que hacen de ella una
herramienta muy competitiva en un mercado con duros competidores como ORACLE por
ejemplo.

Figura N 25
Modos de autenticacin
El modo de autenticacin viene a ser la forma de identificacin que usamos para ingresar a
Microsoft SQL Server 2012, por defecto manejamos 2 tipos:
Autenticacin Windows
Es una autenticacin basada en un usuario de Windows. Normalmente Microsoft SQL
Server 2012 es instalado sobre un servidor con Windows Server, en este ltimo se
pueden crear diversas credenciales con diversos permisos especficos para cada tipo de
escenario, Microsoft SQL Server puede utilizar una de esas credenciales para permitir el
ingreso.
Autenticacin SQL Server
Este tipo de autenticacin utiliza credenciales de Microsoft SQL Server independientemente
del sistema operativo. Microsoft SQL Server 2012 administra internamente sus propias
credenciales para realizar diversas tareas con ciertos permisos.
Para conocer aplicar lo explicado anteriormente vamos ingresar a Microsoft SQL Server 2012,
para ellos hacemos click en el botn inicio All Programs, ubicamos la carpeta Microsoft SQL
Server 2012 y seleccionamos la opcin SQL Server Management Studio.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 32

Figura N 26

Las buenas prcticas recomiendan utilizar Autenticacin Windows siempre y cuando
Microsoft SQL Server 2012 est instalado sobre Windows Server.


Figura N 27

En la seccin Server Name vamos a ingresar el nombre del servidor al cual deseamos
conectarnos, si estamos trabajando con Microsoft SQL Server instalado en nuestro propio
equipo entonces el servidor es local, y lo podemos representar escribiendo un punto . o
sino a travs de la palabra localhost.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 33
Debajo del nombre del servidor, en la seccin Autenticacin vamos a seleccionar Windows
Authentication, ya que al momento de la instalacin se cre un usuario en Windows con el
nombre alumno, y que fue asignado como un administrador de Microsoft SQL Server 2012.
Finalmente hacemos click en el botn conectar y luego de unos segundos se nos mostrar una
pantalla similar a la siguiente:


Figura N 28

Para conocer los datos de nuestra conexin, podemos observar la parte superior del panel
Object Explorer ubicado en la izquierda de la pantalla:

Figura N 29
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 34
El panel izquierdo muestra el nombre del servidor, que es WE09-2 seguido entre parntesis de
la versin Microsoft SQL Server 2012 que estamos usando y del nombre del usuario conectado
(Alumno para este caso).

Elementos principales del entorno de trabajo
La interfaz principal de trabajo de Microsoft SQL Server 2012 es similar a la de Visual Studio
2012, veamos las partes principales:

Figura N 30
Nmero Nombre Descripcin
1
Barra de ttulo Muestra el ttulo del programa, en este caso, Microsoft
SQL Server Management Studio
2
Barra de men Contiene los comandos disponibles en SQL Server
2012
3
Barra de herramientas Contiene los comandos ms cotidianos de SQL Server
2012
4
Zona de trabajo rea donde se realiza consultas, disea tablas, inserta
registros, etc.
5 Object Explorer Muestra todos los objetos disponibles en el servidor.
6
Panel propiedades Muestra un conjunto de caractersticas del objeto
seleccionado.
Tabla N 3
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 35



Planificacin de
base de datos






AL FINALIZAR LA PRESENTE SESIN, EL PARTICIPANTE ESTAR EN LA CAPACIDAD DE:

Crear adecuadamente una base de datos.
Aplicar buenas prcticas de implementacin de base de datos de acuerdo al escenario
empresarial.

TEMAS:

Creacin de base de datos
Recomendaciones generales







SESIN
6
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 36
Creacin de base de datos
Una base de datos no se crea todos los das (al menos a nivel empresarial), es por ello que se
debe hacer de la manera ms correcta y aplicando en todo momento buenas prcticas de
implementacin, de esta forma obtendremos una base de datos con alta disponibilidad y de
gran rendimiento.
Tipos de archivo de base de datos
Una base de datos en Microsoft SQL Server se compone de 3 tipos de archivos:
MDF
Es el archivo principal de la base de datos, contiene la configuracin de la misma as
como las ubicaciones de los otros archivos. Adems de que permite el almacenamiento de
registros de datos.
NDF
De manera similar que el anterior, tambin permite el almacenamiento de datos con la
caracterstica de que se puede utilizar para desplegar la base de datos en diferentes
ubicaciones.
LDF
Tambin conocido como registro de transacciones, se encarga de almacenar todas las
transacciones que realicemos sobre la base de datos.
Consideremos que una base de datos de Microsoft SQL Server 2012 debe contener
como mnimo un archivo .MDF y .LDF

Para visualizar los tipos de archivos, vamos a crear una base de datos con el nombre RRHH,
para ello hacemos click derecho en la carpeta Databases ubicada en el Object Explorer, y
seleccionamos la opcin New Database.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 37

Figura N 31

A continuacin se mostrar una ventana donde ingresaremos las caractersticas principales de
nuestra base de datos.

Figura N 32
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 38
En la seccin Database Name vamos a ingresar RRHH, ya que vamos a crear una base de
datos sencilla de recursos humanos. En la parte inferior podemos visualizar un botn con el
texto Add, ese botn nos permite agregar ms archivos a nuestra base de datos, al momento
de presionar el botn se agrega un nuevo elemento en la lista de archivos que componen la
base datos.

Figura N 33
En la segunda columna de la lista, titulada File Type, podemos seleccionar el tipo de archivo
que deseamos agregar, recordemos que una base de datos en SQL Server 2012 se compone de
3 tipos de archivos .MDF, .LDF y .NDF. Los archivos con el tipo Rows Data vienen a ser
archivos .MDF o .NDF, pero Cmo los diferenciamos?, bueno el primer archivo Rows Data es
el archivo principal .MDF y el resto automticamente se convierten en .NDF, por otro lado los
archivos con el tipo Log vienen a pertenecer al tipo registro de transacciones.
Otro dato importante es el ingresado en la columna Initial Size, que asigna el tamao inicial
de un archivo de base de datos, como podemos apreciar para los archivos de tipo .MDF o .NDF
el tamao inicial por defecto es 5 MB y para el registro de transacciones de 1 MB. Se
recomienda asignar un espacio generoso (considerar el recurso tecnolgico con el que
contamos) ya que la base de datos por su naturaleza tiende a crecer, y si establecemos un
tamao inicial de 5 MB, podra llenarse en poco tiempo. En caso de que se llene el espacio
asignado inicialmente, se produce un evento denominado Autogrowth, que quiere decir
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 39
crecimiento automtico. Notemos que esta configuracin se muestra en la quinta columna, para
apreciar con mayor detalle las caractersticas que nos brinda Microsoft SQL Server 2012, vamos
a dar un click en el botn de los 3 puntos que aparece en esta columna.

Figura N 34
Si habilitamos el Autogrowth, cuando la base de datos se quede sin espacio, entonces ocurrir
un autoincremento que puede ser en Porcentaje o en Megabytes, adicionalmente SQL
Server 2012 nos permite establecer un tope o tamao mximo de la base de datos por medio
de la seccin Maximun File Size.
Debemos tener en cuenta que no es del todo recomendable habilitar el Autogrowth, ya que si la
base de datos es altamente concurrida y se produce el Autogrowth, el servidor destinar
algunos de sus recursos a redimensionar la base de datos, lo cual podra implicar que la base
de datos reducira su rendimiento.
Es importante realizar una buena planificacin de la base de datos, de esa manera
podemos crear una base de datos con proyeccin al futuro, que sea fcil de mantener y
sobretodo que posea un buen rendimiento.

Recomendaciones generales
A continuacin se lista una serie de recomendaciones a tener en cuenta al momento de crear
una base de datos:
1. Ubicar el registro de transacciones en un disco duro separado.
2. Particionar la base de datos en diversos discos duros para mejorar el rendimiento, esto se
puede lograr utilizando RAID.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 40
3. De preferencia no habilitar el autogrowth, pero el administrador de base de datos debe
realizar un seguimiento peridico sobre los recursos de almacenamiento de la base de
datos.
4. En caso de que se habilite el autogrowth se recomienda establecer un tope mximo de
tamao.

































Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 41



Creacin de Tablas






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear tablas para almacenar datos.
Conocer los tipos de datos que ofrece Microsoft SQL Server 2012 para el trabajo con
datos.
Temas:
Creacin de tablas
Ingreso de datos
Ejercicio


SESIN
7
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 42
Creacin de tablas
Los datos incluidos en una base de datos se guardan en formato de tablas, una tabla
representa a una entidad del modelo lgico. Para crear una base de datos con tablas en
Microsoft SQL Server 2012 vamos a seguir las siguientes indicaciones:
1. Vamos a crear una base de datos con el nombre RecursosHumanos, que tiene como
propsito gestionar informacin relacionada al personal que labora de una empresa. Una
vez creada, hacemos click derecho con en la carpeta Tables que est incluida en la base
de datos RecursosHumanos, y luego seleccionamos la opcin New Table.

Figura N 35
2. Inmediatamente se apertura el diseador de tablas, en este caso vamos a crear una tabla
con el nombre tblEmpleado con una serie de atributos (tambin denominado columnas o
campos) que se ingresarn en la primera columna (Column Name) tal y como muestra la
Figura N 36.

Figura N 36
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 43
3. El siguiente paso es establecer los tipos de datos respectivos, para dicho propsito
utilizaremos la columna con el nombre Data Type, ubicada a la derecha del nombre de la
columna. Al igual que las variables en Visual Basic .Net, los campos o atributos de una tabla
deben tener asignado un tipo de dato que guarde relacin con lo que se desea almacenar.
Para establecer datos de tipo cadena principalmente podemos utilizar varchar y char y
nchar, cada uno de ellos incluyen un valor numrico entre parntesis que indica la longitud
del campo. Veamos un ejemplo:
Si utilizamos un tipo de dato varchar(15) y almacenamos Amy Lee en su interior,
solamente se usan 7 espacios y el resto se elimina, mientras que si almacenamos el mismo
nombre en un char(15), siempre se almacenan 15 espacios, es decir, se guardar Amy
Lee seguido de 8 espacios en blanco, que sumados con los 7 caracteres del nombre suman
un total de 15 caracteres. El tipo de datos varchar se usa generalmente para cadenas que
tener longitud variable en su contenido, mientras que el tipo de dato char es
recomendable para cadenas de longitud fija.
Teniendo como premisa el prrafo anterior, vamos a empezar a otorgar los tipos de datos
respectivos en nuestra tabla. El DNI es un tipo de dato que almacena siempre 8 nmeros,
por lo tanto podemos utilizar un tipo de dato char con longitud 8. En ocasiones es
inevitable hacernos la siguiente pregunta: Por qu otorgar un tipo de dato cadena a un
DNI que almacena slo nmeros?, bueno en realidad las buenas prcticas de base de datos
indican que es recomendable utilizar un tipo de dato numrico siempre y cuando se
realizar operaciones con el dato, por ejemplo, en el caso de la edad de un alumno, es
muy probable que se requiera obtener el promedio de edades de un saln de clases o
quizs quin es el alumno con mayor edad, u operaciones similares. Sin embargo, en el
caso del DNI es poco comn obtener el promedio de todos los nmeros de DNI de un
conjunto de personas, o quizs obtener el nmero de DNI mayor.
Asignamos los siguientes tipos de datos para nuestra tabla:

Figura N 37
4. Los dems atributos son analizados a continuacin:
a. Para la fecha de nacimiento usaremos el tipo de dato date, que tiene un intervalo
de fechas desde el 01 de enero del ao 1 hasta el 31 de diciembre del ao 9999. El
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 44
correo electrnico por ser un dato con longitud variable se le asignar el tipo de
dato varchar(50), con respecto al sexo guardaremos M o F segn sea el caso, es
por eso que le aplicaremos el tipo de dato char(1).
b. El tipo de datos lgico (Verdadero o Falso) viene representado por tipo de dato bit,
el cual lo aplicaremos al campo habilitado que indica si el empleado sigue
trabajando o no en la organizacin.
c. Con respecto al estado civil, debemos recordar que nicamente existen
formalmente el estado civil soltero o casado, por lo tanto a lo mucho se
almacenarn 7 caracteres, es por eso que utilizaremos el tipo de dato
varchar(7).
d. La fecha de registro indica la fecha y hora en la cual el empleado ingresa a la
base de datos corporativa, el tipo de dato datetime se acopla perfectamente a
guardar este tipo de registro.
e. Para representar valores monetarios, se puede utilizar un tipo de dato llamado
money o smallmoney, la diferencia entre ellos es el rango de valores que pueden
almacenar, mientras que un smallmoney almacena valores desde - 214.748,3648 a
214.748,3647, el tipo de dato money almacena valores desde -
922,337,203,685.477,5808 a 922,337,203,685.477,5807. Ambos tienen una
precisin de una diezmilsima de las unidades monetarias que representan,
aplicaremos el tipo de dato smallmoney para el campos sueldo establecido.
f. Las fotografas se pueden almacenar en un tipo de dato image que es
especializado para el trabajo con imgenes.

Figura N 38
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 45
5. Para guardar nuestra tabla vamos a hacer click en el botn guardar ubicado en la barra de
herramientas, el nombre de nuestra tabla ser tblEmpleado.

Figura N 39
6. Ahora vamos indicar que campos son opcionales en nuestra tabla, para ello utilizaremos la
tercera columna que lleva el ttulo Allow Nulls, aquellos campos que consideremos
opcionales vamos a marcarlos con un check.

Figura N 40
7. Ahora vamos a establecer la llave primaria de la tabla, recordemos que la llave primaria es
aquel campo que no se repite y que sirve para identificar a cada registro. En este caso el
campo ms adecuado es el DNI ya que no pueden existir 2 o ms empleados con nmero
de DNI idntico.
Para establecer la llave primaria, hacemos un click derecho sobre el nombre del campo DNI
y luego seleccionamos la primera opcin con el texto Set Primary Key.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 46

Figura N 41
8. Para verificar que nuestra se cre correctamente, podemos desplegar la carpeta Tables
incluida dentro de la base de datos RecursosHumanos que acabamos de crear.Incluso si
desplegamos la carpeta Columns de nuestra tabla, vamos a poder apreciar los atributos
que hemos ingresado con su respectivo tipo de dato.

Figura N 42

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 47
Ingreso de datos
El ingreso de datos a una base de datos es un proceso que generalmente se realiza desde un
sistema de informacin (recomendado para usuarios finales), sin embargo, se puede realizar el
ingreso respectivo desde el Sistema Gestor de Base de Datos que estemos utilizando. Para abrir
la tabla e iniciar el ingreso de datos vamos a hacer un click derecho en la misma y
seleccionamos la opcin Edit Top 200 rows.

Figura N 43
Inmediatamente se mostrar una grilla con los nombres de las columnas para realizar el ingreso
de datos respectivo.

Figura N 44

Ahora procederemos a ingresar registros fila por fila, debemos considerar que debemos
respetar los datos de cada columna para evitar posibles mensajes de error. Como ejercicio
vamos a ingresar datos aleatorios de 10 personas.
Recuerde que si desea dejar vaco el campo correoElectronico o fotografa, simplemente
digite NULL, que representa el valor vaco en Microsoft SQL Server 2012, recuerde que estos
datos son opcionales ya que les dejamos un check en la columna Allow nulls durante el diseo
de la tabla.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 48

Figura N 45
Vamos a dejar vaco todos los datos incluidos en el campo fotografa, ya que lo ms
recomendables guardar las fotografas desde un sistema de informacin.

Ejercicio
A manera de ejercicio, cree una nueva base de datos con el nombre Ventas1, y agregue las
tablas de la Figura N 19. No olvide asignar los tipos de datos ms adecuados as como
tambin establecer la llave primaria.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 49



Relaciones entre
Tablas





Al finalizar la presente sesin, el participante estar en la capacidad de:
Identificar los tipos de relaciones entre tablas utilizando reglas del negocio.
Establecer relaciones entre tablas.
Temas:
Visin general
Identificando las relaciones
Ejercicio


SESIN
8
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 50
Visin general
La mayor parte de tablas incluidas en una base de datos deben quedar relacionadas, estas
relaciones son las mismas que vimos anteriormente, es decir, uno a uno, uno a muchos y
muchos a muchos.
Vamos a crear una base de datos llamada Ventas con las siguientes tablas:
Tabla Atributos Tipo de dato Notas
tblProducto
CodigoProducto varchar(20) Llave primaria
Nombre varchar(100)
Precio smallmoney
StockActual tinyInt
StockMinimo tinyint
tblCategoria
CodigoCategoria tinyint Llave primaria
Nombre varchar(50)
Descripcion varchar(250)
tblProveedor
CodigoProveedor varchar(20) Llave primaria
Nombre varchar(150)
Representante varchar(150)
Telefono varchar(10)
Tabla N 4
El tipo de dato tinyint se utiliza para representar valores numricos enteros, debemos
considerar que su rango es idntico al tipo de dato Byte de Visual Basic, es decir, de 0 a 255.
Para los tipos de datos numricos podemos utilizar los siguientes:
Tipo de dato Descripcin Rango
tinyint
Nmeros enteros
0 a 255
smallint -32768 a 32767
int -2147483648 a 2147483647
bigint -9223372036854775808 a
9223372036854775807
decimal
Nmeros de punto flotante
Cuando se utiliza la precisin
mxima, los valores vlido se sitan
entre -10^38 y 10^38 - 1
Tabla N 5
Una vez que creamos las tablas anteriormente mencionadas, la carpeta donde se ubican las
tablas debe quedar similar a la siguiente figura:
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 51

Figura N 46
Para relacionar las tablas anteriormente creadas, vamos a crear un diagrama, el diagrama de
base de datos nos permite visualizar de manera ms amigable las tablas incluidas en nuestra
base de datos. Vamos a hacer click derecho sobre la carpeta Database Diagrams ubicada
dentro de la base de datos que estamos trabajando (Ventas en este caso) y seleccionamos la
opcin New Database Diagram.

Figura N 47
A continuacin seleccionamos todas las tablas que hemos creado y hacemos click en el botn
agregar.

Figura N 48
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 52
Luego vamos a obtener el siguiente resultado:

Figura N 49
Ahora vamos a guardar el diagrama con el nombre diagrama01.

Figura N 50

Identificando las relaciones
Ahora vamos a realizar el anlisis respectivo para identificar las relaciones en nuestro modelo:
Una categora puede contener muchos productos, pero un producto puede pertenecer
nicamente a una categora, por lo tanto, tenemos una relacin uno a muchos iniciando en
categora.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 53
La teora menciona que si identificamos una relacin de uno a muchos, debemos copiar la
llave primaria de la tabla independiente (Categora) a la tabla dependiente (Producto). Para
agregar un campo a la tabla producto con las caractersticas de la llave primaria
(codigoCategoria) vamos a dar un click derecho a la tabla producto y seleccionamos Vista de
Tabla, opcin Estndar.

Figura N 51
De esa manera observaremos los campos y sus tipos de datos respectivos en el diagrama que
hemos creado, realizamos la misma operacin anterior para las dems tablas, el resultado debe
mostrarse de manera similar a la siguiente figura:

Figura N 52

Ahora agregamos el campo CodigoCategoria con el tipo de dato tinyint en la tabla
tblProducto.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 54

Figura N 53
Para establecer la relacin, arrastramos a partir de la llave primaria de la tabla independiente
(tblCategoria) hacia el atributo CodigoCategoria de la tabla dependiente (tblProducto).
Inmediatamente despus se mostrar una ventana indicndonos los campos mediante los
cuales queremos relacionar. En ella verificamos que corresponda al campo CodigoCategoria
de ambas tablas.

Figura N 54

Hacemos click en Aceptar, y en la siguiente ventana tambin aplicamos el mismo
procedimiento, luego el diagrama mostrar ambas tablas relacionadas.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 55

Figura N 55
Ahora vamos a analizar la relacin entre producto y proveedor, un producto puede ser brindado
por muchos proveedores, y un proveedor puede abastecer muchos productos, por lo tanto
tenemos una relacin de muchos a muchos. En este caso tenemos que romper la relacin a
travs de una tabla intermedia que generalmente recibe el nombre de ambas tablas
involucradas y tiene como atributos sus respectivas llaves primarias.

Figura N 56

Luego relacionamos tblProveedor y tblProducto con tblProductoProveedor.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 56

Figura N 57
Finalmente, vamos a aplicar una llave primaria a tblProductoProveedor, esta vendra a ser
compuesta. Una llave primaria compuesta es aquella que se forma por la combinacin de 2 o
ms atributos, para aplicar este concepto a tblProductoProveedor vamos a seleccionar los
dos nicos campos y vamos a hacer un click derecho dentro de cualquiera de los campos y
seleccionamos la opcin Set Primary Key.

Figura N 58
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 57
Finalmente obtenemos el siguiente resultado:

Figura N 59

Ejercicio
A manera de ejercicio, transforme en un modelo fsico el diagrama presentado en la figura N
24.

El diagrama se debe realizar una nueva base de datos con el nombre Ventas, considerando las
siguientes indicaciones:
Establecer correctamente los nombres de tablas.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 58
Asignar el tipo de dato ms correcto para cada una de las columnas de las diferentes
tablas.
Antes de relacionar verifique si la relacin es identificada o no identificada.
Por cuestiones de prueba y aprendizaje, inserte por lo menos 5 registros en cada una de las
tablas que componen el modelo.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 59



Lenguaje
Estructurado de
Consulta




Al finalizar la presente sesin, el participante estar en la capacidad de:
Conocer el Lenguaje Estructurado de Consulta y diferenciarlo con T-SQL y PL-SQL.
Elaborar consultas bsicas para extraer informacin.
Temas:
Lenguaje Estructurado de Consulta


SESIN
9
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 60
Lenguaje Estructurado de Consulta
Es un lenguaje para extraer informacin en bases de datos relacionales, tambin se utilizara
para modificar objetos de la misma. Su abreviatura viene a ser SQL que hace referencia a su
nombre en ingls Structured Query Language.
A lo largo del presente mdulo usaremos una extensin del Lenguaje Estructurado de
Consulta (SQL) denominado Transact SQL de Microsoft y Sybase. Debemos recalcar que
tambin existe el trmino PL-SQL que viene a ser un lenguaje incrustado por ORACLE, ambos
lenguajes tienen como base al Lenguaje Estructurado de Consulta (SQL).
Muchas veces se suele confundir SQL con SQL Server, el primero de ellos viene a ser en
lenguaje de consulta explicado en el prrafo anterior, mientras que SQL Server es el
software para el trabajo con base de datos que ofrece Microsoft

Tipos de sentencias
Dentro del Lenguaje Estructurado de Consulta existen dos tipos de sentencias: Sentencias DDL
(Lenguaje de Definicin de Datos), y sentencias DML (Lenguaje de Manipulacin de Datos).
Las sentencias DML permiten insertar, actualizar, eliminar y seleccionar registros de una
base de datos, las principales son:
SELECT Permite seleccionar columnas especficas de una o ms tablas, as como
tambin limitar la cantidad de filas. Se utiliza para extraer informacin
personalizada de una base de datos.
INSERT Se utilizar para agregar registros a una tabla.
DELETE Eliminar los registros de una tabla de acuerdo a ciertos parmetros.
UPDATE Permite actualizar una o ms filas de una tabla de acuerdo a las columnas
seleccionadas.
Tabla N 6
Para utilizar de manera prctica lo visto anteriormente, vamos a crear una base de datos con el
nombre Biblioteca, donde crearemos la siguiente tabla:
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 61

Figura N 60

Una vez creada la tabla, vamos a agregar los siguientes registros:

Figura N 61
Ahora procederemos a utilizar la sentencia SELECT, que nos permite extraer informacin
personalizada de una o ms tablas, para conseguir el propsito debemos acompaar a la
sentencia SELECT con una clausula FROM, que se utiliza para especificar las tablas de las
cuales queremos obtener informacin.
Para empezar a escribir Transact SQL, vamos a dar un click en el botn New Query ubicado
en la parte superior izquierda de la pantalla principal de Microsoft SQL Server.

Figura N 62
Luego Microsoft SQL Server mostrar una hoja en blanco similar a un bloc de notas donde
iniciaremos con algunas consultas bsicas. Veamos algunos ejemplos:
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 62
a. Mostrar todos los libros registrados
Para mostrar todos los registros de una tabla, simplemente especificamos en la sentencia
SELECT las columnas que queremos mostrar y luego a travs de FROM indicaremos el
nombre de la respectiva tabla.
SELECT codigo,titulo,autor,cantidadPaginas,
fechaDePublicacion,resumen,editorial,fecharDeInscripcion
FROM tblLibro
Para probar nuestra consulta simplemente presionamos F5 o hacemos click en el botn
Execute ubicado en la barra de herramientas.

Figura N 63
Luego se mostrarn los resultados en la parte inferior del programa.

Figura N 64
El comodn * permite indicar todas las columnas, por lo tanto, si reemplazamos todos los
atributos por un asterisco, el resultado es el mismo.
SELECT *
FROM tblLibro
Para aplicar comentarios en T-SQL podemos utilizar dos guiones, por ejemplo, si
quisiramos agregar una breve descripcin al cdigo anteriormente mostrado, podemos
escribir lo siguiente:
--Ejercicio 1:
--Mostrar todos los libros registrados
SELECT *
FROM tblLibro

Los comentarios incluidos en el cdigo T-SQL se muestran en color verde por defecto.

b. Mostrar todos los libros registrados ordenados por ttulo.
--Ejercicio 2:
--Mostrar todos los libros registrados ordenados por ttulo
SELECT *
FROM tblLibro
ORDER BY titulo
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 63
c. Mostrar el ttulo y la cantidad de hojas de cada libro, iniciando por el libro con
mayor cantidad de hojas
SELECT titulo,cantidadPaginas
FROM tblLibro
ORDER BY cantidadPaginas DESC

DESC indica que el ordenamiento se aplicar de manera descendente, y ASC indica
ascendente, pero si no incluimos ni uno ni otro se asume que el ordenamiento es
ascendente.

d. Mostrar los libros cuya cantidad de hojas sea mayor a 100.
Para ste ejercicio usaremos WHERE, que especifica una condicin (Similar a la estructura
IF de Visual Basic .Net) al resultado de la consulta, en este caso la condicin es que la
cantidad de hojas sea mayor a 100.
SELECT titulo,cantidadPaginas
FROM tblLibro
WHERE cantidadPaginas >100


No olvidemos que ORDER BY generalmente se ubica despus de WHERE, y este se
ubica despus de FROM. No podemos ubicar cada comando en cualquier parte, sino que
se sigue un orden establecido.

e. Mostrar los libros que inicien con la letra E
Para ste ejercicio utilizaremos LIKE que tiene la capacidad de buscar coincidencias
parecidas en base a algunos parmetros, adicionalmente usaremos el comodn % que
quiere decir cualquier cosa (ya sea nmero, cadena smbolo, espacio en blanco, etc.).
SELECT titulo,cantidadPaginas
FROM tblLibro
WHERE titulo LIKE 'E%'
ORDER BY cantidadPaginas

Recordemos que las cadenas en T-SQL se deben ubicar entre comillas simples.

f. Mostrar los libros que inicien con la letra E y tienen ms de 100 hojas
SELECT titulo,cantidadPaginas
FROM tblLibro
WHERE titulo LIKE 'E%' AND cantidadPaginas >100
ORDER BY cantidadPaginas

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 64
Como podemos apreciar, tambin podemos utilizar AND y OR (similar a Visual Basic
.Net) en condiciones indicadas en WHERE

g. Mostrar los libros que no tienen resumen.
SELECT *
FROM tblLibro
WHERE resumen IS NULL
ORDER BY titulo

NULL indica vaco, y si queremos hacer referencia al contenido NULL debemos utilizar IS y
no el signo =.
h. Mostrar los libros cuya cantidad de hojas se encuentre en el rango comprendido
entre 10 y 100.
Este ejercicio se puede solucionar de 2 maneras distintas:
Primera forma:
SELECT *
FROM tblLibro
WHERE cantidadPaginas >=10 AND cantidadPaginas <=100
ORDER BY titulo
Segunda forma:
Utilizando BETWEEN que en espaol quiere decir entre.
SELECT *
FROM tblLibro
WHERE cantidadPaginas BETWEEN 10 AND 100
ORDER BY titulo

Como podemos apreciar, una consulta se puede resolver de varias maneras, pero siempre
debemos de tratar de usar aquella forma que sea la ms eficiente.
Abordaremos las sentencias de tipo DDL en la siguiente sesin, mientras que las
sentencias INSERT, DELETE y UPDATE las abordaremos ms adelante.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 65



Creacin de
objetos de base de
datos con Transact-
SQL



Al finalizar la presente sesin, el participante estar en la capacidad de:
Aplicar tcnicas alternativas de creacin de objetos de base de datos.
Identificar las ventajas y desventajas de la creacin de objetos mediante interfaz grfica y
cdigo puro.
Temas:
Creacin de tablas
Modificar la estructura de una tabla
Ejercicio


SESIN
10
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 66
Creacin de tablas
Ahora vamos a aplicar las sentencias DML para crear una la base de datos biblioteca con la
tabla tblLibro utilizados en la sesin anterior. Veamos los detalles:

Figura N 65
Si ya cuenta con una base de datos con el mismo nombre, primero debe eliminarla para
obtener el resultado correcto.

Las principales sentencias DML son:
CREATE Se usa para crear objetos, como bases de datos, tablas, usuarios,
procedimientos almacenados, etc.
ALTER Modifica la estructura de un objeto de base de datos.
DROP Elimina un objeto de la base de datos.
Tabla N 7
Vamos a utilizar CREATE para crear la base de datos Biblioteca, iniciamos haciendo click en el
botn New Query ubicado en la barra de herramientas y escribimos la siguiente lnea:
CREATE DATABASE BIBLIOTECA
Luego de presionar F5, notaremos que el Object Explorer muestra una base de datos con el
nombre biblioteca.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 67

Figura N 66
Si no se mostrara la base de datos debemos hacer un click derecho en la carpeta
Databases y luego seleccionar la opcin Refresh. De esta manera actualizamos el
contenido de la carpeta.

Ahora procederemos a crear la tabla libro, para ello vamos a escribir el siguiente script:
USE BIBLIOTECA
CREATE TABLE tblLibro
(
codigo VARCHAR(10) PRIMARY KEY,
titulo VARCHAR(250) NOT NULL,
autor VARCHAR(250) NOT NULL,
cantidadPaginas SMALLINT NOT NULL,
fechaDePublicacion DATE NOT NULL,
resumen VARCHAR(500) NULL,
editorial VARCHAR(20) NOT NULL,
fechaDeInscripcion DATETIME NOT NULL
)
Use se utiliza para indicar la base de datos con la que se desea trabajar, en este caso se
supone que vamos a crear la tabla tblLibro dentro de la base de datos Biblioteca, es por
eso que agregamos USE Biblioteca antes de iniciar con la creacin de la misma.
Ejecutamos el script con F5 y luego visualizamos la carpeta tables dentro de la base de datos
biblioteca que creamos.
Debemos entender que la mayora de acciones que podemos realizar va interfaz grfica,
tambin lo podemos desarrollar utilizando T-SQL. La ventaja de tener el script de creacin de la
base de datos es que es un archivo portable con un tamao bastante pequeo.
Ahora vamos a unificar en un solo script la creacin de base de datos y la creacin de la tabla
respectiva, lo nico que vamos a cambiar es el nombre de la base de datos de Biblioteca a
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 68
Biblioteca2, esto con el propsito de que el script no cause errores, ya que no pueden existir
2 bases de datos con el mismo nombre.
Abrimos una nueva ventana de consulta y escribimos lo siguiente:
CREATE DATABASE BIBLIOTECA2
GO
USE BIBLIOTECA2
CREATE TABLE tblLibro
(
codigo VARCHAR(10) PRIMARY KEY,
titulo VARCHAR(250) NOT NULL,
autor VARCHAR(250) NOT NULL,
cantidadPaginas SMALLINT NOT NULL,
fechaDePublicacion DATE NOT NULL,
resumen VARCHAR(500) NULL,
editorial VARCHAR(20) NOT NULL,
fechaDeInscripcion DATETIME NOT NULL
)
La nica diferencia con los scripts anteriores que se ha agregado un GO luego de crear la base
de datos, Por qu? Simplemente para ejecutar el script por partes, es decir, primero creamos
la base de datos y luego creamos la tabla correspondiente al libro.

Modificar la estructura de una tabla
Si lo que deseamos es agregar una nueva columna a nuestra tabla utilizando T-SQL, podemos
hacerlo aplicando ALTER. Por ejemplo, si queremos agregar a la tabla tblLibro de la base de
datos Biblioteca2 una nueva columna llamada observaciones con tipo de dato varchar(500) y
que sea opcional, podemos escribir el siguiente script:
ALTER TABLE tblLibro ADD observaciones varchar(500) NULL
Presionamos F5 para ejecutar el script y si luego realizamos un SELECT * FROM tblLibro
notaremos que efectivamente se ha agregado una nueva columna a nuestra tabla.

Figura N 67
Recordemos que es muy importante realizar el modelo lgico de la mejor manera para
as no tener que realizar cambios en el modelo fsico.

Si lo que queremos es modificar el tipo de dato de una columna podemos hacerlo de la
siguiente manera:
ALTER TABLE tblLibro ALTER COLUMN observaciones varchar(50) NULL
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 69
En la lnea anterior, se cambia la longitud de la columna observaciones, de 500 a 50.
Por ltimo, si deseamos eliminar una columna debemos utilizar DROP. La siguiente lnea
elimina la columna observaciones agregada recientemente.
ALTER TABLE tblLibro DROP COLUMN observaciones

Ejercicio
A manera de prctica, incluya dentro de la base de datos biblioteca una tabla con el nombre
tblAsistente con los siguientes atributos:
Columna Tipo de dato Opcional
DNI varchar(8) NO adems es llave principal
nombreCompleto varchar(150) NO
edad tinyint NO
fechaDeNacimiento date NO
sexo char(1) NO
ocupacin varchar(40) NO
observaciones varchar(250) SI
Tabla N 8




Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 70



Consultas (Parte I)






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear adecuadamente una base de datos.
Aplicar buenas prcticas de implementacin de base de datos de acuerdo al escenario
empresarial.
Temas:
Ejercicios resueltos


SESIN
11
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 71
Ejercicios resueltos
Para aplicar lo que hemos aprendido hasta el momento vamos a realizar los siguientes
ejercicios:
Primera parte
Crear una base de datos con el nombre Bodega y luego crear 2 tablas (Categora y Producto)
tal como se indica en el siguiente grfico:

Figura N 68
Debemos considerar que para realizar una relacin entre tablas no es necesario que los
campos por los cuales se quiera aplicar la relacin utilicen el mismo nombre, el nombre
puede variar, pero el tipo de dato tiene que ser el mismo.

Luego de crear las respectivas tablas, vamos a ingresar por lo menos 4 categoras y luego 10
productos como mnimo. Esto con el fin de que las consultas que realicemos nos retornen
datos.
Otra manera de crear la misma base de datos con las mismas tablas es utilizando el siguiente
script:
CREATE DATABASE BODEGA
GO
USE BODEGA
CREATE TABLE tblCategoria
(
nombre VARCHAR(20) PRIMARY KEY,
descripcion VARCHAR(500) NULL
)
GO
CREATE TABLE tblProducto
(
serie VARCHAR(15) PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precioVenta SMALLMONEY NOT NULL,
precioCompra SMALLMONEY NOT NULL,
stockActual TINYINT NOT NULL,
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 72
stockMinimo TINYINT NOT NULL,
descripcion VARCHAR(500) NULL,
observaciones VARCHAR(500) NULL,
categoria VARCHAR(20) NOT NULL
)
GO
ALTER TABLE tblProducto
ADD CONSTRAINT FK_tblCategoria_tblProducto
FOREIGN KEY (categoria) REFERENCES tblCategoria


Segunda parte
Ahora vamos a realizar los siguientes ejercicios de consultas:
a. Mostrar los productos cuyo nombre incluya la palabra chi en su nombre, y su
precio de compra sea mayor a 20.
SELECT *
FROM tblProducto
WHERE nombre LIKE '%chi%' AND precioCompra > 20
b. Mostrar el nmero de serie y el nombre de los 5 productos con el precio de venta
ms elevado.
SELECT TOP 5 serie, nombre
FROM tblProducto
ORDER BY precioVenta DESC
TOP se utiliza para establecer lmites de filas devueltas, en el ejemplo anterior nos
solicitan los 5 productos ms caros, por lo tanto ordenando los productos de
manera descendente por precio, y recuperando los 5 primeros de esa lista,
obtendremos el resultado deseado.
c. Mostrar las categoras que incluyan una descripcin, muestre el resultado ordenado
por nombre
SELECT nombre,descripcion
FROM tblCategoria
WHERE NOT descripcion IS NULL
ORDER BY 1
En ORDER BY no solamente se puede especificar el nombre de los campos que
queremos que participen en el ordenamiento de resultados, sino tambin se puede
incluir nmeros, en este caso si lo que queremos es ordenar por nombre, podemos
indicar 1 que hace referencia a la primera columna especificada en SELECT.
Por otro lado el operador NOT (que tambin funciona en Visual Basic .NET) sirve
para negar una condicin, en este caso la condicin (descripcion IS NULL)
indica que la descripcin es NULA, pero si agregamos un NOT al inicio se niega la
condicin.
d. Mostrar la cantidad de productos cuyo stock actual sea inferior a 20.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 73
En este caso el ejercicio nos solicita una CANTIDAD escalar, lo que debemos
hacer es contar la cantidad de productos cuyo stock actual sea inferior a 20, para
ello utilizaremos COUNT, que viene a ser una funcin de agregado y se utiliza
para contar la cantidad de filas de una determinada columna.
SELECT COUNT(SERIE)
FROM tblProducto
WHERE stockActual <20

Recordemos que COUNT omite las filas con contenido NULL

Notemos que el resultado nuestra la cantidad de fila correctamente, pero no tiene
un ttulo asignado, para establecer un ttulo personalizado simplemente se escribe
el titulo luego del nombre del campo.
SELECT COUNT(SERIE) TotalProductos
FROM tblProducto
WHERE stockActual <20

De esta manera el resultado se muestra con un ttlo de columna personalizado.
e. Mostrar los nombres de los productos, con su respectivo nombre de categora y
descripcin.
Para esta consulta tenemos que seleccionar campos de 2 tablas diferentes, es
decir, de la tabla producto debemos seleccionar nombre (de producto) y categora
(nombre de la categora), y de la tabla categora debemos seleccionar el campo
descripcin. Cuando debemos realizar consultas con mltiples tablas se utiliza
INNER JOIN para enlazar las tablas y ON para especificar el campo enlace entre
las tablas, veamos la solucin:
SELECT
tblProducto.nombre,tblProducto.categoria,tblcategoria.descrip
cion
FROM tblProducto INNER JOIN tblCategoria
ON tblproducto.categoria = tblCategoria.nombre
ORDER BY tblProducto.nombre

Como podemos apreciar, en la seccin de FROM utilizamos INNER JOIN para
indicar que vamos a utilizar ms de una tabla para la consulta, luego debemos
especificar a travs de ON cual es el campo de cada tabla por el cual deseamos
realizar la comunicacin, generalmente se usa los campos involucrados en la
relacin (para este caso nombre de tblCategoria y categora de tblProducto).
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 74
Observemos adicionalmente que SELECT muestra los nombres de las columnas
indicando en forma de prefijo las tablas a las que pertenecen, esto es
recomendable cuando existen campos con el mismo nombre en las tablas que se
quiere comunicar, para el ejemplo el campo nombre se repite tanto en la tabla
tblProducto como en tblCategoria, es por eso que se le asigno
tblproducto.nombre para indicar que queremos obtener el nombre de la tabla
tblproducto. Sin embargo, como es el nico campo que se repite, pudimos haber
omitido el prefijo para la columna categora ya que no se repite en ambas tablas.
SELECT tblProducto.nombre,categoria,tblcategoria.descripcion
FROM tblProducto INNER JOIN tblCategoria
ON tblproducto.categoria = tblCategoria.nombre
ORDER BY tblProducto.nombre

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 75



Ejercicios






Al finalizar la presente sesin, el participante estar en la capacidad de:
Elaborar consultas para obtener informacin en base a ciertos parmetros.
Temas:
Ejercicios propuestos


SESIN
12
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 76
Ejercicios propuestos
Primera parte
Escriba un script utilizando T-SQL para crear una base de datos con el nombre
ControlAsistencia con las siguientes tablas:

Figura N 69
Cree la base de datos por medio de interfaz grfica y a la vez genere un script que realice el
mismo trabajo.

Segunda parte
Elabore las siguientes consultas:
Mostrar los nombres, apellidos y DNI de los docentes cuyo horario culmine antes del
medioda.
Mostrar los nombres y apellidos (en una sola columna) de los docentes que trabajan el da
martes.
Mostrar el promedio de edades de los docentes solteros.
Mostrar los nombres, apellidos y DNI de los docentes varones y cuyo deporte favorito sea el
vley.
Mostrar los horarios con su respectiva descripcin iniciando desde aquel que culmina ms
tarde.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 77
Mostrar la cantidad de nmeros celulares que inician con 954 o 964.
Mostrar los nombres y apellidos de los docentes casados y que laboren hasta ms de las 10
de la noche.
Mostrar los nombres, apellidos, DNI y fecha de nacimiento de los docentes menores de 25
aos y que sean casados.
Mostrar los nombres, apellidos, fecha de nacimiento y edad de los docentes que sean
menores de 30 aos y laboren los das viernes y sbado.
Mostrar los docentes que no tienen telfono mvil y que su nmero de telfono fijo inicie
con 2.
Mostrar el porcentaje de docentes varones y damas.
Mostrar los nombres, apellidos y da de nacimiento de aquellos docentes que cumplan aos
en el mes actual.
Mostrar los nombres y apellidos de los docentes que sean hermanos, el resultado debe
listarse ordenado por apellido paterno y materno.






Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 78



Consultas (Parte II)






Al finalizar la presente sesin, el participante estar en la capacidad de:
Elaborar consultas que muestren informacin resumida.
Aplicar subconsultas para simplificar consultas complejas.
Temas:
Clusula GROUP BY
Ejercicios resueltos
Subconsultas


SESIN
13
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 79
Clusula GROUP BY
Se utiliza para agrupar filas y mostrar informacin resumida de acuerdo a funciones de
agregado que podemos incluir en la lista de columnas presentadas en SELECT.
Debemos comprender que GROUP BY generalmente va acompaado de una funcin de
agregado como COUNT, SUM, AVG, MAX, MIN..

Vamos a crear una base de datos con el nombre Ventas y vamos a crear una tabla con el
nombre tblProducto donde agregaremos los siguientes atributos:
Columna Tipo de dato Opcional
codigo varchar(10) Llave principal
nombre varchar(100) NO
precio smallmoney NO
stock tinyint NO
Descripcin varchar(250) SI
categora tinyint NO
Tabla N 9
Adicionalmente vamos a agregar una tabla con el nombre tblCategoria con los siguientes
atributos:
Columna Tipo de dato Opcional
codigo tinyint Llave principal
nombre varchar(150) NO
Tabla N 9
Esta vez vamos a hacer que el cdigo de la categora se genere de manera automtica
conforme vamos ingresando registros a dicha tabla, en trminos tcnicos, vamos a hacer que
cdigo sea un campo identificado.
Para hacer el campo identificado vamos a seleccionar el campo y en las propiedades del mismo
vamos a ubicar la propiedad Identity Specification y cambiaremos su valor a Yes, en la
parte inferior debemos especificar el valor inicial (Identity Seed) y el incremento (Identity
Increment), estableceremos los valores 100 y 1 respectivamente que indica que el valor inicial
para el cdigo de la primera categora ser 100 y el siguiente 101, luego 102 y as
sucesivamente.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 80

Figura N 70
Luego debemos relacionar ambas tablas tal y como muestra la siguiente figura:

Figura N 71
Anteriormente creamos la base de datos y las tablas utilizando la interfaz grfica, si queremos
hacer el mismo procedimiento con un script con cdigo T-SQL podemos escribir lo siguiente:
CREATE DATABASE Ventas
GO
USE VENTAS
CREATE TABLE tblProducto
(
codigo VARCHAR(10) PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio SMALLMONEY NOT NULL,
stock TINYINT NOT NULL,
descripcion VARCHAR(250) NULL,
categoria TINYINT NOT NULL
)
GO


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 81
CREATE TABLE tblCategoria
(
codigo TINYINT PRIMARY KEY IDENTITY(100,1),
nombre VARCHAR(150) NOT NULL
)
GO
ALTER TABLE tblProducto
ADD CONSTRAINT FK_tblCategoria_tblProducto
FOREIGN KEY (categoria) REFERENCES tblCategoria

Bien, ahora ingresaremos datos en la tabla tblCategoria, recordemos que el cdigo es
identificado, es decir que se genera automticamente, lo que indica que nicamente
debemos ingresar el nombre de la categora.

Figura N 72
El siguiente paso es ingresar algunos productos, tratemos de que sean productos de diversas
categoras.

Figura N 73
Listo, ahora tenemos datos de prueba disponibles para realizar algunas consultas resumen.

Ejercicios resueltos
A continuacin se muestran algunos ejercicios resueltos utilizando GROUP BY.
Mostrar la cantidad de productos que existen por categora.
Para resolver esta consulta primero mostraremos todas las categoras con sus respectivos
nombres de productos.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 82
SELECT tblCategoria.nombre,tblProducto.nombre
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
ORDER BY tblCategoria.nombre
Observemos los resultados, la categora con el nombre Gaseosas tiene 2 productos, la
categora Lcteos tiene 3 productos y la categora Embutidos solamente 1 producto.

Figura N 74
Para conseguir ese resultado tenemos que agrupar categoras y contar productos,
entonces utilizaremos GROUP BY en combinacin con COUNT.
SELECT tblCategoria.nombre,COUNT(tblProducto.nombre)
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
GROUP BY tblCategoria.nombre
ORDER BY tblCategoria.nombre


Figura N 75
Adicionalmente, podemos asignar un nombre adecuado a la columna que muestra las
cantidades por categora.
SELECT tblCategoria.nombre,COUNT(tblProducto.nombre) Total
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
GROUP BY tblCategoria.nombre
ORDER BY tblCategoria.nombre
El resultado final es el siguiente:

Figura N 76
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 83
Mostrar el precio ms elevado por categora.
ste ejercicio es similar al anterior, con la diferencia de que en vez de utilizar un conteo,
vamos a utilizar MAX, que determina el valor mayor de un conjunto de valores (lo contrario a
MIN que retorna el menor valor).
SELECT tblCategoria.nombre,MAX(tblProducto.precio) PrecioMayor
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
GROUP BY tblCategoria.nombre
ORDER BY tblCategoria.nombre
Veamos el resultado:

Figura N 77
Mostrar la cantidad de productos que existen por categora, pero nicamente incluir aquellos
que superen las 10 unidades.
Tenemos el mismo enunciado que el primer ejercicio, con la diferencia que esta vez nos
solicitan mostrar nicamente aquellas categoras que superen 2 unidades. Para establecer
condiciones a las funciones de agregado que trabajan con GROUP BY, se utiliza HAVING.
SELECT tblCategoria.nombre,COUNT(tblProducto.precio) Total
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
GROUP BY tblCategoria.nombre
HAVING COUNT(tblProducto.precio)>2
ORDER BY tblCategoria.nombre


Figura N 78
Recordemos que WHERE se usa para expresar condiciones de los campos o columnas
que se ubican luego de SELECT, pero HAVING aplica condiciones a las funciones de
agregado que trabajan con GROUP BY.

Adicionalmente recordemos que HAVING debe ubicarse luego de GROUP BY, algo
similar a lo que sucede con WHERE y SELECT.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 84
Mostrar los nombres de las categoras incluyen el precio promedio de los productos que
contiene, as como tambin la suma de todos ellos.
Cuando utilizamos GROUP BY podemos incluir ms de una funcin de agregado, en el
enunciado del ejercicio nos solicitan el promedio (calculado con AVG) y la suma (calculado
con SUM).
SELECT tblCategoria.nombre,AVG(tblProducto.precio)
PrecioPromedio,SUM(tblProducto.precio) SumaTotal
FROM tblCategoria INNER JOIN tblproducto
ON tblCategoria.codigo = tblProducto.categoria
GROUP BY tblCategoria.nombre
ORDER BY tblCategoria.nombre


Figura N 79

Subconsultas
Una subconsulta es una consulta dentro de otra consulta. Se pueden utilizar para simplificar
consultas complejas y mejorar la lectura del cdigo T-SQL. Veamos un ejemplo:
Mostrar los productos cuyo precio supere el precio promedio general de todos los
productos.
En este caso podemos utilizar AVG para calcular el precio promedio de todos los productos.
SELECT AVG(precio) FROM tblProducto


Figura N 80
Si queremos mostrar los productos que superen el precio mostrado anteriormente,
simplemente encerramos la consulta anterior entre parntesis.
SELECT nombre,precio,stock
FROM tblProducto
WHERE precio > (SELECT AVG(precio) FROM tblProducto )
ORDER BY nombre
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 85

Figura N 81



Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 86



Vistas






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear vistas para agrupar informacin o resultados parciales.
Identificar las ventajas del uso de vistas.
Temas:
Vistas
Ejercicios resueltos


SESIN
14
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 87
Vistas
Cuando realizamos consultas a diario a una base de datos, es comn que reutilicemos algn
cdigo T-SQL que hemos elaborado anteriormente. Una solucin para no escribir el cdigo
nuevamente sera guardando el script y si se desea utilizar luego simplemente abrir el archivo y
ejecutarlo nuevamente. Sin embargo, existe una manera ms eficiente de realizar dicha tarea,
la respuesta es utilizando vistas, estas nos permiten guardar cdigo T-SQL que podemos
reutilizar ms adelante, lo interesante de esto es que una vista se comporta como tabla, lo
que quiere decir que se le puede realizar consultas a una vista utilizando SELECT, FROM,
WHERE, TOP, funciones de agregado, etc. De esta manera podemos reducir la complejidad de
una consulta que requiera de varias tablas.
Para crear una vista con cdigo, podemos utilizar CREATE VIEW. Vamos a trabajar con la base
de datos Ventas creada en la sesin anterior, y vamos a escribir el siguiente cdigo T-SQL
sobre la base de datos mencionada.
CREATE VIEW vw_Lista_Productos
AS
SELECT codigo,nombre,precio,stock,descripcion,categoria
FROM tblproducto
WHERE stock >10
La vista almacena todos los productos cuyo stock supere las 10 unidades, una vez que
ejecutamos el cdigo anterior, se mostrar el siguiente mensaje:

Figura N 82
Vamos a verificar si se cre correctamente la vista, para ello expandimos la carpeta Views de
nuestra base de datos.

Figura N 83
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 88
Crearemos una nueva consulta donde usaremos SELECT aplicado a una vista, escribimos las
siguientes lneas y las ejecutamos.
SELECT *
FROM vw_Lista_Productos
ORDER BY nombre
Ahora observemos el resultado:

Figura N 84
Como podemos apreciar, una vista tiene la caracterstica de comportarse como tabla, incluso se
pueden crear vistas basadas en otras vistas.

Otra alternativa para crear vistas
Ahora vamos a crear vistas utilizando una herramienta grfica denominada Query Builder, el
cual nos permitir de una manera sencilla crear vistas simplemente haciendo clicks. Para ello
hacemos click derecho en la carpeta Views ubicada en nuestra base de datos, luego
seleccionamos la opcin New View.

Figura N 85
Se mostrar el Query Builder que nos brindar una manera diferente de crear vistas, lo
primero que haremos es agregar tablas para nuestra vista.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 89

Figura N 86
Seleccionamos ambas tablas y hacemos click en el botn Add

Figura N 87
Como podemos apreciar, automticamente Microsoft SQL Server 2012 detecta que ambas
tablas estn relacionadas. El siguiente paso es seleccionar los campos que deseamos incluir en
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 90
nuestra consulta, para ello nos ubicamos en el segundo panel y empezamos a seleccionar las
columnas que deseamos, en este cas el nombre del producto, nombre de la categora, precio y
stock.

Figura N 88
Vamos a especificar la condicin que filtre los productos con un stock mayor a 10 unidades y un
criterio de ordenamiento ascendente en el mismo campo.

Figura N 89
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 91
Veamos adicionalmente que mientras vamos modificando el segundo panel, automticamente
se actualiza la consulta mostrada en el tercer panel.

Figura N 90
Para obtener una vista previa presionamos el botn con signo de admiracin ubicado en la
barra de herramientas ubicada parte superior del programa.

Figura N 91
Inmediatamente despus se mostrar los resultados parciales de la vista.

Figura N 92
Finalmente grabamos la vista a travs del botn guardar de la barra de herramientas, y le
asignamos un nombre.

Figura N 93
Listo, ahora ya tenemos la vista creada de manera grfica, para poder verificarlo desplegamos
la carpeta Views de nuestra base de datos (en caso de que no se visualice, debemos hacer
una actualizacin de la carpeta).
Podemos crear vistas utilizando cdigo T-SQL o tambin por medio del Query Builder, en
ambos casos el resultado es el mismo.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 92



Procedimientos
Almacenados





Al finalizar la presente sesin, el participante estar en la capacidad de:
Implementar procedimientos almacenados para empaquetar cdigo T-SQL de manera
eficiente.
Comprender las ventajas de utilizar procedimientos almacenados a nivel de base de datos
e identificar su relacin con los sistemas de informacin.
Temas:
Procedimientos almacenados
Parmetros
Procedimientos almacenados y vistas


SESIN
12
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 93
Procedimientos almacenados
Un procedimiento almacenado nos brinda la posibilidad de empaquetar cdigo T-SQL para
ser reutilizado posteriormente, es muy similar a los procedimientos que abordamos en el primer
paquete del presente mdulo Fundamentos de Programacin.
La gran ventaja de utilizar procedimientos almacenados es que se pre compilan en servidor,
de esta manera, a partir de la segunda vez que son invocados su funcionamiento es ms
veloz. Es por ello que cuando se desarrolla software generalmente se utilizan
procedimientos almacenados para acceder a la base de datos.
Vamos a crear un procedimiento almacenado que permita mostrar aquellos productos cuyo
stock sea menor a 10 unidades, para ello vamos a escribir las siguientes lneas de cdigo T-
SQL:
CREATE PROCEDURE usp_Listar_Productos
AS
SELECT codigo,nombre,precio,stock,descripcion,categoria
FROM tblproducto
WHERE stock<10
ORDER BY stock DESC
Presionamos F5 y el procedimiento almacenado estar creado, podemos verificarlo desplegando
la carpeta Stored Procedures ubicada en la carpeta Programmability de nuestra base de
datos Ventas.

Figura N 94
Para llamar al procedimiento almacenado que acabamos de crear, simplemente utilizamos su
nombre directamente. Abrimos una nueva ventana de consulta y escribimos lo siguiente:
usp_Listar_Productos
Ejecutamos el cdigo e inmediatamente el procedimiento almacenado nos muestra los
productos cuyo stock sea menor a 10 unidades.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 94

Figura N 95
Generalmente a los procedimientos almacenados que crea el usuario se les otorga un
prefijo con las letras usp que proviene de User Stored Procedure

Parmetros
En muchas ocasiones un procedimiento almacenado requiere datos para cumplir su objetivo,
estos datos reciben el nombre de parmetros. Los parmetros se especifican luego de indicar
el nombre del procedimiento almacenado, veamos algunos ejemplos:
Procedimiento almacenado de insercin de datos
Vamos a crear un procedimiento almacenado que permite insertar datos en tblProducto, para
ello utilizaremos INSERT INTO el cual permite insertar datos en una tabla, abrimos una nueva
ventana de consulta y escribimos las siguientes lneas de cdigo:
CREATE PROCEDURE usp_Insertar_Producto
@codigo VARCHAR(10),@nombre VARCHAR(100),@precio SMALLMONEY,@stock TINYINT,
@descripcion VARCHAR(250),@categoria TINYINT
AS
INSERT INTO tblProducto (codigo,nombre,precio,stock,descripcion,categoria)
VALUES (@codigo ,@nombre ,@precio ,@stock ,@descripcion ,@categoria )
Ejecutamos el cdigo anterior y ya tenemos creado el procedimiento almacenado para insertar
en tblProducto. Debemos comprender que luego de escribir INSERT INTO se especifica el
nombre de la tabla y luego entre parntesis se debe indicar los campos en donde queremos
insertar. A travs de VALUES especificamos los valores que vamos a insertar a cada campo
indicado luego del nombre de la tabla.
Recordemos que se debe respetar el orden entre los campos y los parmetros que se
especifican en INSERT INTO, observemos la siguiente imagen que pertenece al cdigo del
procedimiento almacenado creado anteriormente:

Figura N 96
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 95
Aunque tambin pudimos haberlo realizado de la siguiente manera:

Figura N 97
En conclusin, no importa el orden de los campos de la tabla, sino importa el orden que se
indica luego de especificar el nombre de la tabla.
Para probar nuestro procedimiento almacenado vamos a abrir una nueva ventana de consulta e
invocamos a usp_Insertar_Producto seguido de los parmetros que necesita, los parmetros
que son de tipo numrico se incluyen normalmente, mientras que los parmetros de tipo
cadena se deben indicar entre comillas simples.
usp_Insertar_Producto 'PROD07','Pepsi Personal',1.20,17,'Pepsi personal',100
Ejecutamos la lnea de cdigo anterior y se nos muestra el siguiente mensaje:

Figura N 98
El mensaje indica que una fila fue afectada, en este caso indica que se insert una nueva fila.
Para verificar el resultado podemos realizar una consulta a la tabla tblProducto:
SELECT * FROM tblProducto
E inmediatamente visualizaremos todos los productos registrados.

Figura N 99
Procedimiento almacenado para eliminar registros
Ahora vamos a crear un procedimiento almacenado que permita eliminar un producto.
Generalmente cuando se elimina datos se realiza por medio de la llave primaria, ya que es el
campo que identifica a un registro especfico.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 96
Vamos a escribir las siguientes lneas de cdigo:
CREATE PROCEDURE usp_Eliminar_Producto
@codigoProducto VARCHAR(10)
AS
DELETE FROM tblproducto
WHERE codigo=@codigoProducto
Ejecutamos el cdigo anterior, y luego en una nueva ventana de consulta invocamos a nuestro
procedimiento almacenado con el cdigo del producto que queremos eliminar.
usp_Eliminar_Producto 'PROD07'
Ahora hacemos una consulta a la tabla tblProducto y observemos el resultado:

Figura N 100

Toda variable dentro de T-SQL se crea utilizando @ al inicio de la misma.

Procedimientos almacenados y vistas
Si deseamos mostrar una lista de productos registrados en tblProducto, podemos usar una
vista o un procedimiento almacenado. Sin embargo, tenemos que recordar que una vista tiene
la capacidad de comportarse como tabla mientras que un procedimiento almacenado no. Por
otro lado un procedimiento almacenado puede recibir parmetros y una vista no.
En conclusin, para utilizar una vista o un procedimiento almacenado debemos analizar muy
bien el escenario que estamos abordando para aplicar la solucin ms eficiente.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 97



Funciones






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear funciones personalizadas para agrupar tareas comunes.
Complementar procedimientos almacenados con funciones.
Temas:
Funciones personalizadas


SESIN
16
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 98
Funciones personalizadas
Una funcin permite agrupar un fragmento de cdigo T-SQL, es ese sentido es similar a un
procedimiento almacenado, la diferencia es que una funcin retorna un valor o varios
valores.
En este tema abordaremos principalmente 3 tipos de funciones:
o Funciones escalares
Una funcin escalar retorna un nico valor que puede ser de tipo varchar, char, int,
smallmoney, etc.
Vamos a crear un funcin que convierta la primera letra de una cadena en mayscula
y el resto de letras en minscula.
CREATE FUNCTION fn_Convertir_PrimerLetraMayuscula
(
@Cadena VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @Resultado VARCHAR(100)
SET @Resultado = UPPER(SUBSTRING(@Cadena,1,1)) +
LOWER(SUBSTRING(@Cadena,2,LEN(@Cadena)-1))
RETURN @Resultado
END
Ahora abrimos una nueva consulta y llamamos a la funcin creada, consideremos que
los parmetros de una funcin se deben incluir entre parntesis.
PRINT dbo.fn_Convertir_PrimerLetraMayuscula('ruby')



Figura N 101

Como podemos apreciar la funcin convierte el primer carcter de una cadena en
mayscula, incluso podramos aplicarlo en un SELECT, veamos un ejempl:
SELECt codigo,dbo.fn_Convertir_PrimerLetraMayuscula(nombre),precio
FROM tblProducto

El resultado sera el siguiente:
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 99

Figura N 102
Debemos tener en cuenta que dentro del contenido de la funcin podemos utilizer
SELECT, FROM, WHERE, etc, si fuera necesario.
o Funciones en lnea
Este tipo de funcin devuelve un conjunto de registros de acuerdo a un SELECT.
Vamos a crear una funcin que muestre los productos cuyo stock supere una cantidad
determinada.
CREATE FUNCTION fn_Productos_ConStock
(
@stockBase TINYINT
)
RETURNS TABLE
AS
RETURN
(
SELECT codigo,nombre,precio,stock,descripcion,categoria
FROm tblProducto
WHERE stock>@stockBase
)
Ahora invocaremos a la funcin con un SELECT:
SELECT * FROM fn_Productos_ConStock(10)


Figura N 103

Incluso podemos utilizar la funcin anterior en una consulta que involucra INNER JOIN.


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 100
o Funciones en lnea con mltiples sentencias
Muy similar a la anterior con la diferencia de que se puede incluir mltiples sentencias
de tipo SELECT.


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 101



Ejercicios






Al finalizar la presente sesin, el participante estar en la capacidad de:
Aplicar correctamente cdigo T-SQL para obtener informacin de una base de datos.
Diferenciar el uso de vistas y procedimientos almacenados.
Temas:
Ejercicios propuestos


SESIN
17
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 102
Ejercicios propuestos
Primera parte
Implemente la siguiente base de datos utilizando nicamente un script con cdigo T-SQL.

Figura N 104
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 103
Segunda parte
Desarrolle los siguientes ejercicios teniendo como referencia la base de datos creada
anteriormente.
Mostrar el registro de asistencia de una persona en base a un rango de fechas
determinado.
Mostrar las 5 personas que ms faltaron en los ltimos 5 meses.
Mostrar los horarios de ingreso y salida con su respectiva cantidad de trabajadores.
Mostrar las personas que cumplan aos en el mes actual.
Mostrar las personas que laboran a partir de las 7 de la noche los das viernes y sbado.
Mostrar el registro de asistencia de un determinado da.
Mostrar todos los registros de asistencia de un determinado mes que incluyan alguna
observacin.
Mostrar todas las personas que incluyan una determinada palabra en sus apellidos paterno
o materno.
Mostrar el registro de asistencia por cargo.
Mostrar las 10 personas ms puntuales del ltimo ao.


Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 104



Triggers






Al finalizar la presente sesin, el participante estar en la capacidad de:
Implementar triggers a nivel de tablas.
Reconocer las diversas ventajas de implementar triggers.
Temas:
Triggers


SESIN
18
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 105
Triggers
Reciben el nombre alternativo de desencadenadores, ya que su objetivo es realizar una accin
cuando se produce un suceso, que generalmente es insertar, eliminar o actualizar registros en
una tabla.
Los triggers son muy similares a los eventos de controles que utilizamos en el primer
paquete Fundamentos de programacin, con la diferencia de que en vez de aplicarlos a
controles, los aplicamos a tablas.

Por ejemplo, podemos utilizar un trigger para algo tan sencillo como mostrar un mensaje luego
de insertar un registro en tblProducto. Abrimos una nueva ventana de consulta y escribimos
el siguiente cdigo:
CREATE TRIGGER tg_Producto_Insertado
ON tblProducto
AFTER INSERT
AS
PRINT 'Ha insertado un nuevo producto'

Para observar el funcionamiento del trigger, vamos a insertar un nuevo registro utilizando
INSERT INTO:
INSERT INTO tblProducto
VALUES ('PROD07','Inka Cola Personal',1.50,27,'Tamao personal',100)

Ejecutamos el cdigo e inmediatamente el panel de mensajes muestra 1 row(s) affected
acompaado del mensaje que incluimos en el trigger.

Figura N 105
Ahora vamos a crear un procedimiento almacenado que permita registrar una categora.
CREATE PROC usp_Insertar_Categoria
@nombre VARCHAR(150)
AS
INSERT INTO tblCategoria (nombre)
VALUES (@nombre)
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 106
Notemos que estamos utilizando PROC en vez de PROCEDURE, en realidad es slo una simple
abreviatura. Adicionalmente debemos recordar que nicamente indicamos un parmetro que
hace referencia al nombre de la categora, ya que el cdigo de la misma es identificado y eso
hace que se genere automticamente.
Ahora vamos a crear un trigger que permite ingresar como mximo 6 registros en
tblCategoria. Para ello debemos crear una variable que almacene la cantidad de registros que
existen en la tabla y luego aplicar un condicional que evale la cantidad de registros ingresados.
CREATE TRIGGER tg_ValidarCantidad_Categoria
ON tblCategoria
AFTER INSERT
AS
DECLARE @CantidadRegistros TINYINT
SET @CantidadRegistros =(SELECT COUNT(codigo) FROM tblCategoria)

IF @CantidadRegistros = 7
BEGIN
PRINT 'No se puede insertar ms de 6 categoras.'
ROLLBACK
END

Rollback sirve para abortar la consulta, es algo similar a un deshacer en Windows.
Para probar el trigger vamos a llamar a usp_Insertar_Categoria varias veces, pero antes de
ello vamos a visualizar la cantidad de registros que tenemos en tblCategoria.

Figura N 106
Abrimos una nueva consulta e insertamos una nueva categora con el procedimiento
almacenado creado anteriormente.

Figura N 107
Intentamos nuevamente registrar otra categora.
usp_insertar_categoria 'Belleza'

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 107
El resultado es correcto, sigamos intentando.
usp_insertar_categoria 'Limpieza'
El resultado es correcto, sigamos intentando.
usp_insertar_categoria 'Hogar'
Hasta ahora todos los resultados son correctos, si verificamos la cantidad de registros que tiene
la tabla categora, notaremos que ya alcanzamos 6 en total. Ahora trataremos de ingresar otro
registro.
usp_insertar_categoria 'Cocina'
Inmediatamente se nos muestra un mensaje de error.

Figura N 108





















Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 108



Tablas Temporales






Al finalizar la presente sesin, el participante estar en la capacidad de:
Conocer las diversas formas de almacenar datos temporales.
Utilizar correctamente una tabla temporal o una variable tipo tabla de acuerdo al escenario
propuesto.
Temas:
Datos temporales
Tablas temporales
Variables tipo tabla


SESIN
19
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 109
Datos temporales
En ocasiones es necesario almacenar datos de manera temporal, ya sea por una cuestin de
facilidad en la consulta (por ejemplo cuando se trabaja con una consulta que involucra muchas
tablas) o porque necesitamos repositorios temporales de informacin. Para estos escenarios,
Microsoft SQL Server 2012 provee 2 tipos de objetos: Tablas temporales y Variables tipo
tabla, veamos la descripcin de cada uno:
Tablas temporales
Una tabla temporal posee una estructura y modo de funcionamiento similar a una tabla comn
de una base de datos, una de las diferencias es que las tablas temporales se crean en la base
de datos tempdb (una de las bases de datos del sistema).

Figura N 109

Existen 2 tipos de tablas temporales:
Tablas temporales locales
Se crean ubicando el smbolo # antes del nombre de la tabla. Debemos recordar que este tipo
de tablas nicamente estn disponibles para la conexin actual, lo cual indicar que 2 usuarios
conectados al servidor de base de datos podran crear cada uno una tabla temporal con el
mismo nombre y no existira conflicto ya que se estn usando 2 conexiones distintas,
adicionalmente debemos saber que las tablas temporales se eliminan automticamente
cuando el usuario cierra su conexin.
Si queremos eliminar la tabla manualmente, podemos utilizar DROP.

Abrimos una nueva consulta y vamos a crear una tabla temporal para almacenar los datos
principales de un participante:
CREATE TABLE #tblParticipante
(
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 110
DNI CHAR(8) PRIMARY KEY,
NombreCompleto VARCHAR(150) NOT NULL,
Edad TINYINT NOT NULL
)
Ejecutamos el script y ya tenemos creada nuestra primera tabla temporal, podemos visualizarlo
en la carpeta TemporaryTables de la base de datos tempdb.

Figura N 110
Incluso podemos realizar inserciones en la tabla temporal usando INSERT INTO:
INSERT INTO #tblParticipante
VALUES ('78887760','Amy Lee',23)
INSERT INTO #tblParticipante
VALUES ('88999987','Sabrina Castro',19)
INSERT INTO #tblParticipante
VALUES ('88990091','Darlene Casas',22)
Luego hacemos la consulta respectiva.
SELECT * FROM #tblParticipante
Y obtendremos los siguientes resultados:

Figura N 111
Otra manera de crear tablas temporales es directamente en una instruccin SELECT, por
ejemplo, si queremos almacenar los productos cuyo stock supere las 10 unidades de la base de
datos ventas en una tabla temporal podemos realizar lo siguiente:
SELECT codigo,nombre,precio,stock INTO #tblProductos
FROM tblproducto
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 111
Inmediatamente se crea otra tabla temporal en la base de datos tempdb.

Figura N 112
Si queremos eliminar la tabla temporal tblProductos simplemente escribimos lo siguiente:
DROP TABLE #tblProductos
Si actualizamos la carpeta Temporary Tables notaremos que nuestra tabla ha sido eliminada,
recordemos que si nos desconectamos totalmente de SQL Server y luego volvemos a ingresar,
nuestras tablas temporales se eliminarn automticamente. Para desconectarnos podemos
utilizar el botn Disconnect ubicado en la parte superior de Object Explorer.

Figura N 113
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 112
Tablas temporales globales
En funcionamiento y estructura son similares a las tablas temporales locales, con la diferencia
de que el alcance de una tabla temporal global podra cubrir a diversos usuarios
conectados. Debemos tener cuidado con este tipo de tablas ya que podran ocasionar
conflictos con tablas del mismo nombre (algo que no sucede con una tabla temporal local).
Para crear tablas temporales globales simplemente utilizamos doble numeral (##) antes del
nombre de la tabla, veamos un ejemplo:
CREATE TABLE ##tblCargos
(
nombre VARCHAR(100) PRIMARY KEY,
descripcion VARCHAR(500) NOT NULL
)

INSERT INTO ##tblCargos
VALUES ('GERENTE GENERAL','MANEJA LA EMPRESA')
INSERT INTO ##tblCargos
VALUES ('ASISTENTE DE GERENCIA','APOYO PARA LA GERENCIA GENERAL')
INSERT INTO ##tblCargos
VALUES ('MANTENIMIENTO','PERSONAL DE SERVICIO')
La tabla ##tblCargos puede ser accedida por cualquier usuario, es decir, tiene un alcance
global. Al igual que las tablas temporales locales se pueden eliminar utilizando DROP TABLE,
pero si el usuario creador de la tabla temporal global se desconecta, automticamente se sta
eliminar.

Variables tipo tabla
Las variables tipo tabla pueden ser utilizados en procedimientos almacenados, funciones o en
un lote de cdigo T-SQL, y nicamente tienen vida durante la ejecucin del procedimiento
almacenado, funcin o lote donde fueron creados. Se recomienda crear variables tipo tabla
como una alternativa a las tablas temporales siempre y cuando la cantidad de datos no sea
muy grande. Su creacin es muy similar a una tabla temporal, con la diferencia de que se utiliza
DECLARE y una arroba antes del nombre de la tabla, veamos un ejemplo:
DECLARE @ListaPrecios TABLE
(
precio SMALLMONEY NOT NULL
)

INSERT INTO @ListaPrecios
SELECT DISTINCT precio
FROM tblProducto
ORDER BY precio
Luego de ejecutar el cdigo anteriormente mostrado, notaremos que la tabla @ListaPrecios
recibi 5 registros.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 113

Figura N 114
Si posteriormente queremos realizar una consulta a @ListaPrecios se nos mostrar el siguiente
mensaje de error:
SELECT * FROM @ListaPrecios


Figura N 115

Esto indicar que la tabla se cre, cumpli su objetivo y luego se elimin automticamente, es
decir, solamente tuvo vida en el bloque de cdigo escrito anteriormente.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 114


Cursores







Al finalizar la presente sesin, el participante estar en la capacidad de:
Elaborar cursores para diversos propsitos.
Conocer las principales ventajas del uso de cursores, as como tambin sus aplicaciones
ms comunes.
Temas:
Visin general
Cursores


SESIN
20
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 115
Visin General
En algunas ocasiones necesitamos realizar acciones sobre los registros de una o ms tablas, por
ejemplo si deseamos ejecutar un procedimiento almacenado o una funcin sobre cada uno de
los empleados cuya edad sea mayor a 25 aos; para dicho propsito podemos utilizar un cursor
que recorra empleado por empleado y aplique el procedimiento o funcin de acuerdo a la
condicin. Otro escenario donde se puede utilizar un cursor es al momento de realizar
migracin de datos, por ejemplo, en ocasiones necesitamos extraer datos con ciertos
parmetros de una tabla para insertarlos en otra, el cursor nos permitira recorrer fila a fila y as
realizar una migracin personalizada.

Cursores
Los cursores nos permiten recorrer cada registro obtenido a partir de una consulta, con cada
uno de ellos podemos realizar diversas acciones segn el escenario que abordemos. A
continuacin se crea un cursor que traslada los nombres de los productos y su respectiva
descripcin a una nueva tabla llamada tblProductosSeleccionados, pero solo de aquellos
que superen las 10 unidades en stock, adicionalmente, los nombres se convertirn a mayscula
y aquellos productos que no posean descripcin se trasladarn con el texto Ninguno.
Los productos registrados son los siguientes:

Figura N 116

Primero crearemos la nueva tabla tblProductosSeleccionados:
CREATE TABLE tblProductosSeleccionados
(
nombre VARCHAR(100) NOT NUlL,
descripcion VARCHAR(250) NULL
)

Ejecutamos el cdigo anterior para crear la nueva tabla.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 116

Figura N 117

Ahora crearemos el cursor que nos permitir trasladar los datos de la tabla principal:
DECLARE @nombreProducto VARCHAR(100)
DECLARE @descripcionProducto VARCHAR(250)

DECLARE misProductos CURSOR FOR
SELECT nombre,descripcion
FROM tblProducto
WHERE stock>10

OPEN misProductos
FETCH misProductos INTO @nombreProducto,@descripcionProducto

WHILE (@@FETCH_STATUS =0)
BEGIN
IF @descripcionProducto IS NULL
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),'Ninguno')
ELSE
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),@descripcionProducto)

FETCH misProductos INTO @nombreProducto,@descripcionProducto
END
CLOSE misProductos
DEALLOCATE misProductos

Una vez ejecutado el cdigo, se mostrar el siguiente mensaje:

Figura N 118

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 117
Ahora realizamos una consulta para verificar los datos:
SELECT * FROM tblProductosSeleccionados


Figura N 119
Al inicio del cursor declaramos 2 variables para almacenar el nombre y descripcin de cada uno
de los registros a recorrer, recordemos que T-SQL permite crear variables de manera similar a
Visual Basic .Net.
DECLARE @nombreProducto VARCHAR(100)
DECLARE @descripcionProducto VARCHAR(250)
La creacin del cursor se hace de una manera muy similar a una variable, con la diferencia de
que necesitamos establecer la consulta necesaria para indicar los datos que alojar el cursor.
DECLARE misProductos CURSOR FOR
SELECT nombre,descripcion
FROM tblProducto
WHERE stock>10
Una vez creado el cursor, debemos abrirlo para iniciar el recorrido.
OPEN misProductos
La siguiente recorre el primer registro del cursor, y lo almacena dentro de ambas variables
creadas al inicio.
FETCH misProductos INTO @nombreProducto,@descripcionProducto
Para seguir recorriendo el cursor hasta el final utilizamos un bucle WHILE.
WHILE (@@FETCH_STATUS =0)
BEGIN
IF @descripcionProducto IS NULL
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),'Ninguno')
ELSE
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),@descripcionProducto)

FETCH misProductos INTO @nombreProducto,@descripcionProducto
END
Mientras recorremos registro a registro preguntaremos si la descripcin es nula, en caso de que
sea verdadero, vamos a insertar la cadena Ninguno, en caso contrario insertamos la
descripcin normalmente.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 118
IF @descripcionProducto IS NULL
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),'Ninguno')
ELSE
INSERT INTO tblProductosSeleccionados
VALUES (UPPER(@nombreProducto),@descripcionProducto)

FETCH misProductos INTO @nombreProducto,@descripcionProducto

Al final del recorrido, cerramos el cursor y liberamos los recursos.
CLOSE misProductos
DEALLOCATE misProductos

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 119



Respaldo de
Informacin






Al finalizar la presente sesin, el participante estar en la capacidad de:
Conocer y diferenciar los principales tipos de copias de seguridad que proporciona
Microsoft SQL Server 2012.
Temas:
Visin general
Copias de seguridad


SESIN
21
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 120
Visin general
La base de datos es un contenedor de informacin, como tal, almacena todos los datos que
maneja y procesa cualquier organizacin. Por este motivo es que se deben de crear copias de
seguridad que nos garanticen un respaldo de informacin en caso de que ocurra algn
desastre, como por ejemplo: Un ataque de virus, problemas de hardware, desastres naturales,
entre otros.
Imaginemos que una empresa pierda completamente su base de datos Qu sucedera?, pues
simplemente la empresa perdera todo control de informacin y se encontrara en serios
problemas. Posiblemente ha odo sobre amigos o conocidos que perdieron sus dispositivos de
almacenamiento USB, muchos de ellos no consideran muy grave la prdida del dispositivo en s,
sino de la informacin que mantienen dentro del dispositivo (que en realidad es lo ms
importante), es por ello que se recomienda realizar copias peridicas de los archivos de los
dispositivos USB a nuestro computador personal. De igual manera debemos realizar copias
peridicas del contenido de una base de datos para evitar prdidas y posibles
problemas.

Copias de seguridad
Una copia de seguridad nos permite crear un archivo de respaldo de informacin de nuestra
base de datos. Microsoft SQL Server 2012 permite generar 3 tipos de copias de seguridad:
Copia completa
Es una copia de seguridad que involucra todos los objetos y registros de una base de datos,
vamos a tomar la base de datos Ventas creada anteriormente para mostrar cmo generar una
copia de este tipo.

Figura N 120

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 121
Lo primero que haremos es hacer click derecho sobre nuestra base de datos Ventas e
inmediatamente seleccionamos Tasks y luego la opcin Back Up.

Figura N 121
Luego se mostrar la siguiente ventana:

Figura N 122
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 122
A travs del botn Add vamos a agregar una ruta para generar la copia de seguridad.

Figura N 123

Figura N 124
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 123
Una vez que obtenemos la Figura N 124, ubicamos una ruta en el disco duro e ingresamos el
nombre de la copia de seguridad.

Figura N 125

Ahora presionamos OK hasta llegar a la primera ventana, y luego Microsoft SQL Server 2012
mostrar un mensaje de confirmacin.

Figura N 126

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 124
Bien, ya hemos generado una copia de seguridad completa, es decir, todos las tablas,
diagramas, registros, procedimientos almacenados, y otros estn guardados en el archivo
generado.
Ahora veremos cul es el proceso a seguir para restaurar una base de datos por medio de una
copia de seguridad completa. Imaginemos que queremos restaurar la base de datos en otro
equipo con Microsoft SQL Server 2012, para ello podemos trasladar la copia de seguridad
generada hace un momento y seguimos los siguientes pasos:
Primero hacemos un click derecho en la carpeta Databases ubicada en el Object Explorer, y
seleccionamos la opcin Restore Database.

Figura N 127
En la siguiente ventana, seleccionamos la opcin Device.

Figura N 128
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 125
Con el botn de los 3 puntos seleccionamos el archivo de copia de seguridad que generamos
anteriormente.

Figura N 129

Presionamos el botn OK hasta llegar a la primera ventana y Microsoft SQL Server 2012
mostrar un mensaje de confirmacin.

Figura N 130
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 126
Finalmente presionamos el botn OK y obtenemos como resultado la base de datos Ventas.

Figura N 131

Figura N 132

Copias de seguridad adicionales
Adems de la copia de seguridad completa, existe la copia de seguridad diferencial y copia de seguridad del registro de
transacciones, para generar alguna de estas copias de seguridad simplemente debemos cambiar la opcin
BackupType en la ventana de generacin de copias de seguridad.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 127

Figura N 133

Una backup diferencial nicamente guarda aquellos cambios que se realizaron desde el ltimo backup full, uno de los
objetivos de la copia de seguridad diferencial es reducir el tiempo de espera que se da al momento de generar una
copia de seguridad completa (en el caso que la base de datos posea un tamao considerable), una estrategia bsica
seria generar backups diferenciales en periodos cortos de tiempo cortos para salvaguardar la informacin de la base de
datos y reducir considerablemente la prdida de datos en caso de algn desastre.
Un backup del transaction log realiza una copia de seguridad del registro de transacciones, que es aquel archivo
con extensin ldf que almacena todos los cambios y operaciones que se realizaron sobre la base de datos.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 128



Usuarios (Parte I)






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear usuarios para aplicar polticas de seguridad comunes.
Conocer la importancia de brindar un marco de seguridad adecuado para una base de
datos.
Temas:
Seguridad de base de datos
Modos de autenticacin
Usuarios


SESIN
22
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 129
Seguridad de base de datos
Definitivamente una base de datos contiene informacin de suma importancia para cualquier
empresa, muy aparte de que se deben establecer polticas de copias de seguridad, tambin se
deben establecer polticas de seguridad a nivel de acceso a la base de datos, es decir,
nicamente las personas autorizadas pueden realizar consultas a la base de datos. Adems
debemos recordar que pueden existir jerarquas entre los usuarios, esto indica que pueden
existir usuarios que puedan tener un total acceso a la base de datos (como el DBA por
ejemplo), pero existen algunos que quizs deban tener permisos limitados (como practicantes o
empleados que recin inician labores) para evitar cualquier fuga de informacin.

Modos de autenticacin
Microsoft SQL Server 2012 presenta 2 modos de autenticacin: Autenticacin Windows y
Autenticacin SQL Server. Podemos observar a ambos al momento de iniciar el programa.

Figura N 134

La autenticacin Windows utiliza un usuario del sistema operativo Windows para
acceder a SQL Server. En un ambiente ideal, Microsoft SQL Server 2012 debe quedar instalado
sobre un sistema operativo de servidor como Windows Server, en este escenario es
recomendable utilizar autenticacin Windows, ya que con eso delegamos la seguridad a un
sistema operativo especializado como Windows Server. Por otro lado, la autenticacin SQL
Server utiliza usuarios creados en SQL server para acceder al programa.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 130
Usuarios
Vamos a crear usuarios para diferenciar con ms claridad los modos de autenticacin vistos
anteriormente. Lo primero que haremos es desplegar la carpeta Security en el Object Explorer
y luego hacemos un click derecho en la carpeta Logins para luego seleccionar la opcin New
Login.

Figura N 135
Inmediatamente Microsoft SQL Server 2012 muestra la siguiente ventana:

Figura N 136
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 131
Primero vamos a crear un usuario basado en Autenticacin Windows, como este tipo de
autenticacin se basa en las cuentas de usuario de Windows, vamos a crear un nuevo usuario
Windows con el nombre Anita.

Figura N 137
Ahora volvemos a la ventana de creacin de usuarios de Microsoft SQL Server 2012 y
presionamos el botn Search para ubicar al usuario Anita.

Figura N 138

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 132
Hacemos click en el botn Aceptar y luego seleccionamos la base de datos Ventas en la
seccin Default Database, esto lo hacemos para que cuando se creen consultas con el
usuario Anita, automticamente se va a direccionar a la base de datos Ventas.

Figura N 139
Ahora vamos a seleccionar la opcin User Mapping

Figura N 140
En esta ventana vamos a otorgar algunos permisos bsicos para Anita en la base de datos
Ventas. Vamos a habilitar la opcin db_datareader que habilita el permiso de lectura sobre
los registros de la base de datos, adicionalmente vamos a marcar la opcin
db_denydatawriter para restringir el permiso de escritura en la base de datos.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 133

Figura N 141
Ahora vamos a crear un usuario en la base de datos Ventas que est vinculado con el login
Anita que acabamos de crear, para ello hacemos un click derecho en la carpeta Users ubicada
en la carpeta Security de la base de datos Ventas y seleccionamos la opcin New User.

Figura N 142
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 134
En la siguiente ventana vamos a seleccionar Windows User para ubicar al usuario de
Windows Anita.

Figura N 143
A travs de la seccin User name ubicamos al usuario Anita.

Figura N 144
Presionamos el botn Aceptar y luego el botn OK.

Figura N 145
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 135
Como podemos apreciar el usuario Anita de Windows ahora pertenece a la base de datos
Ventas.
Cerramos sesin en Windows e ingresamos con el usuario Anita, luego de ello ingresamos a
Microsoft SQL Server 2012 y notaremos que el inicio de sesin fue exitoso.

Figura N 146
Ahora vamos a realizar una consulta de informacin.
SELECT * FROM tblCategoria

Y apreciaremos un resultado parecido al siguiente:


Figura N 147

Ahora intentaremos agregar una nueva categora.
INSERT INTO tblCategoria (nombre)
VALUES ('Bebidas')

Y visualizaremos el siguiente mensaje de error:


Figura N 148

Esto se da porque el permiso de escritura ha sido denegado.

Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 136



Usuarios (Parte II)






Al finalizar la presente sesin, el participante estar en la capacidad de:
Crear usuarios para aplicar polticas de seguridad comunes.
Conocer la importancia de brindar un marco de seguridad adecuado para una base de
datos.
Temas:
Seguridad de base de datos
Modos de autenticacin
Usuarios

SESIN
23
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 137
Ahora vamos a crear un usuario de basado en Autenticacin SQL Server, para ello seguimos
un proceso similar al anterior, solo que esta vez seleccionaremos SQL server authentication y
en el nombre del usuario vamos a escribir July, y en la parte inferior vamos a deshabilitar la
opcin Enforce password policy. Esta opcin activada fuerza a que se ingrese letras
maysculas, letras minsculas, nmeros y smbolos en el password, sin embargo por una
cuestin de facilidad vamos a quitar la marca correspondiente.

Figura N 149

De manera similar a la seccin anterior, podemos establecer permisos adicionales utilizando
User Mapping.


Figura N 150
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 138
Ahora para realizar una prueba con el usuario que acabamos de crear, vamos a desconectar
nuestra sesin en Microsoft SQL Server 2012 y a continuacin intentamos conectar pero esta
vez haciendo uso de SQL Server authenticacion.

Figura N 151

Ingresamos las credenciales:

Figura N 152
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 139
Como podemos apreciar el ingreso result exitoso.

Figura N 152
Recordemos queal igual que con los usuarios Windows, puedo asignar permisos a un usuario
de Microsoft SQL Server 2012 determinado.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 140


Casos







Al finalizar la presente sesin, el participante estar en la capacidad de:
Aplicar los diversos conceptos y tcnicas abordados durante el curso.
Identificar escenarios empresariales y proponer soluciones eficientes.
Temas:
Casos


SESIN
24
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 141
Casos
Resuelva los siguientes casos de la manera ms eficiente:
Caso 1
Una base de datos consta de la siguiente tabla:
tblAlumno
Cdigo Nombres Apellidos
Fecha de
nacimiento
AL01 Anita Casas Lpez 05/05/1992
AL02 Susana Castro Linares 04/08/1985
AL03 Candy Huamn Nazca 12/11/1993

800 alumnos en total

Se solicita migrar los datos a la siguiente tabla:
tblAlumnosClasificados
Cdigo Nombre completo
Fecha Hora
Registro
MesAnioNacimiento
1 Anita Casas Lpez 05-1992
2 Candy Huamn Nazca 11-1993


Notas:
La columna Fecha de registro muestra la fecha y hora en que se insert al alumno en
la base de datos.
Migrar nicamente a los alumnos que nacieron luego del ao 1990.

Caso 2
Resuelva de la manera ms eficiente el siguiente caso:
Ruby es una empresa dedicada al rubro de ventas de libros, desde hace 7 aos guarda
informacin acerca de toda su coleccin de libros en una base de datos que tiene la siguiente
estructura:
Cdigo Ttulo Autor Resumen
Cantidad de
hojas
Editorial Estado Categora
COD01
El
retoo
Julin
Huanay
Historia
de
aventura
70 Megacentro Nuevo Aventura
COD02 El David 80 Lobitos Regular Autoayuda
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 142
camino
del lder
Fishman

800 libros en total

Una observacin que se encontr en la tabla libro es que los ttulos estn escritos de manera
heterognea, es decir, algunos inician con maysculas, otros estn escritos totalmente en
maysculas, otros totalmente en minsculas, etc.
Hace unas semanas, Candy inici sus labores en la empresa Ruby, analiz la base de datos
actual y decidi restructurarla para ofrecer una mejor performance. Su nuevo modelo incluye
las siguientes tablas:
Libro que incluye los atributos cdigo, ttulo, autor, resumen, cantidad de hojas, editorial,
estado (desgastado, defectuoso, regular, bueno y nuevo) y cdigo de la categora a la cual
pertenece.
Cdigo Ttulo Autor Resumen
Cantidad
de hojas
Editorial Estado
Fecha
de
registro
Categora
COD01
El
retoo
Julin
Huanay
Historia
de
aventura
70 Megacentro Nuevo
2013-
02-12
07:34
102
COD02
El
camino
del
lder
David
Fishman
Ninguno 80 Lobitos Regular
2013-
02-12
07:34
100



Categora que incluye los campos cdigo (que inicia en 100 y avanza de dos en dos), nombre
y descripcin.
Cdigo Ttulo
100 Autoayuda
102 Aventura
104 Drama


Se le solicita crear el script de la nueva estructura de base de datos, as como tambin elaborar
el script necesario para trasladar todos los datos la base de datos antigua a la nueva base de
datos.
Notas:
No olvide migrar todos los ttulos en maysculas.
Programa: Programador .NET


Modulo: Implementacin y Administracin de Bases de Datos Pag. 143
En la nueva estructura de tablas propuesta por Candy, todos los libros que no tuvieron
resumen inicialmente, se registra como ninguno (Observar las marcas amarillas de la parte
superior).
La columna Fecha de registro muestra la fecha y hora en que se insert el libro en la
base de datos.