Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como descobrir se relacionamento entre tabelas é manytomany somente olhando o DDL

Tenho somente o sql que cria as tabelas. Existe alguma forma de analisar se existe relacionamento N:N ?

Obrigado, Marcos

2 respostas
solução!

Olá Marcos, tudo bom?

Existe sim! Você pode procurar por uma tabela que tenha referência para duas outras tabelas sem restrições de unicidade pra nenhuma delas individualmente. Exemplo de modelagem:

+---------------+  +---------------+  +---------------+
| Author        |  | Book          |  | BookAuthors   |
+---------------+  +---------------+  +---------------+
| id        UNQ |  | id        UNQ |  | id        UNQ |
| name          |  | title     UNQ |  | author_id  FK |
+---------------+  +---------------+  | book_id    FK |
                                      +---------------+
# UNQ: chave única, não é permitida outra tupla na mesma tabela com o mesmo valor nesta coluna
#  FK: chave estrangeira, referencia outra tabela

As chaves estrangeiras author_id e book_id não podem ter restrição individual, ou seja: supondo que a tabela já tenha a seguinte entrada

+-----------------------------------+
| BookAuthors                       |
+-----------------------------------+
| id        | author_id | book_id   |
+-----------------------------------+
| 1         | 1001      | 2001      |
+-----------------------------------+

é importante que as duas operações a seguir sejam permitidas

INSERT INTO BookAuthors (author_id, book_id) VALUES (1001, 2222);
# pois o mesmo autor pode ter diversos livros publicados

INSERT INTO BookAuthors (author_id, book_id) VALUES (1111, 2001);
# pois o mesmo livro pode ter diversos autores

Agora, pode existir uma restrição conjunta (não pode haver duas entradas com ambas as chaves iguais), mas ela não é obrigatória. A operação a seguir pode ou não ser permitida.

INSERT INTO BookAuthors (author_id, book_id) VALUES (1001, 2001);
# pois o autor 1001 já é autor do livro 2001

Se encontrar uma tabela que tenha essa característica, provavelmente é um relacionamento N:N.

Muito obrigado Marco Salles, resolveu minha dúvida. Valeu!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software