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.

Introducción al Modelo Relacional

Objetivo.

Estudiar el modelo relacional que permite diseñar una base de datos.

Definiciones del Modelo Relacional.

– Para el Móledo Relacional una afinidad es una tabla de dos dimensiones.

– El modelo relacional está conformado por tres componentes.

o Una estructura de datos.

§ Relación. Es una colección o grupo de objetos que tienen en común un conjunto de características o atributos.

§ Entidad (tabla). Es una unidad de datos en una relación con un conjunto finito de atributos. Consiste en n valores. El modelo relacional proporciona una manera simple de representar los datos. Es a través de, una tabla bidimensional llamada relación. Cada fila corresponde a un objeto y cada columna corresponde a un atributo de un objeto.

Nombre

FechaNacimiento

Dirección

País

Carlos

23/10/1972

Luja 1020

Bolivia

Rommel

14/08/1968

América

Chile

§ Atributo. También llamado característica, cada atributo de una tabla o relación tiene asociado un dominio en el cual toma sus valores. Los atributos son las columnas de una relación y describen las características particulares de estas.

§ Esquema. Es el nombre que se le da a una relación, más el nombre de los atributos. Persona(Nombre, FechaNacimiento, Dirección, País).

§ Tuplas. Se considera una tupla a cada una de la filas en una relación que contiene valores que corresponden a un objeto (Carlos, 23/10/1972, lujan 1020, Bolivia).

· En una relación no debe existir dos tuplas iguales.

· El orden de las filas no es significativo.

Si una Relación cumple con estas dos características se la denomina normalizada.

§ Dominio. Es un conjunto de valores que puede tomar un atributo en una tabla o relación.

Ejemplo: Alumno à Determinar la Relación, Entidad, Atributo y Dominio.

o Operadores.

§ Operadores de actualización.

· Agregar. Al insertar una tupla en una relación, el valor de un atributo que sea llave foránea puede ser nulo, o algún valor del atributo de la llave primaria en la relación correspondiente.

· Borrar. Se tiene una tupla en una relación R1 con un atributo Ai como llave primaria, y otra relación R2 que tiene ese mismo atributo Ai pero como llave foránea, se tiene tres casos.

o Borrado restringido. No se puede borrar la tupla en relación R1 cuya llave primaria tenga el valor en la relación R2.

o Borrado en Cascada. Al borrar una tupla en la relación R1 con cierto valor en la llave primaria, se borrarán todas las tuplas en R2 que tengan ese mismo valor en la llave foránea.

o Borrado por nulificacion. Al borrar una tupla en la relación R1, a todas las tuplas con el mismo valor en la relación R2 se les asigna un valor nulo en el atributo de la llave foránea.

· Cambiar (modificar).

o Modificación en cascada. Al modificar una llave primaria en R1 se le cambia los valores correspondientes en la llave foránea de R2.

o Modificación por nulificacion. Al cambiar los valores de la llave primaria en R1 a los correspondientes valores en la llave foránea de R2 se les pone un valor nulo.

§ Operadores del algebra relacional.

o Reglas de integridad.

§ Llave primaria. Es única en un conjunto de atributos que permite identificar a una tupla de manera única en cualquier momento.

§ Llave Foránea. Es un atributo que hace referencia a una llave primaria de otra tabla. Esto da que una tabla pueda tener varas llaves foráneas.

§ Valor Nulo. Es un valor que está fuera de la definición de cualquier dominio en el cual deja el valor del atributo en latente. Su uso es frecuente en las siguiente situaciones:

· Cuando no se conocen todos los valores de cada uno de los atributos.

· Cuando se agrega un atributo a una tabla ya existente.

· Para no tomarse en cuente al hacer cálculos numéricos.

§ Integridad de Tablas. Ningún atributo que forme parte de una llave primaria puede aceptar valores nulos.

§ Integridad Referencial. Al tener una Tabla Q con llave primaria A de dominio D y otra tabla R con atributo A que no es llave primaria de R, entonces cualquier valor en el atributo A en R debe ser:

· Nulo, o

· Un valor que esté en el atributo A de la llave primaria de una tupla en la tabla Q.

– Cada hilera en la tabla tiene datos que pertenecen a alguna cosa. Estas se denominan Tuplas o Tuples.

– El Modelo relacional está relacionado con el algebra y cálculo relacional.

Algebra relacional

– Es un lenguaje procedimental

– Define las operaciones usadas en los lenguajes de consultas relacionales.

– Operadores

o Primitivos. Pertenecen a la teoría de conjuntos.

§ Unión (È). Debe cumplir con los siguientes requisitos

· Las relaciones r y s deben tener el mismo número de atributos.

· Lso dominios del atributo i-ésimo de r y del atributo i-ésimo de s, deben ser los mismos.

§ Diferencia (-): Permite encontrar tuplas que estén en una relación, pero o en la otra.

§ Producto cartesiano (x): a partir de las tuplas de una relación r se forma una nueva relación con todas combinaciones resultantes de su relación con las tuplas de una relación s.

o Derivados

§ Combinación (join) |x|:

· Es una operación binaria que nos permite combinar ciertas selecciones y un producto cartesiano en una operación.

· Forma un producto cartesiano de sus dos argumentos realiza una realización forzando la igualdad en aquellos atributos que aparezcan en ambas planificaciones de relaciones y finalmente quita las columnas duplicadas.

· r êxês = PrÈs (sr.A1=s.A1Ç…Çsr.An=s.AnRxS)

§ Intersección (Ç).

§ Dicisión (¸).

· Se establece para aquellas consultas que incluyen la frase “para todos”.

Cálculo Relacional.

– El cálculo relacional de tuplas y dominios es un lenguaje no procedimental que representan la capacidad básica requerida en un lenguaje de consulta relacional.

o Cálculo relacional de tuplas.

o Cálculo relacional de dominios.

¿Por qué el modelo relacional?

– Se considera al modelo Entidad- Relación como un modelo conceptual, no es ni lógico ni físico.

– El modelo relacional es un modelo lógico que se conoce como “esquema de base de datos”. A partir del cual, se podrá realizar el modelo físico.

Ventajas del modelo relacional

– Su simplicidad. Implica independencia de los datos.

– La información se maneja en forma de tablas.

clip_image002

– Creación. Anadir un producto P. se agrega la nueva ocurrencia en la tabla Producto. Es posible hacerlo aunque ningún suministrador lo suministre.

– Supresión. Se puede eliminar el suministrador S1 sin perder el producto P6, a pesar que es el único suministrador que lo suministra.

– Modificación. Se puede cambiar el precio del producto P2 sin necesidad de búsquedas adicionales ni posibilidad de inconsistencias.

Teoría de la normalización.

– El concepto de esta teoría de normalización fue introducido por E.D. Cood y fue pensada para aplicarse a sistemas relacionales.

– Se basa en la necesidad de encontrar una representación del conjunto de relaciones que en el proceso de actualización sea la más adecuada. Se basa en el proceso de llevar una relación a través de formas normales. Es decir, que una relación debe cumplir con las condiciones que implican las Formas Normales. Esto evita las anomalías en la actualización. Además, mejora la independencia de los datos.

– La Normalización (teoría de la normalización) involucra varias fases que se realizan en orden.

– Existen tres (1FN, 2FN, 3FN) formas normales, incluyendo a de Boyce-Codd (FNBC), cuarta (4FN) y quinta (5FN).

Modelo Objeto Semántico

Objetivo.

Estudiar el modelo Objeto Semántico que permite modelar una base de datos

Para que se utiliza el modelo Semántico.

– Crear modelos de datos a través de un análisis de reportes, formas y consultas.

– Está compuesto por Objetos Semánticos y construcciones relacionadas.

– Sirve para documentar los datos que manejan los usuarios.

– Se presento por primera vez en 1988, basado en conceptos que desarrollaron Codd, Hammer y McLeod.

Definición.

– Es un conjunto de atributos que describen suficientemente una identidad bien definida.

– Modela el significado de los datos del usuario.

– Un objeto semántico particular es una ocurrencia de la clase. “Juan Caballero” es una ocurrencia de la clase Persona.

– Cada Objeto tiene un conjunto de atributos. Significa que los atributos representan todas las características que necesita un usuario para hacer su trabajo. Cada objeto tiene un número de características pero muchas de estas no son necesarias para el usuario.

– Existen objetos que existen físicamente como Empleado pero existen otros que no como Pedido. Por lo tanto, algo no necesita tener una forma física para ser considerado un objeto; solo necesita que los usuarios lo identifiquen.

Atributos.

– Los objetos semánticos tiene atributos que definen su característica.

o Atributos Simples. Tiene un solo elemento. Fecha de contratación, número de factura

o Atributos grupales. Sion combinaciones de otros atributos. Dirección que contiene los atributos Calle, Ciudad, Estado, Código postal.

o Atributos de objeto semántico. Establecen una relación entre un objeto semántico y otro.

– Cardinalidad de atributos. Cada atributo en un objeto semántico tiene una cardinalidad mínima y máxima.

o La mínima indica la cantidad de instancias del atributo que deben existir para el objeto sea valido; si es 0 no se requiere que el atributo tenga un valor. Si es 1, tiene que tener un valor.

o La máxima indica el número máximo de instancias del atributo que el objeto puede tener. Si es 1 el atributo no puede tener más de una instancia, si es N, el atributo pude tener muchos valores.

– Atributos Pareados. Si un objeto contiene a otro el segundo abarcará al primero.

Identificadores de objetos.

– Un identificador de objetos es uno o más de los atributos de los objetos que los usuarios emplean para identificar las instancias de un objeto.

– Un identificador de Grupo es aquel que tiene más de un atributo.

– En los diagramas de objeto semántico, los identificadores de objetos están representados por las letras ID junto al atributo.

Dominio de un atributo.

– Es una descripción de los posibles valores.

– Las características de un dominio dependen del tipo de atributo.

– El dominio de un atributo simple consiste tanto en una descripción física como en una descripción semántica.

o Física. Indica el tipo de dato, su longitud y otras restricciones o condiciones. En algunos casos, es una lista enumerada, es decir, el conjunto de valores específicos de un atributo.

o Semántica. Indica la función o el propósito del atributo; esto lo distingue de otros atributos que pueden tener la misma descripción física.

clip_image002

Ejemplos sobre el modelo entidad relación

1. Mencione 5 entidades que usted conozca. Defina algunos atributos para cada una y decida cuál puede ser la llave primaria en cada caso.

    1. Actividad à No se encuentra físicamente
    2. Producto à Si se encuentra físicamente
    3. Celular à Si se encuentra físicamente
    4. Alula à Si se encuentra físicamente
    5. RegistroHorarioTrabajo à No se encuentra físicamente

clip_image002

2. En un organismo se reciben productos que son importados de diferentes países. Las propiedades de los productos son número, nombre, unidad de medida, peso y precio unitario. Las propiedades de los países son número, nombre, zona geográfica y área de moneda. Existe relación comercial con varios países de donde son importan varios productos en ciertas cantidades.

clip_image004

3. Se desea controlar los servicios de alquiler de películas que brinda cierta tienda. Para ello se tiene información acerca de los géneros de las películas, las películas, las copias de las películas (que son las que se alquilan), los clientes y los tipos de cliente que se atienden, los alquileres de copias de películas que realizan los clientes y las tarifas que se aplican a los alquileres de copias de películas.

clip_image006

4. En una empresa distribuidora de piezas mecánicas se controlan las existencias en almacén así como las salidas realizadas a cada cliente con una factura. Esta información aparece en una base de datos.

clip_image008

5. En un centro de información científica (biblioteca) se desea controlar la utilización de la bibliografía que en él existe. En cada sala están disponibles revistas y libros. De cada revista se conoce su código, que la identifica, nombre, fecha de publicación y país de procedencia. De cada libro se conoce su código, título, editorial y país de procedencia. Cada libro y revista existente sólo se encuentra en una sala. Las revistas sólo pueden ser consultadas en las salas, sin embargo, los libros pueden ser solicitados en préstamo por los usuarios, llevándose el control de dichos préstamos. Un libro puede ser prestado a varios usuarios (durante la existencia del libro) y un usuario puede solicitar varios libros. De cada usuario se sabe su número de identidad, nombre, dirección en que reside y departamento en que trabaja. Para cada libro se conoce la fecha de inicio de un préstamo realizado a determinado usuario.

clip_image010

Modelo Entidad Relación

 

Objetivo.

Conocer el modelo Entidad relación, lo cual permitirá diseñar de forma lógica una base de datos.

Modelo Entidad Relación.

– Propuesto por Peter Chen 1976.

Entidad.

– Una sola palabra (en singular)

– Representa una Cosa u objeto del mundo real

– Una entidad puede ser un objeto con existencia física como: persona, animal, casa

– Una entidad puede ser un objeto con existencia conceptual como, puesto de trabajo, asignatura, nota.

– La entidad está conformada por atributos, color, forma, estado, longitud, peso, etc.

– En el diagrama entidad relación se representa con un rectángulo.

– En ocasiones, una entidad no puede ser identificada únicamente por el valor de sus propios atributos. En estos casos, se utilizan conjuntamente las relaciones con los atributos para lograr la requerida identificación unívoca. Estas entidades reciben el nombre de entidades débiles y se representan en el DER con un doble rectángulo.

– Entidad regular es una cuando no es una entidad débil. Ejemplo débil Estudiante Nota, Ejemplo entidad regular Estudiante Pensum. Para identificar a una entidad débil, la entidad regular debe presar uno de sus atributos.

Atributos.

– Nombre sin abreviaciones ni espacios.

– Es la unidad menor sobre un objeto.

– Los atributos son las propiedades que se describen a cada entidad en un conjunto de entidades.

– Un conjunto de atributos tendrán, cada uno de estos, valores que representen a una entidad identificándola.

– Ejemplo: (1, Sofia, 10 años, 1.7m)(2, Maria, 19 años, 1.68 m)(2, Amanda, 15 años, 2m)

– Los atributos diferencia a las entidades.

– Los atributos se pueden convertir en una entidad de acuerdo con el dominio, por ejemplo: rojo, 18, juan; el dominio para estos datos seria: Color, Edad, Nombre. El color y la edad se puede convertir en una entidad, si el dominio del color es “Rojo, Amarillo y Verde” y para la edad de “18 a 35 años”.

– En el diagrama entidad relación se representa por medio de un círculo. Los atributos llave se representan subrayándolos.

– Debe definirse si lleva o no un dato, es decir si es nulo

Relación.

– Las relaciones se pueden establecer entre un mismo tipo de entidad (Empleado).

– En el diagrama entidad relación se representa por medio de un rombo.

– Una asociación entre entidades puede ser considerada como una entidad.

Cardinalidad.

– Se establece la correspondencia entre dos cosas u objetos.

– Muchos a muchos.

– Uno a muchos.

– Uno a uno.

– Cero a uno

– Cero a muchos

Llaves.

– Super Llave: Conjunto de uno o más atributos que juntos identifican de manera única a una entidad.

– Llave candidata: es una super llave mínima.

– Llave primaria: es la seleccionada para identificar a los elementos de un conjunto de entidades.

Ejemplos.

clip_image002

clip_image004

clip_image006

clip_image008

Operación de Agregación.

– Construye una nueva entidad sobre la base de una realización.

 
  clip_image009

Operación de Generalización.

– Permite formar una entidad, mediante la unión de otras entidades. El proceso inverso se denomina Especialización y divide una entidad en cierto número de otras entidades.

– Ejemplo: Distinguir los trabajadores de una empresa de acuerdo a su ocupación como obreros, dirigentes y administrativos. El obrero tiene una relación con Maquina.

– Ejemplo: Caso Estudiante, Alumno Ayudante y Becario.

clip_image011

clip_image013