#--------------------------------------------------------------------------------# #-----------------------------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 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 cliente_direccion; drop table if exists cliente_telefono; drop table if exists trabajador_direccion; drop table if exists trabajador_telefono; 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) not null, apellido_materno varchar(255) not 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, isbn varchar(255) not null, titulo varchar(255) default null, numero_paginas int not null, precio_referencia int not null, ano_publicacion int default null, editorial_id int unsigned not null, foreign key (editorial_id) references editorial (id) on delete restrict on update cascade, inserted_at timestamp default CURRENT_TIMESTAMP ); create table ejemplar ( id int unsigned primary key auto_increment, serie varchar(255) not null, libro_id int unsigned not null, estado_id int unsigned default 1, 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, inserted_at timestamp default CURRENT_TIMESTAMP ); 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 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, rut varchar(255) not null, empresa_id int unsigned not null, foreign key (empresa_id) references empresa (id) on delete restrict on update cascade, inserted_at timestamp default CURRENT_TIMESTAMP ); 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 restrict 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 restrict 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 restrict 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 restrict 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 restrict 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 restrict 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, costo_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, costo_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, 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, inserted_at timestamp default CURRENT_TIMESTAMP ); 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, 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, inserted_at timestamp default CURRENT_TIMESTAMP ); create table arriendo ( id int unsigned primary key auto_increment, costo_arriendo int not null, multa int, costo_total int, fecha_arriendo date not null, fecha_devolucion_estimada date not null, fecha_devolucion_real date, trabajador_id int unsigned not null, cliente_id int unsigned not null, inserted_at timestamp default CURRENT_TIMESTAMP ); 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 varbinary(2000) 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 ('The Pragmatic Bookshelf'), ('O\'Reilly Media'), ('Manning Publications');