Um para muitos relacionamentos no banco de dados - conceito de design -- database campo com database-design camp Relacionado O problema

one to many relationship in database - design concept


9
vote

problema

português

A um para muitos relacionamentos entre duas tabelas deve ser implementado com duas ou três tabelas? Por exemplo, devemos ter:

  Prediction started on test data Prediction completed Validation loss: -0.2584906197858579 1   

ou

  Prediction started on test data Prediction completed Validation loss: -0.2584906197858579 2   

Eu gosto mais da primeira abordagem, mas eu vi o segundo e em aplicações mais complicadas muitas vezes. Existe alguma desvantagem para o primeiro método, ou é apenas pessoal que maneira de seguir?

Inglês Original

A one to many relationship between two tables should be implemented with two or three tables? For example should we have:

author(id,otherAttributtes) books(id,authorid,otherAttributes) 

or

 author(id,otherAttributtes)     books(id,otherAttributes)     authorConnectsBooks(authorid,booksid) 

I like more the first approach but i have seen the second and in more complicated applications a lot of times. Is there any downside for the first method, or it's just personal which way to follow?

     
   
   

Lista de respostas

23
 
vote
vote
Melhor resposta
 

O primeiro exemplo mostra um para muitos relacionamentos, enquanto o segundo mostra muitos para muitos relacionamentos.

Exemplo permite que usemos o primeiro exemplo

  Author AuthorID  Book BookID AuthorID    

Como você representaria que Jane e Jon escreveu o livro "Stackoverflow para se divertir"? Nesta tabela de relacionamento, você não pode, você expressou que um autor pode escrever muitos livros. Então, ou Jane escreveu ou Jon escreveu. Se apenas um deles escreveu os livros, você poderia usar esse tipo de relacionamento. No entanto, se você quiser mostrar que ambos escreveu este livro, você precisa de muitos para muitos relacionamentos.

Agora, usando essa mesma analogia de Jane e Jon, você pode representar os dois autores para este livro usando seu segundo exemplo - muitos para muitos relacionamentos.


Vamos usar o Stackoverflow como um exemplo começando com um para muitos relacionamentos e terminando com muitos para muitos relacionamentos:
  Authors Joel Jeff  Books Stackoverflow Joel    

Pobre Jeff, ele não é creditado com o Stackoverflow do exemplo acima ... Portanto, precisamos consertar isso:

  Author Joel Jeff  Books Stackoverflow  AuthorBooks Stackoverflow Jeff Stackoverflow Joel    

Agora todo mundo é feliz ...

 

The first example shows a one to many relationship, while the second shows a many to many relationship.

Example lets say we use the first example

Author AuthorID  Book BookID AuthorID 

How would you represent that both Jane and Jon wrote the book "Stackoverflow for fun"? In this relationship table you cannot, you have expressed that one author can write many books. So either Jane wrote it or Jon wrote it. If only one of them wrote the books you could use this relationship type. However, if you want to show that both wrote this book you need a many to many relationship.

Now using this same analogy of Jane and Jon you can represent both authors to this one book using your second example - many to many relationship.


Lets use Stackoverflow as an example starting with a one to many relationship and ending with a many to many relationship:
Authors Joel Jeff  Books Stackoverflow Joel 

Poor Jeff, he is not credited with stackoverflow from the above example...so we need to fix that:

Author Joel Jeff  Books Stackoverflow  AuthorBooks Stackoverflow Jeff Stackoverflow Joel 

Now everyone's happy...

 
 
 
 
5
 
vote

Um relacionamento um-para-muitos deve ser implementado com 2 tabelas.

Mas o relacionamento que você propõe em seu exemplo (entre autores e livros) não é um-para-muitos, é muitos para muitos.

"Um autor pode escrever muitos livros, e um livro pode ser escrito por um ou mais autores."

e um relacionamento muitos-para-muitos deve ser implementado com 3 tabelas.

Tenha um bom dia.

 

A one-to-many relationship should be implemented with 2 tables.

But the relationship you propose in your example (between Authors and Books) is not one-to-many, is many-to-many.

"An Author can write many Books, and a Book can be written by one or more Authors."

And a many-to-many relationship should be implemented with 3 tables.

Have a good day.

 
 
4
 
vote

um para muitos é duas tabelas.

O segundo é muitos para muitos.

  Authors 1 Larry Niven 2 Jerry Pournelle  Books 1 Integral Trees 2 King David's Spaceship 3 The Mote in God's eye  AuthorsBooks 1 1 2 2 1 3 2 3    
 

one to many is two tables.

the second one is many to many.

Authors 1 Larry Niven 2 Jerry Pournelle  Books 1 Integral Trees 2 King David's Spaceship 3 The Mote in God's eye  AuthorsBooks 1 1 2 2 1 3 2 3 
 
 
1
 
vote

Se o relacionamento é realmente um para muitos, não há necessidade de uma tabela de vinculação ( authorConnectsBooks no seu exemplo). No seu exemplo, no entanto, você não tem um relacionamento um-para-muitos, já que um autor pode escrever muitos livros e um livro pode ser escrito por muitos autores. No seu exemplo, você realmente tem um relacionamento muitos para muitos. Se você realmente tem um relacionamento muitos-para-muitos, você precisa de uma tabela de links ( authorConnectsBooks no seu exemplo).

 

If the relationship is actually one to many, there is no need for a linking table (authorConnectsBooks in your example). In your example, however, you don't have a one-to-many relationship since one author can write many books and one book can be written by many authors. In your example, you actually have a many-to-many relationship. If you actually have a many-to-many relationship, then you do need a linking table (authorConnectsBooks in your example).

 
 
0
 
vote

Como todos se destacaram, o primeiro é um para muitos relacionamentos em que você não precisa da mesa extra. Apenas duas tabelas devem funcionar. Mas no segundo caso, desde que é muitos para muitos realtationship, você precisará adicionar uma mesa extra conhecida como a junção ou a tabela de referência cruzada, pois a maioria dos sistemas de gerenciamento de banco de dados suportam apenas relacionamentos de um para muitos, é necessário para implementar tais relacionamentos manualmente através de uma terceira mesa de junção. A chave primária da mesa de junção é normalmente formada usando as chaves primárias das tabelas que ele conecta. Aqui está uma página wiki que explica exatamente o mesmo exemplo que você perguntou:

link

 

As everyone stated out, the first one is a one to many relationship in which you dont need the extra table. Just two tables should work. But in the second case, since its a many to many realtionship, you'll need to add an extra table known as the Junction or the cross-reference table because most database management systems only support one-to-many relationships, it is necessary to implement such relationships manually via a third junction table. The junction table's primary key is normally formed using the primary keys of the tables it connects. Here is a wiki page that explains the exact same example that you asked:

LINK

 
 

Perguntas relacionadas

6  Acampamento relacional e desenvolvimento de banco de dados "real"  ( Relational camp and real world database development ) 
Mais de uma década passada desde a primeira publicação da data e Darwen's "Terceiro Manifesto" 1995. Qual é o lugar da escola relacional de pensamento no ...

0  Como os provedores de serviços móveis gerenciam dados de tempo de antena? [fechado]  ( How do mobile service providers manage airtime data ) 
. fechado . Esta questão precisa ser mais focado . Atualmente não está aceitando respostas. ...

0  Em que cenários é melhor usar tabelas para sessões de usuário em vez de sessões nativas?  ( In what scenarios is it better to use tables for user sessions rather than nativ ) 
Isso é tudo o que preciso pedir Eu estou lidando com um site agora e não consigo ver uma diferença realmente significativa em armazenar minhas sessões em um...

4  Devo refletir a estrutura do banco de dados na aplicação?  ( Should i reflect database structure in application ) 
Estou projetando um aplicativo que permitirá colocar alguns dados no banco de dados. Eu queria refletir a estrutura do banco de dados no aplicativo, por exemp...

124  Banco de dados: para excluir ou não excluir registros  ( Database to delete or not to delete records ) 
Eu não acho que sou a única pessoa se perguntando sobre isso. O que você costuma praticar sobre o comportamento do banco de dados? Você prefere excluir um reg...

1  Deve utilizar tabelas de junção ter mais de um chaves primárias de outra tabela que identifica?  ( Should junction tables have more than one primary keys from another identifying ) 
Aqui está um exemplo: Originalmente eu tenho 3 tabelas. referências Tabela B Tabela A. Então agora Tabela B tem duas chaves primárias. Um utilizado como a cha...

6  Qual é o impacto do recurso de normalizar um banco de dados?  ( What is the resource impact from normalizing a database ) 
Ao tomar um banco de dados de um formulário relativamente não normalizado e normalizá-lo, o que, se houver, na utilização de recursos pode se esperar? Por...

7  Modelagem de CouchDB para multiusuário  ( Couchdb modeling for multi user ) 
Eu já estou animado com bancos de dados de documentos e especialmente sobre a simplicidade do Couchdb. Mas eu tenho dificuldade em entender se tais bancos de ...

16  Design de banco de dados - Múltiplas tabelas de pesquisa / enum ou uma tabela grande?  ( Database design multiple lookup enum tables or one large table ) 
Eu tenho muitas tabelas que usam referências de pesquisa / enum para a maioria dos valores de coluna. Por exemplo: Pessoa Table - PersonID | Racecode | Hair...

1  Design de banco de dados com duas tabelas relacionadas  ( Database design with two related tables ) 
Eu tenho duas tabelas: um contém dados de compromisso (tempo, contato ...) e outro contém notas (strings). Algumas nomeações têm notas e algumas notas estão r...

7  Pergunta de design de mesa simples  ( Simple table design question ) 
Estou tentando pensar um pouco e me evite alguma dor extra, se possível. Eu tive esse problema em aplicativos passados ​​e geralmente optamos pela abordagem...

353  Auto gerar diagrama de banco de dados mysql [fechado]  ( Auto generate database diagram mysql ) 
. FECHADO. Esta questão não atende a diretrizes de estouro de pilha . Atualmente não está aceitando respostas. ...

17  Considerações de desempenho para triggers vs restrições  ( Performance considerations for triggers vs constraints ) 
Estou tentando descobrir se eu deveria estar usando lógica crítica de negócios em um gatilho ou restrição dentro do meu banco de dados. Até agora eu adicione...

0  Melhor prática para rastreamento hierárquico do ativo do MySQL  ( Best practice for hierarchical mysql asset tracking ) 
Estou escrevendo um rastreador de ativos de projeto online, mas sou novo no MySQL. Qual seria a melhor maneira de rastrear projetos, usuários e ativos para al...

2  Clonagem de dados hierárquicos  ( Cloning hierarchical data ) 
Vamos supor que eu tenho uma tabela hierárquica auto-referência construir a maneira clássica como esta: CREATE TABLE test (name text,id serial primary key,...

286  Padrões de design de banco de dados relacional? [fechado]  ( Relational database design patterns ) 
. fechado . Esta questão precisa ser mais focado . Atualmente não está aceitando respostas. ...

0  Posso ter códigos não medidos misturados com medidas na minha tabela de fatos?  ( Can i have non measure codes mixed with measures in my fact table ) 
Estamos fazendo um pouco complexo de acumulação de dados. Nosso cliente nos envia algumas coisas que incluem duas dimensões (tempo e uma unidade de negócios)....

1  Design de banco de dados para dados de tradição e ini-file com integridade  ( Database design for tradition and ini file like data with integrity ) 
Eu gostaria de alguns pontos de vista sobre a melhor maneira de lidar com situações em que você tem dados de banco de dados normais (tradicionais) e, ao mesmo...

1  Melhores práticas para uso misto de rdbms e arquivos no sistema de arquivos  ( Best practices for mixed usage of rdbms and files on filesystem ) 
Em uma das tabelas no esquema em que estou trabalhando, eu preciso lidar com alguns de mil "folhas de dados" que são principalmente documentos PDF, e às vezes...

2  Tática de normalização do SQL Server: varchar vs intent identidade  ( Sql server normalization tactic varchar vs int identity ) 
Estou apenas imaginando o que a solução ideal está aqui. Diga que eu tenho um banco de dados normalizado. A chave primária de todo o sistema é um varchar. O...

1  Armazenando as relações entre usuários com permissões de visualização específicas  ( Storing relations between users with specific viewing permissions ) 
Eu estou projetando um banco de dados para o MySQL para criar uma relação entre dois usuários de um aplicativo. Não tenho certeza da melhor maneira de armazen...

0  Problema de design SQL - itens em várias seções  ( Sql design problem items in multiple sections ) 
Eu tenho uma tabela de seções e uma tabela de itens. O problema é que cada item pode estar em uma ou mais seções, portanto, um simples 'seção_id' para cada ...

0  acesso simultâneo ao banco de dados; manter os dados consistentes em todas as conexões  ( Simultaneous access to database keeping data consistent across all connections ) 
Eu fiz um sistema de banco de dados aqui: (comentários sobre a normalização são muito apreciados, bem como - tenho a sensação de que você vai me odiar o q...

4  MS Access: Renomear programaticamente Colunas  ( Ms access programmatically rename columns ) 
Eu preciso atualizar todos os nomes de coluna em um banco de dados de acesso de 8 tabelas. Em suma, cada sublinhado em um nome de coluna deve ser substituído ...

1  Array no procedimento armazenado  ( Array in stored procedure ) 
Eu sei que esta pergunta foi feita muitas vezes, mas eu não sou um PRO em SQL então eu preciso de um pouco de ajuda. Eu tenho duas tabelas - Person e Con...

Perguntas relacionadas

6  Acampamento relacional e desenvolvimento de banco de dados "real" 
0  Como os provedores de serviços móveis gerenciam dados de tempo de antena? [fechado] 
0  Em que cenários é melhor usar tabelas para sessões de usuário em vez de sessões nativas? 
4  Devo refletir a estrutura do banco de dados na aplicação? 
124  Banco de dados: para excluir ou não excluir registros 
1  Deve utilizar tabelas de junção ter mais de um chaves primárias de outra tabela que identifica? 
6  Qual é o impacto do recurso de normalizar um banco de dados? 
7  Modelagem de CouchDB para multiusuário 
16  Design de banco de dados - Múltiplas tabelas de pesquisa / enum ou uma tabela grande? 
1  Design de banco de dados com duas tabelas relacionadas 
7  Pergunta de design de mesa simples 
353  Auto gerar diagrama de banco de dados mysql [fechado] 
17  Considerações de desempenho para triggers vs restrições 
0  Melhor prática para rastreamento hierárquico do ativo do MySQL 
2  Clonagem de dados hierárquicos 
286  Padrões de design de banco de dados relacional? [fechado] 
0  Posso ter códigos não medidos misturados com medidas na minha tabela de fatos? 
1  Design de banco de dados para dados de tradição e ini-file com integridade 
1  Melhores práticas para uso misto de rdbms e arquivos no sistema de arquivos 
2  Tática de normalização do SQL Server: varchar vs intent identidade 
1  Armazenando as relações entre usuários com permissões de visualização específicas 
0  Problema de design SQL - itens em várias seções 
0  acesso simultâneo ao banco de dados; manter os dados consistentes em todas as conexões 
4  MS Access: Renomear programaticamente Colunas 
1  Array no procedimento armazenado 



© 2021 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.