Qual modelo de dados permitiria que você procurasse livros confortavelmente e os emprestasse em sua biblioteca local?
Você já foi a uma biblioteca e pegou um livro emprestado? Talvez isso pareça antiquado no mundo atual de conhecimento instantâneo da Internet e e-books. Mas tenho certeza de que ainda existe essa parte analógica de você que ainda gosta de cheirar, tocar e ler livros. Ou talvez você tenha sido forçado a usar uma biblioteca quando não conseguiu encontrar algo na internet! Sim, nem tudo é online.
Então, como um modelo de dados organizaria os livros e empréstimos da biblioteca? Vamos mergulhar nesse modelo e ver como ele funciona!
O modelo de dados
Eu tinha bibliotecas públicas em mente quando criei este modelo de dados. Há uma suposição de que todas as bibliotecas da rede de bibliotecas públicas usam o mesmo modelo/sistema. É centralizado e permite que os membros naveguem na coleção de todas as bibliotecas da rede. Além disso, os membros podem emprestar livros de qualquer biblioteca da rede.
O modelo de dados da biblioteca consiste em treze tabelas divididas em duas áreas temáticas. Essas áreas são:
Books & Libraries
Members & Loans
Passaremos por cada área de assunto separadamente e analisaremos todos os detalhes.
Livros e Bibliotecas
Esta área de assunto armazena informações sobre livros e bibliotecas. É composto por dez tabelas:
author
authorship_role
literature_category
book
book_authorship
book_item
publishing_house
library
city
country
A primeira tabela é o
author
tabela. Ele lista todos os autores (mais seus detalhes relevantes) dos livros que a biblioteca possui em seu acervo. Para cada autor, teremos:id
– Um ID exclusivo para esse autor.author_name
– O primeiro nome do autor.author_surname
– O sobrenome do autor.date_birth
– Data de nascimento do autor.date_death
– A data da morte do autor.
O
authorship_role
tabela lista todas as funções que um autor pode ter, por exemplo, autor, coautor etc. Esta tabela possui os seguintes atributos:id
– Um ID exclusivo para cada função.role_name
– O nome dessa função, por exemplo, “coautor”. Esta é a chave alternativa da tabela.
A tabela
literature_category
lista todas as categorias de livros, por exemplo, thriller, literatura francesa, realismo russo, filosofia, etc. A tabela contém os seguintes atributos:id
– Um ID exclusivo para essa categoria.category_name
– O nome da categoria, por ex. "mistério". Esta é a chave alternativa da tabela.
Em seguida, temos o
book
tabela. Esta tabela armazena todos os detalhes relevantes de cada título que a biblioteca possui em sua coleção. Observe que esta não é a tabela usada para cada livro como um item. Para isso, usaremos outra tabela, a book_item
tabela. O book
tabela consiste nos atributos:isbn
– Um ID exclusivo para cada título de livro, que na indústria editorial é o International Standard Book Number (ISBN).book_title
– O título do livro.literature_category_id
– Referencia aliterature_category
tabela.publishing_house_id
– Faz referência àpublishing_house
tabela.year_published
– O ano em que o livro foi publicado.
A próxima tabela em nosso modelo é a
book_authorship
tabela. É uma tabela de interseção que será conectada ao book
, author
e authorship_role
mesas. Ele contém os seguintes atributos:book_id
– Faz referência aobook
tabela.author_id
– Refere-se aoauthor
tabela.authorship_role_id
– Refere-se aoauthorship_role
tabela.
Esses três atributos juntos formam a chave primária composta da tabela. Uma chave primária composta significa que qualquer combinação de todos os três atributos deve ser exclusiva; cada combinação pode ocorrer apenas uma vez.
Agora vamos ver o
book_item
table, que mencionamos anteriormente como armazenamento de informações para cada livro físico em uma biblioteca. Ele conterá as seguintes informações:id
– Um ID exclusivo para cada livro como um item.isbn
– Faz referência aobook
tabela.library_id
– Faz referência àlibrary
tabela.
A tabela
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:
table é a próxima em nosso modelo. Ele lista os editores de todos os livros que a biblioteca possui em sua coleção. Os atributos na tabela são os seguintes:id
– Um ID exclusivo para cada editora.publishing_house_name
– O nome da editora (por exemplo, Penguin Books, McGraw-Hill, Simon &Schuster, etc.).city_id
– Faz referência àcity
tabela. Essa conexão também nos permitirá determinar a cidade e o país da editora. Opublishing_house_name
–city_id
par é a chave alternativa desta tabela.
Ok, vamos para a
library
tabela. Esta tabela é referenciada no book_item
table, onde define a biblioteca onde se encontra cada exemplar de um livro. Isso é necessário porque os mesmos títulos de livros podem ser encontrados em mais de uma biblioteca em uma rede (por exemplo, cada biblioteca provavelmente tem pelo menos uma cópia de O Senhor dos Anéis ). Portanto, temos que saber qual livro está em qual biblioteca. Para isso, precisaremos dos seguintes atributos:id
– Um ID exclusivo para a biblioteca.library_name
– O nome dessa biblioteca.address
– O endereço dessa biblioteca.city_id
– Faz referência àcity
tabela. Olibrary_name
-city_id
par é a chave alternativa desta tabela.
A próxima tabela neste modelo é a
city
tabela. É uma lista simples de cidades que usaremos para obter informações sobre editoras, bibliotecas e membros de bibliotecas. Os atributos são:id
– Um ID exclusivo para a cidade.postal_code
– O código postal dessa cidade.city_name
– O nome dessa cidade.country_id
– Refere-se aocountry
tabela.
Depois disso, resta apenas uma tabela nesta área de assunto:o
country
tabela. Esta é uma lista de todos os países onde nossas bibliotecas e/ou editoras de livros estão localizadas. É composto pelos seguintes atributos:id
– Um ID exclusivo para cada país.country_name
– O nome do país. Esta é a chave alternativa para a tabela.
Em seguida, vamos examinar a segunda área de assunto.
Membros e empréstimos
O objetivo desta área temática é gerenciar informações sobre os membros da biblioteca e os livros que eles emprestam. É composto por três tabelas:
member
loaned_book
loan_status
Agora vamos falar sobre as tabelas.
A primeira tabela nesta área é o
member
tabela. Ele contém todas as informações relevantes sobre os membros da biblioteca. Seus atributos são os seguintes:id
– Um ID exclusivo para cada membro.name
– O primeiro nome do membro.surname
– O sobrenome do membro.address
– O endereço do membro.city_id
– Faz referência àcity
tabela.email_address
– O endereço de e-mail do membro.phone_number
– O número de telefone do membro.
A próxima tabela é o
loaned_book
tabela. Ele armazena informações sobre todos os livros que já foram emprestados. Dessa forma, podemos acompanhar o inventário da biblioteca e o status de quaisquer livros emprestados. Esta tabela consiste nos seguintes atributos:id
– Um ID exclusivo para cada livro emprestado.book_item_id
– Faz referência aobook_item
tabela.member_id
– Refere-se aomember
tabela.date_loaned
– A data em que este livro foi emprestado.date_due
– A data em que este livro deve ser devolvido.date_returned
– A data em que o livro foi efetivamente devolvido à biblioteca; isso pode ser NULL porque não saberemos a data até que o livro seja devolvido.overdue_fine
– A taxa de atraso (se houver) paga pelo membro, que geralmente é calculada com base na diferença entre odate_returned
e odate_due
. Isso pode ser NULL porque um livro devolvido no prazo não tem multa.loan_status_id
– Faz referência aoloan_status
tabela.ts
– O carimbo de data/hora em que o status do empréstimo foi inserido.
O
loan_status
table é a última em nosso modelo de dados. É simplesmente uma lista de todos os status de empréstimo possíveis, por exemplo, ativo, vencido, devolvido, etc. Esta tabela será composta pelos seguintes atributos:id
– Um ID exclusivo para cada status de empréstimo.status_name
– Um nome que descreve o status do empréstimo. Esta é a chave alternativa para a tabela.
É isso – passamos por todos os detalhes do nosso modelo de dados!
O que você acha do modelo de dados da biblioteca?
Cobrimos os princípios gerais neste modelo, então deve ser (com alguns ajustes) para cada biblioteca. Você conhece algum específico da biblioteca que perdemos? Ou talvez você tenha achado o modelo útil e facilmente aplicável? Dê sua opinião na seção de comentários.