Em um banco de dados relacional, uma dependência ocorre quando as informações armazenadas na mesma tabela de banco de dados determinam exclusivamente outras informações armazenadas na mesma tabela. Uma dependência multivalorada ocorre quando a presença de uma ou mais linhas em uma tabela implica a presença de uma ou mais outras linhas na mesma tabela. Dito de outra forma, dois atributos (ou colunas) em uma tabela são independentes um do outro, mas ambos dependem de um terceiro atributo.
Uma dependência multivalorada impede o padrão de normalização da quarta forma normal. Os bancos de dados relacionais seguem cinco formas normais que representam diretrizes para o design de registros. Eles evitam anomalias de atualização e inconsistências nos dados. A quarta forma normal lida com relacionamentos muitos-para-um em um banco de dados.
Dependência Funcional vs. Dependência Multivalorada
Para entender uma dependência multivalorada, é útil revisitar o que é uma dependência funcional.
Se um atributo X determina exclusivamente um atributo Y, então Y é funcionalmente dependente de X. Isso é escrito como X -> Y. Por exemplo, na tabela Alunos abaixo, o Student_Name determina o Major:
Nome_Aluno | Maior |
---|---|
Ravi | História da Arte |
Beth | Química |
Esta dependência funcional pode ser escrita: Student_Name -> Major. Cada Student_Name determina exatamente um Major e nada mais.
Se você quiser que o banco de dados também rastreie os esportes que esses alunos praticam, você pode pensar que a maneira mais fácil de fazer isso é adicionar outra coluna intitulada Esporte:
Nome_Aluno | Maior | Esporte |
---|---|---|
Ravi | História da Arte | Futebol |
Ravi | História da Arte | Vôlei |
Ravi | História da Arte | Tênis |
Beth | Química | Tênis |
Beth | Química | Futebol |
O problema aqui é que tanto Ravi quanto Beth praticam vários esportes. É necessário adicionar uma nova linha para cada esporte adicional.
Esta tabela introduziu uma dependência multivalorada porque o curso e o esporte são independentes um do outro, mas ambos dependem do aluno. Este é um exemplo simples e facilmente identificável, mas uma dependência de vários valores pode se tornar um problema em um banco de dados grande e complexo.
Uma dependência multivalorada é escrita X ->-> Y. Neste caso:
Student_Name ->-> Major
Student_Name ->- > Esporte
Isto é lido como "Student_Name multidetermina Major" e "Student_Name multidetermina Sport."
Uma dependência multivalorada sempre requer pelo menos três atributos porque consiste em pelo menos dois atributos que são dependentes de um terceiro.
Dependência e Normalização Multivalorados
Uma tabela com uma dependência multivalorada viola o padrão de normalização da quarta forma normal porque cria redundâncias desnecessárias e pode contribuir para dados inconsistentes. Para trazer isso para a 4NF, é necessário dividir esta informação em duas tabelas.
A tabela abaixo agora tem uma dependência funcional de Student_Name -> Major, e nenhuma dependência multivalorada:
Nome_Aluno | Maior |
---|---|
Ravi | História da Arte |
Ravi | História da Arte |
Ravi | História da Arte |
Beth | Química |
Beth | Química |
Embora esta tabela também tenha uma única dependência funcional de Student_Name -> Sport:
Nome_Aluno | Esporte |
---|---|
Ravi | Futebol |
Ravi | Vôlei |
Ravi | Tênis |
Beth | Tênis |
Beth | Futebol |
A normalização geralmente é realizada simplificando tabelas complexas para que elas contenham informações relacionadas a uma única ideia ou tema, em vez de tentar fazer com que uma única tabela contenha muitas informações díspares.