Quale modello di dati ti permetterebbe di cercare comodamente libri e prenderli in prestito nella tua biblioteca locale?
Sei mai andato in una biblioteca e hai preso in prestito un libro? Forse questo sembra vecchio stile nel mondo odierno della conoscenza istantanea di Internet e degli e-book. Ma sono sicuro che c'è ancora questa parte analogica di te a cui piace ancora annusare, toccare e leggere libri. O forse sei stato costretto a usare una libreria quando non riuscivi a trovare qualcosa su Internet! Sì, non tutto è online.
Quindi, in che modo un modello di dati organizzerebbe i libri e i prestiti delle biblioteche? Entriamo subito in questo modello e vediamo come funziona!
Il modello dei dati
Avevo in mente le biblioteche pubbliche quando ho creato questo modello di dati. Si presume che ogni biblioteca nella rete delle biblioteche pubbliche utilizzi lo stesso modello/sistema. È centralizzato e consente ai membri di sfogliare la collezione di ogni biblioteca della rete. Inoltre, i membri possono prendere in prestito libri da qualsiasi biblioteca della rete.
Il modello dei dati della biblioteca è composto da tredici tabelle suddivise in due aree tematiche. Queste aree sono:
Books & Libraries
Members & Loans
Analizzeremo ogni area tematica separatamente e analizzeremo tutti i dettagli.
Libri e biblioteche
Questa area tematica memorizza informazioni su libri e biblioteche. Si compone di dieci tabelle:
author
authorship_role
literature_category
book
book_authorship
book_item
publishing_house
library
city
country
La prima tabella è l'author
tavolo. Elenca tutti gli autori (più i relativi dettagli) dei libri che la biblioteca ha nella sua collezione. Per ogni autore avremo:
id
– Un ID univoco per quell'autore.author_name
– Il nome dell'autore.author_surname
– Il cognome dell'autore.date_birth
– La data di nascita dell'autore.date_death
– La data di morte dell'autore.
Il authorship_role
la tabella elenca tutti i ruoli che un autore può avere, ad es. autore, coautore, ecc. Questa tabella ha i seguenti attributi:
id
– Un ID univoco per ogni ruolo.role_name
– Il nome di quel ruolo, ad es. "coautore". Questa è la chiave alternativa della tabella.
La tabella literature_category
elenca tutte le categorie di libri, ad es. thriller, letteratura francese, realismo russo, filosofia, ecc. La tabella contiene i seguenti attributi:
id
– Un ID univoco per quella categoria.category_name
– Il nome della categoria, ad es. "mistero". Questa è la chiave alternativa della tabella.
Successivamente, abbiamo il book
tavolo. Questa tabella memorizza tutti i dettagli rilevanti di ogni titolo che la biblioteca ha nella sua collezione. Si prega di notare che questa non è la tabella utilizzata per ogni libro come articolo. Per questo, useremo un'altra tabella, ovvero il book_item
tavolo. Il book
tabella è composta dagli attributi:
isbn
– Un ID univoco per ogni titolo di libro, che nel settore dell'editoria è l'International Standard Book Number (ISBN).book_title
– Il titolo del libro.literature_category_id
– Fa riferimento aliterature_category
tabella.publishing_house_id
– Fa riferimento allapublishing_house
tabella.year_published
– L'anno di pubblicazione del libro.
La tabella successiva nel nostro modello è book_authorship
tavolo. È una tabella di intersezione che sarà collegata al book
, author
e authorship_role
tavoli. Contiene i seguenti attributi:
book_id
– Fa riferimento albook
tabella.author_id
– Fa riferimento all'author
tabella.authorship_role_id
– Fa riferimento alauthorship_role
tabella.
Questi tre attributi insieme formano la chiave primaria composita della tabella. Una chiave primaria composita significa che qualsiasi combinazione di tutti e tre gli attributi deve essere univoca; ogni combinazione può verificarsi una sola volta.
Ora diamo un'occhiata al book_item
tabella, che abbiamo menzionato in precedenza come memorizzazione delle informazioni per ogni libro fisico in una libreria. Conterrà le seguenti informazioni:
id
– Un ID univoco per ogni libro come articolo.isbn
– Fa riferimento albook
tabella.library_id
– Fa riferimento allalibrary
tabella.
La tabella The publishing_house table is the next one in our model. It lists the publishers of all the books that the library has in its collection. The attributes in the table are as follows:
table è il prossimo nel nostro modello. Elenca gli editori di tutti i libri che la biblioteca ha nella sua collezione. Gli attributi nella tabella sono i seguenti:
id
– Un ID univoco per ogni casa editrice.publishing_house_name
– Il nome della casa editrice (es. Penguin Books, McGraw-Hill, Simon &Schuster, ecc.).city_id
– Fa riferimento allacity
tavolo. Questo collegamento ci permetterà anche di determinare sia la città che il paese della casa editrice. Ilpublishing_house_name
–city_id
pair è la chiave alternativa di questa tabella.
Ok, passiamo alla library
tavolo. Questa tabella è referenziata nel book_item
tabella, dove definisce la libreria in cui è conservata ogni copia di un libro. Ciò è necessario perché gli stessi titoli di libri possono essere trovati in più di una biblioteca in una rete (ad es. ogni biblioteca probabilmente ha almeno una copia di Il Signore degli Anelli ). Pertanto, dobbiamo sapere quale libro è in quale biblioteca. Per farlo, avremo bisogno dei seguenti attributi:
id
– Un ID univoco per la libreria.library_name
– Il nome di quella libreria.address
– L'indirizzo di quella libreria.city_id
– Fa riferimento allacity
tavolo. Illibrary_name
-city_id
pair è la chiave alternativa di questa tabella.
La tabella successiva in questo modello è la city
tavolo. È un semplice elenco di città che utilizzeremo per informazioni su editori, biblioteche e membri delle biblioteche. Gli attributi sono:
id
– Un ID univoco per la città.postal_code
– Il codice postale di quella città.city_name
– Il nome di quella città.country_id
– Fa riferimento alcountry
tabella.
Dopodiché, è rimasta una sola tabella in questa area tematica:il country
tavolo. Questo è un elenco di tutti i paesi in cui si trovano le nostre biblioteche e/o editori di libri. È costituito dai seguenti attributi:
id
– Un ID univoco per ogni Paese.country_name
– Il nome del paese. Questa è la chiave alternativa per la tabella.
Successivamente, esaminiamo la seconda area tematica.
Membri e prestiti
Lo scopo di questa area tematica è gestire le informazioni sui membri della biblioteca e sui libri che prendono in prestito. Si compone di tre tabelle:
member
loaned_book
loan_status
Ora parliamo dei tavoli.
La prima tabella in quest'area è il member
tavolo. Contiene tutte le informazioni rilevanti sui membri della biblioteca. I suoi attributi sono i seguenti:
id
– Un ID univoco per ogni membro.name
– Il nome del membro.surname
– Il cognome del membro.address
– L'indirizzo del membro.city_id
– Fa riferimento allacity
tabella.email_address
– L'indirizzo email del membro.phone_number
– Il numero di telefono del membro.
La tabella successiva è il loaned_book
tavolo. Memorizza informazioni su tutti i libri che sono mai stati prestati. In questo modo, possiamo tenere traccia dell'inventario della biblioteca e dello stato di eventuali libri in prestito. Questa tabella è composta dai seguenti attributi:
id
– Un ID univoco per ogni libro prestato.book_item_id
– Fa riferimento albook_item
tabella.member_id
– Fa riferimento almember
tabella.date_loaned
– La data in cui questo libro è stato prestato.date_due
– La data in cui questo libro deve essere restituito.date_returned
– La data in cui il libro è stato effettivamente restituito alla biblioteca; questo può essere NULL perché non conosceremo la data fino alla restituzione del libro.overdue_fine
– La quota di ritardo (se presente) pagata dal membro, che di solito viene calcolata in base alla differenza tra ildate_returned
e ildate_due
. Questo può essere NULL perché un libro che viene restituito in tempo non va bene.loan_status_id
– Fa riferimento alloan_status
tabella.ts
– Il timestamp in cui è stato inserito lo stato del prestito.
Il loan_status
table è l'ultima nel nostro modello di dati. È semplicemente un elenco di tutti i possibili stati di prestito, ad es. attivo, scaduto, restituito, ecc. Questa tabella sarà composta dai seguenti attributi:
id
– Un ID univoco per ogni stato di prestito.status_name
– Un nome che descrive lo stato del prestito. Questa è la chiave alternativa per la tabella.
Ecco fatto:abbiamo esaminato tutti i dettagli del nostro modello di dati!
Cosa ne pensi del modello di dati della libreria?
Abbiamo trattato i principi generali in questo modello, quindi dovrebbe esserlo (con alcune modifiche) per ogni libreria. Conosci qualche dettaglio della libreria che ci siamo persi? O forse hai trovato il modello utile e facilmente applicabile? Dì la tua nella sezione commenti.