sql >> Database teknologi >  >> RDS >> Database

En biblioteksdatamodel

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:

  1. Books & Libraries
  2. 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 til literature_category tabel.
  • publishing_house_id – Henviser til publishing_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 til book tabel.
  • author_id – Henviser til author tabel.
  • authorship_role_id – Henviser til authorship_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 til book tabel.
  • library_id – Henviser til library 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 til city bord. Denne forbindelse vil også give os mulighed for at bestemme både byen og landet for forlaget. publishing_house_namecity_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 til city 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 til country 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 til city 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 til book_item tabel.
  • member_id – Henviser til member 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 mellem date_returned og date_due . Dette kan være NULL, fordi en bog, der returneres til tiden, ikke har nogen bøde.
  • loan_status_id – Henviser til loan_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.


  1. Hvordan sender man e-mail fra SQL Server?

  2. Hvordan finder jeg dubletter på tværs af flere kolonner?

  3. localhost vs. 127.0.0.1 i mysql_connect()

  4. Hvordan sender jeg argumenter til et PL/SQL-script på kommandolinjen med SQLPLUS?