Qual é a diferença real entre relacionamento um-para-muitos e muitos-para-um? É apenas invertido, mais ou menos?
Não consigo encontrar nenhum tutorial 'bom e fácil de entender' sobre este tópico além deste: SQL para iniciantes: Parte 3 - Relacionamentos de banco de dados
Respostas:
Sim, é vice-versa. Depende de qual lado do relacionamento a entidade está presente.
Por exemplo, se um departamento pode empregar vários funcionários, então, departamento para funcionário é um relacionamento de um para muitos (1 departamento emprega muitos funcionários), enquanto o relacionamento de funcionário para departamento é de muitos para um (muitos funcionários trabalham em um departamento).
Mais informações sobre os tipos de relacionamento:
Relacionamentos de banco de dados - documentação do IBM DB2
fonte
Nesta página sobre Terminologia de Banco de Dados
fonte
Existem diferenças conceituais entre esses termos que devem ajudá-lo a visualizar os dados e também possíveis diferenças no esquema gerado que devem ser totalmente compreendidos. A diferença, porém, é principalmente de perspectiva.
Em um relacionamento um-para-muitos , a tabela local possui uma linha que pode ser associada a muitas linhas em outra tabela. No exemplo do SQL para iniciantes , um
Customer
pode estar associado a váriosOrder
s.No relacionamento oposto muitos para um , a tabela local pode ter muitas linhas associadas a uma linha em outra tabela. Em nosso exemplo, muitos
Order
s podem estar associados a umCustomer
. Essa diferença conceitual é importante para a representação mental.Além disso, o esquema que suporta o relacionamento pode ser representado de forma diferente nas tabelas
Customer
eOrder
. Por exemplo, se o cliente tiver colunasid
ename
:Então, para que um
Order
seja associado a aCustomer
, muitas implementações SQL adicionam àOrder
tabela uma coluna que armazena oid
do associadoCustomer
(neste esquemacustomer_id
:Nas linhas de dados acima, se olharmos para a
customer_id
coluna id, vemos queBill Smith
(customer-id # 1) tem 2 pedidos associados a ele: um de $ 12,34 e outro de $ 7,58.Jim Kenshaw
(ID do cliente # 2) tem apenas 1 pedido por $ 158,01.O que é importante perceber é que normalmente a relação um-para-muitos não adiciona nenhuma coluna à tabela que é "um". O
Customer
não tem colunas extras que descrevem o relacionamento comOrder
. Na verdade, oCustomer
poder também têm um relacionamento um-para-muitos comShippingAddress
eSalesCall
mesas e ainda não têm colunas adicionais àCustomer
tabela.No entanto, para que um relacionamento muitos-para-um seja descrito, geralmente uma
id
coluna é adicionada à tabela "muitos" que é uma chave estrangeira para a tabela "um" - neste caso, umacustomer_id
coluna é adicionada aoOrder
. Ao pedido nº 10 associado por $ 12,34Bill Smith
, atribuímos acustomer_id
coluna aoBill Smith
id 1 de.No entanto, também é possível que haja outra tabela que descreva o relacionamento
Customer
eOrder
, de forma que nenhum campo adicional precise ser adicionado àOrder
tabela. Em vez de adicionar umcustomer_id
campo àOrder
tabela, pode haver umaCustomer_Order
tabela que contém chaves paraCustomer
eOrder
.Nesse caso, o um-para-muitos e muitos-para-um são todos conceituais, pois não há mudanças de esquema entre eles. Qual mecanismo depende de seu esquema e implementação de SQL.
Espero que isto ajude.
fonte
javax.persistence.OneToMany
diferente doManyToOne
. Você está dizendo que eles são sinônimos ou apenas que depende da implementação? Minha resposta está incorreta?Não há diferença. É apenas uma questão de idioma e preferência para definir o relacionamento.
fonte
A resposta à sua primeira pergunta é: ambos são semelhantes,
A resposta à sua segunda pergunta é: um para muitos -> um homem (mesa MAN) pode ter mais de uma esposa (mesa MULHERES) muitos para um -> mais de uma mulher se casou com um homem.
Agora, se você deseja relacionar esta relação com duas tabelas MAN e WOMEN, uma linha da tabela MAN pode ter muitas relações com as linhas da tabela WOMEN. espero que esteja claro.
fonte
Exemplo
Duas tabelas com uma relação
SQL
Em SQL, existe apenas um tipo de relacionamento, é chamado de Referência. (Seu front end pode fazer coisas úteis ou confusas [como em algumas das Respostas], mas isso é uma história diferente.)
Referências
a chave primária em outra tabela (o referenc ed tabela)
Em termos SQL, Bar faz referência a Foo
Não o contrário
Uma vez que
Foo.Foo
é uma chave primária, é única, há apenas uma linha para qualquer valor deFoo
Bar.Foo
é uma referência, uma chave estrangeira e não há um índice exclusivo nela, pode haver muitas linhas para qualquer valor deFoo
Foo::Bar
é de um para muitosBar::Foo
é de muitos para umBar
linha, há apenas umaFoo
linha que faz referênciaExiste apenas uma relação, portanto não há diferença. A percepção (de um "fim" ou de outro "fim") ou a leitura de trás para frente não muda a relação.
Cardinalidade
A cardinalidade é declarada primeiro no modelo de dados, o que significa Lógico e Físico (a intenção), e depois na implementação (a intenção realizada).
Cardinalidade
Um para zero para muitos
No SQL, isso (acima) é tudo o que é necessário.
Um para um para muitos
Você precisa de um transação para impor o um na tabela de Referência.
Um para zero para um que
você precisa em
Bar
:Um para um,
você precisa de uma transação para fazer valer o que está na tabela de referência.
Muitos para muitos
Não existe tal coisa no nível Físico (lembre-se, existe apenas um tipo de relação no SQL).
Nos primeiros níveis lógicos durante o exercício de modelagem, é conveniente traçar tal relação. Antes que o modelo chegue perto da implementação, é melhor que ele seja elevado para usar apenas coisas que podem existir. Essa relação é resolvida com a implementação de uma Tabela Associativa.
Resolvido muitos para muitos
fonte
Um-para-Muitos e Muitos-para-Um são semelhantes em Multiplicidade, mas não em Aspectos (ou seja, Direcionalidade).
O mapeamento de associações entre classes de entidade e os relacionamentos entre tabelas. Existem duas categorias de relacionamentos:
fonte
Não há diferença prática. Apenas use o relacionamento que faz mais sentido, dada a maneira como você vê o seu problema, conforme ilustrado por Devendra.
fonte
--- Muitos para um --- Esses 3 filhos podem ter pais solteiros.
Ambos são semelhantes. Isso pode ser usado pertence à necessidade. Se você quer encontrar filhos para alguns pais em particular, pode escolher o Um-para-muitos. ou então, quer encontrar pais para gêmeos, você pode ir com o Muitos-para-um. Da mesma forma....,
fonte
um-para-muitos tem classe pai contém n número de filhos, portanto, é um mapeamento de coleção.
muitos para um tem n número de filhos contém um pai, então é um mapeamento de objeto
fonte