-- [+] CREACIÓN DE BASES DE DATOS [+].
CREATE DATABASE 
IF NOT EXISTS -- Solo se creará si no existe
personas;

USE personas;

-- [+] CREACIÓN DE TABLAS [+]

-- → TABLA DE PERSONAS.
-- Solo con tipos de datos [-]
-- CREATE TABLE personas (
-- id INT,
-- nombre varchar(50),
-- apellido varchar(50),
-- edad int,
-- genero enum('Masculino','Femenino','Otro'),
-- email varchar(100),
-- fecha_nacimiento DATE,
-- altura DECIMAL(5,2), -- Se especifica en CM
-- peso decimal(5,2), -- Se especifica en KG
-- ciudad varchar(50),
-- fecha_registro timestamp -- Para registrar cuando se ha dado de alta un registro.
-- );

-- Con todo [-]
CREATE TABLE personas (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre varchar(50) NOT NULL,
apellido varchar(50) NOT NULL,
edad int CHECK (edad >=0 AND edad <= 130),
genero enum('Masculino','Femenino','Otro'),
email varchar(100) UNIQUE,
fecha_nacimiento DATE,
altura DECIMAL(5,2), -- Se especifica en CM
peso decimal(5,2), -- Se especifica en KG
ciudad varchar(50) DEFAULT 'Desconocida',
fecha_registro timestamp DEFAULT CURRENT_TIMESTAMP -- Para registrar cuando se ha dado de alta un registro.
);

-- → TABLA DE CARACTERÍSTICAS FÍSICAS
CREATE TABLE caracteristicas_fisicas(
id int PRIMARY KEY AUTO_INCREMENT,
persona_id INT UNIQUE,
color_ojos VARCHAR(20),
color_pelo VARCHAR(20),
tipo_pelo ENUM('Liso','Ondulado','Rizado',"Muy Rizado"),
complexion ENUM('Delgada','Media',"Robusta"),
tiene_tatuajes BOOLEAN DEFAULT FALSE,
tiene_piercings BOOLEAN DEFAULT FALSE,
FOREIGN KEY (persona_id) references personas(id) ON DELETE CASCADE
-- CASCADE
-- RESTRICT
-- SET NULL
-- NO ACTION
-- SET DEFAULT
);

-- → TABLA DE NACIONALIDADES
CREATE TABLE nacionalidades(
id INT PRIMARY KEY AUTO_INCREMENT,
pais varchar(50) NOT NULL UNIQUE,
codigo_pais CHAR(2) UNIQUE
);

-- → TABLA DE RELACIÓN PERSONAS-NACIONALIDADES
CREATE TABLE persona_nacionalidad(
persona_id INT,
nacionalidad_id INT,
es_principal BOOLEAN DEFAULT TRUE,
PRIMARY KEY (persona_id,nacionalidad_id),
FOREIGN KEY (persona_id) REFERENCES personas(id) ON DELETE CASCADE,
FOREIGN KEY (nacionalidad_id) REFERENCES nacionalidades(id) ON DELETE CASCADE
);

