#--------------------------------------------------------------------------------# #-----------------------------Comenzar ------------------------------------------# #--------------------------------------------------------------------------------# start transaction; set foreign_key_checks = 0; set autocommit = 0; #--------------------------------------------------------------------------------# #--------------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 cliente (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 cliente (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 cliente (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, fecha_emision 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, fecha_emision datetime not null, inserted_at timestamp default CURRENT_TIMESTAMP ); create table orden_compra ( id int unsigned primary key auto_increment, estado enum ('En Curso', 'Recibida', 'Cancelada'), compra_id int unsigned, distribuidor_id int unsigned not null, inserted_at timestamp default CURRENT_TIMESTAMP, foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, foreign key (compra_id) references compra (id) on delete restrict on update cascade ); 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_diaria 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_orden_compra ( libro_id int unsigned, orden_compra_id int unsigned, foreign key (libro_id) references libro (id) on delete restrict on update cascade, foreign key (orden_compra_id) references orden_compra (id) on delete restrict on update cascade ); create table ejemplar_compra ( ejemplar_id int unsigned, compra_id int unsigned, foreign key (ejemplar_id) references ejemplar (id) on delete restrict on update cascade, foreign key (compra_id) references compra (id) on delete restrict on update cascade ); create table ejemplar_venta ( ejemplar_id int unsigned, venta_id int unsigned, foreign key (ejemplar_id) references ejemplar (id) on delete restrict on update cascade, foreign key (venta_id) references venta (id) on delete restrict on update cascade ); create table ejemplar_arriendo ( ejemplar_id int unsigned, arriendo_id int unsigned, foreign key (ejemplar_id) references ejemplar (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 binary(32) not null, salt binary(16) not null, trabajador_id int unsigned not null, inserted_at timestamp default current_timestamp, foreign key (trabajador_id) references trabajador (id) on delete cascade on update cascade ); #--------------------------------------------------------------------------------# #-----------------------------Terminar ------------------------------------------# #--------------------------------------------------------------------------------# set autocommit = 1; set foreign_key_checks = 1; commit;