Presentación Bases de datos




DROP DATABASE Arrendamientos;
CREATE DATABASE Arrendamientos;

USE Arrendamientos;

CREATE TABLE Administrador(
Id INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Direccion VARCHAR(50),
Telefono VARCHAR(50),
-- Este campo no es usado para realizar operaciones matemáticas, pero si puede ser usado para realizar búsquedas LIKE
email VARCHAR(50)
);

INSERT INTO Administrador(Id, Nombre, Direccion, Telefono, email) VALUES (1, 'Yeraldin', 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Administrador(Id, Nombre, Direccion, Telefono, email) VALUES (2, 'Juan Manuel', 'Cl 90 # 80 - 80', '2345679', 'correo@electronico.com');
INSERT INTO Administrador(Id, Nombre, Direccion, Telefono, email) VALUES (3, 'Juan Fernando', 'Cl 100 # 80 - 80', '2345610', 'sin_correo@electronico.com');

CREATE TABLE Sede(
Id INT PRIMARY KEY,
Id_Administrador INT NOT NULL, -- Toda sede debe tener un administrador
Direccion VARCHAR(50),
Telefono VARCHAR(50), -- Este campo no es usado para realizar operaciones matemáticas, pero si puede ser usado para realizar búsquedas LIKE
email VARCHAR(50)
);
ALTER TABLE Sede ADD CONSTRAINT UK_Sede_Id_Administrador UNIQUE (Id_Administrador); -- Un administrador puede administrar solamente una sede
ALTER TABLE Sede ADD CONSTRAINT FK_Sede_Id_Administrador FOREIGN KEY (Id_Administrador) REFERENCES Administrador(Id);

INSERT INTO Sede(Id, Id_Administrador, Direccion, Telefono, email) VALUES (1, 1, 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Sede(Id, Id_Administrador, Direccion, Telefono, email) VALUES (2, 2, 'Cl 80 # 90 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Sede(Id, Id_Administrador, Direccion, Telefono, email) VALUES (3, 3, 'Cl 80 # 100 - 80', '2345678', 'correo@electronico.com');


CREATE TABLE Propietario(
Id INT PRIMARY KEY,
Nombre VARCHAR(50),
Direccion VARCHAR(50),
Telefono VARCHAR(50), -- Este campo no es usado para realizar operaciones matemáticas, pero si puede ser usado para realizar búsquedas LIKE
email VARCHAR(50)
);

INSERT INTO Propietario(Id, Nombre, Direccion, Telefono, email) VALUES (1, 'Pedro', 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Propietario(Id, Nombre, Direccion, Telefono, email) VALUES (2, 'Pablo', 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Propietario(Id, Nombre, Direccion, Telefono, email) VALUES (3, 'Vilma', 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');

CREATE TABLE Propiedad(
Id INT PRIMARY KEY,
Id_Propietario INT NOT NULL,
Id_Sede INT NOT NULL,
Cantidad INT, -- Cantidad de habitaciones
Descripcion VARCHAR(50),
Direccion VARCHAR(50),
Precio INT,
Area INT,
Observaciones VARCHAR(50)
);
ALTER TABLE Propiedad ADD CONSTRAINT FK_Propiedad_Id_Propietario FOREIGN KEY (Id_Propietario) REFERENCES Propietario(Id);
ALTER TABLE Propiedad ADD CONSTRAINT FK_Propiedad_Id_Sede FOREIGN KEY (Id_Sede) REFERENCES Sede(Id);

INSERT INTO Propiedad(Id, Id_Propietario, Id_Sede, Cantidad, Descripcion, Direccion, Precio, Area, Observaciones) VALUES (1, 1, 1, 5, 'Finca', 'calle 25 #12-12', 1000000, 100, 'Vista al llano');
INSERT INTO Propiedad(Id, Id_Propietario, Id_Sede, Cantidad, Descripcion, Direccion, Precio, Area, Observaciones) VALUES (2, 2, 2, 1, 'Casa', 'Medellin', 800000, 35, 'Con tendedero');
INSERT INTO Propiedad(Id, Id_Propietario, Id_Sede, Cantidad, Descripcion, Direccion, Precio, Area, Observaciones) VALUES (3, 3, 1, 3, 'Finca', 'Sopetran', 3000000, 50, 'Salida al mar');

CREATE TABLE Cliente(
Id INT PRIMARY KEY,
Nombre VARCHAR(50),
Direccion VARCHAR(50),
Telefono VARCHAR(50), -- Este campo no es usado para realizar operaciones matemáticas, pero si puede ser usado para realizar búsquedas LIKE
email VARCHAR(50),
Certificado_De_Trabajo VARCHAR(50) NOT NULL
);

INSERT INTO Cliente(Id, Nombre, Direccion, Telefono, email, Certificado_De_Trabajo) VALUES (1, 'Ed', 'Cartoon', '4258899', 'ed@cartoon_network.com', 'CN0001');
INSERT INTO Cliente(Id, Nombre, Direccion, Telefono, email, Certificado_De_Trabajo) VALUES (2, 'Edd', 'Cartoon', '4258899', 'edd@cartoon_network.com', 'CN0002');
INSERT INTO Cliente(Id, Nombre, Direccion, Telefono, email, Certificado_De_Trabajo) VALUES (3, 'Eddy', 'Cartoon', '4258899', 'eddy@cartoon_network.com', 'CN0003');


CREATE TABLE Fiador(
Id INT PRIMARY KEY,
Nombre VARCHAR(50),
Direccion VARCHAR(50),
Telefono VARCHAR(50), -- Este campo no es usado para realizar operaciones matemáticas, pero si puede ser usado para realizar búsquedas LIKE
email VARCHAR(50)
);

INSERT INTO Fiador(Id, Nombre, Direccion, Telefono, email) VALUES (-1, 'Moe', 'Sin direccion', '9999999', 'moe@correo.com');
INSERT INTO Fiador(Id, Nombre, Direccion, Telefono, email) VALUES (-2, 'Larry', 'Sin direccion', '9999999', 'Larry@correo.com');
INSERT INTO Fiador(Id, Nombre, Direccion, Telefono, email) VALUES (-3, 'Curly', 'Sin direccion', '9999999', 'Curly@correo.com');



CREATE TABLE Bien( -- Un fiador debe tener bienes
Id INT PRIMARY KEY,
Id_Fiador INT NOT NULL,
Nombre VARCHAR(50)
);
ALTER TABLE Bien ADD CONSTRAINT FK_Bien_Id_Fiador FOREIGN KEY (Id_Fiador) REFERENCES Fiador(Id);

INSERT INTO Bien(Id, Id_Fiador, Nombre) VALUES (1,-1, 'Carro');
INSERT INTO Bien(Id, Id_Fiador, Nombre) VALUES (2,-2, 'Casa');
INSERT INTO Bien(Id, Id_Fiador, Nombre) VALUES (3,-3, 'Moto');

CREATE TABLE Fiador_X_Cliente( -- Un Cliente puede tener uno o más fiadores y un fiador puede fiar a una o más personas
Id_Fiador INT NOT NULL,
Id_Cliente INT NOT NULL,
PRIMARY KEY (Id_Fiador, Id_Cliente)
);
ALTER TABLE Fiador_X_Cliente ADD CONSTRAINT FK_Fiador_X_Cliente_Id_Fiador FOREIGN KEY (Id_Fiador) REFERENCES Fiador(Id);
ALTER TABLE Fiador_X_Cliente ADD CONSTRAINT FK_Fiador_X_Cliente_Id_Cliente FOREIGN KEY (Id_Cliente) REFERENCES Cliente(Id);

INSERT INTO Fiador_X_Cliente(Id_Fiador, Id_Cliente) VALUES (-1, 1);
INSERT INTO Fiador_X_Cliente(Id_Fiador, Id_Cliente) VALUES (-3, 2);
INSERT INTO Fiador_X_Cliente(Id_Fiador, Id_Cliente) VALUES (-1, 3);
INSERT INTO Fiador_X_Cliente(Id_Fiador, Id_Cliente) VALUES (-2, 3);

CREATE TABLE Contrato(
Id INT PRIMARY KEY,
Id_Propiedad INT NOT NULL,
Id_Cliente INT NOT NULL,
Fecha DATE,
Vigente BOOLEAN,
Precio DOUBLE
);
ALTER TABLE Contrato ADD CONSTRAINT FK_Contrato_Id_Propiedad FOREIGN KEY (Id_Propiedad) REFERENCES Propiedad(Id);
ALTER TABLE Contrato ADD CONSTRAINT FK_Contrato_Id_Cliente FOREIGN KEY (Id_Cliente) REFERENCES Cliente(Id);

INSERT INTO Contrato(Id, Id_Propiedad, Id_Cliente, Fecha, Vigente, Precio) VALUES (115, 3, 3, '2018-10-21', TRUE, 500000.00);
INSERT INTO Contrato(Id, Id_Propiedad, Id_Cliente, Fecha, Vigente, Precio) VALUES (201, 1, 1, '2018-11-21', TRUE, 1000000.50);
INSERT INTO Contrato(Id, Id_Propiedad, Id_Cliente, Fecha, Vigente, Precio) VALUES (205, 2, 2, '2015-12-01', TRUE, 100000.80);

CREATE TABLE Pago(
Id INT PRIMARY KEY,
Id_Contrato INT NOT NULL,
Fecha DATE
);
ALTER TABLE Pago ADD CONSTRAINT FK_Pago_Id_Contrato FOREIGN KEY (Id_Contrato) REFERENCES Contrato(Id);

INSERT INTO Pago(Id, Id_Contrato, Fecha) VALUES (1,115,'2018-10-20');
INSERT INTO Pago(Id, Id_Contrato, Fecha) VALUES (2,201,'2018-11-19');
INSERT INTO Pago(Id, Id_Contrato, Fecha) VALUES (3,205,'2018-11-20');
INSERT INTO Pago(Id, Id_Contrato, Fecha) VALUES (4,115,'2018-11-20');


-- Procedimientos almacenados --

DELIMITER $$
CREATE PROCEDURE nuevo_cliente (IN In_Id INT, IN In_Nombre VARCHAR(50), IN In_Direccion VARCHAR(50), IN In_Telefono VARCHAR(50), IN In_email VARCHAR(50), IN In_Certificado_De_Trabajo VARCHAR(50))
BEGIN
SET @Id = In_Id;
SET @Nombre = In_Nombre;
SET @Direccion = In_Direccion;
SET @Telefono = In_Telefono;
SET @email = In_email;
SET @Certificado_De_Trabajo = In_Certificado_De_Trabajo;

INSERT INTO Cliente(Id, Nombre, Direccion, Telefono, email, Certificado_De_Trabajo) VALUES (@Id, @Nombre, @Direccion, @Telefono, @email, @Certificado_De_Trabajo);
END $$
DELIMITER ;

CALL nuevo_cliente(4, 'Tablón', 'La casa de al lado', '3336655', 'tablon@cartoon_network.com','CN0004');

INSERT INTO Propietario(Id, Nombre, Direccion, Telefono, email) VALUES (4, 'Aníbal Ruiz', 'Cl 80 # 80 - 80', '2345678', 'correo@electronico.com');
INSERT INTO Propiedad(Id, Id_Propietario, Id_Sede, Cantidad, Descripcion, Direccion, Precio, Area, Observaciones) VALUES (4, 4, 1, 3, 'Casa', 'Poblado', 100000, 75, 'Por el parque');
INSERT INTO Contrato(Id, Id_Propiedad, Id_Cliente, Fecha, Vigente, Precio) VALUES (126, 4, 3, '2018-10-21', TRUE, 150000.00);


-- Mostrar los datos de las propiedades con número de habitaciones mayor que 3 y tiene un área mayor que 68 mts2 o son tipo casa.
SELECT * FROM Propiedad WHERE (Area>68 and Cantidad>3) or Descripcion='Casa';

-- Mostrar los datos de los pagos generados por la propiedad con dirección calle 25 #12-12.
SELECT * from Pago inner join Contrato inner join Propiedad on Propiedad.Id=Contrato.Id_Propiedad and Pago.Id_Contrato=Contrato.Id WHERE Direccion='calle 25 #12-12';

-- Mostrar los datos de las propiedades arrendadas en fechas menores a 01/01/2016
select * from Contrato Where Fecha<'2016-01-01';

-- Mostrar los datos de clientes que han arrendado casas en el poblado y sus dueños son Jorge Pérez o Aníbal Ruiz
select Cliente.Id, Cliente.Nombre, Cliente.Direccion, Cliente.Telefono, Cliente.email, Cliente.Certificado_De_Trabajo
from Cliente inner join Contrato inner join Propiedad inner join Propietario
on Cliente.Id=Contrato.Id_Cliente and Contrato.Id_Propiedad=Propiedad.id and Propiedad.Id_Propietario=Propietario.id
where (Propietario.Nombre='Aníbal Ruiz' or Propietario.Nombre='Jorge Perez') and Propiedad.Direccion='Poblado';

Comentarios

Entradas populares de este blog

Matrices especiales

Conclusiones Subnetting

Pruebas de escritorio de los ejemplos y PSeInt