diff --git a/BD/base_de_datos.md b/BD/base_de_datos.md index 048f8e36e14dc14fd6f50b8afc524311b880e610..ea310e2d0b943c8edf04a88453088dccfb72bc76 100644 --- a/BD/base_de_datos.md +++ b/BD/base_de_datos.md @@ -1,6 +1,7 @@ # Base De Datos * [Diagramas ER](#diagramas-er) +* [Restricciones de Entidades y Relaciones](#restricciones-de-entidades-y-relaciones) * [Creación](#creación-base-de-datos) * [Ingreso de datos](#ejemplo-de-ingreso-de-datos) * [Búsquedas básicas](#consultas-básicas) @@ -11,12 +12,73 @@  +## Restricciones de Entidades y Relaciones + +1.**t_user**: + +* La columna email debe ser única ya que es la clave primaria o un identificador único para cada usuario. + +2.**payment_method**: + +* La columna `id_payment_method` debe ser única ya que es la clave primaria. +* La columna `id_user` debe ser una clave externa que hace referencia a la columna email en la tabla `t_user`, lo que indica que cada método de pago está asociado a un usuario especÃfico. + +3.**role:** + +* La columna `id_role` debe ser única ya que es la clave primaria. +* La columna `id_user` debe ser una clave externa que hace referencia a la columna email en la tabla `t_user`, lo que indica que cada rol está asociado a un usuario especÃfico. + +4.**room:** + +* La columna `id_room` debe ser única ya que es la clave primaria. + +5.**service:** + +* La columna `id_service` debe ser única ya que es la clave primaria. + +6.**payment_method:** + +* La columna `id_payment` debe ser única ya que es la clave primaria. +* La columna `id_user` debe ser una clave externa que hace referencia a la columna email en la tabla `t_user`, lo que indica que cada método de pago está asociado a un usuario especÃfico. + +7.**transference:** + +* La columna `id_transference` debe ser única ya que es la clave primaria. +* La columna `id_payment_method` debe ser una clave externa que hace referencia a la columna `id_payment_method` en la tabla `payment_method`, lo que indica que cada transferencia está asociada a un método de pago especÃfico. + +8.**credit_card:** + +* La columna `id_credit_card` debe ser única ya que es la clave primaria. +* La columna `id_payment_method` debe ser una clave externa que hace referencia a la columna `id_payment_method` en la tabla `payment_method`, lo que indica que cada tarjeta de crédito está asociada a un método de pago especÃfico. + +9.**reserve:** + +* La columna `id_reserve` debe ser única ya que es la clave primaria. +* La columna `id_user` debe ser una clave externa que hace referencia a la columna email en la tabla `t_user`, lo que indica que cada reserva está asociada a un usuario especÃfico. +* La columna `id_service` debe ser una clave externa que hace referencia a la columna `id_service` en la tabla service, lo que indica que una reserva puede estar asociada a un servicio especÃfico. + +10.**invoice:** + +* La columna `id_invoice` debe ser única ya que es la clave primaria. +* La columna `id_user` debe ser una clave externa que hace referencia a la columna email en la tabla `t_user`, lo que indica que cada factura está asociada a un usuario especÃfico. +* La columna `id_reserve` debe ser una clave externa que hace referencia a la columna `id_reserve` en la tabla reserve, lo que indica que una factura puede estar asociada a una reserva especÃfica. + +11.**relacion reserve y room** + +* La columna `id_reserve` en la tabla `reservexroom` debe ser una clave externa que hace referencia a la columna `id_reserve` en la tabla `reserve`, indicando la asociación de cada reserva con una habitación especÃfica. +* La columna `id_room` en la tabla `reservexroom` debe ser una clave externa que hace referencia a la columna `id_room` en la tabla `room`, indicando la habitación reservada para cada reserva. + +12.**relacion reserve y service** + +* La columna `id_reserve` en la tabla `reservexservice` debe ser una clave externa que hace referencia a la columna `id_reserve` en la tabla `reserve`, indicando la asociación de cada reserva con un servicio especÃfico. +* La columna `id_service` en la tabla `reservexservice` debe ser una clave externa que hace referencia a la columna `id_service` en la tabla `service`, indicando el servicio reservado para cada reserva. + ## Creación base de datos ### Crear la tabla usuario ```sql -CREATE TABLE t_user( +CREATE TABLE `t_user`( email VARCHAR(255) PRIMARY KEY NOT NULL, name VARCHAR(100), last_name VARCHAR(100), @@ -32,10 +94,10 @@ CREATE TABLE t_user( ```sql CREATE TABLE role( - id_role INT PRIMARY KEY NOT NULL IDENTITY(1,1), + `id_role` INT PRIMARY KEY NOT NULL IDENTITY(1,1), role_name VARCHAR(100), - id_user VARCHAR(255), - FOREIGN KEY (id_user) REFERENCES t_user(email), + `id_user` VARCHAR(255), + FOREIGN KEY (`id_user`) REFERENCES `t_user`(email), ) ``` @@ -43,7 +105,7 @@ CREATE TABLE role( ```sql CREATE TABLE room( - id_room INT PRIMARY KEY NOT NULL IDENTITY(1,1), + `id_room` INT PRIMARY KEY NOT NULL IDENTITY(1,1), room_type VARCHAR(100), price_per_night DECIMAL(10,2), availability BIT, @@ -60,9 +122,9 @@ CREATE TABLE reserve( arrival_date DATE, departure_date DATE, reserve_status VARCHAR(100), - id_user VARCHAR(255), - id_service INT, - FOREIGN KEY (id_user) REFERENCES t_user(email), + `id_user` VARCHAR(255), + `id_service` INT, + FOREIGN KEY (`id_user`) REFERENCES `t_user`(email), ) ``` @@ -74,9 +136,9 @@ CREATE TABLE invoice( issue_date DATE, total_amount DECIMAL(10,2), payment_status VARCHAR(100), - id_user VARCHAR(255), + `id_user` VARCHAR(255), id_reserve INT, - FOREIGN KEY (id_user) REFERENCES t_user(email), + FOREIGN KEY (`id_user`) REFERENCES `t_user`(email), FOREIGN KEY (id_reserve) REFERENCES reserve(id_reserve), ) ``` @@ -85,7 +147,7 @@ CREATE TABLE invoice( ```sql CREATE TABLE service( - id_service INT PRIMARY KEY NOT NULL IDENTITY(1,1), + `id_service` INT PRIMARY KEY NOT NULL IDENTITY(1,1), description TEXT, service_price DECIMAL(10,2), availability BIT @@ -96,10 +158,10 @@ CREATE TABLE service( ```sql CREATE TABLE payment_method( - id_payment_method INT PRIMARY KEY NOT NULL IDENTITY(1,1), + `id_payment_method` INT PRIMARY KEY NOT NULL IDENTITY(1,1), payment_method_name VARCHAR(100), - id_user VARCHAR(255), - FOREIGN KEY (id_user) REFERENCES t_user(email) + `id_user` VARCHAR(255), + FOREIGN KEY (`id_user`) REFERENCES `t_user`(email) ) ``` @@ -113,8 +175,8 @@ CREATE TABLE transference( bank_name VARCHAR(100), account_number VARCHAR(20), account_holder VARCHAR(100), - id_payment_method INT, - FOREIGN KEY (id_payment_method) REFERENCES payment_method(id_payment_method) + `id_payment_method` INT, + FOREIGN KEY (`id_payment_method`) REFERENCES payment_method(`id_payment_method`) ) ``` @@ -127,8 +189,8 @@ CREATE TABLE credit_card( expiration_date DATE, cvv INT, credit_card_holder VARCHAR(100), - id_payment_method INT, - FOREIGN KEY (id_payment_method) REFERENCES payment_method(id_payment_method) + `id_payment_method` INT, + FOREIGN KEY (`id_payment_method`) REFERENCES payment_method(`id_payment_method`) ) ``` @@ -138,9 +200,9 @@ CREATE TABLE credit_card( CREATE TABLE reserveXroom( id_reserve_room INT PRIMARY KEY NOT NULL IDENTITY(1,1), id_reserve INT, - id_room INT, + `id_room` INT, FOREIGN KEY (id_reserve) REFERENCES reserve(id_reserve), - FOREIGN KEY (id_room) REFERENCES room(id_room) + FOREIGN KEY (`id_room`) REFERENCES room(`id_room`) ) ``` @@ -150,9 +212,9 @@ CREATE TABLE reserveXroom( CREATE TABLE reserveXservice( id_reserve_service INT PRIMARY KEY NOT NULL IDENTITY(1,1), id_reserve INT, - id_service INT, + `id_service` INT, FOREIGN KEY (id_reserve) REFERENCES reserve(id_reserve), - FOREIGN KEY (id_service) REFERENCES service(id_service) + FOREIGN KEY (`id_service`) REFERENCES service(`id_service`) ) ``` @@ -161,7 +223,7 @@ CREATE TABLE reserveXservice( ### Ingreso de datos a usuario ```sql -INSERT INTO t_user (email, name, last_name, password, phone_number, birth_date, nationality, marketing_consent) +INSERT INTO `t_user` (email, name, last_name, password, phone_number, birth_date, nationality, marketing_consent) VALUES ('user1@example.com', 'John', 'Doe', 'password1', '123456789', '1990-05-15', 'American', 1), ('user2@example.com', 'Jane', 'Smith', 'password2', '987654321', '1985-10-20', 'British', 0), @@ -171,7 +233,7 @@ VALUES ### Ingreso de datos a rol ```sql -INSERT INTO role (role_name, id_user) +INSERT INTO role (role_name, `id_user`) VALUES ('Admin', 'user1@example.com'), ('User', 'user2@example.com'), @@ -202,7 +264,7 @@ VALUES ### Ingreso de datos a metodo de pago ```sql -INSERT INTO payment_method (payment_method_name, id_user) +INSERT INTO payment_method (payment_method_name, `id_user`) VALUES ('Credit Card', 'user1@example.com'), ('Credit Card', 'user2@example.com'), @@ -212,7 +274,7 @@ VALUES ### Ingreso de datos a transferencia ```sql -INSERT INTO transference (transference_name, transference_date, bank_name, account_number, account_holder, id_payment_method) +INSERT INTO transference (transference_name, transference_date, bank_name, account_number, account_holder, `id_payment_method`) VALUES ('Rent Payment', '2024-04-09', 'Bank A', '1234567890', 'John Doe', 1), ('Utilities', '2024-04-10', 'Bank B', '0987654321', 'Jane Smith', 2), @@ -222,7 +284,7 @@ VALUES ### Ingreso de datos a tarjeta de pago ```sql -INSERT INTO credit_card (credit_card_number, expiration_date, cvv, credit_card_holder, id_payment_method) +INSERT INTO credit_card (credit_card_number, expiration_date, cvv, credit_card_holder, `id_payment_method`) VALUES ('1234567890123456', '2025-12-31', 123, 'John Doe', 1), ('9876543210987654', '2026-11-30', 456, 'Jane Smith', 2), @@ -232,7 +294,7 @@ VALUES ### Ingreso de datos a reserva ```sql -INSERT INTO reserve (arrival_date, departure_date, reserve_status, id_user) +INSERT INTO reserve (arrival_date, departure_date, reserve_status, `id_user`) VALUES ('2024-05-01', '2024-05-05', 'Confirmed', 'user1@example.com'), ('2024-06-10', '2024-06-15', 'Pending', 'user2@example.com'), @@ -242,7 +304,7 @@ VALUES ### Ingreso de datos a factura ```sql -INSERT INTO invoice (issue_date, total_amount, payment_status, id_user, id_reserve) +INSERT INTO invoice (issue_date, total_amount, payment_status, `id_user`, id_reserve) VALUES ('2024-04-09', 100.00, 'Paid', 'user1@example.com', 1), ('2024-04-10', 150.00, 'Pending', 'user2@example.com', 2), @@ -252,7 +314,7 @@ VALUES ### Ingreso de datos a reserva y cuarto ```sql -INSERT INTO reserveXroom (id_reserve, id_room) +INSERT INTO reserveXroom (id_reserve, `id_room`) VALUES (1, 1), (2, 2), @@ -262,7 +324,7 @@ VALUES ### Ingreso de datos a reserva y servicio ```sql -INSERT INTO reserveXservice (id_reserve, id_service) +INSERT INTO reserveXservice (id_reserve, `id_service`) VALUES (1, 1), (2, 2), @@ -275,10 +337,10 @@ VALUES ```sql SELECT * -FROM t_user AS u -LEFT JOIN payment_method AS pm ON u.email = pm.id_user -LEFT JOIN reserve AS r ON u.email = r.id_user -LEFT JOIN invoice AS inv ON u.email = inv.id_user +FROM `t_user` AS u +LEFT JOIN payment_method AS pm ON u.email = pm.`id_user` +LEFT JOIN reserve AS r ON u.email = r.`id_user` +LEFT JOIN invoice AS inv ON u.email = inv.`id_user` WHERE u.email = 'user1@example.com'; ``` @@ -298,7 +360,7 @@ SELECT * FROM invoice WHERE payment_status = 'Pending'; ```sql SELECT * FROM reserve AS r -JOIN room AS rm ON r.id_room = rm.id_room +JOIN room AS rm ON r.`id_room` = rm.`id_room` WHERE rm.room_type = 'Double'; ``` @@ -323,5 +385,5 @@ SELECT * FROM credit_card WHERE expiration_date < DATEADD(month, 1, GETDATE()); ### Obtener todos los usuarios que dieron su consentimiento para recibir marketing ```sql -SELECT * FROM t_user WHERE marketing_consent = 1; +SELECT * FROM `t_user` WHERE marketing_consent = 1; ```