Tenho somente o sql que cria as tabelas. Existe alguma forma de analisar se existe relacionamento N:N ?
Obrigado, Marcos
Tenho somente o sql que cria as tabelas. Existe alguma forma de analisar se existe relacionamento N:N ?
Obrigado, Marcos
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!