Sunteți pe pagina 1din 51

201

Proyecto Final
Base de Datos Sql Server

EDUAL PUMARRUMI
1

Proyecto Final Base de Datos

Indice_________________________________________________________________________________________________
1.-Objeto del Proyecto..................................................................................................4
2.-Creacin de la Base de Datos........................................................................................6
3.-Creacin de tablas...................................................................................................8
3.1-Diseo de relacin de las tablas................................................................................10
3.2-Tipos de Datos.................................................................................................11
4.-Clave principal (Primary Key)......................................................................................14
5.-Clave Secundaria (Foreign Key)....................................................................................16
6.-Diagrama de base de datos........................................................................................18
7.-Restricciones (Check)..............................................................................................20
8.-Reglas de Negocio.................................................................................................22
9.-Introducir Datos (INSERT INTO)....................................................................................25
10.-Vistas............................................................................................................. 30
11.-Funciones........................................................................................................32
12.-Procedimientos Almacenados....................................................................................34
13.-Pruebas Realizadas...............................................................................................36
13.1.-Reglas de Negocio...........................................................................................37
13.2.-Auditorias de Negocio........................................................................................38
13.3.-Vistas........................................................................................................39
13.4.-Funciones....................................................................................................39
13.5.-Procedimientos Almacenados................................................................................42
14.-Script.............................................................................................................43

Proyecto Final Base de Datos

14.1.-Base de datos................................................................................................44
14.2.-Tablas........................................................................................................44
14.3.-Clave Principal...............................................................................................45
14.4.-Clave Secundaria.............................................................................................45
14.5.-Restricciones CHECK........................................................................................46
14.6.-Reglas de Negocio...........................................................................................46
14.7.-Auditorias de Negocio........................................................................................47
14.8.-Introducir datos (INSERT INTO)...............................................................................48
14.9.-Vistas........................................................................................................51
14.10.-Funciones...................................................................................................51
14.11.-Procedimientos Almacenados...............................................................................51
14.12.-Pruebas Realizadas.........................................................................................52

Proyecto Final Base de Datos

1.-Objeto del Proyecto.

Proyecto Final Base de Datos

1.-Objeto del Proyecto.


El objeto del proyecto es el diseo de una base de datos para una empresa constructora, la base de datos debe contener la
informacin de las obras y los empleados dedicados a ellas, as como la maquinaria, herramientas y medio auxiliares propuestos
a la obra.
La base de datos, tiene que contener la informacin suficiente para identificar cualquier empleado o maquinaria en la obra
especificada, al igual que el movimiento de personal o herramientas en las diferentes obras. Las tablas de la base de datos tiene
la funcin de mostrar los datos requerido por el cliente con las relaciones entre tablas, para que la informacin sea fluida y no se
demore en mostrarla en pantalla. Las tablas para la base de datos propuesta consta de:
-Obras; su funcin guardar la informacin de la situacin de las obras, presupuesto, el personal y maquinaria dedicada a ella.
-Utensilios de Obra; El material o maquinaria que est registrado en obra.
-Empleados; los datos de los empleados, contratados o subcontratados y la informacin de cada uno y su rango en la empresa.
-Categoras; es el nivel del empleado en la empresa.
-Utensilios; los materiales y la maquinara en almacn
-Materiales; los materiales empleados en las obras.
-Almacn; materiales o maquinara ubicada dentro del almacn.
-Ubicacin; situacin de la obra designada.
- Utensilios Principales; los materiales y la maquinara, tabla para controlar el cdigo.

Proyecto Final Base de Datos

2.-Creacin de la Base de Datos.

Proyecto Final Base de Datos


2.-Creacin de la base de datos
En primer lugar debemos crear la base de datos, y el directorio raz donde se crea la base de datos. Normalmente su asignacin
ser en el disco duro: C:\ , indicaremos las propiedades de la base de datos referente al almacenamiento de los archivos y
registro de transacciones.

Tambin se puede crear la base de datos a travs del entorno de gestin Sql. Pinchamos con el botn derecho del ratn donde
indica Bases de Datos, y damos crear Nueva Base de Datos. Nos aparecer una ventana donde ingresaremos el nombre y
las propiedades de la base de datos.

Proyecto Final Base de Datos

3.-Creacin de tablas

Proyecto Final Base de Datos

3.-Creacin de tablas
Los campos que deben contener las tablas deben incluir la clave primaria y secundaria para las relaciones entre ellas.
En la tabla de dbo.Obras, los campos que contiene son los siguientes:

Cod_Obr : Cdigo de la obra.(PK)


Nom_Obr: Nombre de la obra.
Situ_Obr: Situacin de la obra.
Pres_Obr: Presupuesto de la obra.
Jef_Obr: Jefe de obra. (FK)

En la tabla de dbo.UtensiliosObras, los campos que contiene son los siguientes:

Testigo_1: Restriccin check si es MAT (Material) o MAQ (Maquinara).


Cod_utensilio: Cdigo material o maquinaria. .(FK)
Cod_Obr : Cdigo de la obra.(FK)
Cantidad
FechaEntrega

En la tabla de dbo.Empleados, los campos que contiene son los siguientes:

Dni_Emp : DNI del empleado.(PK)


Nom_Emp: Nombre del empleado.
Ape_Emp: Apellidos del empleado.
Cat_Emp : Nivel de categora del empleado.(FK)
Cod_Obr : Cdigo de la obra.(FK)
Direc_Emp: Direccin del empleado.
FechaAlta
FechaNacimiento
Vehculo: De empresa.
Telfono
CuentCorr: Cuenta Corriente Empleado.
NSS: Nmero Seguridad Social.

En la tabla de dbo.Categorias, los campos que contiene son los siguientes:

Cod_Cat : Cdigo categora del empleado.(PK)


Nom_Cat: Nombre de la categora del empleado.
Salario: Salario de la Categora.

En la tabla de dbo.Utensilios, los campos que contiene son los siguientes:

Cod_Ut : Cdigo utensilio.(PK)


Cod_Alm: Cdigo Almacn. (PK)
Cod_Ubi: Cdigo ubicacin. (PK)
Testigo_1: Restriccin check si es MAT (Material) o MAQ (Maquinara).
Nom_Ut: Nombre utensilio.
Stock_Ut: Stock del utensilio.
9

Proyecto Final Base de Datos


En la tabla de dbo.Almacen, los campos que contiene son los siguientes:

Cod_Alm : Cdigo Almacn.(PK)


Direccion: Ubicacin de Almacn.
Cod_EncAlm: Cdigo encargado almacn. (FK)

En la tabla de dbo.Ubicacion, los campos que contiene son los siguientes:

Cod_Ubi: Cdigo ubicacin. (PK)


Direccin: Ubicacin de almacn.

En la tabla de dbo.UtensiliosPrincipales, los campos que contiene son los siguientes:

Cod_Ut: Cdigo Utensilio. (PK)


Nom_Ut: Nombre Utensilio.

3.1-Diseo de relacin de las tablas

10

Proyecto Final Base de Datos

3.2-Tipos de Datos
Cuando definimos una tabla, variable o constante debemos asignar un tipo de dato que indica los posibles valores. El tipo de
datos define el formato de almacenamiento, espacio que en disco-memoria que va a ocupar un campo o variable, restricciones y
rango de valores vlidos. Transact SQL proporciona una variedad predefinida de tipos de datos.
dbo.Obras

Cod_Obr CHAR(3) (PK)


Nom_Obr VARCHAR(25)
Situ_Obr VARCHAR(30)
Pres_Obr MONEY
Jef_Obr CHAR(9) (FK)

dbo.UtensiliosObras

Testigo_1 CHAR(3)
Cod_utensilio CHAR(3) (FK)
Cod_Obr CHAR(3) (FK)
Cantidad BIGINT
FechaEntrega SMALLDATETIME

dbo.Empleados

Dni_Emp CHAR(9) (PK)


Nom_Emp VARCHAR(15)
Ape_Emp VARCHAR(30)
Cat_Emp CHAR(3) (FK)
Cod_Obr CHAR(3) (FK)
Direc_Emp VARCHAR(50)
FechaAlta SMALLDATETIME
FechaNacimiento SMALLDATETIME
Vehculo BIT
Telfono CHAR(9)
CuentCorr CHAR(20)

NSS CHAR(12)
BajaTemporal BIT
11

Proyecto Final Base de Datos

dbo.Categorias

Cod_Cat CHAR(3) (PK)


Nom_Cat VARCHAR(20)
Salario SMALLMONEY

dbo.Utensilios

Cod_Ut CHAR(3) (PK)


Cod_Alm CHAR(3) (PK)
Cod_Ubi CHAR(3) (PK)
Testigo_1 CHAR(3)
Nom_Ut VARCHAR(20)
Stock_Ut BIGINT

dbo.Almacen

Cod_Alm CHAR(3) (PK)


12

Proyecto Final Base de Datos


Direccion VARCHAR(50)
Cod_EncAlm CHAR(9) (FK)

dbo.Ubicacion

Cod_Ubi CHAR(3) (PK)


Direccin VARCHAR(50)

dbo.UtensiliosPrincipales

Cod_Ut CHAR(3) (PK)


Nom_Ut VARCHAR(20)

13

Proyecto Final Base de Datos

4.-Clave principal (Primary Key)

14

Proyecto Final Base de Datos

4.-Clave principal (Primary Key)


Una tabla debe tener siempre una clave primaria con la cual indizamos la tabla. Un PRIMARY KEY, puede tener un campo o
varios campos que la componen. Asignaremos las claves primarias en la nueva base de datos, identificando el campo como
nico y que nos servir para la vinculacin de las tablas.

Podemos mostrar las claves primarias tambin al crear las tablas, hacemos clic derecho sobre el campo a elegir y
seleccionamos la opcin establecer clave principal.

15

Proyecto Final Base de Datos

5.-Clave Secundaria (Foreign Key)

16

Proyecto Final Base de Datos

5.-Clave Secundaria (Foreign Key)


Con la restriccin FOREIGN KEY, se define un campo o varios, cuyos valores coinciden con la clave primaria de la misma tabla
u otra. La integridad referencial asegura que se mantenga las referencias entre claves primarias y externas.

17

Proyecto Final Base de Datos

6.-Diagrama de base de datos

18

Proyecto Final Base de Datos

6.-Diagrama de base de datos

19

Proyecto Final Base de Datos

7.-Restricciones (Check)

20

Proyecto Final Base de Datos

7.-Restricciones (Check)
Las restricciones CHECK aseguran la integridad de dominio al limitar los valores que son aceptados para una columna.
Aplicaremos las restricciones para s el utensilio es material (MAT) o maquinara (MAQ), as cuando ejecutemos la consulta nos
indicara a que utensilio pertenece.

Tambin incluimos 2 restricciones en la tabla de empleados en los campos Cuenta Corriente y Nmero Seguridad Social, para
que solo podamos ingresar datos numricos y la longitud de esos datos exclusivamente.

21

Proyecto Final Base de Datos

8.-Reglas de Negocio

22

Proyecto Final Base de Datos

8.-Reglas de Negocio
La base de datos contiene Reglas de Negocio, que conviene recordar para el perfecto funcionamiento de la informacin de los
datos a mostrar. De esta manera los datos recuperados deben ser claros y precisos para el usuario de la base de datos, as
podr recoger informacin suficiente sin tener errores de apreciacin en los datos devueltos.
1. No puede contener 2 empleados el mismo nmero de la seguridad social.

2. Restar el stock del almacn.

23

Proyecto Final Base de Datos


3. Restar la cantidad de los utensilios de la obra.

Aplicaremos una Auditoria de Negocio, para la insercin, actualizacin y eliminacin de datos de la base de datos, para
proteger los datos cambiados o insertados e informar al usuario de la operacin que hemos realizado.
1. Empleados de baja temporal, los campos que deben incluir la tabla de empleados de baja temporal es la siguiente:
Dni empleado.
Nombre empleado.
Apellidos empleados.
Categora empleado.
Fecha de baja
Fecha de alta.
Obra del incidente.

24

Proyecto Final Base de Datos

9.-Introducir Datos (INSERT INTO)

9.-Introducir Datos (INSERT INTO)


En primer lugar introduciremos los datos en las tablas las que no tiene relacin y las que tiene solamente clave primaria.

25

Proyecto Final Base de Datos

26

Proyecto Final Base de Datos

27

Proyecto Final Base de Datos

28

Proyecto Final Base de Datos

10.-Vistas

29

Proyecto Final Base de Datos

10.-Vistas
La creacin de vistas refleja el contenido de una tabla o ms tablas, desde la que se puede acceder a los datos como si fuera
una tabla. Contener vistas tiene dos principales razones:

Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la informacin que hay en una tabla,
pero no a toda la tabla.
Comodidad, como hemos dicho el modelo relacional no es el ms cmodo para visualizar los datos, lo que nos puede
llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea.

Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los
datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios sern visibles desde la
vista.
Asignaremos dos vistas, la primera vista nos mostrar la informacin del empleado escogido en la consulta, a la obra que se le
ha ordenado y su respectivo jefe de obra. La segunda vista es para averiguar el sueldo del empleado y lal categora a la que
pertenece.

1. Vista para la informacin del empleado y a que obra est asignado con su respectivo jefe de obra.

2. Vista para averiguar los sueldos de los empleados con su respectiva categora.

30

Proyecto Final Base de Datos

11.-Funciones

31

Proyecto Final Base de Datos

11.-Funciones
Declaramos una funcin de tabla para averiguar los empleados asignados a una determinada obra y nos devolver la
informacin del empleado respecto a su nombre y apellidos. La otra funcin ser escalar para consultar el nmero de utensilios
que contiene la empresa dentro del almacn y fuera.
1. Funcin de valores de tabla para averiguar los empleados asignados a una obra.

2. Funcin escalar para que nos devuelva todos los utensilios que contiene la empresa, dentro del almacn y fuera,
respecto a las obras.

32

Proyecto Final Base de Datos

12.-Procedimientos Almacenados

33

Proyecto Final Base de Datos

12.-Procedimientos Almacenados
Los procedimientos almacenados es una secuencia ordenada de instrucciones T-SQL, que pueden recibir y proporcionar
parmetros por el usuario, y se pueden guardar en el servidor con un nombre, para posteriormente ser invocados y ejecutados.
Una de las principales ventajas de este tipo de objetos, es que al residir en la propia base de datos son compatibles por todos
los usuarios, pudiendo de esta manera beneficiarse de los distintos cachs del servidor. Al mismo tiempo al ser cdigo externo a
la aplicacin puede ser alterado sin que exista siempre la necesidad de modificar el cdigo de la misma.
El procedimiento que vamos a mostrar ser si el utensilio se encuentra en la obra especificada o fuera de ella, en este caso
saldr un mensaje que nos advirtiendo si se encuentra, y la cantidad total del utensilio en cuestin.
1. Examina si el utensilio est en la obra y la cantidad total.

34

Proyecto Final Base de Datos

13.-Pruebas Realizadas

35

Proyecto Final Base de Datos

13.-Pruebas Realizadas
13.1.-Reglas de Negocio

36

Proyecto Final Base de Datos

13.2.-Auditorias de Negocio

13.3.-Vistas

37

Proyecto Final Base de Datos

13.4.-Funciones

38

Proyecto Final Base de Datos

39

Proyecto Final Base de Datos

13.5.-Procedimientos Almacenados

40

Proyecto Final Base de Datos

14.-Script

41

Proyecto Final Base de Datos

42

Proyecto Final Base de Datos

14.-Script
14.1.-Base de datos
CREATE DATABASE ProyecFinal
ON
PRIMARY (NAME = CONST_01,
FILENAME = 'C:\ProyecFinal.mdf',
SIZE = 3MB,
FILEGROWTH = 1MB)
LOG ON (NAME = CONST_01L,
FILENAME = 'C:\ProyecFinaL.ldf',
SIZE = 1MB,
FILEGROWTH = 10%)

14.2.-Tablas
CREATE TABLE Obras
(Cod_Obr CHAR(3)NOT NULL,
Nom_Obr VARCHAR(25)NOT NULL,
Situ_Obr VARCHAR(30)DEFAULT 'ESPAA',
Pres_Obr MONEY NOT NULL,
Jef_Obr CHAR(9))
CREATE TABLE UtensiliosObras
(Testigo_1 CHAR(3)NOT NULL,
Cod_utensilio CHAR(3)NOT NULL,
Cod_Obr CHAR(3)NOT NULL,
Cantidad BIGINT NOT NULL,
FechaEntrega SMALLDATETIME DEFAULT '01/01/2022')
CREATE TABLE Empleados
(Dni_Emp CHAR(9)NOT NULL,
Nom_Emp VARCHAR(15)NOT NULL,
Ape_Emp VARCHAR(30)NOT NULL,
Cat_Emp CHAR(3)NOT NULL,
Cod_Obr CHAR(3)NOT NULL,
Direc_Emp VARCHAR(50)NOT NULL,
FechaAlta SMALLDATETIME DEFAULT '01/01/2022',
FechaNacimiento SMALLDATETIME DEFAULT '01/01/2022',
Vehculo BIT DEFAULT 'True',
Telfono CHAR(9)NOT NULL,
CuentCorr CHAR(20)NOT NULL,
NSS CHAR(12)NOT NULL,
BajaTemporal BIT DEFAULT 0)
CREATE TABLE Categorias
(Cod_Cat CHAR(3)NOT NULL,
Nom_Cat VARCHAR(20)NOT NULL,
Salario SMALLMONEY DEFAULT 100)
CREATE TABLE Utensilios
(Cod_Ut CHAR(3)NOT NULL,
Cod_Alm CHAR(3)NOT NULL,
Cod_Ubi CHAR(3)NOT NULL,
Testigo_1 CHAR(3)NOT NULL,
Nom_Ut VARCHAR(20)NOT NULL,
Stock_Ut BIGINT DEFAULT 0)

43

Proyecto Final Base de Datos


CREATE TABLE Almacen
(Cod_Alm CHAR(3)NOT NULL,
Direccion VARCHAR(50)NOT NULL,
Cod_EncAlm CHAR(9)NOT NULL)
CREATE TABLE Ubicacion
(Cod_Ubi CHAR(3)NOT NULL,
Direccin VARCHAR(50)DEFAULT 'ESPAA')
CREATE TABLE UtensiliosPrincipales
(Cod_Ut CHAR(3)NOT NULL,
Nom_Ut VARCHAR(20)NOT NULL)

14.3.-Clave Principal
ALTER TABLE Obras
ADD CONSTRAINT PK_Obras PRIMARY KEY(Cod_Obr)
ALTER TABLE Empleados
ADD CONSTRAINT PK_Empleados PRIMARY KEY(Dni_Emp)
ALTER TABLE Categorias
ADD CONSTRAINT PK_Categorias PRIMARY KEY(Cod_Cat)
ALTER TABLE Utensilios
ADD CONSTRAINT PK_Ut_alm_Ubi PRIMARY KEY(Cod_Ut,Cod_Alm,Cod_Ubi)
ALTER TABLE Almacen
ADD CONSTRAINT PK_Almacen PRIMARY KEY(Cod_Alm)
ALTER TABLE Ubicacion
ADD CONSTRAINT PK_Ubicacion PRIMARY KEY(Cod_Ubi)
ALTER TABLE UtensiliosPrincipales
ADD CONSTRAINT PK_UtPR PRIMARY KEY(Cod_Ut)

14.4.-Clave Secundaria
ALTER TABLE Almacen
ADD CONSTRAINT FK_Alm FOREIGN KEY(Cod_EncAlm)
REFERENCES Empleados(Dni_Emp)
ON UPDATE CASCADE ON DELETE NO ACTION

ALTER TABLE Obras


ADD CONSTRAINT FK_Obr FOREIGN KEY(Jef_Obr)
REFERENCES Empleados(Dni_Emp)
ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE Empleados
ADD CONSTRAINT FK_CatEmp FOREIGN KEY(Cat_Emp)
REFERENCES Categorias(Cod_Cat)
ALTER TABLE Empleados
ADD CONSTRAINT FK_ObrEmp FOREIGN KEY(Cod_Obr)
REFERENCES Obras(Cod_Obr)
ALTER TABLE UtensiliosObras

44

Proyecto Final Base de Datos


ADD CONSTRAINT FK_CodUtensilios FOREIGN KEY(Cod_utensilio)
REFERENCES UtensiliosPrincipales(Cod_Ut)
ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE UtensiliosObras
ADD CONSTRAINT FK_UtObr FOREIGN KEY(Cod_Obr)
REFERENCES Obras(Cod_Obr)
ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE Utensilios
ADD CONSTRAINT FK_UtAlm FOREIGN KEY(Cod_Alm)
REFERENCES Almacen(Cod_Alm)
ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE Utensilios
ADD CONSTRAINT FK_UtUbi FOREIGN KEY(Cod_Ubi)
REFERENCES Ubicacion(Cod_Ubi)
ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE Utensilios
ADD CONSTRAINT FK_CodUt FOREIGN KEY(Cod_Ut)
REFERENCES UtensiliosPrincipales(Cod_Ut)
ON UPDATE CASCADE ON DELETE NO ACTION

14.5.-Restricciones CHECK
ALTER TABLE UtensiliosObras
ADD CONSTRAINT MatMaq CHECK (Testigo_1 IN('MAT','MAQ'))
ALTER TABLE Empleados
ADD CONSTRAINT CuentCorr
CHECK(CuentCorr LIKE '[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],
[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9]')
ALTER TABLE Empleados
ADD CONSTRAINT NSS
CHECK (NSS LIKE '[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[0-9],[09]')

14.6.-Reglas de Negocio
CREATE TRIGGER TrNSS
ON Empleados
AFTER INSERT
AS
DECLARE @NSS CHAR(12),@VarEmp CHAR(9)
SELECT @NSS = NSS, @VarEmp = Dni_Emp
FROM inserted
IF EXISTS(SELECT NSS,Dni_Emp FROM Empleados WHERE
@NSS = NSS AND @VarEmp <> Dni_Emp)
BEGIN
RAISERROR('NO PUEDE EXISTIR 1 NUMERO DE LA SEGURIDAD SOCIAL
CON DISTINTOS EMPLEADOS',10,1)
ROLLBACK TRAN
END

45

Proyecto Final Base de Datos


CREATE TRIGGER TrggStock
ON Utensilios
--Se ejecuta cuando actualizamos o insertamos
FOR UPDATE,INSERT
AS
--Declaramos las variables
DECLARE
@Stock bigint,
@NewStock bigint
--Inicializamos las variables
SELECT @NewStock = Stock_Ut FROM inserted
SELECT @Stock = STOCK_UT FROM deleted
--Comenzamos con el cdigo
BEGIN
UPDATE Utensilios
SET Stock_Ut = @Stock + @NewStock from Utensilios
inner join inserted on UTENSILIOS.Cod_Ut = INSERTED.Cod_Ut
END
CREATE TRIGGER TrggCantidad
ON UtensiliosObras
--Se ejecuta cuando actualizamos o insertamos
FOR UPDATE,INSERT
AS
--Declaramos las variables
DECLARE
@Cantidad bigint,
@NewCantidad bigint
--Inicializamos las variables
SELECT @NewCantidad = Cantidad FROM inserted
SELECT @Cantidad = Cantidad FROM deleted
--Comenzamos con el cdigo
BEGIN
UPDATE UtensiliosObras
SET Cantidad = @Cantidad + @NewCantidad from UtensiliosObras
inner join inserted on UtensiliosObras.Cod_utensilio = INSERTED.Cod_utensilio
END

14.7.-Auditorias de Negocio
CREATE TABLE EmpleadosBaja
(Dni_Emp CHAR(9)NOT NULL,
Nom_Emp VARCHAR(15)NOT NULL,
Ape_Emp VARCHAR(30)NOT NULL,
Cat_Emp CHAR(3)NOT NULL,
Baja SMALLDATETIME NOT NULL,
Alta SMALLDATETIME,
Cod_Obr CHAR(3)NOT NULL)
CREATE TRIGGER EmpleadoBaja
ON Empleados
FOR UPDATE
AS
IF UPDATE(BajaTemporal)
DECLARE
@Dni CHAR(9),
@Nombre VARCHAR(15),
@Apellidos VARCHAR(30),
@Categoria CHAR(3),
@Baja SMALLDATETIME,
@Alta SMALLDATETIME,

46

Proyecto Final Base de Datos


@Obra CHAR(3)
SELECT @Dni = Dni_Emp FROM inserted
SELECT @Nombre = Nom_Emp FROM inserted
SELECT @Apellidos = Ape_Emp FROM inserted
SELECT @Categoria = Cat_Emp FROM inserted
SET @Baja = GETDATE()
SELECT @Alta = FechaAlta FROM inserted
SELECT @Obra = Cod_Obr FROM inserted
INSERT INTO EmpleadosBaja
VALUES(@Dni,@Nombre,@Apellidos,@Categoria,
@Baja,@Alta,@Obra)

14.8.-Introducir datos (INSERT INTO)


INSERT INTO Categorias
VALUES('C1','Gerente',8000)
INSERT INTO Categorias
VALUES('C2','Jefe de Grupo',5000)
INSERT INTO Categorias
VALUES('C3','Jefe de Obra',2600)
INSERT INTO Categorias
VALUES('C4','Tcnico de Estudios',2300)
INSERT INTO Categorias
VALUES('C5','Encargado',2800)
INSERT INTO Categorias
VALUES('C6','Capataz',2000)
INSERT INTO Categorias
VALUES('C7','Topgrafo',1800)
INSERT INTO Categorias
VALUES('C8','Administrativo',1500)
INSERT INTO Categorias
VALUES('C9','Oficial 1',1800)
INSERT INTO Categorias
VALUES('C10','Oficial 2',1400)
INSERT INTO Categorias
VALUES('C11','Grusta',1800)
INSERT INTO Categorias
VALUES('C12','Camionero',1500)
INSERT INTO Categorias
VALUES('C13','Pen',1400)
INSERT INTO Ubicacion
VALUES('U01','C/Salitre,43 Mlaga')

INSERT INTO Ubicacion


VALUES('U02','C/Boada,s/n Jan')
INSERT INTO Ubicacion

47

Proyecto Final Base de Datos


VALUES('U03','C/Urgell,8 Lorca')

INSERT INTO Ubicacion


VALUES('U04','C/Picasso,101 Sabadell')
INSERT INTO UtensiliosPrincipales
VALUES('001','Grua-Torre')
INSERT INTO UtensiliosPrincipales
VALUES('002','Gondola-Transporte')
INSERT INTO UtensiliosPrincipales
VALUES('003','Excavadora-Mixta')
INSERT INTO UtensiliosPrincipales
VALUES('004','Bobcat-Mini')
INSERT INTO UtensiliosPrincipales
VALUES('005','Camion 3 Ejes')
INSERT INTO UtensiliosPrincipales
VALUES('006','Dumper')
INSERT INTO UtensiliosPrincipales
VALUES('007','Hormigonera')
INSERT INTO UtensiliosPrincipales
VALUES('008','Pala')
INSERT INTO UtensiliosPrincipales
VALUES('009','Ladrillos')
INSERT INTO UtensiliosPrincipales
VALUES('010','Cemento')
INSERT INTO UtensiliosPrincipales
VALUES('011','Tableros')
INSERT INTO UtensiliosPrincipales
VALUES('012','Carro mano')
INSERT INTO Obras
VALUES('O01','12 Viviendas Sant Angelo','C/Esperanza,13 Mlaga',1250432,45)
INSERT INTO Obras
VALUES('O02','Red de Abastecimiento','Circunvalacin Ronda Crdoba',7865430,78)
INSERT INTO Obras
VALUES('O03','34 Viviendas Procusan','C/Esperanto,15 Murcia',4567890,53)
INSERT INTO Obras
VALUES('O04','4 Naves Valero','C/Sorolla,24 Poligono I',3456079,87)

INSERT INTO Empleados


VALUES('34760350J','Jose','Santiago Santiago','C11','O01','C/Alegras,48',
'01/10/2001','07/09/1976','False','659037267','01824284130201561760','081038062643')
INSERT INTO Empleados

48

Proyecto Final Base de Datos


VALUES('45879235L','Ramn','Fernandez Hernandez','C10','O02','C/Fuerteventura,34',
'16/03/2005','14/11/1974','False','698245876','01824283130002347632','084598678325')
INSERT INTO Empleados
VALUES('34890532A','Alberto','Garca Montalvo','C5','O03','C/Almendro,98',
'01/01/2000','27/03/1968','True','628765432','01824282136769064325','087869693444')
INSERT INTO Empleados
VALUES('33567098H ','Roberto','Durn Fabregas','C3','O04','C/Sirocco,102',
'23/12/2002','21/05/1973','True','666789043','01824281136769064325','087869693444')
INSERT INTO Empleados
VALUES('45879350O','Ral','Garca Montalvo','C5','O03','C/Almendro,98',
'01/01/2000','27/03/1968','True','628765432','01824284137643209837','088994437403')
INSERT INTO Empleados
VALUES('34345698I','Mariano','Fernandez Fernandez','C3','O01','C/Saharaui,43',
'11/01/2004','23/03/1976','False','626578900','01824283133409876432','080045218965')
INSERT INTO Empleados
VALUES('33567890F','Manuel','Raya Gonzalez','C13','O01','C/Covadonga,5',
'21/09/2002','28/04/1980','False','676890435','01824283133409874567','080045215678')
INSERT INTO Almacen
VALUES('A01','C/Salitre,43 Mlaga','33567890F')

INSERT INTO Utensilios


VALUES('003','A01','U01','MAQ','Excavadora-Mixta',2)
INSERT INTO Utensilios
VALUES('004','A01','U01','MAQ','Bobcat-Mini',1)
INSERT INTO Utensilios
VALUES('009','A01','U01','MAT','Ladrillos',250)
INSERT INTO Utensilios
VALUES('012','A01','U01','MAT','Hormigonera',6)
INSERT INTO Utensilios
VALUES('007','A01','U01','MAQ','Carro mano',2)
INSERT INTO UtensiliosObras
VALUES('MAQ','001','O01',1,NULL)
INSERT INTO UtensiliosObras
VALUES('MAQ','003','O02',2,NULL)
INSERT INTO UtensiliosObras
VALUES('MAT','009','O03',1000,NULL)
INSERT INTO UtensiliosObras
VALUES('MAT','011','O04',55,'12/12/2011')

14.9.-Vistas
CREATE VIEW Empleados_1

49

Proyecto Final Base de Datos


(Nombre,Apellidos,Categoria,Obra_Pertenece,Jefe_Obra)AS
SELECT Nom_Emp,Ape_Emp,Nom_Cat,Nom_Obr,Jef_Obr
FROM Empleados e,Obras o,Categorias
where O.Cod_Obr = E.Cod_Obr AND e.Cat = Cod_Cat
CREATE VIEW Sueldos
(Nombre,Apellidos,Categoria,Sueldos)AS
SELECT Nom_Emp,Ape_Emp,Nom_Cat,Salario
FROM Empleados INNER JOIN Categorias
ON Cat_Emp = Cod_Cat

14.10.-Funciones
CREATE FUNCTION DBO.Fn_EmpleadosObra(@Obra CHAR(3))
RETURNS TABLE
AS
RETURN
(SELECT Nom_Emp,Ape_Emp,Nom_Cat
FROM Empleados E ,Obras O,Categorias C
WHERE E.Cod_Obr = O.Cod_Obr AND E.Cat_Emp = C.Cod_Cat
AND @Obra = O.Cod_Obr )
CREATE FUNCTION DBO.TotalUten(@Utensilio CHAR(3))
RETURNS INT
AS
BEGIN
DECLARE @Contador INT
SET @Contador = (SELECT SUM(Stock_Ut + Cantidad)
FROM Utensilios u inner join UtensiliosObras uo
on u.Cod_Ut = uo.Cod_utensilio and @Utensilio = Cod_Ut)
IF(@Contador IS NULL)
SET @Contador = (SELECT SUM(Cantidad)
FROM UtensiliosObras
WHERE @Utensilio = Cod_utensilio)
IF(@Contador IS NULL)
SET @Contador = (SELECT SUM(stock_Ut)
FROM Utensilios
WHERE @Utensilio = Cod_ut)
RETURN @Contador
END

14.11.-Procedimientos Almacenados
CREATE PROC ProcUtenObra
@ProUten CHAR(3)
AS
SELECT Cod_utensilio,Nom_Ut,Cod_Obr,Cantidad
FROM UtensiliosObras UO join UtensiliosPrincipales UP
ON UO.Cod_utensilio = UP.Cod_Ut
WHERE @ProUten = UO.Cod_utensilio
BEGIN
--Condicin para utensilios que no se encuentren en la obra

IF (SELECT UO.Cod_utensilio FROM UtensiliosObras UO right outer JOIN Utensilios u


ON UO.Cod_utensilio = U.Cod_Ut where @ProUten = UO.Cod_utensilio) IS NULL
--Imprime la salida si la condicin se cumple
PRINT
'ESTE UTENSILIO NO SE ENCUENTRA EN LA OBRA,POSIBLEMENTE EN ALMACN'
END

50

Proyecto Final Base de Datos


14.12.-Pruebas Realizadas
INSERT INTO Empleados
VALUES('34908765P','Carlos','De Pazos Salmarn','C9','O03','C/Benahavis,265',
'21/02/2005','09/09/1960','False','625786001','01824284130987654322','081038062643')
UPDATE Utensilios
SET Stock_Ut = 10
WHERE Cod_Ut = '004'
SELECT*
FROM Utensilios
WHERE Cod_Ut = '004'
UPDATE Empleados
SET BajaTemporal = 1
WHERE Dni_Emp = '33567098H'
SELECT*
FROM EmpleadosBaja
SELECT*
FROM Empleados_1
SELECT*
FROM Sueldos
SELECT* FROM DBO.Fn_EmpleadosObra('O02')
DECLARE @Contador INT
SET @Contador = DBO.TotalUten('009')
PRINT @Contador
EXEC ProcUtenObra '003'

51

S-ar putea să vă placă și