Corso
Nelle basi di dati, la dipendenza transitiva si verifica quando un attributo in una tabella dipende da un altro attributo, che a sua volta dipende dalla chiave primaria. La dipendenza transitiva è un problema nella normalizzazione dei database perché porta a problemi sui dati, come anomalie di aggiornamento, inserimento ed eliminazione, che approfondiremo in questo articolo.
Se, dopo questo articolo, vuoi saperne di più, ti consiglio il corso Database Design di DataCamp per familiarizzare con i database relazionali e l'archiviazione dei dati in un database. Ti suggerisco anche di dare un'occhiata al nostro tutorial Normalization in SQL per conoscere le forme normali in SQL, il linguaggio più comune per gestire database relazionali in questo contesto.
Capire la dipendenza transitiva nei database
Nei database relazionali, la dipendenza transitiva si verifica quando un attributo dipende indirettamente da un altro attraverso un attributo intermedio. Questo problema significa che il valore di una colonna può essere determinato indirettamente dai valori di altre due colonne. Considera la seguente tabella, chiamata DataCamp_Programs:
| Course_or_Skill_Track | Instructor | Instructor_Title |
|---|---|---|
| Data Manipulation in SQL | Mona Khalil | Data Scientist |
| SQL Fundamentals | Mona Khalil | Data Scientist |
| Introduction to SQL | Izzy Weber | Data Coach |
Da questa tabella:
-
Course_or_Skill_Track→Instructor: se conosciamo il corso o lo skill track, conosciamo il docente. -
Instructornon →Course_or_Skill_Track: a volte i docenti insegnano più di uno. -
Instructor→Instructor_Title: ogni docente ha un titolo.
Quindi, Course_or_Skill_Track → Instructor_Title è una dipendenza transitiva.
Perché le dipendenze transitive causano problemi
Le dipendenze transitive possono causare problemi nel database, principalmente legati a ridondanza dei dati, anomalie e incoerenze.
Ridondanza dei dati
La ridondanza dei dati si verifica quando gli stessi dati vengono ripetuti inutilmente nel database, causando inefficienze. Nell'esempio della tabella DataCamp_Programs, il titolo del docente è archiviato più volte per ogni corso che tiene. Questa ripetizione spreca spazio di archiviazione e rende il database più difficile da mantenere.
Anomalie sui dati
Vediamo ora i problemi di aggiornamento, inserimento ed eliminazione.
Anomalie di aggiornamento
Le anomalie di aggiornamento si verificano quando le modifiche ai dati devono essere applicate in più punti a causa della ridondanza. Questo porta a incoerenze se alcune istanze vengono aggiornate mentre altre vengono trascurate. Immagina, per esempio, di usare una query SQL per aggiornare la tabella DataCamp_Programs perché il titolo di Mona Khalil è cambiato in Lead Data Scientist. Dovresti aggiornare manualmente ogni riga in cui compare il suo titolo. Se anche solo un'istanza viene mancata, il database conterrà informazioni contrastanti sul suo titolo attuale.
| Course_or_Skill_Track | Instructor | Instructor_Title |
|---|---|---|
| Data Manipulation in SQL | Mona Khalil | Lead Data Scientist |
| SQL Fundamentals | Mona Khalil | Data Scientist |
| Introduction to SQL | Izzy Weber | Data Coach |
Anomalie di inserimento
Le anomalie di inserimento si verificano quando non puoi inserire dati nel database perché mancano altri dati richiesti. In altri casi, potresti riuscire a inserire i dati ma la struttura della tabella ti obbliga a includere informazioni irrilevanti, ridondanti o mancanti, come nell'esempio seguente:
| Course_or_Skill_Track | Instructor | Instructor_Title |
|---|---|---|
| Data Manipulation in SQL | Mona Khalil | Data Scientist |
| SQL Fundamentals | Mona Khalil | Data Scientist |
| Introduction to SQL | Izzy Weber | Data Coach |
| TBD | Liam Cooper | Data Analyst |
Anomalie di eliminazione
Le anomalie di eliminazione si verificano quando l'eliminazione di un record rimuove involontariamente informazioni preziose dal database. Ad esempio, eliminare il record che contiene Izzy Weber rimuoverebbe anche il titolo del docente, il che potrebbe portare a una perdita di dati, perché potresti non avere più l'intera gamma di titoli nel sistema. Qui, potremmo aver rimosso Data Coach dal sistema del tutto senza volere quel comportamento.
| Course_or_Skill_Track | Instructor | Instructor_Title |
|---|---|---|
| Data Manipulation in SQL | Mona Khalil | Data Scientist |
| SQL Fundamentals | Mona Khalil | Data Scientist |
Rimozione delle dipendenze transitive con la 3NF
Nel contesto dei database, la normalizzazione organizza i dati per ridurre al minimo la ridondanza e migliorare l'integrità dei dati. Per questo motivo, le dipendenze transitive vengono spesso discusse nel contesto della terza forma normale (3NF), una tecnica di normalizzazione dei database che elimina le dipendenze per risolvere il problema della dipendenza transitiva.
La terza forma normale è un livello di normalizzazione dei database che elimina le dipendenze transitive e garantisce che ogni attributo non chiave dipenda solo dalla chiave primaria. Questo aiuta a prevenire la ridondanza e gli errori causati dalle dipendenze transitive. Considera i passaggi seguenti quando normalizzi uno schema di database.
Identificare le dipendenze transitive
Per individuare le dipendenze transitive nel tuo database, suddividi il processo:
- Verifica le dipendenze funzionali sulla chiave primaria: inizia identificando tutte le dipendenze funzionali in cui gli attributi dipendono direttamente dalla chiave primaria. Questo passaggio ti aiuta a concentrarti sulle relazioni principali nella tua tabella.
- Cerca dipendenze indirette: verifica poi se qualche attributo non chiave (quelli che non fanno parte della chiave primaria) dipende da altri attributi non chiave. Se scopri che un attributo non chiave dipende da un altro, che a sua volta dipende dalla chiave primaria, hai identificato una dipendenza transitiva.
- Verifica la presenza di ridondanza o anomalie: infine, valuta se questa dipendenza indiretta introduce ridondanza dei dati o rende gli aggiornamenti più complicati.
Suddividere le tabelle
Una volta identificate le dipendenze transitive, devi suddividere le tabelle per eliminarle. Dividerai la tabella in tabelle più piccole in cui gli attributi non chiave dipendono direttamente dalla chiave primaria. Preserverai inoltre la relazione tra le tabelle collegandole tramite chiavi esterne.
Ecco come potresti suddividere la tabella DataCamp_Programs in due tabelle per normalizzarla ed eliminare la dipendenza transitiva. Come vedrai, abbiamo diviso la tabella in due. instructor diventa la chiave per collegarle.
Tabella 1: courses_table
| Course or Skill Track | Instructor |
|---|---|
| Data Manipulation in SQL | Mona Khalil |
| SQL Fundamentals | Mona Khalil |
| Introduction to SQL | Izzy Weber |
Tabella 1: instructors_table
| Instructor | Instructor_Title |
|---|---|
| Mona Khalil | Data Scientist |
| Izzy Weber | Data Coach |
Questa struttura elimina la dipendenza transitiva, in cui Instructor_Title prima dipendeva da Course_or_Skill_Track tramite Instructor. Ora, Instructor_Title dipende solo da Instructor.
Come evitare le dipendenze transitive
Quando progetti il tuo database, è importante evitare le dipendenze transitive per mantenere efficienza, scalabilità e integrità dei dati. Di seguito trovi le best practice per ridurre al minimo i rischi di ridondanza, anomalie e incoerenze.
- Normalizzazione durante il design dello schema: se stai progettando il database a partire dallo schema, è importante considerare la terza forma normale (3NF) già nelle prime fasi. Questo approccio aiuta a ridurre la dipendenza transitiva applicando la tecnica di normalizzazione.
- Audit regolari dello schema: dopo aver creato il database, è importante eseguire audit regolari per assicurarsi che resti privo di dipendenze transitive.
- Evitare di semplificare eccessivamente le relazioni: mappa sempre le relazioni e separa correttamente le entità in tabelle diverse per archiviare informazioni differenti.
Conclusione
Le dipendenze transitive nei database si verificano quando un attributo in una tabella dipende da un altro attributo, che dipende dalla chiave primaria. La dipendenza transitiva influisce sempre sull'efficienza del database introducendo ridondanze, incoerenze e anomalie. Come sviluppatore, è importante identificare ed eliminare le dipendenze transitive per garantire l'integrità dei dati. Dovresti anche identificare ed eliminare le dipendenze transitive durante la progettazione del database. Raggiungere la terza forma normale (3NF) ti aiuterà a ottimizzare i database e migliorare l'efficienza.
Se vuoi migliorare le tue competenze di progettazione dei database, ti consiglio il corso di DataCamp Creating PostgreSQL Databases per approfondire il design dello schema e i controlli di accesso al database. Infine, se vuoi far avanzare le tue competenze di gestione dei database per il big data, ti consiglio il nostro corso Introduction to Data Modeling in Snowflake per saperne di più su relazioni, modellazione dimensionale e data vault, così da realizzare efficienti data warehouse in cloud.
Domande frequenti sulla dipendenza transitiva
Qual è la differenza tra dipendenze funzionali e dipendenze transitive?
Una dipendenza funzionale si verifica quando un attributo dipende direttamente dalla chiave primaria. Una dipendenza transitiva si verifica quando un attributo non chiave dipende da un altro attributo non chiave, che a sua volta dipende dalla chiave primaria.
Perché le dipendenze transitive sono problematiche?
Le dipendenze transitive portano a ridondanza dei dati e anomalie, come anomalie di aggiornamento, inserimento ed eliminazione.
Che cos'è la normalizzazione dei dati?
La normalizzazione dei dati è il processo di organizzazione di un database in tabelle e colonne per ridurre la ridondanza dei dati e migliorare l'integrità dei dati.
Che cos'è la terza forma normale (3NF)?
La terza forma normale (3NF) è una tecnica di normalizzazione senza dipendenze transitive. In 3NF, ogni attributo non primo deve dipendere solo dalla chiave primaria, garantendo l'assenza di dipendenze indirette.


