Какъв модел на данни би ви позволил удобно да търсите книги и да ги заемате в местната библиотека?
Случвало ли ви се е да отидете в библиотека и да вземете книга назаем? Може би това изглежда старомодно в днешния свят на незабавни интернет знания и електронни книги. Но съм сигурен, че все още има тази аналогова част от вас, която все още обича да мирише, докосва и чете книги. Или може би сте били принудени да използвате библиотека, когато не можете да намерите нещо в интернет! Да, не всичко е онлайн.
И така, как един модел на данни би организирал библиотечни книги и заеми? Нека се потопим направо в този модел и да видим как работи!
Моделът на данните
Имах предвид публичните библиотеки, когато създавах този модел на данни. Има предположение, че всяка библиотека в мрежата на обществените библиотеки използва един и същ модел/система. Той е централизиран и позволява на членовете да разглеждат колекцията на всяка библиотека в мрежата. Освен това членовете могат да заемат книги от всяка библиотека в мрежата.
Моделът на библиотечни данни се състои от тринадесет таблици, разделени в две предметни области. Тези области са:
Books & Libraries
Members & Loans
Ще преминем през всяка тематична област поотделно и ще анализираме всички подробности.
Книги и библиотеки
Тази тематична област съхранява информация за книги и библиотеки. Състои се от десет таблици:
author
authorship_role
literature_category
book
book_authorship
book_item
publishing_house
library
city
country
Първата таблица е author
маса. Той изброява всички автори (плюс съответните им подробности) на книгите, които библиотеката има в своята колекция. За всеки автор ще имаме:
id
– Уникален идентификационен номер за този автор.author_name
– Първото име на автора.author_surname
– Фамилията на автора.date_birth
– Рождена дата на автора.date_death
– Датата на смъртта на автора.
authorship_role
таблицата изброява всички роли, които един автор може да има, напр. автор, съавтор и др. Тази таблица има следните атрибути:
id
– Уникален идентификатор за всяка роля.role_name
– Името на тази роля, напр. „съавтор“. Това е алтернативният ключ на таблицата.
Таблицата literature_category
изброява всички категории книги, напр. трилър, френска литература, руски реализъм, философия и др. Таблицата съдържа следните атрибути:
id
– Уникален идентификатор за тази категория.category_name
– Името на категорията, напр. „мистерия“. Това е алтернативният ключ на таблицата.
След това имаме book
маса. Тази таблица съхранява всички подходящи подробности за всяко заглавие, което библиотеката има в своята колекция. Моля, имайте предвид, че това не е таблицата, използвана за всяка книга като артикул. За това ще използваме друга таблица, а именно book_item
маса. book
таблицата се състои от атрибутите:
isbn
– Уникален идентификационен номер за всяко заглавие на книга, което в издателската индустрия е международният стандартен номер на книгата (ISBN).book_title
– Заглавието на книгата.literature_category_id
– Препращаliterature_category
маса.publishing_house_id
– Препраща къмpublishing_house
маса.year_published
– Годината, в която е публикувана книгата.
Следващата таблица в нашия модел е book_authorship
маса. Това е пресечна таблица, която ще бъде свързана с book
, author
и authorship_role
маси. Той съдържа следните атрибути:
book_id
– Препратки къмbook
маса.author_id
– Препраща къмauthor
маса.authorship_role_id
– Препраща къмauthorship_role
маса.
Тези три атрибута заедно образуват съставния първичен ключ на таблицата. Съставен първичен ключ означава, че всяка комбинация от трите атрибута трябва да бъде уникална; всяка комбинация може да се появи само веднъж.
Сега нека разгледаме book_item
таблица, която споменахме по-рано като съхраняваща информация за всяка физическа книга в библиотека. Той ще съдържа следната информация:
id
– Уникален идентификатор за всяка книга като артикул.isbn
– Препратки къмbook
маса.library_id
– Препраща къмlibrary
маса.
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:
таблицата е следващата в нашия модел. В него са изброени издателите на всички книги, които библиотеката има в своята колекция. Атрибутите в таблицата са както следва:
id
– Уникален идентификатор за всяко издателство.publishing_house_name
– Името на издателството (напр. Penguin Books, McGraw-Hill, Simon &Schuster и др.).city_id
– Препращаcity
маса. Тази връзка също ще ни позволи да определим както града, така и държавата на издателството.publishing_house_name
–city_id
pair е алтернативният ключ на тази таблица.
Добре, нека преминем към library
маса. Тази таблица е посочена в book_item
таблица, където се определя библиотеката, в която се съхранява всяко копие на книга. Това е необходимо, тъй като едни и същи заглавия на книги могат да бъдат намерени в повече от една библиотека в мрежа (например всяка библиотека вероятно има поне едно копие на Властелинът на пръстените ). Затова трябва да знаем коя книга в коя библиотека има. За да постигнем това, ще ни трябват следните атрибути:
id
– Уникален идентификатор за библиотеката.library_name
– Името на тази библиотека.address
– Адресът на тази библиотека.city_id
– Препращаcity
маса.library_name
-city_id
pair е алтернативният ключ на тази таблица.
Следващата таблица в този модел е city
маса. Това е прост списък с градове, които ще използваме за информация за издатели, библиотеки и членове на библиотеката. Атрибутите са:
id
– Уникален идентификационен номер за града.postal_code
– Пощенският код за този град.city_name
– Името на този град.country_id
– Препращаcountry
маса.
След това остава само една таблица в тази тематична област:country
маса. Това е списък на всички държави, в които се намират нашите библиотеки и/или издателства на книги. Състои се от следните атрибути:
id
– Уникален идентификационен номер за всяка държава.country_name
– Името на държавата. Това е алтернативният ключ за таблицата.
След това нека разгледаме втората тематична област.
Членове и заеми
Целта на тази предметна област е да управлява информация за членовете на библиотеката и книгите, които те заемат. Състои се от три таблици:
member
loaned_book
loan_status
Сега да поговорим за таблиците.
Първата таблица в тази област е member
маса. Той съдържа цялата необходима информация за членовете на библиотеката. Неговите атрибути са както следва:
id
– Уникален идентификатор за всеки член.name
– Име на члена.surname
– Фамилия на члена.address
– Адресът на члена.city_id
– Препращаcity
маса.email_address
– Имейл адрес на члена.phone_number
– Телефонният номер на члена.
Следващата таблица е loaned_book
маса. Той съхранява информация за всички книги, които някога са били заемани. По този начин можем да следим инвентара на библиотеката и състоянието на всички заети книги. Тази таблица се състои от следните атрибути:
id
– Уникален идентификационен номер за всяка заета книга.book_item_id
– Препраща къмbook_item
маса.member_id
– Препраща къмmember
маса.date_loaned
– Датата, на която тази книга е била заета.date_due
– Датата, на която тази книга трябва да бъде върната.date_returned
– Датата на действително връщане на книгата в библиотеката; това може да бъде NULL, защото няма да знаем датата, докато книгата не бъде върната.overdue_fine
– Таксата за закъснение (ако има такава), платена от члена, която обикновено се изчислява въз основа на разликата междуdate_returned
иdate_due
. Това може да бъде NULL, защото книга, която е върната навреме, няма глоба.loan_status_id
– Препраща къмloan_status
маса.ts
– Печатът за време, когато е въведен този заем.
loan_status
таблицата е последната в нашия модел на данни. Това е просто списък на всички възможни състояния на заема, напр. активен, просрочен, върнат и т.н. Тази таблица ще се състои от следните атрибути:
id
– Уникален идентификационен номер за всеки статус на заема.status_name
– Име, описващо състоянието на заема. Това е алтернативният ключ за таблицата.
Това е всичко – преминахме през всички подробности за нашия модел на данни!
Какво мислите за модела на библиотечни данни?
Обхванахме общите принципи в този модел, така че трябва да бъде (с няколко корекции) за всяка библиотека. Знаете ли някакви специфики на библиотеката, които сме пропуснали? Или може би сте намерили модела за полезен и лесно приложим? Кажете своето мнение в секцията за коментари.