¿Cómo tratar varios ejemplares del mismo libro en una BD de biblioteca?

Tengo una base de datos de biblioteca en la que empleo una tabla de alumnos, otra de libros y una de préstamo que relacionará a los alumnos y libros que cogen. Si hay por ejemplo 3 ejemplares de un libro determinado, cómo se puede hacer para que la tabla libros en la que hay un campo "ejemplares" (p. Ej. 3) disminuya en un ejemplar cada vez que un alumno se lleva uno de ellos.
Sería más fácil que cada ejemplar de la biblioteca tuviera una identificación única, por ejemplo: libro "El lobo feroz" del que hay 3 ejemplares serán "lobo1", lobo2" y "lobo3" y que en el momento del préstamo podamos escribir en las tablas que el alumno Jose Bueno se lleva el ejemplar "lobo1" del libro Lobo Feroz el día 12-02-03 y lo devolverá el 17-02-03?
Respuesta
1
Pienso que lo mejor que puedes hacer es, aparte de tener un campo en la tabla libros llamado ejemplares que almacena de cuantos libros dispones de cada titulo, podrías tener otro campo numérico que almacene los que has prestado. Así, si tienes 'Pulgarcito' con el campo ejemplares a 3, puedes tener un campo prestados con valores 0, 1, 2 o 3, según hayas prestado o no.
Creo que es lo más óptimo. Luego no podrás prestar libros si elemplares=prestados
Hola Juan
En la tabla puedo poner un campo numérico llamado ejemplares prestados. ¿Pero cómo le digo a la tabla que cada vez que presto uno de esos ejemplares me disminuya en uno el campo "ejemplares prestados"?
Gracias
Imagino que dispondrás de un botón o algo que realiza el préstamo, ¿no? Pues desde ese evento codificas...
dim iPrestados as integer
dim base as database
dim rs as recordset
set base=currentdb
set rs=base.openrecordset("select prestados from libros where cod_libro=" & me.cod_libro)
'me.cod_libro hace referencia al campo cod_libro a prestar de tu formulario
iPrestados=rs.fields(0)
base.execute("update libros set prestados=" & iPrestados-1 & " where cod_libro=" & me.cod_libro
rs.close
set rs=nothing
sewt base=nothing
'Ten en cuenta que esto funciona cuando prestas 1 libro de 1 titulo (iPrestados-1). Si del mismo titulo prestas más de 1, deberás modificarlo para que funcione correctamente.
Y nada más. Saludos y suerte
Pd. Ah, si no te compila, referencias Microsoft DAO 3.6 Object Library desde herramientas->referencias para usar la biblioteca adecuada.

1 respuesta más de otro experto

Respuesta
1
Podrías tener en la tabla ficha de libros dos campos uno Ejemplares_totales y otro Ejemplares_prestados y variar ejemplares_prestados cada vez que se presta o devuelve un libro.
Yo de todas formas tengo una tabla con la ficha de los libros y otra con los ejemplares (id_Libro, Id_ejemplar, Prestado,...) de esta forma, si se da de baja un ejemplar puedo poner el motivo, o si se da de alta la fecha de alta...
Hola de nuevo.
Por tu respuesta, ¿intuyo qué es conveniente que cada libro tenga una identificación única? (id_libro).
Si de un titulo hay tres ejemplares (p. ej.), ¿cada uno debería tener un id único que lo identifique?
¿Pueden varios ejemplares tener el mismo registro (o id) porque corresponden al mismo titulo?
Yo en dbase tenía cada titulo con un registro y si de un titulo tenía varios ejemplares, todos tenían el mismo registro (o lámale id).
De que manera se gestionará mejor una tabla de libros prestados que especifique la fecha de préstamo y devolución creando una tabla que sirva de histórico de préstamos, ¿con fecha y alumno para llevar un control exhaustivo?
Son muchas preguntas, pero te agradecería que me aclarases el mejor camino a seguir.
Muchas gracias por tu tiempo.
Yo tendría un identificador para cada libro (único) y en otra tabla de ejemplares guardaría el Id del libro al que pertenece y un Id único para cada ejemplar.
Luego tendría una tabla de préstamos (o de movimientos ) en la que se harían los históricos.
IdEjemplar, IdPersona (alumno, encargado biblioteca), IdMovimiento (préstamo, devolución, alta, baja...) de esta forma podrás saber qué libro es el que más se lee, que lector devuelve sistemáticamente los libros más tarde de lo que le corresponde...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas