-- 1. Conectarse al DBMS (esto se hace desde la lĂnea de comandos o cliente PostgreSQL)
-- psql -U usuario
-- 2. Crear la base de datos
CREATE DATABASE venta_online;
-- 3. Conectarse a la base de datos creada
-- \c venta_online
-- 4. Crear la relaciĂłn con todas las restricciones mencionadas
CREATE TABLE usuarios (
id_usuario SERIAL PRIMARY KEY,
nombre_usuario VARCHAR(50) NOT NULL UNIQUE,
contrasena VARCHAR(150) NOT NULL CHECK (LENGTH(contrasena) BETWEEN 8 AND 150),
correo_electronico VARCHAR(100) NOT NULL UNIQUE,
correo_adicional VARCHAR(100) CHECK (correo_adicional IS NULL OR correo_adicional <> correo_electronico),
nombre VARCHAR(50) NOT NULL CHECK (LENGTH(TRIM(nombre)) >= 3),
apellido_paterno VARCHAR(50) NOT NULL CHECK (LENGTH(TRIM(apellido_paterno)) >= 3),
apellido_materno VARCHAR(50) CHECK (apellido_materno IS NULL OR LENGTH(TRIM(apellido_materno)) >= 3),
fecha_nacimiento DATE NOT NULL,
sexo VARCHAR(15) NOT NULL CHECK (sexo IN ('masculino', 'femenino', 'no especificado')),
telefono_celular VARCHAR(15) NOT NULL,
telefono_adicional VARCHAR(15),
tipo_cuenta VARCHAR(20) NOT NULL CHECK (tipo_cuenta IN ('gratuito', 'básico', 'intermedio', 'profesional')),
fecha_creacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
fecha_ultimo_acceso TIMESTAMP
);
-- 5. Agregar 5 registros nuevos
INSERT INTO usuarios (
nombre_usuario, contrasena, correo_electronico, nombre, apellido_paterno, apellido_materno,
fecha_nacimiento, sexo, telefono_celular, tipo_cuenta
) VALUES
('user1', 'password123', 'user1@example.com', 'Juan', 'Perez', 'Gomez', '1990-05-15', 'masculino', '5512345678', 'gratuito'),
('user2', 'password456', 'user2@example.com', 'Maria', 'Lopez', 'Garcia', '1985-08-20', 'femenino', '5512345679', 'básico'),
('user3', 'password789', 'user3@example.com', 'Pedro', 'Gonzalez', NULL, '1995-11-30', 'masculino', '5512345680', 'intermedio'),
('user4', 'passwordabc', 'user4@example.com', 'Ana', 'Martinez', 'Sanchez', '1988-03-25', 'femenino', '5512345681', 'profesional'),
('user5', 'passworddef', 'user5@example.com', 'Carlos', 'Rodriguez', 'Fernandez', '1992-07-10', 'masculino', '5512345682', 'gratuito');
-- 6. Agregar registros especĂficos
INSERT INTO usuarios (
nombre_usuario, contrasena, correo_electronico, nombre, apellido_paterno, apellido_materno,
fecha_nacimiento, sexo, telefono_celular, tipo_cuenta
) VALUES
('martin.hernanez', 'martinhdez', 'martin.hernanez@mujex.com', 'MartĂn', 'Hernandez', NULL, '1990-01-15', 'masculino', '5511111111', 'gratuito'),
('alejandra.perez.sanchez', 'alendrapesa', 'alejandra.perez.sanchez@mujex.com', 'Alejandra', 'Perez', 'Sanchez', '1990-02-12', 'femenino', '5522222222', 'básico'),
('jhon.breakfast', 'jhon.breakfast', 'jhon.breakfast@wwc.com', 'Juan', 'Desayuno', NULL, '1985-05-20', 'masculino', '5533333333', 'profesional');
-- 7. Actualizar fecha de nacimiento de Alejandra Pérez Sánchez
UPDATE usuarios
SET fecha_nacimiento = '1995-02-12'
WHERE nombre_usuario = 'alejandra.perez.sanchez';
-- 8. Agregar opciĂłn no binario en el campo sexo
ALTER TABLE usuarios
DROP CONSTRAINT usuarios_sexo_check;
ALTER TABLE usuarios
ADD CONSTRAINT usuarios_sexo_check
CHECK (sexo IN ('masculino', 'femenino', 'no especificado', 'no binario'));
-- 9. Agregar opciones silver, gold y platinum en tipos de usuario
ALTER TABLE usuarios
DROP CONSTRAINT usuarios_tipo_cuenta_check;
ALTER TABLE usuarios
ADD CONSTRAINT usuarios_tipo_cuenta_check
CHECK (tipo_cuenta IN ('gratuito', 'básico', 'intermedio', 'profesional', 'silver', 'gold', 'platinum'));
-- 10. Eliminar 3 registros y agregar 8 más
DELETE FROM usuarios WHERE id_usuario IN (1, 3, 5);
INSERT INTO usuarios (
nombre_usuario, contrasena, correo_electronico, correo_adicional, nombre, apellido_paterno, apellido_materno,
fecha_nacimiento, sexo, telefono_celular, telefono_adicional, tipo_cuenta
) VALUES
('user6', 'passwordghi', 'user6@example.com', 'user6.alt@example.com', 'Laura', 'Diaz', 'Ramirez', '1993-04-18', 'femenino', '5512345683', '5512345684', 'silver'),
('user7', 'passwordjkl', 'user7@example.com', NULL, 'Roberto', 'Sanchez', 'Mendez', '1987-09-22', 'masculino', '5512345685', NULL, 'gold'),
('user8', 'passwordmno', 'user8@example.com', 'user8.alt@example.com', 'Sofia', 'Castro', 'Vega', '1991-12-05', 'femenino', '5512345686', '5512345687', 'platinum'),
('user9', 'passwordpqr', 'user9@example.com', NULL, 'Jorge', 'Ruiz', 'Ortiz', '1989-06-30', 'masculino', '5512345688', NULL, 'básico'),
('user10', 'passwordstu', 'user10@example.com', 'user10.alt@example.com', 'Patricia', 'Mendoza', 'Rios', '1994-03-15', 'femenino', '5512345689', '5512345690', 'intermedio'),
('user11', 'passwordvwx', 'user11@example.com', NULL, 'Fernando', 'Herrera', 'Guzman', '1986-08-25', 'masculino', '5512345691', NULL, 'profesional'),
('user12', 'passwordyz1', 'user12@example.com', 'user12.alt@example.com', 'Gabriela', 'Flores', 'Morales', '1996-01-10', 'femenino', '5512345692', '5512345693', 'silver'),
('user13', 'password234', 'user13@example.com', NULL, 'Ricardo', 'Ortega', 'Pineda', '1997-07-20', 'masculino', '5512345694', NULL, 'gold');
-- 11. Agregar dos atributos nuevos
ALTER TABLE usuarios
ADD COLUMN pais VARCHAR(50) DEFAULT 'México';
ALTER TABLE usuarios
ADD COLUMN verificado BOOLEAN DEFAULT FALSE;
-- Actualizar algunos registros con los nuevos atributos
UPDATE usuarios SET verificado = TRUE WHERE id_usuario IN (2, 4, 7, 10, 12);
UPDATE usuarios SET pais = 'Estados Unidos' WHERE nombre_usuario = 'jhon.breakfast';
UPDATE usuarios SET pais = 'España' WHERE id_usuario = 8;