Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UNIVERSITARIA
Presentado por:
Docente
JAVIER PINEDA
19 DE DICIEMBRE DE 2022
OBJETIVOS
Objetivo General
Objetivos específicos
La primera forma normal nos indica que debemos identificar los campos que se
repetirán en los registros cuando estos empiecen a ser ingresados.
Toda la subdivisión se debe realizar sin perder ningún dato de la información
necesaria.
La tabla 1 muestra los datos en tercera forma normal para la entidad Clientes.
Tabla 2. Tabla Autos
NroPlaca Modelo Color Fecha HoraIngreso
La tabla 2 muestra los datos en tercera forma normal para la entidad Autos.
La tabla 3 muestra los datos en tercera forma normal para la entidad Empleados.
Tabla 4. Tabla Repuestos
NroReferencia Precio Marca Descripcion
La tabla 4 muestra los datos en tercera forma normal para la entidad Repuestos.
Tabla 5. Tabla Servicios
NroServ Horas FechaServici NroCedulaClie NroPlac NroCedulaEmple
icio o nte a ado
La tabla 6 muestra los datos en tercera forma normal para la entidad Servicios.
La tabla 6 muestra los datos en tercera forma normal para la entidad RepuestoServicio.
Tabla 7. Tabla Facturas
NroFactura NroServicio FechaFactura ValorNeto ValorIva ValorTotal
La tabla 7 muestra los datos en tercera forma normal para la entidad Facturas.
La tabla 8 muestra los datos registrados cuando haya una actualización en la tabla
Clientes.
Esquema relacional
Diseño Físico
El diseño físico tiene como objetivo definir como se realizará la implementación del
diseño lógico establecido para la base de datos, en ella se describirá el diccionario de datos
para tener mejor entendimiento de los componentes de la base de datos, así como definir los
comportamientos que la misma tendrá.
Creación de la base de datos
Creación de tablas
Tabla Clientes
• Scripts
CREATE TABLE [dbo].[Clientes](
[NroCedulaCliente] [int] NOT NULL,
[NombresCliente] [varchar](45) NOT NULL,
[ApellidosCliente] [varchar](45) NOT NULL,
[Telefono] [int] NULL,
[Dirección] [varchar](100) NULL,
Control SMALLINT, CONSTRAINT [PK_Clientes]
PRIMARY KEY CLUSTERED
(
[NroCedulaCliente] 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
Tabla Autos
• Scripts
CREATE TABLE [dbo].[Autos](
[NroPlaca] [varchar](6) NOT NULL,
[Modelo] [varchar](45) NOT NULL,
[Color] [varchar](45) NULL,
[Fecha] [date] NOT NULL,
[HoraIngreso] [time](7) NOT NULL,
CONSTRAINT [PK_Autos] PRIMARY KEY CLUSTERED
(
[NroPlaca] 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
Tabla Repuestos
• Scripts
CREATE TABLE [dbo].[Repuestos](
[NroReferencia] [varchar](8) NOT NULL,
[Precio] [decimal](18, 2) NOT NULL,
[Marca] [varchar](45) NOT NULL,
[Descripcion] [varchar](45) NOT NULL,
CONSTRAINT [PK_Repuestos] PRIMARY KEY CLUSTERED
(
[NroReferencia] 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
Tabla Empleados
• Scripts
CREATE TABLE [dbo].[Empleados](
[NroCedulaEmpleado] [int] NOT NULL,
[NombresEmpleado] [varchar](45) NOT NULL,
[ApellidosEmpleado] [varchar](45) NOT NULL,
Control SMALLINT,
CONSTRAINT [PK_Empleados] PRIMARY KEY CLUSTERED
(
[NroCedulaEmpleado] 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
Tabla Servicios
• Scripts
CREATE TABLE [dbo].[Servicios](
[NroServicio] [int] NOT NULL,
[NroCedulaCliente] [int] NOT NULL,
[NroPlaca] [varchar](6) NOT NULL,
[NroCedulaEmpleado] [int] NOT NULL,
[Horas] [time](7) NULL,
[FechaServicio] [date] NULL,
CONSTRAINT [PK_Servicios] PRIMARY KEY CLUSTERED
(
[NroServicio] 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
Tabla RepuestoServicios
• Scripts
CREATE TABLE [dbo].[RepuestoServicios](
[NroServicio] [int] NOT NULL,
[NroReferencia] [int] NOT NULL,
[CantidadRepuesto] [int] NOT NULL,
[ValorNeto] [decimal](18, 2) NOT NULL,
CONSTRAINT [PK_RepuestoServicios] PRIMARY
KEY CLUSTERED
(
[NroServicio] ASC,
[NroReferencia] 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
ALTER TABLE RepuestoServicios ADD FOREIGN KEY
(NroServicio) REFERENCES Servicios (NroServicio)
GO
Tabla Facturas
• Scripts
CREATE TABLE [dbo].[Facturas](
[NroFactura] [varchar](8) NOT NULL,
[NroServicio] [int] NOT NULL,
[FechaFactura] [date] NOT NULL,
[ValorNeto] [decimal](18, 2) NOT NULL,
[ValorIva] [decimal](18, 2) NOT NULL,
[ValorTotal] [decimal](18, 2) NOT NULL,
CONSTRAINT [PK_Facturas] PRIMARY KEY CLUSTERED
(
[NroFactura] ASC,
[NroServicio] 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
ALTER TABLE Facturas ADD FOREIGN KEY (NroServicio)
REFERENCES Servicios (NroServicio) GO
• Scripts
CREATE PROCEDURE RegistrarEmpleado
@NroCedulaEmpleado int,
@NombresEmpleado nvarchar(45),
@ApellidosEmpleado nvarchar(45)
AS
EXEC RegistrarEmpleado
@NroCedulaEmpleado='InsertaDato',@NombresEmpleado='InsertaDato
',@ApellidosEmpleado=' InsertaDato'
• Scripts
CREATE PROCEDURE [dbo].[ActualizarEmpleado]
@NroCedulaEmpleado int,
@NombresEmpleado nvarchar(45) ,
@ApellidosEmpleado nvarchar(45)
AS
UPDATE [dbo].[Empleados]
SET
NombresEmpleado=@NombresEmpleado,ApellidosEmpleado=@Apellidos
Empleado
WHERE NroCedulaEmpleado=@NroCedulaEmpleado
• Scripts
CREATE PROCEDURE RegistrarCliente
@NroCedulaCliente int,
@Nombrescliente nvarchar(45),
@ApellidosCliente nvarchar(45),
@Telefono int,
@Direccion nvarchar(100)
AS
• Scripts
CREATE PROCEDURE [dbo].[ActualizarCliente]
@NroCedulaCliente INT,
@NombresCliente VARCHAR (45),
@ApellidosCliente VARCHAR (45),
@Telefono INT,
@Direccion VARCHAR (100)
AS
UPDATE dbo.Clientes
SET NroCedulaCliente = @nrocedulacliente,
NombresCliente = @nombrescliente,
ApellidosCliente = @apellidoscliente,
Telefono = @telefono,
Dirección = @Direccion
WHERE NroCedulaCliente=@NroCedulaCliente GO
• Scripts
CREATE PROCEDURE RegistrarAuto
@NroPlaca VARCHAR (6),
@Modelo VARCHAR (45),
@Color VARCHAR (45),
@Fecha DATE,
@HoraIngreso TIME
AS
• Scripts
CREATE PROCEDURE [dbo].[ActualizarAuto]
@NroPlaca VARCHAR (6),
@Modelo VARCHAR (45),
@Color VARCHAR (45),
@Fecha DATE,
@HoraIngreso TIME
AS
UPDATE dbo.Autos
SET NroPlaca = @nroplaca,
Modelo = @modelo,
Color = @color,
Fecha = @fecha,
HoraIngreso = @horaingreso
WHERE NroPlaca=@nroplaca
GO
• Scripts
CREATE PROCEDURE RegistrarRepuesto
@NroReferencia INT,
@Precio DECIMAL (18, 2),
@Marca VARCHAR (45),
@Descripcion VARCHAR (45)
AS
• Scripts
• Scripts
CREATE ALTER PROCEDURE RegistrarServicio
@NroServicio INT,
@NroCedulaCliente INT,
@NroPlaca VARCHAR (6),
@NroCedulaEmpleado INT,
@Horas TIME,
@FechaServicio DATE
AS
INSERT INTO dbo.Servicios (NroServicio,NroCedulaCliente,
NroPlaca, NroCedulaEmpleado, Horas, FechaServicio)
VALUES (@NroServicio,@nrocedulacliente, @nroplaca,
@nrocedulaempleado, @horas, @fechaservicio)
GOProcedimiento almacenado ActualizarServicio
• Scripts
CREATE PROCEDURE ActualizarServicio
@NroServicio INT,
@NroCedulaCliente INT,
@NroPlaca VARCHAR (6),
@NroCedulaEmpleado INT,
@Horas TIME,
@FechaServicio DATE
AS
UPDATE dbo.Servicios
SET NroServicio=@NroServicio,
NroCedulaCliente = @nrocedulacliente,
NroPlaca = @nroplaca,
NroCedulaEmpleado = @nrocedulaempleado,
Horas = @horas,
FechaServicio = @fechaservicio WHERE
NroServicio=@NroServicio
• Scripts
CREATE PROCEDURE RegistrarRepuestoServicio
@NroServicio INT,
@NroReferencia INT,
@CantidadRepuesto INT ,
@ValorNeto DECIMAL (18, 2)
AS
INSERT INTO dbo.RepuestoServicios (NroServicio, NroReferencia,
CantidadRepuesto, ValorNeto)
VALUES (@nroservicio, @nroreferencia, @cantidadrepuesto,
@valorneto)
GO
• Scripts
CREATE PROCEDURE RegistrarFactura
@NroFactura VARCHAR (8),
@NroServicio INT,
@FechaFactura DATE
AS
INSERT INTO dbo.Facturas (NroFactura, NroServicio,
FechaFactura, ValorNeto, ValorIva, ValorTotal)
SELECT
@NroFactura,@NroServicio,@FechaFactura,SUM(R.ValorNeto),
SUM((R.ValorNeto*19)/100),
SUM(((R.ValorNeto*19)/100)+R.ValorNeto)
FROM Servicios S MU
INNER JOIN RepuestoServicios R ON
S.NroServicio=R.NroServicio
WHERE S.NroServicio=@NroServicio
GO
Triggers ActualizarClientes
FOR UPDATE AS
IF @@ROWCOUNT > 0 AND NOT Update(Control) BEGIN
Triggers ActualizarEmpleados
Función Facturas
La presente función tiene como finalidad mostrar detalles de las facturas con los
datos relevantes asociados a esta.
• Scripts
CREATE FUNCTION [dbo].[fn_Facturas] (@NroFactura
nvarchar(8)) RETURNS TABLE AS
RETURN (
SELECT
S.NroServicio,C.NroCedulaCliente,C.NombresCliente,C.ApellidosCliente,S.
NroPlaca,S.FechaServicio,
F.FechaFactura,F.NroFactura,F.ValorNeto,F.ValorIva,F.ValorTotal
FROM Facturas F
INNER JOIN Servicios S ON S.NroServicio=F.NroServicio
INNER JOIN Clientes C ON
S.NroCedulaCliente=C.NroCedulaCliente WHERE
F.NroFactura = @NroFactura
)
Para su ejecución se deberá ejecutar el siguiente Query que recibe como parámetro
el número de la factura a consultar.
SELECT * FROM dbo.fn_Facturas (@NroFactura)
La presente función tiene como finalidad mostrar detalles de los repuestos asociados
a las facturas con los datos relevantes asociados a esta.
• Scripts
CREATE FUNCTION [dbo].[fn_DetallesFacturas] (@NroFactura
nvarchar(8)) RETURNS TABLE AS
RETURN (
SELECT
F.FechaFactura,F.NroFactura,S.NroServicio,S.FechaServicio,RS.NroRefere
ncia,R.Descripcion, RS.CantidadRepuesto,R.Precio
FROM Facturas F
INNER JOIN Servicios S ON S.NroServicio=F.NroServicio
INNER JOIN RepuestoServicios RS ON
S.NroServicio=RS.NroServicio
INNER JOIN Repuestos R ON
RS.NroReferencia=R.NroReferencia
WHERE F.NroFactura = @NroFactura
)
Para su ejecución se deberá ejecutar el siguiente Query que recibe como parámetro
el número de la factura a consultar.
SELECT * FROM dbo.fn_DetallesFacturas (@NroFactura)
Para las consultas de las tablas generadas se debe utilizar las siguientes consultas
con el fin de validar tanto la existencia de las tablas con los registros incluidos en ellas.
• Scripts
SELECT * FROM Clientes
SELECT * FROM Empleados
SELECT * FROM Autos
SELECT * FROM Servicios
SELECT * FROM Repuestos
SELECT * FROM RepuestoServicios
SELECT * FROM Facturas
Informe de pruebas
Registrar EXECUTE
Clientes dbo.RegistrarCliente
1128521458, 'Gabriel', 'Torres
Dominguez', 6541214,
'Soledad Cll 23- 34 '
Actualizar EXECUTE
Clientes dbo.ActualizarCliente
1128521458, 'Gabriel de
Jesus', 'Torres Dominguez',
6541214 , 'Soledad Cll
23- 34 '
SELECT * FROM Clientes
WHERE
NroCedulaCliente='11285214
58'
Registrar EXECUTE
Empleado dbo.RegistrarEmpleados
9010451, 'Ronald
Ricardo','Ortiz'
Actualizar EXECUTE
empleados dbo.ActualizarEmpleado
9010451, 'Ronald','Ortiz'
Registrar EXECUTE
Autos dbo.RegistrarAuto 'RTO123',
'Mercedes Benz', 'Blanco',
'2020-12-14', '10:00:00'
Actualizar EXECUTE
Autos dbo.ActualizarAuto
'RTO123', 'Mercedes Benz
2021', 'Rojo', '2020-12-14',
'10:00:00'
Para el caso de los Triggers, estos están habilitados para cuando se realice una
actualización a los datos de las tablas Empleados y Clientes se inserte un registro con el
dato de la actualización.