Scriptorium is a Database Systems project dedicated to managing a library.
Just as ancient scriptoria preserved and organized knowledge, this information system archives, manages, and optimizes access to books and bibliographic data in a modern and efficient way.
Scriptorium is inspired by the ancient scriptoria where knowledge was meticulously preserved, catalogued, and made accessible.
📚 Scriptorium was developed as an academic project for the Database Systems course at the Faculty of Engineering, University of Rome Tor Vergata.
📘 Project Overview
A library provides a book reservation service for its registered users.
This project aims to develop an Information Management System for such a library, which is characterized by:
- its address
- a telephone number
- the name of the manager
- and its weekly opening hours
The system manages a collection of books, each of which may have multiple available copies.
Every copy is associated with a status that can either be:
Available
On loan
Books are physically organized by shelf and position, which the system provides to staff when a copy is available.
Users can register by providing their personal details along with any number of contact methods
(e.g., phone, mobile, email). Each user must specify their preferred communication method
for being contacted by the library staff.
When issuing a loan, librarians can check the availability of book copies:
- If a copy is available, the system shows the shelf and position for retrieval.
- If no copies are available in the local library, the system allows librarians to search the availability in other libraries within the partnered network and request an interlibrary transfer.
Likewise, the library can receive transfer requests from other institutions in the network.
In such cases, the copy is marked as:
Loaned to another library
The system also stores information about the destination library.
📞 Interlibrary transfers are handled by direct phone communication between librarians.
Upon receiving a copy, users may choose to retain it for consultation for a period of:
- 1 month
- 2 months
- or 3 months
Librarians can generate reports to track:
- All books currently on loan
- The users who currently have those books
- The contact details for each user, which can be used to send return reminders
If a book has not been borrowed for the last 10 years, it is deactivated by the circuit administrators.
This means:
- The book can no longer be borrowed
- Its record remains in the system for historical purposes
- Any ongoing loans remain valid until the copy is returned
The technologies listed below constitute the foundational stack employed in the design and implementation of this system:
This section illustrates the logical schema of the system by presenting representative subsets of the database tables used in its implementation.
Title | ISBN | Category Code | Available |
---|---|---|---|
Enciclopedia Universale | 978-0000000001 | 000 | Yes |
Dizionario della Lingua Italiana | 978-0000000002 | 000 | Yes |
Atlante del Mondo | 978-0000000003 | 000 | Yes |
Manuale di Biblioteconomia | 978-0000000004 | 010 | Yes |
Guida ai Libri Rari | 978-0000000005 | 020 | Yes |
Storia della Scrittura | 978-0000000006 | 030 | Yes |
Grandi Enciclopedie | 978-0000000007 | 030 | Yes |
Introduzione alla Bibliografia | 978-0000000008 | 010 | Yes |
Catalogazione e Archiviazione | 978-0000000009 | 020 | Yes |
Giornalismo e Media | 978-0000000010 | 050 | Yes |
Enciclopedia della Conoscenza | 978-0000000011 | 000 | Yes |
Dizionario Enciclopedico | 978-0000000012 | 000 | Yes |
Guida ai Testi Antichi | 978-0000000013 | 000 | Yes |
Manuale di Ricerca Bibliografica | 978-0000000014 | 010 | Yes |
Enciclopedia Storica | 978-0000000015 | 030 | Yes |
Enciclopedia del Sapere | 978-0000000101 | 000 | Yes |
Manuale di Archivistica | 978-0000000102 | 000 | Yes |
La Biblioteca del Mondo | 978-0000000103 | 000 | Yes |
Bibliografia Universale | 978-0000000104 | 010 | Yes |
Dizionario Filosofico | 978-0000000105 | 030 | Yes |
Copy Number | Status | ISBN |
---|---|---|
1 | Disponibile | 978-0000000001 |
1 | Disponibile | 978-0000000002 |
1 | In prestito altra biblioteca | 978-0000000003 |
1 | Disponibile | 978-0000000004 |
1 | Disponibile | 978-0000000005 |
1 | Disponibile | 978-0000000006 |
1 | Disponibile | 978-0000000007 |
1 | In prestito altra biblioteca | 978-0000000008 |
1 | Disponibile | 978-0000000009 |
1 | Disponibile | 978-0000000010 |
1 | Disponibile | 978-0000000011 |
1 | Disponibile | 978-0000000012 |
1 | Disponibile | 978-0000000013 |
1 | In prestito altra biblioteca | 978-0000000014 |
1 | Disponibile | 978-0000000015 |
1 | Disponibile | 978-0000000101 |
1 | In prestito altra biblioteca | 978-0000000102 |
1 | Disponibile | 978-0000000103 |
1 | Disponibile | 978-0000000104 |
1 | Disponibile | 978-0000000105 |
Category Code | Name |
---|---|
000 | Opere generali |
010 | Bibliografia |
020 | Scienze dell’informazione e biblioteconomia |
030 | Enciclopedie e libri di riferimento |
050 | Periodici e giornalismo |
060 | Organizzazioni e museologia |
070 | Giornalismo, editoria e media |
080 | Citazioni e antologie |
090 | Manoscritti e libri rari |
100 | Filosofia |
110 | Metafisica |
120 | Epistemologia, causalità e cambiamento |
130 | Parapsicologia e occultismo |
140 | Scuole filosofiche specifiche |
150 | Psicologia |
160 | Logica |
170 | Etica |
180 | Filosofia antica, medievale e orientale |
190 | Filosofia moderna e occidentale |
200 | Religione |
Shelf Code | Shelf Name | Category Code |
---|---|---|
1 | Scaffale Generale 1 | 000 |
2 | Scaffale Bibliografie | 010 |
3 | Scaffale Biblioteconomia | 020 |
4 | Scaffale Enciclopedie | 030 |
5 | Scaffale Giornalismo | 050 |
6 | Scaffale Organizzazioni | 060 |
7 | Scaffale Media e Editoria | 070 |
8 | Scaffale Citazioni | 080 |
9 | Scaffale Manoscritti | 090 |
10 | Scaffale Filosofia 1 | 100 |
11 | Scaffale Metafisica | 110 |
12 | Scaffale Epistemologia | 120 |
13 | Scaffale Parapsicologia | 130 |
14 | Scaffale Filosofie Specifiche | 140 |
15 | Scaffale Psicologia | 150 |
16 | Scaffale Logica | 160 |
17 | Scaffale Etica | 170 |
18 | Scaffale Filosofia Antica | 180 |
19 | Scaffale Filosofia Moderna | 190 |
20 | Scaffale Religione | 200 |
Shelf Number | Shelf Code | ISBN |
---|---|---|
1 | 1 | 978-0000000001 |
2 | 1 | 978-0000000002 |
3 | 1 | 978-0000000003 |
4 | 1 | 978-0000000011 |
5 | 1 | 978-0000000012 |
6 | 1 | 978-0000000013 |
7 | 1 | 978-0000000101 |
8 | 1 | 978-0000000102 |
9 | 1 | 978-0000000103 |
10 | 1 | 978-0000000107 |
11 | 1 | 978-0000000108 |
12 | 1 | 978-0000000201 |
13 | 1 | 978-0000000202 |
14 | 1 | 978-0000000203 |
15 | 1 | 978-0000000205 |
1 | 2 | 978-0000000004 |
2 | 2 | 978-0000000008 |
3 | 2 | 978-0000000014 |
4 | 2 | 978-0000000104 |
5 | 2 | 978-0000000110 |
ISBN | Library | City | Copies |
---|---|---|---|
978-0000000002 | Biblioteca Storica | Venezia | 5 |
978-0000000008 | Biblioteca Storica | Venezia | 3 |
978-0000000011 | Biblioteca Accademica | Pisa | 9 |
978-0000000012 | Biblioteca Popolare | Palermo | 1 |
978-0000000102 | Biblioteca Comunale | Firenze | 1 |
978-0000000108 | Biblioteca Centrale | Roma | 2 |
978-0000000109 | Biblioteca Civica | Torino | 2 |
978-0000000201 | Biblioteca Civica | Torino | 2 |
978-1000000002 | Biblioteca Centrale | Roma | 4 |
978-1000000005 | Biblioteca Universitaria | Bologna | 4 |
978-1000000009 | Biblioteca Nazionale | Milano | 5 |
978-1000000015 | Biblioteca Accademica | Pisa | 4 |
978-1000000104 | Biblioteca Comunale | Firenze | 4 |
978-1000000106 | Biblioteca Popolare | Palermo | 2 |
978-1000000204 | Biblioteca Centrale | Roma | 4 |
978-1000000206 | Biblioteca Comunale | Firenze | 2 |
978-1000000208 | Biblioteca Civica | Torino | 1 |
978-2000000008 | Biblioteca Civica | Torino | 1 |
978-2000000011 | Biblioteca Popolare | Palermo | 5 |
978-2000000013 | Biblioteca Comunale | Firenze | 1 |
Let us now assume a scenario in which a user requests to borrow a book that is available in the library. A loan is initiated for a copy of the book titled "Manuale di Biblioteconomia".
The user, Simone Remoli, specifies his mobile number (+39 3881211212) as his preferred contact method (note: this is not the author's actual phone number).
Consequently, the selected copy is registered in the system with the status "On loan to user", which is duly reflected in the database records.
Furthermore, the user's name is recorded in the loan tracking table, establishing a link between the borrowed copy and the requesting individual.
Copy Number | Status | ISBN |
---|---|---|
1 | Disponibile | 978-0000000001 |
1 | Disponibile | 978-0000000002 |
1 | In prestito altra biblioteca | 978-0000000003 |
1 | In prestito utente | 978-0000000004 |
1 | Disponibile | 978-0000000005 |
1 | Disponibile | 978-0000000006 |
1 | Disponibile | 978-0000000007 |
1 | In prestito altra biblioteca | 978-0000000008 |
1 | Disponibile | 978-0000000009 |
1 | Disponibile | 978-0000000010 |
First Name | Last Name | Date of Birth |
---|---|---|
Simone | Remoli | 2000-10-02 |
First Name | Last Name | Date of Birth | Phone |
---|---|---|---|
Simone | Remoli | 2000-10-02 | 3881211212 |
This table indicates that the user Simone Remoli has requested a copy of the book identified by ISBN 978-0000000004, initiating a loan on March 22, 2025, with a scheduled return date of June 22, 2025.
ISBN | Copy Number | First Name | Last Name | Date of Birth | Loan Start Date | Loan End Date |
---|---|---|---|---|---|---|
978-0000000004 | 1 | Simone | Remoli | 2000-10-02 | 2025-03-22 | 2025-06-22 |
Scriptorium is designed to simulate the reception of external events through a scheduled database trigger.
This mechanism selects a random ISBN from the pool of available copies and issues a request on behalf of a randomly chosen library.
Since the system also includes external libraries that may request books held internally, this simulation reproduces the interlibrary loan process triggered by such external institutions.
Let us now assume that the Municipal Library of Florence requests a copy of the book entitled "La Biblioteca del Mondo", identified by ISBN 978-0000000103.
As a result, the corresponding record in the Copy table must be updated. The change in the copy's status is duly reflected in the system's database.
Copy Number | Status | ISBN |
---|---|---|
1 | Disponibile | 978-0000000001 |
1 | Disponibile | 978-0000000002 |
1 | Disponibile | 978-0000000003 |
1 | In prestito utente | 978-0000000004 |
1 | Disponibile | 978-0000000005 |
1 | Disponibile | 978-0000000006 |
1 | Disponibile | 978-0000000007 |
1 | Disponibile | 978-0000000008 |
1 | Disponibile | 978-0000000009 |
1 | Disponibile | 978-0000000010 |
1 | In prestito utente | 978-0000000011 |
1 | Disponibile | 978-0000000012 |
1 | Disponibile | 978-0000000013 |
1 | Disponibile | 978-0000000014 |
1 | Disponibile | 978-0000000015 |
1 | Disponibile | 978-0000000101 |
1 | Disponibile | 978-0000000102 |
1 | In prestito altra biblioteca | 978-0000000103 |
1 | Disponibile | 978-0000000104 |
1 | Disponibile | 978-0000000105 |
It is now possible to clearly observe the external loan that has been recorded.
ISBN | Copy Number | Library Name | City |
---|---|---|---|
978-0000000103 | 1 | Biblioteca Comunale | Firenze |
If a user requests a copy of a book that is not available within the local library, the system allows a request to be issued to an external library that holds a copy of the desired book.
Let us assume that the user Emilio intends to request a loan of the book titled "Enciclopedia della Conoscenza".
However, the book is currently unavailable within the library, as all copies have been exhausted.
Consequently, the system must identify external libraries where the book is available for loan.
The book requested by Emilio, identified by ISBN 978-0000000011, is currently available at the Academic Library of Pisa, which holds a total of 9 copies.

After the book has been explicitly requested, the corresponding table is updated: the number of available copies is reduced from 9 to 8, and the loan transaction is duly recorded in the system.

The table below records an interlibrary loan successfully initiated by the user Emilio Rossi. The book, identified by ISBN 978-0000000011, was borrowed from the Academic Library of Pisa.
The transaction includes the user's full identification details and the scheduled loan period, which spans from March 22, 2025 to May 22, 2025.
This operation exemplifies the system's ability to process and document external loan requests across library institutions.
ISBN | First Name | Last Name | Date of Birth | Library Name | City | Loan Start Date | Loan End Date |
---|---|---|---|---|---|---|---|
978-0000000011 | Emilio | Rossi | 2004-05-06 | Biblioteca Accademica | Pisa | 2025-03-22 | 2025-05-22 |