Eviti Transitivajn Dependecojn por Helpi Certigi Normalaĵon
Transitiva dependeco en datumbazo estas nerekta rilato inter valoroj en la sama tabelo, kiu kaŭzas funkciajn dependecojn . Por atingi normala normo de Tria Normala Formo (3NF), vi devas forigi ajnan transitivan dependecon.
Laŭ ĝia naturo, transitiva dependeco postulas tri aŭ pli atributojn (aŭ datumbazajn kolumnojn), kiuj havas funkciajn dependecojn inter ili, signifante, ke Kolumno A en tablo dependas sur Kolumno B tra meza Kolumno C.
Vidu kiel ĝi funkcios.
Transitiva Dependa Ekzemplo
AŬDOROJ
Aŭtoro_ID | Aŭtoro | Libro | Aŭtoro_Nacio |
---|---|---|---|
Auth_001 | Orson Scott-Karto | Ludo de Ender | Usono |
Auth_001 | Orson Scott-Karto | Ludo de Ender | Usono |
Auth_002 | Margaret Atwood | La Fabelo de la Servistino | Kanado |
En la supra ekzemplo de AUTOROJ:
- Libro → Aŭtoro : Ĉi tie, la Libro- atributo determinas la Aŭtoro- atributon. Se vi konas la libron-nomon, vi povas lerni la nomon de la aŭtoro. Tamen, Aŭtoro ne determinas Libron , ĉar aŭtoro povas skribi multoblajn librojn. Ekzemple, nur ĉar ni konas la nomon de la aŭtoro Orson Scott Card, ni ankoraŭ ne konas la libron-nomon.
- Aŭtoro → Aŭtoro_Nacienco : Simile, la Aŭtoro- atributo determinas la Aŭtomatecon , sed ne aliflanke; nur ĉar ni scias, ke la nacieco ne signifas, ke ni povas determini la aŭtoron.
Sed ĉi tiu tablo enkondukas transitivan dependecon:
- Libro → Aŭtoro_Nacio: Se ni konas la libron-nomon, ni povas determini la naciecon tra la Aŭtoro-kolumno.
Evitante Transitivajn Dependecojn
Por certigi Trian Normalan Formon, ni forigu la transitivan dependecon.
Ni povas komenci per forigo de la Libra kolumno de la Aŭtoroj-tablo kaj kreante apartan Libron-tablon:
LIBROJ
Book_ID | Libro | Aŭtoro_ID |
---|---|---|
Book_001 | Ludo de Ender | Auth_001 |
Book_001 | Infanoj de la Menso | Auth_001 |
Book_002 | La Fabelo de la Servistino | Auth_002 |
AŬDOROJ
Aŭtoro_ID | Aŭtoro | Aŭtoro_Nacio |
---|---|---|
Auth_001 | Orson Scott-Karto | Usono |
Auth_002 | Margaret Atwood | Kanado |
Ĉu tio riparis? Ni ekzamenu niajn dependecojn nun:
LIBROJ tablo :
- Book_ID → Libro: La Libro dependas de la Book_ID .
- Ne ekzistas aliaj dependajxoj en ĉi tiu tablo, do ni estas bone. Notu, ke la fremda ŝlosilo Author_ID ligas ĉi tiun tablon al la AŬDORA tabelo per ĝia ĉefa klavo Author_ID . Ni kreis rilaton por eviti transitivan dependecon, ŝlosilan dezajnon de rilataj datumbazoj.
AŬDOROJ tablo :
- Author_ID → Aŭtoro: La Aŭtoro dependas de la Aŭtoro_ID .
- Aŭtoro → Aŭtoro_Nacio: La nacieco povas esti difinita de la aŭtoro.
- Author_ID → Aŭtoro_Nacio: La nacieco povas esti determinita de la Aŭtoro_ID tra la Aŭtoro- atributo. Ni ankoraŭ havas transitivan dependecon.
Ni bezonas aldoni trian tablon por normaligi ĉi tiun datumon:
LANDOJ
Lando_ID | Lando |
---|---|
Coun_001 | Usono |
Coun_002 | Kanado |
AŬDOROJ
Aŭtoro_ID | Aŭtoro | Lando_ID |
---|---|---|
Auth_001 | Orson Scott-Karto | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Nun ni havas tri tabulojn, uzante fremdajn klavojn por ligi inter la tabloj:
- La fremda ŝlosilo de la LIBRO-tablo Author_ID ligas libron al aŭtoro en la tabelo de AŬDOROJ .
- La fremda ŝlosilo de la AUTHORS- tablo Country_ID ligas aŭtoro al lando en la LANDOJ-tablo.
- LANDOJ-tablo ne havas eksterlandan ŝlosilon ĉar ĝi ne bezonas ligi al alia tablo en ĉi tiu dezajno.
Kial Transitivaj Dependecoj Estas Malbona Datuma Dezajno
Kio valoro evitas transitivajn dependecojn por helpi certigi 3NF? Ni rigardu nian unuan tablon denove kaj rigardu la temojn, kiujn ĝi kreas:
AŬDOROJ
Aŭtoro_ID | Aŭtoro | Libro | Aŭtoro_Nacio |
---|---|---|---|
Auth_001 | Orson Scott-Karto | Ludo de Ender | Usono |
Auth_001 | Orson Scott-Karto | Infanoj de la Menso | Usono |
Auth_002 | Margaret Atwood | La Fabelo de la Servistino | Kanado |
Ĉi tiu speco de dezajno povas kontribui al datumoj de anomalioj kaj kontraŭkonsentoj, ekzemple:
- Se vi forigis la du librojn "Infanoj de la Menso" kaj "Ender's Game", vi forigos la aŭtoron "Orson Scott Card" kaj sian naciecon tute de la datumbazo.
- Vi ne povas aldoni novan aŭtoron al la datumbazo krom se vi ankaŭ aldonos libron; Kio se la aŭtoro ankoraŭ ne eldonis aŭ vi ne konas la nomon de libro, kiun ŝi aŭdis?
- Se "Orson Scott Card" ŝanĝis sian civitanecon, vi devus ŝanĝi ĝin en ĉiuj registroj, en kiuj li aperas. Havi multoblajn rekordojn kun la sama aŭtoro povas rezultigi malĝustajn datumojn: kio, se la datumira persono ne rimarkas, ekzistas multaj registroj por li kaj ŝanĝas la datumojn en nur unu rekordo?
- Vi ne povas forviŝi libron kiel "The Handmaid's Tale" sen forigo de la aŭtoro tute.
Ĉi tiuj estas nur kelkaj kialoj kial normaligo , kaj evitante transitivajn dependecojn, protektas datumojn kaj certigas konsekvencon.