Estou tentando criar um banco de dados para uma pequena biblioteca de livros. Este não é um projeto profissional, apenas um exercício de minha autoria. Esta é a primeira vez que tento fazer isso (sou autodidata) e estou encontrando um problema. Antes de continuar, fornecerei minha versão do diagrama ER abaixo (fiz no Paint, usando o seguinte recurso para notação):
O meu maior problema é resolver o facto de um livro poder ter o mesmo título mas ter várias edições ou fazer parte de um conjunto. Um exemplo seria a trilogia O Senhor dos Anéis , ou Janelas de Programação, 5ª edição , ou Enciclopédia de aberturas de xadrez, volume D.
Não sei como incorporar isso ao meu diagrama ER para evitar redundância de dados.
Por isso faço estas perguntas:
Como devo abordar o fato de que o livro pode ter o mesmo título, mas ter várias edições ou fazer parte de um conjunto, em meu diagrama ER?
Como sou inexperiente, você pode apontar erros em meu diagrama ER, se houver, e sugerir uma melhoria?
Como esta é minha primeira postagem aqui, deixe um comentário se algo precisar ser alterado (se não se encaixar no formato de pergunta deste site) ou se precisar de mais informações.
Obrigada.
Eu diria que uma Edição é uma entidade que está relacionada a um Livro .
Você então tem uma relação um-para-muitos entre Livros e Edições. (Um livro pode ter muitas edições.) e uma relação muitos-para-um entre Edições e Editoras (muitas edições são publicadas por uma editora).
Quando eu estava construindo bancos de dados reais, antigamente, sempre tive acesso a um ou mais "especialistas no assunto", pessoas que se familiarizaram com os dados por meio do uso constante. A maioria dos especialistas no assunto não era especialista em computadores nem em banco de dados. Sua situação é um pouco diferente.
Eu tentaria encontrar algum tipo de especialista on-line no assunto, como a Biblioteca do Congresso. Eles podem ter algum tipo de modelo da indústria editorial que forneceria respostas para esta e outras perguntas que você tem sobre como o campo editorial realmente funciona. E esse modelo pode estar em domínio público.
PS: Parabéns por usar o modelo ER como ferramenta de análise e por não mergulhar prematuramente no projeto de banco de dados.
Vejo um projeto possível com sua exigência como
Book
MesaEditions
MesaSets
MesaAgora vejo um problema com o design acima, digamos que com novas edições, se o editor mudou, então
PublisherId
os clumns podem ser melhor movidos paraEditions
tabelas para fornecer essa flexibilidade no futuro, mesmo comwriterId
ou em caso de múltiplowriterId
, você pode optar por adicionar mais uma tabela para salvarwriterId
comeditionsId
. EscolhaINT/BigInt
para a coluna Id.Eu acho que se você olhar para o seu modelo e considerar os requisitos que ele não atende (ou seja, suas perguntas), você descobrirá que precisa expandir um pouco o seu modelo. Considere o seguinte DER:
(Observe que eu uso a notação pé de galinha de James Martin , que é um pouco mais compacta do que você usou, mas deve ser bem simples de entender. A única característica ligeiramente distinta é o uso de um "I" maiúsculo para indicar que um relacionamento é parte do identificador da entidade)
Aqui estão alguns pontos que este ERD aborda:
Um
BOOK
que pode ser alugado é uma coisa física (supondo que você esteja lidando com livros de papel). Isso significa que você precisa permitir ter mais de uma cópia . Portanto, um livro tem um título, mas não é a mesma coisa que o título, então meu modelo criaTITLE
sua própria entidade.Dependendo se você deseja um instantâneo de quais livros são alugados e para quem ou se deseja uma trilha de auditoria de quais livros foram alugados para quem, você precisa ter um 0,1-para-muitos ou muitos-para- muitos relacionamentos para representar o status de aluguel de cada livro (físico).
Cada
BOOK
um tem um arquivoEDITION
. Não precisa ser uma edição especial. Pode ser a primeira edição, brochura, edição especial, etc.Um
EDITION
terá umTITLE
. Todas as edições do mesmo livro terão o mesmo título, portanto, a relaçãoTITLE
pertence aoEDITION
nível.Da mesma forma, todas as edições serão publicadas pela mesma editora (ou grupo de editoras), enquanto edições diferentes podem ter editoras diferentes. Como você pode ter mais de um editor, isso precisa ter uma relação muitos-para-muitos entre
PUBLISHER
eEDITION
.A
TITLE
pode ter vários autores, portanto, é necessária uma relação muitos-para-muitos entreTITLE
eWRITER
.Depende de quais informações você deseja armazenar sobre a edição. Você pode adicionar outra tabela com uma
Edition
coluna e umaBook_ID
chave estrangeira. (por exemplo, uma edição tem um livro)Com conjuntos, você poderia ter mais algumas mesas. Um com uma
Set_ID
coluna e umaSet
coluna; e outra tabela com umaSet_ID
coluna e umaBook_ID
coluna.Por exemplo -
Isso faz sentido?
Desculpas por não desenhar o diagrama, não estou familiarizado com eles :)