SQL Server

PROCEDIMIENTOS ALMACENADOS

 

Los procedimientos almacenados (PA) son módulos o rutinas que encapsulan código para su reutilización.

Los PA son similares a los procedimientos de otros lenguajes de programación.

– Aceptan parámetros de entrada.

– Devuelven varios valores.

– Contienen instrucciones de programación que realizan operaciones en la base de datos, incluidas las llamadas a otros procedimientos.

– Devuelven un valor de estado a un lote o a un procedimiento que realiza una llamada para indicar si la operación se ha realizado correctamente o se han producido errores.

– Devuelve los motivos de los errores.

Ventajas de usar procedimientos almacenados.

– Se registran en el servidor.

– Pueden incluir atributos de seguridad, se pueden asociar certificados.

– Mejoran la seguridad de la aplicación. Inyección de código SQL.

– Permite una programación Modular.

– Mejora el mantenimiento y acceso a la base de datos de manera uniforme.

– Reduce el tráfico de red.

Tipos de procedimientos almacenados

– Procedimientos almacenados definidos por el usuario.

o Transact-SQL. Un procedimiento almacenado Transact-SQL es una colección guardada de instrucciones Transact-SQL que puede tomar y devolver los parámetros proporcionados por el usuario.

o CLR. Un procedimiento almacenado CLR es una referencia a un método Common Language Runtime (CLR) de Microsoft .NET Framework que puede aceptar y devolver parámetros suministrados por el usuario.

– Procedimientos almacenados extendidos.

o Se eliminarán en futuras versiones.

o Los procedimientos almacenados extendidos le permiten crear sus propias rutinas externas en un lenguaje de programación como pueda ser C.

o Se programan con la API Procedimiento almacenado extendido de SQL Server.

– Procedimientos almacenados del sistema.

o Muchas de las actividades administrativas en SQL Server se realizan mediante un tipo especial de procedimiento conocido como procedimiento almacenado del sistema.

o Los procedimientos almacenados del sistema aparecen de forma lógica en el esquema sys de cada base de datos definida por el usuario y el sistema.

Reglas para diseñar procedimientos almacenados.

o La propia definición de CREATE PROCEDURE puede incluir cualquier número y tipo de instrucciones SQL.

o Puede crear otros objetos de base de datos dentro de un procedimiento almacenado.

o Puede hacer referencia a tablas temporales.

o Si crea una tabla temporal local dentro de un procedimiento almacenado, ésta existirá únicamente para los fines del procedimiento y desaparecerá cuando éste finalice.

o Si ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, este último puede tener acceso a todos los objetos creados por el primero, incluidas las tablas temporales.

o El número máximo de parámetros en un procedimiento almacenado es de 2100.

o El número máximo de variables locales en un procedimiento almacenado está limitado únicamente por la memoria disponible.

o En función de la memoria disponible, el tamaño máximo de un procedimiento almacenado es de 128 megabytes (MB).

Crear procedimientos almacenados.

Operadores Básicos

Create Procedure. Crear un procedimiento almacenado

Alter Procedure. Modifica un procedimiento almacenado

Output. Define un parámetro como “de salida”

Set. Permite asignar un valor a un parámetro o variable.

Declare. Permite declarar variables que serán utilizadas en el cuerpo del procedimiento almacenado

Begin Tran. Inicia una transacción, esta instrucción puede llevar un nombre

Commit tran. Finaliza y confirma una transacción

If Else. Permite realizar decisiones en el cuerpo del procedimiento almacenado

Begin. Inicia un conjunto de sentencias sql

End. Finaliza el conjunto de sentencias sql.

If @@Error <> 0. si no es igual a 0 significa que se ha producido un error, al momento de de insertar, actualizar o eliminar.

Rollback Transaction. Elimina las operaciones que se han realizado en una transacción. Esta instrucción tiene que estar antes del comm tran.

@@Identity. Devuelve el último valor insertado de un campo autoincrementable.

Ejemplos.

Crear un procedimiento almacenado para insertar un Empleado.

CREATE PROCEDURE dbo.Actividades_I_Empleado

@ApellidoPaterno Varchar(35),

@ApellidoMaterno Varchar(35),

@Nombre1 Varchar(35),

@Nombre2 Varchar(35)

AS

Insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (@ApellidoPaterno, @ApellidoMaterno, @Nombre1, @Nombre2)

ALTER PROCEDURE [dbo].[Actividades_I_Empleado]

@ApellidoPaterno Varchar(35),

@ApellidoMaterno Varchar(35),

@Nombre1 Varchar(35),

@Nombre2 Varchar(35)

AS

Begin

Insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (@ApellidoPaterno, @ApellidoMaterno, @Nombre1, @Nombre2)

Select @@IDENTITY

End

La sentencia ALTER PROCUDURE, permite modificar el procedimiento almacenado.

Crear un procedimiento almacenado para insertar una actividad.

CREATE PROCEDURE I_ActividadDiaria

@CodigoTopico int,

@FechaInicio datetime,

@FechaFinalizacion datetime,

@Estado char(1),

@Id_Empleado int

AS

begin

insert into ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

Values (@CodigoTopico, @FechaInicio, @FechaFinalizacion, @Estado, @Id_Empleado)

end

Crear un procedimiento almacenado que seleccione a todos los empleados de un grupo.

CREATE PROCEDURE S_EmpleadosDeUnGrupo

@NombreGrupo varchar(50)

AS

begin

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2

From Empleado a inner join GrupoEmpleado b on a.Id_Empleado=b.Id_empleado

inner join Grupo c on b.CodigoGrupo=c.CodigoGrupo

Where c.NombreGrupo=@NombreGrupo

end

Crear un procedimiento almacenado que permita insertar una cuenta de empleado.

CREATE PROCEDURE I_CuentaEmpleado

@CuentaEmpleado varchar(20),

@Id_Empleado int

AS

begin

Insert into CuentaEmpleado (CuentaEmpleado, Id_empleado)

Values (@CuentaEmpleado, @Id_Empleado)

end

Crear un procedimiento para insertar a un empleado y asignar un grupo.

CREATE PROCEDURE I_EmpleadoAsignarGrupo

@ApellidoPaterno varchar(35),

@ApellidoMaterno varchar(35),

@Nombre1 varchar(35),

@Nombre2 varchar(35),

@NombreGrupo varchar(50)

AS

begin tran

DECLARE @Id_Empleado int

DECLARE @CodigoGrupo int

INSERT INTO Empleado(ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

VALUES(@ApellidoPaterno, @ApellidoMaterno, @Nombre1, @Nombre2)

SET @Id_Empleado = @@IDENTITY

SELECT @CodigoGrupo=CodigoGrupo FROM Grupo WHERE NombreGrupo=@NombreGrupo

if @CodigoGrupo>0

begin

INSERT INTO GrupoEmpleado(CodigoGrupo, Id_Empleado)

VALUES(@CodigoGrupo, @Id_Empleado)

print N’Se Inserto’

end

else

print N’ocurrio un error’

if @@error<>0

ROLLBACK TRANSACTION

Commit

Crear un procedimiento almacenado que replique a una tabla auxiliar los datos siguientes. CodigoActividad, NombreCompletoEmpleado, NombreTopico, Estado.

create procedure G_BolcarDatos

as

begin tran

CREATE TABLE Auxiliar

(

CodigoActividad int,

NombreEmpleado varchar(105),

NombreTopico varchar(35),

Estado char(1)

)

Insert into Auxiliar SELECT ActividadDiaria.CodigoActividad,

Empleado.ApellidoPaterno+’ ‘+Empleado.ApellidoMaterno+’ ‘+Empleado.Nombre1+’ ‘+Empleado.Nombre2,

Topico.NombreTopico as Nombre,

ActividadDiaria.Estado

FROM ActividadDiaria INNER JOIN

Empleado ON ActividadDiaria.Id_Empleado = Empleado.Id_Empleado INNER JOIN

Topico ON ActividadDiaria.CodigoTopico = Topico.CodigoTopico

if @@error<>0

ROLLBACK TRANSACTION

commit

Crear un procedimiento almacenado que valide a un empleado.

Create Procedure G_ValidarEmpleado

@CuentaEmpleado varchar(20),

@Id_Empleado int,

@Valido Char(1) OUTPUT

as

BEGIN

declare @CuentaEmp varchar(20)

declare @Id_Emp int

Select @CuentaEmp = CuentaEmpleado, @Id_Emp = Id_Empleado

From CuentaEmpleado

Where CuentaEmpleado=@CuentaEmpleado and Id_Empleado=@Id_Empleado

if @CuentaEmp=@CuentaEmpleado

SET @Valido=’S’

else

SET @Valido=’N’

END

SQL Server

Parte 1: Consultas a la Base de Datos Actividades

Script de la creación de la Base de datos

CREATE TABLE [Topico](

[CodigoTopico] [int] IDENTITY(1,1) NOT NULL,

[NombreTopico] [varchar](50) NULL,

[Descripcion] [varchar](150) NULL,

CONSTRAINT [PK_Topico] PRIMARY KEY CLUSTERED

(

[CodigoTopico] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

CREATE TABLE [GruposTopico](

[CodigoGrupo] [int] NULL,

[CodigoTopico] [int] NULL

) ON [PRIMARY]

GO

CREATE TABLE [GrupoEmpleado](

[CodigoGrupo] [int] NULL,

[Id_Empleado] [int] NULL

) ON [PRIMARY]

GO

CREATE TABLE [Grupo](

[CodigoGrupo] [int] IDENTITY(1,1) NOT NULL,

[NombreGrupo] [varchar](50) NULL,

[Descripcion] [varchar](150) NULL,

CONSTRAINT [PK_Grupo] PRIMARY KEY CLUSTERED

(

[CodigoGrupo] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

CREATE TABLE [Empleado](

[Id_Empleado] [int] IDENTITY(1,1) NOT NULL,

[ApellidoPaterno] [varchar](35) NULL,

[ApellidoMaterno] [varchar](35) NULL,

[Nombre1] [varchar](35) NULL,

[Nombre2] [varchar](35) NULL,

CONSTRAINT [PK_Empleado] PRIMARY KEY CLUSTERED

(

[Id_Empleado] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

CREATE TABLE [DetalleActividadDiaria](

[CodigoActividad] [int] NULL,

[Detalle] [varchar](300) NULL

) ON [PRIMARY]

GO

CREATE TABLE [CuentaEmpleado](

[CuentaEmpleado] [varchar](20) NULL,

[Id_Empleado] [int] NULL

) ON [PRIMARY]

GO

CREATE TABLE [ActividadDiaria](

[CodigoActividad] [int] IDENTITY(1,1) NOT NULL,

[CodigoTopico] [int] NULL,

[FechaInicio] [datetime] NULL,

[FechaFinalizacion] [datetime] NULL,

[Estado] [char](1) NULL,

[Id_Empleado] [int] NULL,

CONSTRAINT [PK_ActividadDiaria] PRIMARY KEY CLUSTERED

(

[CodigoActividad] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SCRIPT DE INSERCION DE DATOS.

EMPLEADOS

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Arancibia’,’Miranda’,’Juan’,’Jose’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Toro’,’Carmona’,’Pedro’,’Eduardo’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Torrejón’,’Camargo’,’Isa’,’Rosa’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Sotomayor’,’Quiroga’,’Yulesqui’,”)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Zurita’,’Miranda’,’Gonsalo’,’Pedro’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Barea’,’Vedia’,’Jose’,’Carlos’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Bejarano’,’Saavedra’,’Alejandro’,’Yolei’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Ceballos’,’Duran’,’Alejandra’,’Trina’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Enriquez’,’Barrero’,’Marcel’,’Juan’)

insert into Empleado (ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

values (‘Flores’,’Zambrana’,’Carmelo’,”)

clip_image002

TOPICOS

INSERT INTO Topico (NombreTopico, Descripcion)

VALUES(‘Reparación de PC’,’Reparación de los compomentes internos de una computadora’)

INSERT INTO Topico (NombreTopico, Descripcion)

VALUES(‘Reparacion de Impresara’,’Reparación de los componentes internos de una impresora’)

INSERT INTO Topico (NombreTopico, Descripcion)

VALUES(‘Limpieza de Impresora’,’Trabajo de limpiesa y lubricacion de los componentes de una impresora’)

INSERT INTO Topico (NombreTopico, Descripcion)

VALUES(‘Intalación Red de Datos’,’Extendido y configuración de una red de datos categoria 5e’)

INSERT INTO Topico (NombreTopico, Descripcion)

VALUES(‘Desarrollo de Aplicaciones Web’,’Desarrollo de aplicaciones Web en ASP.NET con C#’)

clip_image004

ACTIVIDADES

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (1, Convert(datetime, ’13/10/2009 17:01:32.100′, 103),

Convert(datetime, ’13/10/2009 17:01:32.100′, 103), ‘I’, 1)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (2, Convert(datetime, ’14/10/2009 17:01:32.100′, 103),

Convert(datetime, ’15/10/2009 17:01:32.100′, 103), ‘F’, 2)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (3, Convert(datetime, ’13/10/2009 17:01:32.100′, 103),

Convert(datetime, ’13/10/2009 17:01:32.100′, 103), ‘I’, 1)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (4, Convert(datetime, ’13/10/2009 17:01:32.100′, 103),

Convert(datetime, ’16/10/2009 17:01:32.100′, 103), ‘F’, 2)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (5, Convert(datetime, ’15/10/2009 17:01:32.100′, 103),

Convert(datetime, ’15/10/2009 17:01:32.100′, 103), ‘I’, 3)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (1, Convert(datetime, ’16/10/2009 17:01:32.100′, 103),

Convert(datetime, ’13/10/2009 17:01:32.100′, 103), ‘I’, 4)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (2, Convert(datetime, ’13/10/2009 17:01:32.100′, 103),

Convert(datetime, ’17/10/2009 17:01:32.100′, 103), ‘F’, 5)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (3, Convert(datetime, ’15/10/2009 17:01:32.100′, 103),

Convert(datetime, ’15/10/2009 17:01:32.100′, 103), ‘I’, 6)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (3, Convert(datetime, ’13/10/2009 17:01:32.100′, 103),

Convert(datetime, ’19/10/2009 17:01:32.100′, 103), ‘F’, 1)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (5, Convert(datetime, ’15/10/2009 17:01:32.100′, 103),

Convert(datetime, ’15/10/2009 17:01:32.100′, 103), ‘I’, 7)

clip_image006

DETALLE DE ACTIDIDAD DIARIA

Insert into DetalleActividadDiaria (CodigoActividad, Detalle)

Values (2, ‘Se ha cambiado el cabezal a que el anteriore estaa muy gastado’)

Insert into DetalleActividadDiaria (CodigoActividad, Detalle)

Values (4, ‘Se ha instalado un número de 120 puntos de red los cuales cumplen la categoria 6e’)

Insert into DetalleActividadDiaria (CodigoActividad, Detalle)

Values (7, ‘Se ha realizado una limpeza completa ya que uno de los compoentes de rodamiento estaba muy mal lubricado’)

Insert into DetalleActividadDiaria (CodigoActividad, Detalle)

Values (9, ‘Se una limpeza superficial no se realizó limpeza de los componentes internos’)

clip_image008

GRUPOS

Insert into Grupo (NombreGrupo, Descripcion)

Values (‘Grupo 1’, ‘Atención al Cliente’)

Insert into Grupo (NombreGrupo, Descripcion)

Values (‘Grupo 2’, ‘Experto’)

Insert into Grupo (NombreGrupo, Descripcion)

Values (‘Grupo 3’, ‘Técnico especialista’)

Insert into Grupo (NombreGrupo, Descripcion)

Values (‘Grupo 4’, ‘Limpieza’)

clip_image010

GRUPO EMPLEADO

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (1, 1)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (1, 2)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (1, 3)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (2, 4)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (2, 5)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (3, 6)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (3, 7)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (4, 8)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (2, 9)

Insert into GrupoEmpleado (CodigoGrupo, Id_Empleado)

Values (4, 10)

clip_image012

CONSULTAS A LA BASE DE DATOS

Todos los empleados que tienen una o más actividades terminadas.

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.Estado as ‘Estado_Actividad’, b.CodigoActividad

from Empleado a inner join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

Where Estado=’F’

clip_image014

Todos los empleados que tienen una actividad

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.Estado as ‘Estado_Actividad’, b.CodigoActividad

from Empleado a inner join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

clip_image016

Los que no tienen actividades

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.Estado as ‘Estado_Actividad’, b.CodigoActividad

from Empleado a left join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

where Estado is null

clip_image018

Esta consulta se ejecuta correctamente en el SQL Server 2008

Los que tienen más de una actividad ordenados por el Numero de actividades

Select COUNT(a.Id_Empleado) as Numero_Actividades, a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2

from Empleado a inner join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

group by a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2

having COUNT(a.Id_Empleado)>1

Order by Numero_Actividades desc

clip_image020

Todos los empleados que tienen actividades finalizadas menores a una fecha, además mostrar el nombre del tópico de la actividad

Select a.Id_Empleado, b.Estado as ‘Estado_Actividad’, b.CodigoActividad, c.NombreTopico, b.FechaInicio, b.FechaFinalizacion

from Empleado a inner join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

inner join Topico c on b.CodigoTopico=c.CodigoTopico

where Estado=’F’ and b.FechaFinalizacion<Convert(datetime, ’17/10/2009 23:59:59.100′,103)

clip_image022

Todos los empleados que tienen actividades finalizadas en un rango de fecha, además mostrar el nombre del tópico de la actividad.

Select a.Id_Empleado, b.Estado as ‘Estado_Actividad’, b.CodigoActividad, c.NombreTopico, b.FechaInicio, b.FechaFinalizacion

from Empleado a inner join ActividadDiaria b on a.Id_Empleado =b.Id_Empleado

inner join Topico c on b.CodigoTopico=c.CodigoTopico

where Estado=’F’ and b.FechaFinalizacion>=Convert(datetime, ’13/10/2009 00:00:00.100′,103)

and b.FechaFinalizacion<=Convert(datetime, ’15/10/2009 23:59:59.100′,103)

clip_image024

Buscar a un Empleado por el Id_Empleado

Select Id_Empleado, ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

From Empleado

Where Id_Empleado=1

clip_image026

Buscar a un Tópico por el NombreTópico utilizando LIKE

Select CodigoTopico, NombreTopico, Descripcion

From Topico

Where NombreTopico LIKE ‘%reparaci%’

clip_image028

Mostrar el detalle de las actividades finalizadas

Select a.CodigoActividad, b.Detalle, a.Estado

From ActividadDiaria a inner join DetalleActividadDiaria b on a.CodigoActividad=b.CodigoActividad

Where a.Estado=’F’

clip_image030

Mostrar el detalle de las actividades finalizadas y el nombre del Empleado

Select a.CodigoActividad, b.Detalle, a.Estado, c.Nombre1+’ ‘+c.Nombre2+’ ‘+c.ApellidoPaterno+’ ‘+c.ApellidoMaterno as Nombre_Completo

From ActividadDiaria a inner join DetalleActividadDiaria b on a.CodigoActividad=b.CodigoActividad

inner join Empleado c on a.Id_Empleado=c.Id_Empleado

Where a.Estado=’F’

clip_image032

Todos los empleados de un grupo

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.CodigoGrupo

From Empleado a inner join GrupoEmpleado b on a.Id_Empleado=b.Id_Empleado

clip_image034

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.CodigoGrupo, c.NombreGrupo

From Empleado a inner join GrupoEmpleado b on a.Id_Empleado=b.Id_Empleado

inner join Grupo c on b.CodigoGrupo=c.CodigoGrupo

clip_image036

Select a.ApellidoPaterno, a.ApellidoMaterno, a.Nombre1, a.Nombre2, b.CodigoGrupo, c.NombreGrupo

From Empleado a inner join GrupoEmpleado b on a.Id_Empleado=b.Id_Empleado

inner join Grupo c on b.CodigoGrupo=c.CodigoGrupo

Where c.NombreGrupo=’Grupo 3′

clip_image038

Grupo al que pertenece el empleado

Select a.CodigoGrupo, a.NombreGrupo, a.Descripcion, c.ApellidoPaterno, c.Nombre1

From Grupo a inner join GrupoEmpleado b on a.CodigoGrupo=b.CodigoGrupo

inner join Empleado c on b.Id_Empleado=c.Id_Empleado

Where c.ApellidoPaterno LIKE ‘%Be%’ and c.Nombre1 LIKE ‘%Al%’

clip_image040

Todas las actividades más el detalle de un empleado

Select a.CodigoActividad, d.NombreTopico, a.Estado, a.FechaInicio, a.FechaFinalizacion, b.Detalle

From ActividadDiaria a inner join DetalleActividadDiaria b on a.CodigoActividad=b.CodigoActividad

inner join Empleado c on a.Id_Empleado=c.Id_Empleado

inner join Topico d on a.CodigoTopico=d.CodigoTopico

clip_image042

Select a.CodigoActividad, d.NombreTopico, a.Estado, a.FechaInicio, a.FechaFinalizacion, b.Detalle, c.Id_Empleado

From ActividadDiaria a inner join DetalleActividadDiaria b on a.CodigoActividad=b.CodigoActividad

inner join Empleado c on a.Id_Empleado=c.Id_Empleado

inner join Topico d on a.CodigoTopico=d.CodigoTopico

Where c.Id_Empleado=1

clip_image044

Todas las actividades de un empleado

Actividades de un grupo en una fecha

Todas las actividades de un empleado

SQL Server

Crear una Base de Datos.

Para crear una base se utiliza la siguiente sintaxis:

CREATE DATABASE BDI_Actividades

El Nombre de la base de datos puede contener 128 caracteres. Si no se especifica un nombre de archivos de datos, el nombre de la base de datos seran los nombres estos archivos (Archivos de datos y de registro).

Crear una Tabla.

Para crear una tabla se utiliza la siguiente sintaxis.

CREATE TABLE ActividadDiaria

(

CodigoActividad int identity(1,1) not null,

CodigoTopico int null,

FechaInicio datetime null,

FechaFinalizacion datetime null,

Estado char(1) null,

Id_Empleado int null

)

El nombre de la tabla puede contener 128 caracteres si no es una tabla temporal.

Identity. Crea una columna de identidad en una tabla. Esta propiedad se usa con las instrucciones CREATE TABLE y ALTER TABLE de Transact-SQL. IDENTITY(seek, increment)

CREATE TABLE Empleado(

Id_Empleado int IDENTITY(1,1) NOT NULL ,

ApellidoPaterno varchar(35) NULL,

ApellidoMaterno varchar(35),

Nombre1 Varchar(35),

Nombre2 varchar(35),

CONSTRAINT PK_Empleado PRIMARY KEY CLUSTERED

(

Id_Empleado ASC

) ON [PRIMARY]

)

Insertar datos a una tabla.

Para agregar una fila (registro) a una tabla se debe seguir la siguiente sintaxis:

INSERT INTO Empleado(ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2)

VALUES

(‘Poppe’, ‘Maldonado’, ‘Carlos’, ‘Eduardo’)

INSERT INTO ActividadDiaria(CodigoTopico, FechaInicio, FechaFinalizacion, Estado, Id_Empleado)

VALUES (1, Convert(datetime, ’12/10/2009 17:01:32.100′, 101), GETDATE(), ‘F’, 1)

Mostrar los datos de una tabla.

Para obtener un conjunto de registros de una determinada tabla se debe seguir la siguiente sintaxis:

SELECT Id_Empleado, ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

Consultas con la sentencia WHERE

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno=’Arancibia’ and Nombre1=’Sergio’

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno not in (‘Arancibia’)

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno <>’Arancibia’

Consultas con la instrucción TOP

SELECT top(1) ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno <>’Arancibia’

Consultas con la sentencia LIKE

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno like ‘%a%’

Busca a todos los empleados que en su apellido paterno existe una letra “a”.

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

WHERE ApellidoPaterno like ‘_rancibia’

Busca a todos los empleados que su apellido paterno termine en “rancibia”.

Consultas con la sentencia DISTINCT

SELECT DISTINCT ApellidoPaterno

FROM Empleado

Consultas con la sentencia ORDER BY

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

ORDER BY ApellidoPaterno

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

ORDER BY ApellidoPaterno asc

SELECT ApellidoPaterno, ApellidoMaterno, Nombre1, Nombre2

FROM Empleado

ORDER BY ApellidoPaterno desc

Modificar datos de un registro.

UPDATE Empleado

SET ApellidoMaterno=’Otro Apellido’

WHERE Id_Empleado=2

UPDATE Empleado

SET ApellidoMaterno=’Otro Apellido’, Nombre2=’Segundo Nombre’

WHERE Id_Empleado=2

Eliminar un registro de una tabla.

DELETE Empleado

WHERE ApellidoPaterno=’Arancibia’

Base de Datos Ejemplo

clip_image002

DetalleActividadDiaria

CodigoActividad à int

Detalle –-> varchar(300)

CuentaEmpleado

CuentaEmpleado

–->

varchar(20)

Id_Empleado

–->

int

ActividadDiaria

CodigoActividad

–->

int

CodigoTopico

–->

int

FechaInicio

–->

datetime

FechaFinalizacion

–->

datetime

Estato

–->

char(1)

Id_Empleado

–->

int

Empleado

Id_Empleado

–->

int

ApellidoPaterno

–->

varchar(35)

ApellidoMaterno

–->

varchar(35)

Nombre1

–->

varchar(35)

Nombre2

–->

varchar(35)

Topico

CodigoTopico

–->

int

NombreTopico

–->

varchar(50)

Descripcion

–->

varchar(150)

GrupoEmpleado

CodigoGrupo

–->

int

Id_Empleado

–->

int

GruposTopico

CodigoTopico

–->

int

CodigoGrupo

–->

int

Grupo

CodigoGrupo

–->

int

NombreGrupo

–->

varchar(50)

Descripcion

–->

varchar(150)

Introducción al SQL Server

Objetivo.

Obtener una vista general del gestor de base de datos Microsoft SQL Server.

Introducción.

SQL server está diseñado para trabajar con grandes cantidades de información y la capacidad de cumplir con los requisitos de los procesos de información para aplicaciones comerciales y sitios Web.

SQL Server es un sistema administrador para Bases de Datos relacionales basadas en la arquitectura Cliente / Servidor (RDBMS) que usa Transact-SQL para mandar peticiones entre un cliente y el SQL Server.

clip_image002

Arquitectura cliente / servidor.

Se basa en un conjunto de nodos que realizan la función clientes y de otros que realizan la función de servidores. La lógica del negocio está distribuida entre clientes y el servidor. Los clientes llaman a los servicios. Es un modelo de sistemas distribuido que muestra como los datos y el procesamiento se distribuyen a lo largo de varios procesadores. Está compuesto por:

– Conjunto de Servidores independientes. Ofrecen servicios a otros subsistemas. Servidor de la BD, servidor de las reglas del negocio

– Conjunto de clientes. Llaman a los servicios de los servidores. Por lo general son subsistemas. Existen varias ocurrencias de un programa cliente. Concurrencia.

– Red de Datos. Permite a los clientes acceder a estos servicios.

La arquitectura cliente/servidor se clasifica en:

– Cliente Delgado. Todas las consultas y la lógica del negocio están en el servidor de datos.

– Cliente Grueso. Todas las consultas y la lógica del negocio están en el cliente.

– Cliente/Servidor Distribuido. Servidores que están conectados que a la vez hacen de cliente y servidor.

SQL Server usa la arquitectura Cliente / Servidor para separar la carga de trabajo en tareas que corran en computadoras tipo Servidor y tareas que corran en computadoras tipo Cliente:

– El Cliente es responsable de la parte lógica y de presentar la información al usuario. Generalmente, el cliente corre en una o más computadoras.

– SQL Server administra Bases de Datos y distribuye los recursos disponibles del servidor (tales como memoria, operaciones de disco, entre otros) entre las múltiples peticiones.

Historia de SQL-Server.

Historia de SQL Server

Versión

Año

Nombre de la versión

Code Name

1.0 (OS/2)

1989

SQL Server 1.0

4.21 (NT)

1993

SQL Server 4.21

6.0

1995

SQL Server 6.0

SQL95

6.5

1996

SQL Server 6.5

Hydra

7.0

1998

SQL Server 7.0

Sphinx

1999

SQL Server Herramientas OLAP

Platón

8.0

2000

SQL Server 2000

Shiloh

8.0

2003

SQL Server 2000 para 64 bits

Liberty

9.0

2005

SQL Server 2005

Yukon

10.0

2008

SQL Server 2008

katmai

La base de código, para MS SQL Server (antes a la versión 7.0) se originó en Sybase SQL Server y fue el inicio de Microsoft para el mercado a nivel de empresa de base de datos, compitiendo contra Oracle, IBM y Sybase en sí mismo. Microsoft, Sybase y Ashton-Tate originalmente se unieron para crear y la primera versión denominada SQL Server 1.0 para OS/2 (alrededor de 1989) que era esencialmente similar a Sybase SQL Server 3.0 en UNIX en el mercado. Microsoft SQL Server 4.2 se lanzó alrededor de 1992 (disponible con Microsoft OS/2 versión 1.3). Al mismo tiempo con Windows NT 3.1, fue liberado Microsoft SQL Server 4.21 para Windows NT. Microsoft SQL Server v6.0 fue la primera versión diseñada para NT.

En el momento en que Windows NT fue liberado, Sybase y Microsoft dividen caminos y cada uno persigue sus propios planes de diseño y comercialización. Microsoft  negoció derechos exclusivos a todas las versiones de SQL Server escrito para sistemas operativos Microsoft. Más tarde, Sybase cambió el nombre de su producto a Adaptive Server Enterprise para evitar confusiones con Microsoft SQL Server. Hasta 1994, Microsoft SQL Server llevó tres avisos de copyright de Sybase como una indicación de su origen.

SQL Server 7.0 fue una reescritura del código heredado de Sybase. Luego llegó SQL Server 2000, que fue la primera edición a iniciarse en una variante para la arquitectura IA-64.

En los ocho años desde la versión anterior de la actual de Microsoft  SQL Server (SQL Server 2000), se han dado avances en varios sistemas complementarios que se empaquetan con SQL Server 2005, las herramientas IDE de cliente y rendimiento. Estas incluyen: una herramienta ETL (SQL Server Integration Services o SSIS ), un servidor de informes, un servidor OLAP y minería de datos ( Analysis Services ) y varias tecnologías de mensajería, específicamente Service Broker y servicios de notificación.

SQL Server 2005 (con nombre de código Yukon), publicado en octubre de 2005, es el sucesor de SQL Server 2000. Se incluyeron la compatibilidad nativa para administrar los datos XML, además de datos relacionales. Para este propósito, define un tipo de datos XML que podría utilizarse como un tipo de datos en columnas de la base de datos o como literales en consultas. SQL Server 2005 también permite a un servidor de base de datos estar disponible sobre servicios web mediante paquetes TDS encapsulados dentro de las solicitudes SOAP (protocolo). Cuando se tiene acceso a los datos sobre los servicios web, los resultados se devuelven como XML.
Para datos relacionales, T-SQL ha sido ampliado con control de las características y apoyo para consultas recursivas de errores. SQL Server 2005 también se ha mejorado con nuevos algoritmos de indexación y mejores sistemas de recuperación de error. Las particiones en las tablas e índices admiten de forma nativa, por lo que escalado una base de datos en un clúster es más fácil. CLR de SQL se introdujo con SQL Server 2005 para dejarlo a integrar con el .NET Framework.

La versión actual de SQL Server, SQL Server 2008, (denominada “Katmai”,) fue liberado el 6 de agosto de 2008, y pretende hacer gestión de datos, autónomos de organizar y mantener, para proporcionar un tiempo de inactividad en cero. SQL Server 2008 incluirá también apoyo a datos estructurados y semiestructurados, incluyendo los formatos de medios de comunicación digital de imágenes, audio, vídeo y otros datos multimedia.

Otros nuevos tipos de datos que se incluyen son los de fecha y el de hora separados, así como datos espaciales
La funcionalidad de búsqueda de texto ha sido integrada con el motor de base de datos, que simplifica la gestión y mejora el rendimiento.

SQL Server incluye características de compresión, también incluye el Gobernador de recursos que permite reservar los recursos para ciertos usuarios o los flujos de trabajo. También incluye capacidades para cifrado transparente de datos, así como la compresión de las copias de seguridad. SQL Server 2008 apoya el marco de la entidad de ADO.NET y la definición de herramientas, replicación y datos de informes se construirá en el modelo entity framework. La versión de SQL Server Management Studio incluida con SQL Server 2008 admite IntelliSense para las consultas SQL contra un motor de base de datos SQL Server 2008. SQL Server 2008 también disponer las bases de datos a través de los proveedores de Windows PowerShell y funcionalidad de gestión disponible como cmdlets, para que el servidor y todas las instancias que se está ejecutando pueden administrarse desde Windows PowerShell.

Sistema administrador para bases de datos relacionales (rdbms):

El RDBMS es responsable de:

– Mantener las relaciones entre la información y la Base de Datos.

– Asegurarse de que la información es almacenada correctamente, es decir, que las reglas que definen las relaciones ente los datos no sean violadas.

– Recuperar toda la información en un punto conocido en caso de que el sistema falle.

Transact – SQL:

Transact-SQL es el lenguaje que se utiliza para administrar instancias del SQL Server Database Engine (Motor de base de datos de SQL Server), para crear y administrar objetos de base de datos, y para insertar, recuperar, modificar y eliminar datos. Transact-SQL es una extensión del lenguaje definido en los estándares de SQL publicados por International Standards Organization (ISO) y American National Standards Institute (ANSI).

Componentes de SQL Server.

SQL Server Database Engine. SQL Server Database Engine (Motor de base de datos de SQL Server) incluye Database Engine (Motor de base de datos), el servicio principal para almacenar, procesar y proteger datos; también incluye replicación, búsqueda de texto completo y herramientas para administrar datos XML y relacionales.

Analysis Services. Analysis Services incluye las herramientas para crear y administrar aplicaciones de procesamiento analítico en línea (OLAP) y de minería de datos.

Reporting Services. Reporting Services incluye componentes de servidor y de cliente para crear, administrar e implementar informes tabulares, matriciales, gráficos y de forma libre. Reporting Services también es una plataforma extensible que puede utilizarse para desarrollar aplicaciones de informes.

Integration Services. Integration Services es un conjunto de herramientas gráficas y objetos programables para mover, copiar y transformar datos.

Motor de Base de Datos.

Para implementar una aplicación con el motor de base de datos se debe tomar en cuenta las siguientes tareas que se puede realizar con este:

– Diseñar y crear una base de datos que contenga las tablas relacionales o los documentos XML que el sistema necesita.

– Implementar sistemas para obtener acceso y cambiar los datos almacenados en la base de datos, lo que incluye implementar los sitios Web o las aplicaciones que funcionan con los datos, así como crear procedimientos que utilicen las herramientas y utilidades de SQL Server para trabajar con los datos.

– Aplicar los sistemas implementados en la organización o en los clientes.

– Proporcionar soporte técnico administrativo diario para optimizar el rendimiento de la base de datos.

Procesamiento de instrucciones SQL.

Una instrucción SELECT no es de procedimiento, no expone los pasos exactos que el servidor de la base de datos debe utilizar para recuperar los datos solicitados. Esto significa que el servidor de la base de datos debe analizar la instrucción para determinar la manera más eficaz de extraer los datos solicitados. Este proceso se denomina optimizar la instrucción SELECT. El componente que lo lleva a cabo se denomina optimizador de consultas. La entrada al optimizador consta de la consulta, el esquema de la base de datos (definiciones de tabla e índice) y las estadísticas de base de datos. La salida del optimizador es un plan de ejecución de la consulta, en ocasiones denominado plan de la consulta o simplemente plan.

Una instrucción SELECT define únicamente los siguientes elementos:

– El formato del conjunto de resultados.

– Las tablas que contienen los datos de origen.

– Cómo se relacionan lógicamente las tablas para la instrucción SELECT.

– Las condiciones que deben cumplir las filas de las tablas de origen para satisfacer los requisitos de la instrucción SELECT.

Un plan de ejecución de consulta es una definición de los siguientes elementos:

– La secuencia en la que se tiene acceso a las tablas de origen.
Normalmente, hay muchas secuencias diferentes en las que el servidor de la base de datos puede tener acceso a las tablas base para generar el conjunto de resultados. Por ejemplo, si la instrucción SELECT hace referencia a tres tablas, el servidor de la base de datos podría tener acceso primero a TablaA, utilizar datos de TablaA para extraer las filas que coincidan con las de TablaB y, finalmente, utilizar datos de TablaB para extraer datos de TablaC. Las demás secuencias en las que el servidor de base de datos podría tener acceso a las tablas son:
TablaC, TablaB, TablaA
TablaB, TablaA, TablaC
TablaB, TablaC, TablaA
TablaC, TablaA, TablaB

– Los métodos que se utilizan para extraer los datos de cada tabla.
Por lo general, hay métodos diferentes para tener acceso a los datos de cada tabla. Si solo se necesitan unas cuantas filas con valores de clave específicos, el servidor de la base de datos puede utilizar un índice. Si se necesitan todas las filas de una tabla, el servidor de la base de datos puede omitir los índices y realizar un recorrido de la tabla. Si se necesitan todas las filas de la tabla, pero hay un índice cuyas columnas de clave están ordenadas con ORDER BY, realizar un recorrido del índice en lugar de un recorrido de la tabla puede evitar otra ordenación del conjunto de resultados. Si la tabla es muy pequeña, el recorrido de la misma puede ser el método más eficaz para la mayoría de los accesos a la tabla.

El proceso de selección de un plan de ejecución entre varios planes posibles se conoce como optimización. El optimizador de consultas es uno de los componentes más importantes de un sistema de base de datos SQL. Mientras que parte de la carga de trabajo se debe al análisis de la consulta y selección de un plan por parte del optimizador de consultas, esta carga suele reducirse cuando dicho optimizador elige un plan de ejecución eficaz. Por ejemplo, se pueden dar a dos constructoras planos idénticos para una casa. Si una de las constructoras tarda unos días más en planear cómo construirá la casa y la otra comienza a construir inmediatamente sin planear, la que ha planeado su proyecto probablemente terminará antes.

El optimizador de consultas de SQL Server es un optimizador basado en el costo. Cada plan de ejecución posible tiene asociado un costo en términos de la cantidad de recursos del equipo que se utilizan. El optimizador de consultas debe analizar los planes posibles y elegir el de menor costo estimado. Algunas instrucciones SELECT complejas tienen miles de planes de ejecución posibles. En estos casos, el optimizador de consultas no analiza todas las combinaciones posibles. En lugar de esto, utiliza algoritmos complejos para encontrar un plan de ejecución que tenga un costo razonablemente cercano al mínimo posible.

El optimizador de consultas de SQL Server elige, además del plan de ejecución con el costo de recursos mínimo, el plan que devuelve resultados al usuario con un costo razonable de recursos y con la mayor brevedad posible. Por ejemplo, el procesamiento de una consulta en paralelo suele utilizar más recursos que el procesamiento en serie, pero completa la consulta más rápidamente. El optimizador de SQL Server utilizará un plan de ejecución en paralelo para devolver resultados si esto no afecta negativamente a la carga del servidor.

El optimizador confía en las estadísticas de distribución cuando calcula los costos de recursos de métodos diferentes para extraer información de una tabla o un índice. Las estadísticas de distribución se mantienen para las columnas y los índices. Indican la posibilidad de seleccionar los valores de un índice o de una columna determinados. Por ejemplo, en una tabla que representa automóviles, muchos automóviles tienen el mismo fabricante, pero cada uno dispone de un único número de identificación de vehículo (NIV). Un índice del NIV es más selectivo que un índice del fabricante. Si las estadísticas de los índices no están actualizadas, puede que el optimizador de consultas no realice la mejor elección para el estado actual de la tabla.

El optimizador de consultas es importante porque permite que el servidor de la base de datos se ajuste dinámicamente a las condiciones cambiantes de la base de datos, sin necesitar la entrada de un programador o de un administrador de base de datos. Esto permite a los programadores centrarse en la descripción del resultado final de la consulta. Pueden estar seguros de que el optimizador de consultas creará un plan de ejecución eficaz para el estado de la base de datos cada vez que se ejecuta la instrucción.

Procesar una instrucción Select.

Los pasos básicos que SQL Server utiliza para procesar una única instrucción SELECT incluyen lo siguiente:

  1. El analizador examina la instrucción SELECT y la divide en unidades lógicas como palabras clave, expresiones, operadores e identificadores.
  2. Se genera un árbol de la consulta, a veces denominado árbol de secuencia, que describe los pasos lógicos que se requieren para transformar los datos de origen en el formato que necesita el conjunto de resultados.
  3. El optimizador de consultas analiza diferentes formas de acceso a las tablas de origen. A continuación, selecciona la serie de pasos que devuelve los resultados de la forma más rápida utilizando el menor número posible de recursos. El árbol de la consulta se actualiza para registrar esta serie exacta de pasos. La versión final y optimizada del árbol de la consulta se denomina plan de ejecución.
  4. El motor relacional comienza a ejecutar el plan de ejecución. A medida que se procesan los pasos que necesitan datos de las tablas base, el motor relacional solicita al motor de almacenamiento que pase los datos de los conjuntos de filas solicitados desde el motor relacional.
  5. El motor relacional procesa los datos que devuelve el motor de almacenamiento en el formato definido para el conjunto de resultados y devuelve el conjunto de resultados al cliente.

Base de Datos Ejemplo

clip_image004

Sentencias SQL básicas

Tipos de datos.

– Bit. Tipo de datos entero que puede aceptar valores de 1 y 0.

– Char. Datos de carácter de longitud fija.

– Date. Define una fecha. AAAA-MM-DD.

– Datetime. Define una fecha que combina con una hora del día con fracciones de segundos en un reloj de 24 horas.

– Decimal (p,s). Tipo de dato numérico que tiene precisión y escala fija. p à el número máximo de dígitos decimales que se puede almacenar. sà el número máximo de decimales que se pueden almacenar a la derecha del separador de decimal. 0<=s<=p.

– Image. En futuras versiones será eliminado. Datos binarios de longitud variable desde 0 a 2147483647.

– Int. Tipo de dato numérico exacto que utilizan datos enteros. -2147483648 a 2147483647. 4bytes

– Money. Tipos de datos que representan valores monetarios o de moneda.

– Nchar (n). Datos de carácter de longitud fija. N deb estar comprendido entre 1 y 4000. El tamaño de almacenamiento en bytes es dos veces el número de caracteres especificado.

– Ntext. En futuras versiones será eliminado. Datos de longitud variable con una longitud máxima 2^30

– Numeric(p,s). Tipo de dato numérico que tiene precisión y escala fija. p à el número máximo de dígitos decimales que se puede almacenar. sà el número máximo de decimales que se pueden almacenar a la derecha del separador de decimal. 0<=s<=p.

– Nvarchar(n). Datos de carácter de longitud variable. N puede ser un valor comprendido entre 1 y 4000. El tamaño de almacenamiento en bytes es dos veces el número de caracteres especificado.

– Real. Tipos de datos numéricos y aproximados que se utilizan con datos numéricos de coma flotante. Sinónimo ISO es float(24). De -3,40E+38 a 3,40E+38.

– Tinyint. Tipo de dato numérico exacto que utilizan datos enteros. De 0 a 255. 1byte

– Smallint. Tipo de dato numérico exactos que utilizan datos enteros. De -32768 a 32767. 2bytes

– Text. En futuras versiones será eliminado. Datos de longitud variable de la página de códigos del servidor y con una longitud máxima de 2147483647 caracteres.

– Time. Define una hora de un día. La hora no distingue la zona horaria y está basada en el reloj de 24 horas. Hh:mm:ss.nnnnnnn. 5bytes

– Varchar(n). Datos de caracteres. N puede ser un valor entre 1 y 8000. Los sinónimos ISO son char varying o character varying. Se utiliza este tipo de datos cuando los tamaños de las entradas de datos columnas varíen de forma considerable.

– Uniqueidentifier. 6F9619FF-8B86-D011-B42D-00C04FC964FF. La replicación de mezcla y transaccional con suscripciones de actualización utiliza columnas uniqueidentifier para garantizar que las filas se identifican de forma exclusiva en varias copias de la tabla. 16bytes

CREATE TABLE.

– Crear un nueva tabla.

CREATE TABLE ActividadDiaria

(

CodigoActividad int identity(1,1) not null,

CodigoTopico int null,

FechaInicio datetime null,

FechaFinalizacion datetime null,

Estado char(1) null,

Id_Empleado int null

)

Modelo Relacional

Objetivo.

Estudiar la Forma Normal de Boyce-Codd.

Dependencia Funcional Completa.

– El atributo Y es funcionalmente dependiente y completamente del atributo X, si es funcionalmente dependiente de X y no es funcionalmente dependiente de algún subconjunto de X.

Definición de la Forma Normal de Boyce-Codd.

– La definición de la 3FN puede resultar inadecuada en el caso de una relación donde ocurre lo siguiente:

o La relación tiene varias llaves candidatas donde esas llaves candidatas son compuestas y esas llaves candidatas se solapan (o sea, tienen al menos un atributo común).

Una relación R está en FNBC si y solo si cada determinante es una superllave (candidata o primaria)

– Obsérvese que se habla en términos de llaves candidatas y no solo de la llave primaria, ya que una llave es un caso especial de superllave y la llave puede ser candidata o primaria.

– La definición de FNBC es conceptualmente más simple pero más fuerte. Una relación que está en FNBC está también en 1FN, 2FN y 3FN.

– Ejemplo: Sea la relación EAP(Estudio, Asignatura, Profesor). Donde una tupla significa que un estudiante E recibe la asignatura A por el Profesor P y en la cual se cumple:

o Para cada Asignatura, cada estudiante tiene un solo profesor.

o Cada profesor imparte solo una asignatura.

o Cada asignatura es impartida por varios profesores.

O sea, AEà P y PàA

Solución AE(Asignatura, Estudio) y PA(Profesor, Asignatura)

Modelo Relacional

Objetivo.

Estudiar la 1ra, 2da y 3ra Forma Normal.

Representación

– Un esquema relacional se representará mediante un grafo, conocido como grafo relacional.

– Las llaves primarias deben a parecer subrayadas

– Las llaves foráneas deben estar en negrillas y referencian a la relación en la que son llave primaria con una flecha

Transformación de entidades, atributos y dominios de un diagrama Entidad – Relación.

– Cada Entidad del esquema E/R dará lugar a una relación cuya llave primaria es el identificador principal de la entidad. (Nota: Se recomienda crear una llave primaria que sea generada por el gestor de base de datos o el programador)

– Cada Atributo de una entidad se transforma en un atributo de la relación, aunque se debe tomar en cuenta los distintos tipos de restricciones.

– Cardinalidad N:M.

o La cardinalidad N:M dan como resultado una nueva relación cuyas clave primaria será la concatenación de los identificadores de las entidades que se enlazan a través de esta.

– Cardinalidad 1:N.

o Da lugar a una propagación de la llave primaria de una relación a otra.

o La propagación de la llave primaria debe ser desde la entidad que se encuentra en el lado 1 a la entidad que se encuentra en el lado n.

– Cardinalidad 1:1:

o Da lugar a una propagación de la llave primaria de una relación a otra, pero debe realizarse un estudio de dominio para decidir cómo será la propagación.

– Generalizaciones.

o Se creará una relación por cada entidad participante en la jerarquía, una relación para el supertipo y otra para cada uno de los subtipos, de tal forma que el supertipo propague su identificador principal (llave primaria) a cada uno de los subtipos.

– Especialización.

o Las llaves primarias de cada una de las entidades que conforman la especialización deben propagarse a través de la entidad con la cual tiene una relación. La propagación debe cumplir con la cardinalidad.

Ejercicios: Convierta los siguientes diagramas entidad – relación a un modelo relacional.

clip_image002

clip_image004

clip_image006

Pasos para la normalización.

1. Cálculos de las dependencias funcionales.

2. Cálculo de las claves candidatas de la relación, de los atributos principales y de los no principales.

3. Cálculo de la forma normal en la que se encuentra la relación.

4. Aplicar los métodos de síntesis o análisis para obtener la forma normal deseada.

Cálculo de las dependencias funcionales.

– Solo es para los atributos.

– Entre los atributos de una relación puede existir dependencias de varios tipo

– Las dependencias son propiedades inherentes al contenido semántico de los datos, formando parte de las restricciones de usuario del modelo relacional.

– Dependencia funcional.

o Definición. Sea el esquema de relación R, y X y Y dos subconjuntos denominados descriptores. Y depende funcionalmente de X (X implica o determina a Y) si para cada valor de X solamente existe un único valor posible de Y. Ejemplo: Automóviles, las características del vehículo dependen funcionalmente de la Placa o del número de registro. Dada una placa se determina las características del vehículo.

o Notación: XàY. por el ejemplo anterior PlacaàModelo, Color, Número de Puertas

o Cuando dos o más atributos se implican funcionalmente mutuamente se dice que son equivalentes. Ejemplo: Nombre_Profesor ß à Carnet_Identidad.

o Reflexividad. A partir de cualquier atributo o conjunto de atributos siempre puede deducirse él mismo. Dependencia trivial: x -> x.

o Aumentativadad. Si x à y entonces x+z à y. Así se puede aumentar trivialmente el antecedente de una dependencia. Ejemplo: si con el Carnet_Identidad se determina el Nombre de una persona, entonces con el Carnet_Identidad más la Dirección también se determina el nombre.

o Proyectitividad. Si x à y+z entonces x à y. Ejemplo: si a partir del Carnet_Identidad es posible deducir el nombre y la dirección de una persona, entonces con el Carnet_Identidad es posible determinar el nombre.

o Aditividad. Si x à y y z à w entonces x+z à y+w. Ejemplo: si con el Carnet_Identidad se determina el nombre y con la dirección el teléfono de una persona, entonces con el Carnet_Identidad y la dirección podrá determinarse el nombre y el teléfono.

o Transitividad. Si xày e yàz entonces xàz. Ejemplo: si con el Carnet_Identidad
puede determinarse el código de la provincia de residencia de una persona y con éste código puede determinarse el nombre de la provincia, entonces con el Carnet_Identidad puede determinarse el nombre de la provincia. Éste es el mecanismo básico de funcionamiento del enlace entre tablas a partir de claves ajenas

Primera Forma Normal.

– Definición: Una relación está en 1FN si cumple la propiedad de que sus dominios no tienen elementos que, a su vez, sean conjuntos. Una relación está en 1FN si no incluye ningún grupo repetitivo (Un grupo repetitivo es un atributo que contiene un conjunto de valores y no un único valor).

– Definición: Se dice que una relación se encuentra en 1FN cuando cada atributo solo toma un valor del dominio simple subyacente. Es decir que no existen grupos repetitivos.

– La primera forma normal es una restricción inherente al modelo relacional, por lo que su cumplimiento es obligatorio para toda relación.

clip_image008

La primera tabla no se encuentra en la 1FN, sin embargo la segunda tabla sí cumple con la restricción y por tanto se trata de una relación.

Segunda Forma Normal.

– Definición: Una relación R se dice que está en 2FN si está en 1FN y si, solo si, los atributos no llaves (ni primarias, ni candidatas) de R, si los hubiese, son funcional y completamente dependientes de la llave primaria R

– Por ejemplo: En el esquema de relación R({A,B,C,D}, {A,BàC; AàD}, donde la llave candidata es el conjunto {A,B}, y por lo tanto los atributos principales son A y B y los no principales C y D, el atributo no principal D, depende de A, pero no de una llave. Por lo tanto, el esquema no se encuentra en 2FN. Sin embargo los esquemas R1({A,B,C,}, {A,BàC}) Y R2({A,D}, {AàD}) se encuentran en 2FN.

Procedimiento para hallar llaves candidatas de una relación.

Supongamos que se quiere encontrar las llaves candidatas de una relación R(A,B,C,D,E) con las siguientes dependencias funcionales:

A clip_image010 B

BC clip_image010[1] D

AB clip_image010[2] E

Para comenzar, se parte de que no existen más llaves que dependencias funcionales, pues el concepto de llave incluye la existencia de dependencia funcional. Se analiza, por tanto, cada una de las DF presentes en la relación, añadiendo los atributos que sean imprescindibles en la parte izquierda para lograr determinar a todos los atributos de la relación. El conjunto de atributos así formado debe ser mínimo.

Luego se analiza cada uno de esos conjuntos mínimos, de forma que, si alguno es un superconjunto de otro, ya no es llave, sino superllave. Pueden resultar varias llaves candidatas.

En el ejemplo:

1. Aclip_image010[3]B ACclip_image010[4]A B E C D AC es llave

2. BCclip_image010[5]D BCAclip_image010[6]B C D A E BCA es superllave

3. ABclip_image010[7]E ABCclip_image010[8]A B E C D ABC es superllave

La única llave es AC. No hay ninguna otra llave candidata, pues en las otras DF se obtiene el mismo conjunto ABC y este conjunto contiene a AC.

Tercera Forma Normal.

– Una relación R está en 3FN si está en 2FN y si, y sólo si, los atributos no llaves son independientes de cualquier otro atributo no llave primaria.

– Esto es lo mismo que decir que se deben eliminar las dependencias transitivas de atributos no llaves respecto a la llave primaria, estando ya la relación en 2FN.

Ejemplo. En el esquema de relación R({A,B,C}, {AàB; BàC}), la llave candidata de la relación es el atributo A, y los atributos no principales B y C. Como el atributo C depende transitivamente de la clave A, la relación no se encuentra en 3FN, aunque en sí en 2FN, ya que C depende transitivamente de la llave. Sin embargo, las relaciones R1({A,B},{AàB}) y R2({B,C},{BàC}), sí se encuentra en 3FN.

DETERMINACIÓN DE LOS REQUISITOS NO FUNCIONALES DE LA APLICACIÓN

DESARROLLO DE APLICACIONES WEB EN MICROSOFT C# .NET MODELADAS EN UML.

Se debe definir los requisitos no funcionales del software a desarrollar. Implica la determinación de los atributos no funcionales asociadas a las facilidades, funcionalidades y de características generales del software como controles necesarios para garantizar la confiabilidad del sistema, seguridad propuesta, requisitos de la calidad, interfaces con otros sistemas de procesamiento manual o automatizado, ambiente de software y hardware.

Para la definición de los requisitos no funcionales se utilizará la clasificación de la Norma ISO-9126 (2000), el modelo de calidad que clasifica los atributos de la calidad del software en seis características, que son además divididas en sub-características. El efecto combinado de las características de calidad de software para el usuario se define como la calidad en el uso. Las características definidas son aplicables a todo tipo de software. La ISO 9126 permite especificar y evaluar la calidad del producto de software desde las perspectivas diferentes, asociados con la adquisición, regulación, desarrollo, uso, evaluación, apoyo, mantenimiento, aseguramiento de la calidad y auditoría del software. El modelo de calidad definido puede usarse para:

  • Validar la integridad de la definición de los requisitos;
  • Identificar los requisitos no funcionales del software (Este punto es el que interesa para este documento);
  • Identificar los objetivos del diseño del software;
  • Identificar los objetivos de prueba del software;
  • Identificar el criterio de aceptación de usuario para un producto de software completo.

Las seis características son:

  • Funcionalidad. La capacidad del software para proporcionar funciones que satisfacen las necesidades declaradas e implícitas cuando el software se usa bajo las condiciones especificadas. Esta característica está relacionada con lo que hace el software para satisfacer las necesidades.
    • La Idoneidad. La capacidad del software para mantener un conjunto apropiado de funciones para las tareas especificadas y los objetivos del usuario.
    • La Precisión. La capacidad del software para proporcionar efectos o resultados correctos o convenidos en cálculos y resultados.
    • La Interoperabilidad. La capacidad del software para actuar recíprocamente con uno o más sistemas especificados. La interoperabilidad se usa en lugar de la compatibilidad para evitar la posible ambigüedad
    • La Seguridad. La capacidad del software para proteger información y los datos, para que personas o sistemas desautorizados no puedan leer o pueden modificar los mismos, y a las personas o sistemas autorizados no les sea denegado el acceso a ellos. Debe aplicarse a los datos en transmisión. Debe tomarse en cuenta para la aplicación completa
    • La Conformidad. La capacidad del software para adherirse a las normas que se le apliquen , convenciones, regulaciones, leyes y las prescripciones similares
  • Confiabilidad. La capacidad del software para mantener su nivel de ejecución cuando se usa bajo las condiciones especificadas. El sobre uso o el envejecimiento no ocurre en el software
    • La Madurez. Capacidad del software de evitar errores como resultado de haberse producido un fallo del software
    • La Tolerancia ante fallos. Capacidad del software de mantener un nivel de ejecución específico en caso de fallos del software o de infracción de sus interfaces especificadas. Un nivel de ejecución específico puede incluir la falta la capacidad segura
    • La facilidad de restablecer. Capacidad del software de restablecer su nivel de ejecución y recobrar los datos directamente afectados en caso de avería.
  • Facilidad de Uso. La capacidad del software ser comprendido, aprendido, utilizado y de ser amigable para el usuario, cuando se emplee bajo las condiciones especificadas.
    • La Facilidad de Comprensión. La capacidad del producto de software para permitirle al usuario entender si el software es conveniente, y cómo puede usarse para las tareas particulares y condiciones de uso. Esto dependerá de la documentación y la impresión inicial dada por el software.
    • La Facilidad Cognoscitiva. La capacidad del producto del software para permitirle al usuario aprender su aplicación.
    • La Operabilidad. La capacidad del producto del software para permitirle al usuario operarlo y controlarlo. Operabilidad corresponde a la capacidad de ser controlado, la tolerancia ante errores y la conformidad con las expectativas del usuario
    • La Atracción. La capacidad del producto del software de ser amigable para el usuario. Esto se refiere a los atributos del software que se aplican para hacer el software más atractivo al usuario.
  • Eficiencia. La capacidad del software para proporcionar la requerida ejecución, en relación con la cantidad de recursos usados, bajo las condiciones declaradas.
    • El crono-comportamiento. La capacidad del software para proporcionar una respuesta apropiada y los tiempos de procesamiento y tasas de rendimiento de procesamiento al realizar su función, bajo condiciones declaradas.
    • La Utilización de los Recursos. La capacidad del software para usar los recursos apropiados en un plazo de tiempo adecuado cuando el software realiza su función bajo las condiciones declaradas
  • Facilidad de mantenimiento. La capacidad del software de ser modificado. Las modificaciones pueden incluir las correcciones, mejoras o adaptación del software a los cambios en el ambiente, y en los requisitos y las especificaciones funcionales.
    • La Facilidad de Diagnostico. La capacidad del producto del software ser diagnosticado para detectar deficiencias o causas de defectos o errores en el software y detectar a las partes para ser modificadas para ser identificadas
    • La Mutabilidad. La capacidad del producto del software para permitir llevar a cabo una modificación especificada. Incluye la codificación, diseño y documentación de los cambios.
    • La Estabilidad. La capacidad del software para minimizar los efectos inesperados de las modificaciones del software.
    • La facilidad de Comparación. La capacidad del producto del software para permitir validar el software modificado
  • Portabilidad. Capacidad de software ser transferido de un ambiente a otro. El ambiente puede incluir el ambiente del software, del hardware u organizacional
    • La facilidad de adaptación. La capacidad del software de ser modificado para los ambientes especificados sin aplicar acciones o medios de otra manera que aquellos suministrados con este propósito para el software considerado. Adaptabilidad incluye el escalado de la capacidad interna (por ejemplo los campos de la pantalla, las tablas, los volúmenes de transacción o los formatos de informes.).
    • La facilidad de Instalación. La capacidad del software ser instalado en un ambiente especificado
    • La coexistencia. La capacidad del software para coexistir con otro software independiente en un ambiente común que comparte los recursos comunes
    • La facilidad de Reemplazo. La capacidad del software ser usado en lugar de otro software especificado en el ambiente de ese software. Se usa en lugar de la compatibilidad para evitar la posible ambigüedad con el interoperabilidad.

Como se puede comprender, sobre estas características o atributos del software, es muy importante tenerlas muy en cuenta y definirlas. Es claro que para un determinado software se seleccionan algunas de estas características, esto se debe a gran variedad de tipos de software que se pueden desarrollar, no es lo mismo desarrollar un editor de texto que una aplicación de gestión de información. Pero al seleccionar, estos atributos, implica un compromiso de demostrar al final del desarrollo que se ha llegado a una conformidad exitosa de estas. En próximos cursos se hablará de métricas de software que ayudan a validar el software sobre las características definidas y el como evaluar.

Para este documento, la visión de la utilización de estas características es poder identificar a los requisitos no funcionales de la aplicación que se está modelando. De este modo se definirá algunas de las características que a consideración del Grupo de Investigación corresponden para la aplicación Hotelera.

REQUISITOS NO FUNCIONALES PARA LA APLICACIÓN

FUNCIONALIDAD

  • La Idoneidad. La aplicación debe proporcionar opciones bien descritas para los usuarios, explicando la operación que se puede realizar.
  • La Precisión. Debe proporcionar al usuario opciones que permiten realizar el trabajo y deben estar correctamente descritas y debe existir una orientación para cada una de ellas. No debe presentarse al usuario opciones restringidas
  • La Seguridad. El acceso a la aplicación debe estar controlada por una contraseña y nombre de usuario. La contraseña debe estar protegida de acuerdo a un algoritmo de encriptación a un nivel internacional, correctamente documentado. Debe garantizarse que la información transmitida no pueda ser capturada o interpretada.

CONFIABILIDAD.

  • La Madurez. Debe presentarse al usuario información sobre los errores que comete al utilizar al aplicación, estos errores deben estar bien identificados y en el idioma Español. Los mensajes de error deben contar con una ayuda para orientar al usuario en su trabajo así no cometer reiteradamente el mismo error, además debe existir una explicación del por qué del error.

FACILIDAD DE USO.

  • La Facilidad de Comprensión. La aplicación debe ayudar al trabajo o al interés del usuario. Debe explicarse de una manera correcta las distintas opciones que le permite la aplicación o una determinada interfaz. Cada opción debe escribirse de forma completa
  • La Facilidad Cognoscitiva. Debe considerarse imágenes para la mejor comprensión y aprendizaje de la aplicación, tomando en cuenta el tiempo de ejecución.
  • La Atracción. Debe definirse un estándar de interfaz tomando en cuenta los colores de la institución y los colores de la empresa que desarrolla la aplicación, ya que con estas dos combinaciones se tiene la probabilidad de que el usurario este cómodamente trabajando con la aplicación. No se debe olvidar el estándar que proporciona la interfaz Windows y el diseño de interfaz que muestra Microsoft para las paginas Web.

EFICIENCIA.

  • La Utilización de los Recursos. Debe utilizarse procedimientos almacenados básicos, que no tengan más de una sentencia, esto para el acceso a la base de datos. Los filtros de búsquedas o logica del negocio para los datos debe implementarse en la capa de negocio.

FACILIDAD DE MANTENIMIENTO.

  • La Facilidad de Diagnostico. Debe realizarse la Prueba con la ayuda de los casos de uso de prueba. De esta forma garantizar el buen funcionamiento de la aplicación.

PORTABILIDAD.

  • La facilidad de adaptación. Se debe utilizar un marco de trabajo que garantice un mantenimiento respecto a la tecnología que pueda aparecer y a los paradigmas de desarrollo de interfaz. Además, la interfaz a desarrollar debe ser probada en distintos escenarios de navegadores y/o computadoras, para de esta forma garantizar la adaptación de la aplicación.
  • La facilidad de Instalación. Debe crearse para la aplicación un paquete de instalación con su respectivo manual para que los encargados de la aplicación puedan restablecer con bastante rapidez la aplicación, debe tomarse en cuenta que pude ser más de un instalador ya que la aplicación está orientada a los Servicios. Solo se tomará en cuenta la tecnología Windows para desarrollar el paquete de instalación.
  • La coexistencia. Debe poderse instalar en una sola computadora toda la aplicación, ya sea los Servicios Web como las Aplicaciones Web. Pero, deben tener características independientes.

De esta forma se ha especificado los Requisitos No Funcionales para la aplicación de Hotel.

Como se ha dicho anteriormente, al describir los atributos se llega a un compromiso de cumplimiento de cada uno de estos. Este curso no demostrará el cumplimiento de estos ya que se tiene que estudiar parte de la teoría de Mediciones y Métricas en el Software.

Luego de determinar y explicar como tiene que llevarse a cabo los requisitos no funcionales se deben realizar varias actividades adicionales son las siguientes:

– Determinar la importancia y el riesgo

– Separar en ciclos (Priorizar).

– Determinar los paquetes

– Detallar de forma expandida (completa)

DETERMINAR LA IMPORTANCIA Y EL RIESGO

Para realizar estas dos tareas, las cuales se las puede llevar conjuntamente se debe realizar un análisis por cada caso de uso y determinar la importancia que tiene en la aplicación, se puede utilizar una escala del 1 al 5, donde 5 es más significativo. Esto se realiza para determinar parte del dominio del riego por requisito y determinar cual caso de uso debe ser más estudiado para no tener dificultades. Luego se determina el total del dominio de riesgo por cada caso de uso, para esto se realiza un estudio del flujo básico de cada caso de uso y los procesos de la empresa a través del los diagrama de actividad. El riego es considerado como el cambio que se puede producir en el requisito. Muchos de los requisitos (casos de uso) pueden cambiar en su flujo básico de interacción con el usuario o que la empresa cambie sus procesos que van a influenciar al requisito, este cambio implica un cambio total en todas las etapas. Por este motivo es muy importante determinar el riesgo de cada caso de uso. El riesgo y la importancia que se determinen permitirán realizar un seguimiento correcto a los casos de uso.

En este curso no se ve como llevar a cabo estas tareas.

SEPARAR EN CICLOS DE DESARROLLO.

Una vez determinada la importancia de los casos de uso se pueden separar por ciclos de desarrollo. Un ciclo de desarrollo será llevado a cabo de principio a fin, logrando en su finalización un producto que funcione y que este probado. Cada ciclo, que esta compuesto por casos de uso, seguirá un ciclo de vida del producto.

A continuación se ve un ejemplo de cómo se ha determinado los ciclos de desarrollo.

Se ve en la Figura 1 un diagrama de casos de uso que corresponde a una aplicación que distribuye productos de todo tipo.

clip_image002

Figura 1. Diagrama de Casos de Uso Distribución de Productos

La Figura 2 muestra el Primer Ciclo de desarrollo

clip_image004

Figura 2. Primer Ciclo de Desarrollo

En la siguiente figura, Figura 3, se ve el Segundo ciclo.

clip_image006

Figura 3. Segundo Ciclo de Desarrollo

La siguiente Figura 3 muestra el último ciclo de desarrollo.

clip_image008

Figura 4. Tercer Ciclo de Desarrollo

Como se puede observar, cada ciclo representa parte de las funcionalidades futuras de la aplicación de la aplicación que se irán construyendo.

A continuación, se lleva a cabo el análisis de los ciclos para la aplicación que sirve de emplo.

La Pantalla 1 es el resultado del desarrollo del Diagrama de Casos de Uso, el cual no servirá para analizar los ciclos de desarrollo.

clip_image010

Pantalla 1. Diagrama de Casos de Uso

Existen muchas alternativas para definir los ciclos de desarrollo. Se puede dividir en ciclo de desarrollo, por ejemplo, por Actor de la aplicación, es decir tener cuatro ciclos de desarrollo, que serian:

– Primer Ciclo: Gestionar Empleados, Gestionar Bebidas, Gestionar Cocina.

– Segundo Ciclo de Desarrollo: CU Reservar Habitación, CU Confirmar Reserva, CU Salir del Hotel.

– Tercer Ciclo de Desarrollo: Cambiar Contraseña, Autenticar Empleado.

– Cuarto Ciclo de Desarrollo: CU Registrar Solicitud de Servicio a la Habitación, CU Registrar Solicitud de Servicio Básico.

También, se puede dividir por funcionalidad de los casos de uso, es decir, los que estén relacionados para realizar una actividad completa, por ejemplo:

– Primer Ciclo de Desarrollo: Gestionar Empleados, Autenticar Empleado, Cambiar Contraseña.

– Segundo Ciclo de Desarrollo: CU Reservar Habitación, CU Confirmar Reserva, Salir Hotel.

– Tercer Ciclo de Desarrollo: Gestionar Bebidas, Gestionar Cocina, CU Registrar Solicitud de Servicio Básico, CU Registrar Solicitud de Servicio a la Habitación.

Como se puede ver, en los dos casos, al final de cada ciclo el resultado debe ser una aplicación que pueda realizar algunas de las tareas necesarias para el usuario. Dentro del primer ciclo se debe seleccionar a los casos de uso que sean independientes, con poco acoplamiento entre los otros. Por ejemplo, para reservar una habitación, el Empleado debe estar autenticado y tener autorización para realizar esta actividad, caso contrario no se podría reserva la habitación, por este motivo es necesario desarrollar el primero el caso de uso que es Gestionar Empleado, luego Autenticar Empleado y Cambiar Contraseña. Este tipo de análisis se debe realizar para determinar cada ciclo de desarrollo.

Para el ejemplo de desarrollo, se toma la segunda opción de división de ciclos. Como se puede ver en las siguientes Pantallas, se ha dividido por ciclo.

El primer Ciclo a desarrollar se pude ver en la Pantalla 2.

clip_image012

Pantalla 2. Primer Ciclo de Desarrollo

El Segundo Ciclo de Desarrollo se puede ver en la Pantalla 3.

clip_image014

Pantalla 3. Segundo Ciclo de Desarrollo

El Tercer Ciclo de Desarrollo se puede ver en la Pantalla 4.

clip_image016

Pantalla 4. Tercer Ciclo de Desarrollo

Cada uno de estos ciclos tendrá las siguientes características (Ejemplo):

– Planificación para llevar a cabo el desarrollo por cada caso de uso

– Asignación de personas para el desarrollo

– Plan de revisiones

– Plan de integración

– La disciplina de Análisis si es que se debe hacer

– La Disciplina de diseño

– La Disciplina de Implementación

– La disciplina de Prueba

Cada ciclo que se determine tendrá muchos artefactos que le acompañen, esto implica realizar todas las actividades del desarrollo de software. En el curso no se llevará acabo el desarrollo por ciclos, solo se utilizara dos casos de uso que permitan ejemplificar algunas de las actividades necesarias para tener una aplicación.

Los otros dos puntos de Determinar los Paquetes y Detallar de forma Expandida se verán con mayor detalle en los próximos documentos.