#--------------------------------------------------------------------------------# #-----------------------------Eliminar todas las tablas--------------------------# #--------------------------------------------------------------------------------# set foreign_key_checks = 0; drop table if exists editorial; drop table if exists estado; drop table if exists autor; drop table if exists categoria; drop table if exists idioma; drop table if exists libro; drop table if exists ejemplar; drop table if exists libro_autor; drop table if exists libro_categoria; drop table if exists libro_idioma; drop table if exists correo; drop table if exists direccion; drop table if exists telefono; drop table if exists empresa; drop table if exists distribuidor; drop table if exists cliente; drop table if exists trabajador; drop table if exists distribuidor_direccion; drop table if exists distribuidor_telefono; drop table if exists distribuidor_correo; drop table if exists cliente_direccion; drop table if exists cliente_telefono; drop table if exists cliente_correo; drop table if exists trabajador_direccion; drop table if exists trabajador_telefono; drop table if exists trabajador_correo; drop table if exists factura; drop table if exists boleta; drop table if exists compra; drop table if exists venta; drop table if exists arriendo; drop table if exists libro_compra; drop table if exists libro_venta; drop table if exists libro_arriendo; drop table if exists usuario; set foreign_key_checks = 1; #--------------------------------------------------------------------------------# #--------------Definicion de las tablas relacionadas a los libros----------------# #--------------------------------------------------------------------------------# create table editorial ( id int unsigned primary key auto_increment, nombre varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table estado ( id int unsigned primary key auto_increment, nombre varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table autor ( id int unsigned primary key auto_increment, nombre varchar(255) not null, apellido_paterno varchar(255) null, apellido_materno varchar(255) null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table categoria ( id int unsigned primary key auto_increment, nombre varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table idioma ( id int unsigned primary key auto_increment, nombre varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table libro ( id int unsigned primary key auto_increment, editorial_id int unsigned not null, isbn varchar(255) not null, ano_publicacion int default null, numero_paginas int not null, titulo varchar(255) default null, precio_referencia int not null, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (editorial_id) references editorial (id) on delete restrict on update cascade ); create table ejemplar ( id int unsigned primary key auto_increment, libro_id int unsigned not null, estado_id int unsigned default 1, serie varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP, unique key serie_libro (serie, libro_id), foreign key (libro_id) references libro (id) on delete cascade on update cascade, foreign key (estado_id) references estado (id) on delete restrict on update cascade ); create table libro_autor ( libro_id int unsigned not null, autor_id int unsigned not null, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (autor_id) references autor (id) on delete restrict on update cascade ); create table libro_categoria ( libro_id int unsigned not null, categoria_id int unsigned not null, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (categoria_id) references categoria (id) on delete restrict on update cascade ); create table libro_idioma ( libro_id int unsigned not null, idioma_id int unsigned not null, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (idioma_id) references idioma (id) on delete restrict on update cascade ); #--------------------------------------------------------------------------------# #------------Definicion de las tablas relacionadas a las personas----------------# #--------------------------------------------------------------------------------# create table direccion ( id int unsigned primary key auto_increment, calle varchar(255) not null, numero varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table telefono ( id int unsigned primary key auto_increment, numero varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table correo ( id int unsigned primary key auto_increment, correo varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table empresa ( id int unsigned primary key auto_increment, nombre varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table distribuidor ( id int unsigned primary key auto_increment, empresa_id int unsigned not null, rut varchar(255) not null, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (empresa_id) references empresa (id) on delete restrict on update cascade ); create table cliente ( id int unsigned primary key auto_increment, rut varchar(255) not null, nombre varchar(255) not null, apellido_paterno varchar(255) not null, apellido_materno varchar(255) not null, fecha_nacimiento date not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table trabajador ( id int unsigned primary key auto_increment, rut varchar(255) not null, nombre varchar(255) not null, apellido_paterno varchar(255) not null, apellido_materno varchar(255) not null, fecha_contrato date not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table distribuidor_direccion ( distribuidor_id int unsigned, direccion_id int unsigned, foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, foreign key (direccion_id) references direccion (id) on delete cascade on update cascade ); create table distribuidor_telefono ( distribuidor_id int unsigned, telefono_id int unsigned, foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, foreign key (telefono_id) references telefono (id) on delete cascade on update cascade ); create table distribuidor_correo ( distribuidor_id int unsigned, correo_id int unsigned, foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, foreign key (correo_id) references correo (id) on delete cascade on update cascade ); create table cliente_direccion ( cliente_id int unsigned, direccion_id int unsigned, foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, foreign key (direccion_id) references direccion (id) on delete cascade on update cascade ); create table cliente_telefono ( cliente_id int unsigned, telefono_id int unsigned, foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, foreign key (telefono_id) references telefono (id) on delete cascade on update cascade ); create table cliente_correo ( cliente_id int unsigned, correo_id int unsigned, foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, foreign key (correo_id) references correo (id) on delete cascade on update cascade ); create table trabajador_direccion ( trabajador_id int unsigned, direccion_id int unsigned, foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, foreign key (direccion_id) references direccion (id) on delete cascade on update cascade ); create table trabajador_telefono ( trabajador_id int unsigned, telefono_id int unsigned, foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, foreign key (telefono_id) references telefono (id) on delete cascade on update cascade ); create table trabajador_correo ( trabajador_id int unsigned, correo_id int unsigned, foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, foreign key (correo_id) references correo (id) on delete cascade on update cascade ); #--------------------------------------------------------------------------------# #-------Definicion de las tablas relacionadas a la venta/compra/arriendo---------# #--------------------------------------------------------------------------------# create table factura ( id int unsigned primary key auto_increment, folio varchar(255) not null, precio_neto int not null, precio_iva int not null, fecha_compra datetime not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table boleta ( id int unsigned primary key auto_increment, folio varchar(255) not null, precio_neto int not null, precio_iva int not null, fecha_venta datetime not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table compra ( id int unsigned primary key auto_increment, factura_id int unsigned not null, distribuidor_id int unsigned not null, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (factura_id) references factura (id) on delete restrict on update cascade, foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade ); create table venta ( id int unsigned primary key auto_increment, cliente_id int unsigned not null, trabajador_id int unsigned not null, boleta_id int unsigned not null, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, foreign key (boleta_id) references boleta (id) on delete restrict on update cascade ); create table arriendo ( id int unsigned primary key auto_increment, trabajador_id int unsigned not null, cliente_id int unsigned not null, costo_arriendo int not null, fecha_arriendo date not null, fecha_devolucion_estimada date not null, fecha_devolucion_real date, multa int, costo_total int, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, foreign key (cliente_id) references cliente (id) on delete restrict on update cascade ); create table libro_compra ( libro_id int unsigned, compra_id int unsigned, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (compra_id) references compra (id) on delete restrict on update cascade ); create table libro_venta ( libro_id int unsigned, venta_id int unsigned, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (venta_id) references venta (id) on delete restrict on update cascade ); create table libro_arriendo ( libro_id int unsigned, arriendo_id int unsigned, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (arriendo_id) references arriendo (id) on delete restrict on update cascade ); #--------------------------------------------------------------------------------# #---------------------Definicion de las tablas de usuario------------------------# #--------------------------------------------------------------------------------# create table usuario ( id int unsigned primary key auto_increment, nombre varchar(255) not null, password varchar(255) not null, trabajador_id int unsigned not null, foreign key (trabajador_id) references trabajador (id) on delete cascade on update cascade, inserted_at timestamp default current_timestamp ); #--------------------------------------------------------------------------------# #------------------------Poblar con datos iniciales------------------------------# #--------------------------------------------------------------------------------# insert into estado (nombre) values ('Vendido'), ('Arrendado'), ('Disponible'); insert into idioma (nombre) values ('EspaƱol'), ('Ingles'), ('Portuges'), ('Aleman'), ('Ruso'), ('Japones'); insert into editorial (nombre) values ('Editorial N1'), ('Editorial N2'), ('Editorial N3'); insert into categoria (nombre) values ('Terror'), ('Aventura'), ('Fantasia'); insert into autor(nombre, apellido_paterno, apellido_materno) values ('Howard Philips', 'Lovecraft', NULL), ('Stephen', 'King', NULL), ('Brandon', 'Sanderson', NULL); insert into libro (editorial_id, isbn, ano_publicacion, numero_paginas, titulo, precio_referencia) values (1, '0-765-31178-X', 2006, 541, 'Mistborn: The Final Empire', 10000), (1, '0-765-31688-9', 2007, 590, 'Mistborn: The Well of Ascension', 10000), (1, '978-0-7653-1689-9', 2008, 572, 'Mistborn: The Hero of Ages', 10000), (2, '1231231231232', 1931, 100, 'The Shadow over Innsmouth', 10000), (2, '1231231231232', 1933, 100, 'The Dreams in the Witch House', 10000), (2, '1231231231232', 1936, 100, 'At the Mountains of Madness', 10000), (3, '0385086954', 1974, 199, 'Carrie', 10000), (3, '978-0-670-26077-5', 1979, 428, 'The Dead Zone', 10000), (3, '0-670-81302-8', 1986, 1138, 'It', 10000); insert into libro_autor(libro_id, autor_id) values (1, 3), (2, 3), (3, 3), (4, 1), (5, 1), (6, 1), (7, 2), (8, 2), (9, 2); insert into libro_categoria(libro_id, categoria_id) values (1, 3), (2, 3), (3, 3), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1); insert into libro_idioma(libro_id, idioma_id) values (1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (8, 2), (9, 2); INSERT INTO trabajador VALUES (1, '197638990', 'Daniel', 'Cortes', 'Pincheira', '2019-06-04', '2019-06-04 18:12:55'); INSERT INTO usuario VALUES (1, 'admin', 'IF7nbMo9zxGOH++0op8eE+obeILVzsZCguAqPVydL/0=', 1, '2019-06-05 00:08:50');