sábado, 17 de octubre de 2015

Base de datos de una Biblioteca

Antes que nada, escogí la base de datos de una biblioteca para mi proyecto porque es mas accesible obtener información sobre ella.
El programa que usaremos para hacer nuestra base de datos es Mysql en consola, para introducir datos y hacer un diagrama en Mysql Workbench.

Primero hay que saber como funciona una Biblioteca o por lo menos tener una idea.

Los libros tienen un ISBN que es un sistema de código que se le asigna a cada libro a nivel mundial, Titulo, Editorial es la compañía que imprime el libro, País del libro, Área , Autor o Autores, fecha de lanzamiento(el año en que se lanzo), la edición del libro, tipo de libro (que puede ser: libros, enciclopedias, diccionario, etc), saber que en una biblioteca tiene varias veces el mismo libro y manejan el estado que se encuentra el libro(si esta disponible o no).

Nota:  
- No todos los libros poseen un ISBN, un ejemplo claro son obras literarias y hay algunos libros viejos que no poseen aun isbn.
- Los libros no pueden ser impreso por muchas editoriales, solamente por una.
- Con área nos referimos a la clase de libro que es, ejemplo: matemáticas, calculo, ingeniería, sociología, etc.

Ya teniendo esta información podemos empezar a hacer nuestra base de datos.

-Tabla libros: Necesitamos un código que sera univoco en nuestra biblioteca para el libro, isbn, titulo, para no repetir muchas veces el país, el editorial y el tipo de libro en esta tabla, usaremos un código de país, un código de editorial  y un código para el tipo de libro, fecha de lanzamiento y edición.

Para el área y los autores  haremos tablas apartes y no los incluiremos en esta tabla porque hay libros que poseen mas de un área y un autor, entonces provocan que una relación de muchos a muchos.

-Tabla pais: Código de país y nombre del país.
-Tabla editorial: Código de editorial y nombre del editorial.
-Tabla tipolibro: Código para el tipo de libro  y nombre de cada tipo de libro.
-Tabla area: Código de área y nombre del área.
-Tabla autor:Código de autor y nombre del autor.

Las siguientes 2 tablas nos servirán para relacionar la tabla libro con área y libro con autor:
-Tabla librosporarea: Código de libro y código de área.
-Tabla librosporautor: Código de libro y código de autor.

Como mencionamos anterior mente sobre tener varias veces el mismo libro, necesitamos asignarle un código univoco a cada existencia de libro que se tiene en la biblioteca sean libros iguales o no lo sean.
-Tabla librosporexistencia: Código de existencia y código de libro.

Manejaremos el estado en otra tabla para que se nos sea mas fácil consultar el estado de cada existencia de libro.

-Tabla estadoporexistencia: Código de existencia y código de estado para no ir repitiendo disponible,no disponible y extraviado.
-Tabla estado: Código de estado y estado.

Ahora, para que una persona pedir un libro ya sea préstamo interno o externo se necesita de algo que identifique a la persona y para eso se tiene que afiliar a la biblioteca y para esto haremos 3 tablas: afiliado, tipo de préstamo y préstamo.

-Tabla afiliado: Código de afiliado, nombre y apellidos completos, documento que lo identifique (DUI, NIT, pasaporte, etc.), fecha de nacimiento, teléfono y dirección.
-Tabla  tipoprestamo: Código de tipo de préstamo y el tipo de préstamo.
-Tabla prestamo: Código de préstamo, código de existencia de libro, código de afiliado, fecha y hora en que se realizo el préstamo, tipo de préstamo (interno o externo), fecha y hora en que el afiliado entrego el libro.



Ya teniendo todas las tablas tenemos que identificar las primary key y las foreign key en las tablas.














Ahora ya empezamos a crear nuestra base de datos en Mysql.



Es muy importante introducir datos ya que es una manera mas exacta de probar si funciona o no la base de datos. Para mas facilidad he usado Mysql Workbench para introducir los datos ya que uno escribe como si se estuviéramos llenando una tabla, como podemos observar en el siguiente:

Después de introducir datos en todas las tablas, me voy a Mysql consola a ver si los datos de las tablas se introdujeron correctamente ya que Mysql consola me es mas confiable observar la base de datos, por esa razón la he creado en consola y no en workbench. A continuación se muestran las tablas con datos en modo consola:

En este punto ya tenemos creada nuestra base de datos, pero para visualizar mejor nuestra base de datos decidí hacer un diagrama en Mysql workbench.



14 comentarios:

  1. Excelente explicación. Se nota el trabajo realizado y el interés en dar a conocer su proyecto.

    ResponderBorrar
  2. ME ENCANTO... ESTA BIEN DETALLADO-....GRACIAS

    ResponderBorrar
  3. buenos dias si me puede ayudar con el codigo

    ResponderBorrar
  4. una consulta, no faltarìa en este caso el campo de usuario?

    ResponderBorrar
  5. Indirectamente me ayudaste con una dudad que tenía, gracias.

    ResponderBorrar
  6. How to make a Baccarat strategy - WORRione
    The most important 바카라 difference between a standard roulette and a classic casino strategy is septcasino the one with the biggest 온카지노 differences between a traditional casino game and

    ResponderBorrar
  7. create table editorial(cod_editorial
    int(4) not null auto_increment,
    editorial varchar(100) not null,
    primary key(cod_editorial) )engine =innodb;

    create table tipolibro (cod_tipolibro int(4)
    not null auto_increment,tipo varchar
    (100)not null, primary key(cod_tipolibro))engine=innodb;

    create table pais(cod_pais int (4)not null auto_increment,
    pais varchar(100) not null,primary key (cod_pais))engine=innodb;

    create table libro (cod_libro int(4) not null auto_increment,
    ISBN varchar(50), Titulo varchar(100) not null
    ,cod_editorial int(4) not null,cod_pais int(4)not null,
    cod_tipolibro int(4) not null,
    fechaLanzamiento int(4) not null,
    edicion varchar(100) not null
    ,primary key(cod_libro,cod_editorial,cod_pais,cod_tipolibro
    ), index(cod_editorial), foreign key(cod_editorial) references editorial(cod_editorial), index(cod_pais),
    foreign key(cod_pais) references pais(cod_pais), index(
    cod_tipolibro), foreign key(cod_tipolibro) references tipoLibro(cod_tipolibro))engine=innodb;

    create table area (cod_area int(4) not null auto_increment,
    area varchar(100) not null,primary key (cod_area))engine=innodb;

    create table autor (cod_autor int(4) not null auto_increment,
    autor varchar(150) not null,primary key (cod_autor))engine=innodb;

    create table librosporarea (cod_libro int(4) not null,
    cod_area int (4) not null, primary key(cod_libro,cod_area),
    index(cod_libro), foreign key (cod_libro)
    references libro(cod_libro),
    index(cod_area),
    foreign key (cod_area) references area (cod_area))engine=innodb;

    create table librosporexistencia (cod_existencia int(7) not null,
    cod_libro int (4)not null,
    primary key(cod_existencia,cod_libro),
    index(cod_libro), foreign
    key (cod_libro) references libro (cod_libro))engine=innodb;

    create table estado (cod_estado int(1) not null,
    estado varchar(25) not null,
    primary key (cod_estado))engine=innodb;

    create table estadoporexistencia (cod_existencia int(7) not null,
    cod_estado int(1) not null,
    primary key(cod_existencia,cod_estado),
    index(cod_existencia),
    foreign key (cod_existencia)
    references librosporexistencia (cod_existencia), index(cod_estado),
    foreign key (cod_estado) references estado (cod_estado))engine=innodb;

    create table afiliado (cod_afiliado int(4) not null auto_increment,
    nombre varchar(200) not null,
    apellido1 varchar (150) not null,
    apellido2 varchar(150) ,
    documento varchar(200) not null,
    fechaNacimiento varchar(10)not null,
    telefono varchar(25) not null, Direccion varchar(250) not null,
    primary key (cod_afiliado))engine=innodb;

    create table tipo_prestamo(cod_tipoPrestamo char(1) not null,
    tipo_Prestamo varchar(25) not null,
    primary key (cod_tipoPrestamo))engine=innodb;

    create table prestamo (cod_prestamo int (4) not null,
    cod_existencia int(7) not null,
    cod_afiliado int(4) not null,
    fechaPrestamo varchar(10) not null,
    horaPrestamo varchar(10) not null,
    cod_tipoPrestamo char(1)not null,
    primary key(cod_prestamo,cod_existencia,cod_afiliado,cod_tipoPrestamo),
    index(cod_existencia), foreign key (cod_existencia) references librosporexistencia(cod_existencia),
    index(cod_afiliado), foreign key (cod_afiliado) references afiliado (cod_afiliado),
    index(cod_tipoPrestamo),
    foreign key (cod_tipoPrestamo) references tipo_prestamo (cod_tipoPrestamo))engine=innodb;

    create table librosporautor (cod_libro int(4) not null,
    cod_autor int (4) not null,primary key(cod_libro,cod_autor),
    index(cod_libro),
    foreign key (cod_libro) references libro(cod_libro),
    index(cod_autor), foreign key (cod_autor) references autor (cod_autor))engine=innodb;

    ResponderBorrar