Uma dependência transitiva em um banco de dados é um relacionamento indireto entre valores na mesma tabela que causa uma dependência funcional. Para atingir o padrão de normalização da Terceira Forma Normal (3NF), você deve eliminar qualquer dependência transitiva. Por sua natureza, uma dependência transitiva requer três ou mais atributos (ou colunas de banco de dados) que tenham uma dependência funcional entre eles, o que significa que a coluna A em uma tabela depende da coluna B por meio de uma coluna intermediária C. Vamos ver como isso pode funcionar.
Exemplo de dependência transitiva
Você não precisa ser um programador para usar um Raspberry Pi.
Richard Saville
Author_ID | Autor | Livro | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Jogo de Ender | Estados Unidos |
Auth_001 | Orson Scott Card | Filhos da Mente | Estados Unidos |
Auth_002 | Margaret Atwood | The Handmaid’s Tale | Canadá |
No exemplo AUTHORS acima:
- Livro → Autor: Aqui o Livro atributo determina o Autor atributo. Se você souber o nome do livro, poderá aprender o nome do autor. Porém, Autor não determina Livro, porque um autor pode escrever vários livros. Por exemplo, só porque sabemos o nome do autor Orson Scott Card, ainda não sabemos o nome do livro.
- Autor → Author_Nationality: Da mesma forma, o Autor atributo determina o Author_Nationality, mas não o contrário; só porque sabemos a nacionalidade não significa que possamos determinar o autor.
Mas esta tabela apresenta uma dependência transitiva:
- Livro →Author_Nationality: Se soubermos o nome do livro, podemos determinar a nacionalidade por meio da coluna Autor.
Evitando dependências transitivas
Para garantir a Terceira Forma Normal, vamos remover a dependência transitiva. Podemos começar removendo a coluna Livro da tabela Autores e criando uma tabela Livros separada:
LIVROS
Book_ID | Livro | Author_ID |
---|---|---|
Book_001 | Jogo de Ender | Auth_001 |
Book_001 | Filhos da Mente | Auth_001 |
Book_002 | The Handmaid’s Tale | Auth_002 |
AUTORES
Author_ID | Autor | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Estados Unidos |
Auth_002 | Margaret Atwood | Canadá |
Isso corrigiu isso? Vamos examinar nossas dependências agora:
Mesa de LIVROS:
- Book_ID → Livro: O Livro depende do Book_ID.
- Nenhuma outra dependência nesta tabela existe, então estamos bem. Observe que a chave estrangeira Author_ID vincula esta tabela à tabela AUTHORS por meio de sua chave primária Author_ID. Criamos um relacionamento para evitar uma dependência transitiva, um projeto-chave de bancos de dados relacionais.
Tabela AUTHORS:
- Author_ID → Autor: O Autor depende do Author_ID.
- Autor → Author_Nationality: A nacionalidade pode ser determinada pelo autor.
- Author_ID → Author_Nationality: A nacionalidade pode ser determinada a partir do Author_ID através de Autor atributo. Ainda temos uma dependência transitiva.
Precisamos adicionar uma terceira tabela para normalizar esses dados:
PAÍSES
Country_ID | País |
---|---|
Coun_001 | Estados Unidos |
Coun_002 | Canadá |
AUTORES
Author_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Agora temos três tabelas, fazendo uso de chaves estrangeiras para vincular entre as tabelas:
- A chave estrangeira da tabela BOOK Author_ID vincula um livro a um autor na tabela AUTHORS.
- A chave estrangeira da tabela AUTHORS Country_ID vincula um autor a um país da tabela PAÍSES.
- A tabela COUNTRIES não tem chave estrangeira porque não precisa ser vinculada a outra tabela neste design.
Por que as dependências transitivas são um projeto de banco de dados ruim
Qual é a vantagem de evitar dependências transitivas para ajudar a garantir 3NF? Vamos considerar nossa primeira tabela novamente e ver os problemas que ela cria:
AUTORES
Author_ID | Autor | Livro | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Jogo de Ender | Estados Unidos |
Auth_001 | Orson Scott Card | Filhos da Mente | Estados Unidos |
Auth_002 | Margaret Atwood | The Handmaid’s Tale | Canadá |
Este tipo de design pode contribuir para anomalias e inconsistências de dados, por exemplo:
- Se você excluiu os dois livros “Children of the Mind” e “Ender’s Game”, excluiria o autor “Orson Scott Card” e sua nacionalidade completamente do banco de dados.
- Você não pode adicionar um novo autor ao banco de dados, a menos que também adicione um livro; e se a autora ainda não foi publicada ou você não sabe o nome de um livro de sua autoria?
- Se “Orson Scott Card” mudou sua cidadania, você teria que mudá-la em todos os registros em que ele aparecer. Ter vários registros com o mesmo autor pode resultar em dados imprecisos: e se a pessoa que faz a entrada de dados não perceber que há vários registros para ela e alterar os dados em apenas um registro?
- Você não pode excluir um livro como “The Handmaid’s Tale” sem também excluir completamente o autor.
Esses são apenas alguns motivos pelos quais a normalização, e evitar dependências transitivas, protege os dados e garante a consistência. Mais da Lifewire
-
Relacionamentos de banco de dados
-
Dependência multivalorada no design de banco de dados
-
Glossário de termos comuns de banco de dados
-
Noções básicas de normalização de banco de dados
-
O que são dependências de banco de dados?
-
Colocando um banco de dados na terceira forma normal (3NF)
-
Dependência funcional total na normalização do banco de dados
-
Relacionamentos um-para-muitos em um banco de dados
-
O que é a forma normal de Boyce-Codd (BCNF)?
-
Escolhendo uma chave primária
-
Determinantes e seu papel em um banco de dados
-
16 melhores sites para baixar livros grátis em 2021
-
Introdução aos relacionamentos de banco de dados
-
Normalizando seu banco de dados: Primeira forma normal (1FN)
-
O que é um banco de dados?
-
Restrições UNIQUE no Microsoft SQL Server
Seus direitos de privacidade
A Lifewire e nossos parceiros terceirizados usam cookies e processam dados pessoais como identificadores exclusivos com base em seu consentimento para armazenar e / ou acessar informações em um dispositivo, exibir anúncios personalizados e para medição de conteúdo, percepção do público e desenvolvimento de produtos. Para alterar ou retirar suas opções de consentimento para Lifewire.com, incluindo seu direito de contestar quando um interesse legítimo é usado, clique abaixo. A qualquer momento, você pode atualizar suas configurações por meio do link “Privacidade da UE” na parte inferior de qualquer página. Essas escolhas serão sinalizadas globalmente para nossos parceiros e não afetarão os dados de navegação. Lista de parceiros (fornecedores)
Nós e nossos parceiros processamos dados para:
Faça a varredura ativamente das características do dispositivo para identificação. Use dados precisos de geolocalização. Armazene e / ou acesse informações em um dispositivo. Selecione o conteúdo personalizado. Crie um perfil de conteúdo personalizado. Avalie o desempenho do anúncio. Selecione anúncios básicos. Crie um perfil de anúncios personalizados. Selecione anúncios personalizados. Aplique pesquisas de mercado para gerar insights do público. Avalie o desempenho do conteúdo. Desenvolva e aprimore produtos. Lista de parceiros (fornecedores)