0% encontró este documento útil (0 votos)
2 vistas3 páginas

Estructura de Base de Datos para Biblioteca

Cargado por

jhoannperez61
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas3 páginas

Estructura de Base de Datos para Biblioteca

Cargado por

jhoannperez61
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

DROP TABLE IF EXISTS sanciones;

DROP TABLE IF EXISTS reservas;


DROP TABLE IF EXISTS prestamos;
DROP TABLE IF EXISTS libros_autores;
DROP TABLE IF EXISTS libros;
DROP TABLE IF EXISTS autores;
DROP TABLE IF EXISTS ubicaciones;
DROP TABLE IF EXISTS editoriales;
DROP TABLE IF EXISTS categorias;
DROP TABLE IF EXISTS usuarios;
DROP TABLE IF EXISTS roles;

CREATE TABLE roles (


id_rol SERIAL PRIMARY KEY,
nombre_rol VARCHAR(50) NOT NULL
);

CREATE TABLE usuarios (


id_usuario SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
correo VARCHAR(100) NOT NULL,
id_rol INT NOT NULL REFERENCES roles(id_rol)
);

CREATE TABLE categorias (


id_categoria SERIAL PRIMARY KEY,
nombre_categoria VARCHAR(100) NOT NULL
);

CREATE TABLE editoriales (


id_editorial SERIAL PRIMARY KEY,
nombre_editorial VARCHAR(100) NOT NULL
);

CREATE TABLE ubicaciones (


id_ubicacion SERIAL PRIMARY KEY,
descripcion VARCHAR(100) NOT NULL
);

CREATE TABLE autores (


id_autor SERIAL PRIMARY KEY,
nombre_autor VARCHAR(100) NOT NULL
);

CREATE TABLE libros (


id_libro SERIAL PRIMARY KEY,
titulo VARCHAR(200) NOT NULL,
id_categoria INT NOT NULL REFERENCES categorias(id_categoria),
id_editorial INT NOT NULL REFERENCES editoriales(id_editorial),
id_ubicacion INT NOT NULL REFERENCES ubicaciones(id_ubicacion),
stock INT CHECK (stock >= 0)
);

CREATE TABLE libros_autores (


id_libro INT NOT NULL REFERENCES libros(id_libro),
id_autor INT NOT NULL REFERENCES autores(id_autor),
PRIMARY KEY (id_libro, id_autor)
);

CREATE TABLE prestamos (


id_prestamo SERIAL PRIMARY KEY,
id_usuario INT NOT NULL REFERENCES usuarios(id_usuario),
id_libro INT NOT NULL REFERENCES libros(id_libro),
fecha_prestamo TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_devolucion TIMESTAMP
);

CREATE TABLE reservas (


id_reserva SERIAL PRIMARY KEY,
id_usuario INT NOT NULL REFERENCES usuarios(id_usuario),
id_libro INT NOT NULL REFERENCES libros(id_libro),
fecha_reserva TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE sanciones (


id_sancion SERIAL PRIMARY KEY,
id_usuario INT NOT NULL REFERENCES usuarios(id_usuario),
id_prestamo INT NOT NULL REFERENCES prestamos(id_prestamo),
motivo TEXT,
monto DECIMAL(10,2)
);

INSERT INTO roles (nombre_rol) VALUES


('Administrador'),
('Lector');

INSERT INTO usuarios (nombre, correo, id_rol) VALUES


('Ana Torres', 'ana@[Link]', 2),
('Carlos Ruiz', 'carlos@[Link]', 2),
('Bibliotecario Admin', 'admin@[Link]', 1);

INSERT INTO categorias (nombre_categoria) VALUES


('Ciencia Ficción'),
('Fantasía'),
('Historia'),
('Tecnología');

INSERT INTO editoriales (nombre_editorial) VALUES


('Planeta'),
('Alfaguara'),
('Anagrama');
INSERT INTO ubicaciones (descripcion) VALUES
('Estantería A1'),
('Estantería B2'),
('Sala de consulta'),
('Pasillo central');

INSERT INTO autores (nombre_autor) VALUES


('Isaac Asimov'),
('J.K. Rowling'),
('Yuval Noah Harari'),
('George Orwell');

INSERT INTO libros (titulo, id_categoria, id_editorial, id_ubicacion, stock) VALUES


('Fundación', 1, 1, 1, 3),
('Harry Potter y la piedra filosofal', 2, 2, 2, 2),
('Sapiens: De animales a dioses', 3, 3, 3, 2),
('1984', 1, 2, 4, 1);

INSERT INTO libros_autores (id_libro, id_autor) VALUES


(1, 1),
(2, 2),
(3, 3),
(4, 4);

NSERT INTO prestamos (id_usuario, id_libro) VALUES (1, 1); -- Ana → Fundación
INSERT INTO prestamos (id_usuario, id_libro) VALUES (2, 2); -- Carlos → Harry
Potter

UPDATE libros SET stock = stock - 1 WHERE id_libro = 1 AND stock > 0;
UPDATE libros SET stock = stock - 1 WHERE id_libro = 2 AND stock > 0;

INSERT INTO reservas (id_usuario, id_libro) VALUES (2, 3); -- Carlos reserva
Sapiens

INSERT INTO sanciones (id_usuario, id_prestamo, motivo, monto) VALUES


(2, 2, 'Devolución con 5 días de retraso', 3.50);

También podría gustarte