sql >> Databáze >  >> RDS >> Database

Datový model knihovny

Jaký datový model by vám umožnil pohodlně vyhledávat knihy a půjčovat si je ve vaší místní knihovně?

Šli jste někdy do knihovny a půjčili si knihu? Možná se vám to v dnešním světě okamžitých internetových znalostí a elektronických knih zdá staromódní. Ale jsem si jistý, že stále existuje analogová část vás, která stále ráda voní, dotýká se a čte knihy. Nebo jste možná byli nuceni použít knihovnu, když jste nemohli něco najít na internetu! Ano, ne vše je online.

Jak by tedy datový model organizoval knihy a výpůjčky v knihovně? Pojďme se ponořit přímo do tohoto modelu a podívat se, jak funguje!

Datový model

Při vytváření tohoto datového modelu jsem měl na mysli veřejné knihovny. Existuje předpoklad, že každá knihovna v síti veřejných knihoven používá stejný model/systém. Je centralizovaná a umožňuje členům procházet sbírku každé knihovny v síti. Členové si také mohou půjčovat knihy z jakékoli knihovny v síti.

Datový model knihovny se skládá ze třinácti tabulek rozdělených do dvou tematických oblastí. Tyto oblasti jsou:

  1. Books & Libraries
  2. Members & Loans



Projdeme si každou oblast zvlášť a analyzujeme všechny podrobnosti.

Knihy a knihovny

Tato oblast uchovává informace o knihách a knihovnách. Skládá se z deseti tabulek:

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

První tabulka je author stůl. Jsou zde uvedeni všichni autoři (a jejich příslušné údaje) knih, které má knihovna ve svém fondu. Pro každého autora budeme mít:

  • id – Jedinečné ID tohoto autora.
  • author_name – Křestní jméno autora.
  • author_surname – Příjmení autora.
  • date_birth – Datum narození autora.
  • date_death – Datum autorovy smrti.

authorship_role tabulka uvádí všechny role, které může autor mít, např. autor, spoluautor atd. Tato tabulka má následující atributy:

  • id – Jedinečné ID pro každou roli.
  • role_name – Název té role, např. "spoluautor". Toto je alternativní klíč tabulky.

Tabulka literature_category uvádí všechny kategorie knih, např. thriller, francouzská literatura, ruský realismus, filozofie atd. Tabulka obsahuje následující atributy:

  • id – Jedinečné ID pro danou kategorii.
  • category_name – Název kategorie, např. "tajemství". Toto je alternativní klíč tabulky.

Dále tu máme book stůl. Tato tabulka ukládá všechny relevantní podrobnosti o každém titulu, který má knihovna ve své sbírce. Upozorňujeme, že toto není tabulka používaná pro každou knihu jako položku. K tomu nám poslouží další tabulka, a to book_item stůl. book tabulka se skládá z atributů:

  • isbn – Jedinečné ID pro každý knižní titul, kterým je ve vydavatelském průmyslu mezinárodní standardní číslo knihy (ISBN).
  • book_title – Název knihy.
  • literature_category_id – Odkazuje na literature_category stůl.
  • publishing_house_id – Odkazuje na publishing_house stůl.
  • year_published – Rok vydání knihy.

Další tabulkou v našem modelu je book_authorship stůl. Jde o průsečíkovou tabulku, která bude napojena na book , author a authorship_role tabulky. Obsahuje následující atributy:

  • book_id – Odkazuje na book stůl.
  • author_id – Odkazuje na author stůl.
  • authorship_role_id – Odkazuje na authorship_role stůl.

Tyto tři atributy dohromady tvoří složený primární klíč tabulky. Složený primární klíč znamená, že jakákoli kombinace všech tří atributů musí být jedinečná; každá kombinace může nastat pouze jednou.

Nyní se podívejme na book_item tabulku, o které jsme se zmínili dříve jako o ukládání informací pro každou fyzickou knihu v knihovně. Bude obsahovat následující informace:

  • id – Jedinečné ID pro každou knihu jako položku.
  • isbn – Odkazuje na book stůl.
  • library_id – Odkazuje na library stůl.

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: tabulka je další v našem modelu. Uvádí vydavatele všech knih, které má knihovna ve svém fondu. Atributy v tabulce jsou následující:

  • id – Jedinečné ID pro každé vydavatelství.
  • publishing_house_name – Název nakladatelství (např. Penguin Books, McGraw-Hill, Simon &Schuster atd.).
  • city_id – Odkazuje na city stůl. Toto spojení nám také umožní určit jak město, tak zemi vydavatelství. publishing_house_namecity_id pár je alternativním klíčem této tabulky.

Dobře, pojďme do library stůl. Na tuto tabulku se odkazuje v book_item tabulka, kde definuje knihovnu, kde je uchovávána každá kopie knihy. To je potřeba, protože stejné názvy knih lze nalézt ve více než jedné knihovně v síti (např. každá knihovna má pravděpodobně alespoň jednu kopii Pána prstenů ). Proto musíme vědět, která kniha je v které knihovně. Abychom toho dosáhli, budeme potřebovat následující atributy:

  • id – Jedinečné ID knihovny.
  • library_name – Název této knihovny.
  • address – Adresa této knihovny.
  • city_id – Odkazuje na city stůl. library_name - city_id pár je alternativním klíčem této tabulky.

Další tabulkou v tomto modelu je city stůl. Je to jednoduchý seznam měst, který použijeme pro informace o vydavatelích, knihovnách a členech knihoven. Atributy jsou:

  • id – Jedinečné ID pro město.
  • postal_code – PSČ daného města.
  • city_name – Název toho města.
  • country_id – Odkazuje na country stůl.

Poté zbývá v této oblasti pouze jedna tabulka:country stůl. Toto je seznam všech zemí, kde sídlí naše knihovny a/nebo vydavatelé knih. Skládá se z následujících atributů:

  • id – Jedinečné ID pro každou zemi.
  • country_name – Název země. Toto je alternativní klíč pro tabulku.

Dále se podívejme na druhou předmětnou oblast.

Členové a půjčky

Účelem této oblasti je spravovat informace o členech knihovny a knihách, které si půjčují. Skládá se ze tří tabulek:

  • member
  • loaned_book
  • loan_status

Nyní si promluvme o tabulkách.

První tabulka v této oblasti je member stůl. Obsahuje všechny důležité informace o členech knihovny. Jeho atributy jsou následující:

  • id – Jedinečné ID pro každého člena.
  • name – Křestní jméno člena.
  • surname – Příjmení člena.
  • address – Adresa člena.
  • city_id – Odkazuje na city stůl.
  • email_address – E-mailová adresa člena.
  • phone_number – Telefonní číslo člena.

Další tabulka je loaned_book stůl. Uchovává informace o všech knihách, které byly kdy vypůjčeny. Můžeme tak sledovat inventář knihovny a stav případných vypůjčených knih. Tato tabulka se skládá z následujících atributů:

  • id – Jedinečné ID pro každou vypůjčenou knihu.
  • book_item_id – Odkazuje na book_item stůl.
  • member_id – Odkazuje na member stůl.
  • date_loaned – Datum, kdy byla tato kniha zapůjčena.
  • date_due – Datum, kdy má být tato kniha vrácena.
  • date_returned – Datum, kdy byla kniha skutečně vrácena do knihovny; toto může být NULL, protože nebudeme znát datum, dokud nebude kniha vrácena.
  • overdue_fine – Poplatek z prodlení (pokud existuje) zaplacený členem, který se obvykle vypočítává na základě rozdílu mezi date_returned a date_due . To může být NULL, protože kniha, která je vrácena včas, nemá žádnou pokutu.
  • loan_status_id – Odkazuje na loan_status stůl.
  • ts – Časové razítko, kdy byl zadán stav půjčky.

loan_status tabulka je poslední v našem datovém modelu. Je to jednoduše seznam všech možných stavů půjčky, např. aktivní, po splatnosti, vráceno atd. Tato tabulka se bude skládat z následujících atributů:

  • id – Jedinečné ID pro každý stav půjčky.
  • status_name – Název popisující stav půjčky. Toto je alternativní klíč pro tabulku.

To je vše – prošli jsme všechny podrobnosti našeho datového modelu!

Co si myslíte o datovém modelu knihovny?

V tomto modelu jsme pokryli obecné principy, takže by měl být (s několika úpravami) pro každou knihovnu. Znáte nějaká specifika knihovny, která nám unikla? Nebo vám model přišel užitečný a snadno použitelný? Vyjádřete svůj názor v sekci komentářů.


  1. Aktualizované možnosti úrovně databáze SQL Azure

  2. SQLSTATE[42000]:Chyba syntaxe nebo porušení přístupu:1064 Máte chybu v syntaxi SQL — PHP — PDO

  3. UID – vrátí ID aktuální relace v Oracle

  4. Existuje nějaký rozdíl mezi !=a <> v Oracle Sql?