sql >> Database >  >> RDS >> Database

Een bibliotheekgegevensmodel

Met welk gegevensmodel kunt u gemakkelijk boeken zoeken en lenen in uw plaatselijke bibliotheek?

Ben je ooit naar een bibliotheek geweest en heb je een boek geleend? Misschien lijkt dat ouderwets in de huidige wereld van instant internetkennis en e-books. Maar ik weet zeker dat er nog steeds een analoog deel van je is dat nog steeds graag boeken ruikt, aanraakt en leest. Of misschien moest je een bibliotheek gebruiken toen je iets niet op internet kon vinden! Ja, niet alles staat online.

Dus, hoe zou een datamodel bibliotheekboeken en -leningen organiseren? Laten we direct in dit model duiken en kijken hoe het werkt!

Het gegevensmodel

Ik had openbare bibliotheken in gedachten toen ik dit datamodel maakte. Er wordt aangenomen dat elke bibliotheek in het openbare bibliotheeknetwerk hetzelfde model/systeem gebruikt. Het is gecentraliseerd en stelt leden in staat om door de collectie van elke bibliotheek in het netwerk te bladeren. Leden kunnen ook boeken lenen van elke bibliotheek in het netwerk.

Het datamodel van de bibliotheek bestaat uit dertien tabellen die zijn onderverdeeld in twee vakgebieden. Die gebieden zijn:

  1. Books & Libraries
  2. Members & Loans



We zullen elk onderwerp afzonderlijk doornemen en alle details analyseren.

Boeken en bibliotheken

In dit onderwerpgebied wordt informatie over boeken en bibliotheken opgeslagen. Het bestaat uit tien tabellen:

  • author
  • authorship_role
  • literature_category
  • book
  • book_authorship
  • book_item
  • publishing_house
  • library
  • city
  • country

De eerste tabel is de author tafel. Het vermeldt alle auteurs (plus hun relevante gegevens) van de boeken die de bibliotheek in haar collectie heeft. Voor elke auteur hebben we:

  • id – Een unieke ID voor die auteur.
  • author_name – De voornaam van de auteur.
  • author_surname – De achternaam van de auteur.
  • date_birth – De geboortedatum van de auteur.
  • date_death – De datum van overlijden van de auteur.

De authorship_role tabel geeft alle rollen weer die een auteur kan hebben, b.v. auteur, co-auteur, enz. Deze tabel heeft de volgende kenmerken:

  • id – Een unieke ID voor elke rol.
  • role_name – De naam van die rol, bijv. "co-auteur". Dit is de alternatieve sleutel van de tabel.

De tabel literature_category geeft alle boekcategorieën weer, b.v. thriller, Franse literatuur, Russisch realisme, filosofie, etc. De tabel bevat de volgende attributen:

  • id – Een unieke ID voor die categorie.
  • category_name – De naam van de categorie, bijv. "mysterie". Dit is de alternatieve sleutel van de tabel.

Vervolgens hebben we het book tafel. Deze tabel bevat alle relevante details van elke titel die de bibliotheek in haar collectie heeft. Houd er rekening mee dat dit niet de tabel is die voor elk boek als item wordt gebruikt. Daarvoor gebruiken we een andere tabel, namelijk de book_item tafel. Het book tabel bestaat uit de attributen:

  • isbn – Een unieke ID voor elke boektitel, in de uitgeverswereld het International Standard Book Number (ISBN).
  • book_title – De titel van het boek.
  • literature_category_id – Verwijst naar de literature_category tafel.
  • publishing_house_id – Verwijst naar het publishing_house tafel.
  • year_published – Het jaar waarin het boek werd gepubliceerd.

De volgende tabel in ons model is de book_authorship tafel. Het is een intersectietabel die wordt gekoppeld aan het book , author , en authorship_role tafels. Het bevat de volgende attributen:

  • book_id – Verwijst naar het book tafel.
  • author_id – Verwijst naar de author tafel.
  • authorship_role_id – Verwijst naar de authorship_role tafel.

Deze drie attributen vormen samen de samengestelde primaire sleutel van de tabel. Een samengestelde primaire sleutel betekent dat elke combinatie van alle drie de kenmerken uniek moet zijn; elke combinatie kan maar één keer voorkomen.

Laten we nu eens kijken naar het book_item tabel, die we eerder noemden als het opslaan van informatie voor elk fysiek boek in een bibliotheek. Het zal de volgende informatie bevatten:

  • id – Een unieke ID voor elk boek als item.
  • isbn – Verwijst naar het book tafel.
  • library_id – Verwijst naar de library tafel.

De 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: tafel is de volgende in ons model. Het vermeldt de uitgevers van alle boeken die de bibliotheek in haar collectie heeft. De attributen in de tabel zijn als volgt:

  • id – Een unieke ID voor elke uitgeverij.
  • publishing_house_name – De naam van de uitgeverij (bijv. Penguin Books, McGraw-Hill, Simon &Schuster, etc.).
  • city_id – Verwijst naar de city tafel. Door deze verbinding kunnen we ook zowel de stad als het land van de uitgeverij bepalen. De publishing_house_namecity_id pair is de alternatieve sleutel van deze tabel.

Oké, laten we verder gaan naar de library tafel. Er wordt naar deze tabel verwezen in de book_item tabel, waar het de bibliotheek definieert waar elk exemplaar van een boek wordt bewaard. Dit is nodig omdat dezelfde boektitels in meer dan één bibliotheek in een netwerk kunnen worden gevonden (elke bibliotheek heeft bijvoorbeeld waarschijnlijk minstens één exemplaar van The Lord of the Rings ). Daarom moeten we weten welk boek in welke bibliotheek staat. Om dat te bereiken, hebben we de volgende attributen nodig:

  • id – Een unieke ID voor de bibliotheek.
  • library_name – De naam van die bibliotheek.
  • address – Het adres van die bibliotheek.
  • city_id – Verwijst naar de city tafel. De library_name - city_id pair is de alternatieve sleutel van deze tabel.

De volgende tabel in dit model is de city tafel. Het is een eenvoudige lijst met steden die we zullen gebruiken voor informatie over uitgevers, bibliotheken en bibliotheekleden. De attributen zijn:

  • id – Een unieke ID voor de stad.
  • postal_code – De postcode voor die stad.
  • city_name – De naam van die stad.
  • country_id – Verwijst naar het country tafel.

Daarna is er nog maar één tafel over in dit onderwerpgebied:het country tafel. Dit is een lijst van alle landen waar onze bibliotheken en/of boekuitgevers gevestigd zijn. Het bestaat uit de volgende attributen:

  • id – Een unieke ID voor elk land.
  • country_name – De naam van het land. Dit is de alternatieve sleutel voor de tafel.

Laten we nu eens kijken naar het tweede onderwerpgebied.

Leden en leningen

Het doel van dit vakgebied is het beheren van informatie over bibliotheekleden en de boeken die ze lenen. Het bestaat uit drie tabellen:

  • member
  • loaned_book
  • loan_status

Laten we het nu hebben over de tafels.

De eerste tabel in dit gebied is het member tafel. Het bevat alle relevante informatie over bibliotheekleden. De attributen zijn als volgt:

  • id – Een unieke ID voor elk lid.
  • name – De voornaam van het lid.
  • surname – De achternaam van het lid.
  • address – Het adres van het lid.
  • city_id – Verwijst naar de city tafel.
  • email_address – Het e-mailadres van het lid.
  • phone_number – Het telefoonnummer van het lid.

De volgende tabel is het loaned_book tafel. Het slaat informatie op over alle boeken die ooit zijn uitgeleend. Zo kunnen we de bibliotheekinventaris en de status van eventueel uitgeleende boeken bijhouden. Deze tabel bestaat uit de volgende attributen:

  • id – Een unieke ID voor elk uitgeleend boek.
  • book_item_id – Verwijst naar het book_item tafel.
  • member_id – Verwijst naar het member tafel.
  • date_loaned – De datum waarop dit boek is uitgeleend.
  • date_due – De datum waarop dit boek moet worden ingeleverd.
  • date_returned – De datum waarop het boek daadwerkelijk in de bibliotheek is teruggebracht; dit kan NULL zijn, omdat we de datum pas weten als het boek wordt ingeleverd.
  • overdue_fine – De late vergoeding (indien van toepassing) betaald door het lid, die meestal wordt berekend op basis van het verschil tussen de date_returned en de date_due . Dit kan NULL zijn omdat een boek dat op tijd wordt ingeleverd geen boete heeft.
  • loan_status_id – Verwijst naar de loan_status tafel.
  • ts – Het tijdstempel waarop die leenstatus is ingevoerd.

De loan_status tabel is de laatste in ons gegevensmodel. Het is gewoon een lijst met alle mogelijke leenstatussen, b.v. actief, achterstallig, geretourneerd, enz. Deze tabel zal uit de volgende attributen bestaan:

  • id – Een unieke ID voor elke leenstatus.
  • status_name – Een naam die de uitleenstatus beschrijft. Dit is de alternatieve sleutel voor de tafel.

Dat is alles - we hebben alle details van ons datamodel doorgenomen!

Wat vindt u van het bibliotheekgegevensmodel?

We hebben algemene principes in dit model behandeld, dus het zou (met een paar aanpassingen) voor elke bibliotheek moeten zijn. Kent u bibliotheekdetails die we hebben gemist? Of misschien vond u het model nuttig en gemakkelijk toepasbaar? Laat je mening horen in de comments.


  1. De volgorde van tekens in een tekenreeks omkeren in MySQL

  2. Waarom kan alleen een superuser EXTENSION CREREN wel opslaan, maar niet op Heroku?

  3. Hoe u de taal voor uw Oracle-sessie kunt wijzigen

  4. Draaien op Oracle 10g