Hvilken datamodel vil give dig mulighed for nemt at søge efter bøger og låne dem i dit lokale bibliotek?
Har du nogensinde gået på et bibliotek og lånt en bog? Måske virker det gammeldags i nutidens verden af øjeblikkelig internetviden og e-bøger. Men jeg er sikker på, at der stadig er denne analoge del af dig, som stadig kan lide at lugte, røre ved og læse bøger. Eller måske blev du tvunget til at bruge et bibliotek, da du ikke kunne finde noget på internettet! Ja, ikke alt er online.
Så hvordan ville en datamodel organisere biblioteksbøger og lån? Lad os dykke direkte ned i denne model og se, hvordan den virker!
Datamodellen
Jeg havde offentlige biblioteker i tankerne, da jeg oprettede denne datamodel. Der er en antagelse om, at alle biblioteker i folkebibliotekets netværk bruger samme model/system. Det er centraliseret og giver medlemmer mulighed for at gennemse samlingen af hvert bibliotek i netværket. Medlemmer kan også låne bøger fra ethvert bibliotek i netværket.
Biblioteksdatamodellen består af tretten tabeller fordelt på to fagområder. Disse områder er:
Books & Libraries
Members & Loans
Vi gennemgår hvert fagområde separat og analyserer alle detaljerne.
Bøger og biblioteker
Dette emneområde gemmer information om bøger og biblioteker. Den består af ti borde:
author
authorship_role
literature_category
book
book_authorship
book_item
publishing_house
library
city
country
Den første tabel er author
bord. Den viser alle forfatterne (plus deres relevante detaljer) af de bøger, som biblioteket har i sin samling. For hver forfatter har vi:
id
– Et unikt ID for den pågældende forfatter.author_name
– Forfatterens fornavn.author_surname
– Forfatterens efternavn.date_birth
– Forfatterens fødselsdato.date_death
– Datoen for forfatterens død.
authorship_role
tabel viser alle de roller en forfatter kan have, f.eks. forfatter, medforfatter osv. Denne tabel har følgende attributter:
id
– Et unikt ID for hver rolle.role_name
– Navnet på den rolle, f.eks. "medforfatter". Dette er tabellens alternative nøgle.
Tabellen literature_category
oplister alle bogkategorier, f.eks. thriller, fransk litteratur, russisk realisme, filosofi osv. Tabellen indeholder følgende egenskaber:
id
– Et unikt ID for den kategori.category_name
– Kategoriens navn, f.eks. "mysterium". Dette er tabellens alternative nøgle.
Dernæst har vi book
bord. Denne tabel gemmer alle relevante detaljer om hver titel, som biblioteket har i sin samling. Bemærk venligst, at dette ikke er den tabel, der bruges til hver bog som en genstand. Til det vil vi bruge en anden tabel, nemlig book_item
bord. book
tabellen består af attributterne:
isbn
– Et unikt ID for hver bogtitel, som i forlagsbranchen er International Standard Book Number (ISBN).book_title
– Bogens titel.literature_category_id
– Henviser tilliterature_category
tabel.publishing_house_id
– Henviser tilpublishing_house
tabel.year_published
– Året, hvor bogen udkom.
Den næste tabel i vores model er book_authorship
bord. Det er en skæringstabel, der vil blive forbundet med book
, author
, og authorship_role
tabeller. Den indeholder følgende attributter:
book_id
– Henviser tilbook
tabel.author_id
– Henviser tilauthor
tabel.authorship_role_id
– Henviser tilauthorship_role
tabel.
Disse tre attributter danner tilsammen tabellens sammensatte primærnøgle. En sammensat primær nøgle betyder, at enhver kombination af alle tre attributter skal være unikke; hver kombination kan kun forekomme én gang.
Lad os nu se på book_item
tabel, som vi tidligere nævnte som lagring af info for hver fysisk bog i et bibliotek. Den vil indeholde følgende oplysninger:
id
– Et unikt ID for hver bog som en vare.isbn
– Henviser tilbook
tabel.library_id
– Henviser tillibrary
tabel.
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:
tabel er den næste i vores model. Den viser udgiverne af alle de bøger, som biblioteket har i sin samling. Attributterne i tabellen er som følger:
id
– Et unikt ID for hvert forlag.publishing_house_name
– Navnet på forlaget (f.eks. Penguin Books, McGraw-Hill, Simon &Schuster osv.).city_id
– Henviser tilcity
bord. Denne forbindelse vil også give os mulighed for at bestemme både byen og landet for forlaget.publishing_house_name
–city_id
par er den alternative nøgle i denne tabel.
Okay, lad os gå videre til library
bord. Der henvises til denne tabel i book_item
tabel, hvor den definerer det bibliotek, hvor hvert eksemplar af en bog opbevares. Dette er nødvendigt, fordi de samme bogtitler kan findes i mere end ét bibliotek i et netværk (f.eks. har hvert bibliotek sandsynligvis mindst én kopi af Ringenes Herre ). Derfor er vi nødt til at vide, hvilken bog der er på hvilket bibliotek. For at opnå det har vi brug for følgende attributter:
id
– Et unikt ID for biblioteket.library_name
– Navnet på det bibliotek.address
– Adressen på det pågældende bibliotek.city_id
– Henviser tilcity
bord.library_name
-city_id
par er den alternative nøgle i denne tabel.
Den næste tabel i denne model er city
bord. Det er en simpel liste over byer, som vi vil bruge til information om udgivere, biblioteker og biblioteksmedlemmer. Attributterne er:
id
– Et unikt ID for byen.postal_code
– Postnummeret for den by.city_name
– Byens navn.country_id
– Henviser tilcountry
tabel.
Derefter er der kun én tabel tilbage i dette emneområde:country
bord. Dette er en liste over alle de lande, hvor vores biblioteker og/eller bogudgivere er placeret. Den består af følgende attributter:
id
– Et unikt ID for hvert land.country_name
– Landets navn. Dette er den alternative nøgle til tabellen.
Lad os derefter undersøge det andet emneområde.
Medlemmer og lån
Formålet med dette fagområde er at administrere oplysninger om bibliotekets medlemmer og de bøger, de låner. Den består af tre tabeller:
member
loaned_book
loan_status
Lad os nu tale om bordene.
Den første tabel i dette område er member
bord. Den indeholder al relevant information om biblioteksmedlemmer. Dens attributter er som følger:
id
– Et unikt ID for hvert medlem.name
– Medlemmets fornavn.surname
– Medlemmets efternavn.address
– Medlemmets adresse.city_id
– Henviser tilcity
tabel.email_address
– Medlemmets e-mailadresse.phone_number
– Medlemmets telefonnummer.
Den næste tabel er loaned_book
bord. Den gemmer oplysninger om alle de bøger, der nogensinde er blevet udlånt. På denne måde kan vi holde styr på bibliotekets inventar og status for eventuelle udlånte bøger. Denne tabel består af følgende attributter:
id
– Et unikt ID for hver udlånt bog.book_item_id
– Henviser tilbook_item
tabel.member_id
– Henviser tilmember
tabel.date_loaned
– Datoen, hvor denne bog blev udlånt.date_due
– Datoen for, hvornår denne bog skal returneres.date_returned
– Datoen for, hvornår bogen faktisk blev returneret til biblioteket; dette kan være NULL, fordi vi ikke kender datoen, før bogen er returneret.overdue_fine
– Forsinket gebyr (hvis nogen) betalt af medlemmet, som normalt beregnes ud fra forskellen mellemdate_returned
ogdate_due
. Dette kan være NULL, fordi en bog, der returneres til tiden, ikke har nogen bøde.loan_status_id
– Henviser tilloan_status
tabel.ts
– Tidsstemplet, da den pågældende lånestatus blev indtastet.
loan_status
tabel er den sidste i vores datamodel. Det er simpelthen en liste over alle mulige lånestatusser, f.eks. aktiv, forfalden, returneret osv. Denne tabel vil bestå af følgende attributter:
id
– Et unikt ID for hver lånestatus.status_name
– Et navn, der beskriver lånestatus. Dette er den alternative nøgle til tabellen.
Det er det – vi har gennemgået alle detaljerne i vores datamodel!
Hvad synes du om biblioteksdatamodellen?
Vi har dækket generelle principper i denne model, så det burde være (med et par tweaks) for hvert bibliotek. Kender du nogle biblioteksspecifikationer, som vi gik glip af? Eller måske fandt du modellen nyttig og let anvendelig? Sig din mening i kommentarfeltet.