Dependență funcțională (programare)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 30 iunie 2018; verificările necesită 13 modificări .

Dependența funcțională  este o relație binară între seturi de atribute ale unei relații date și este, de fapt, o relație unu-la-mulți. Utilizarea sa se datorează faptului că vă permite să rezolvați formal și strict multe probleme.

Dependența funcțională este un concept care stă la baza multor probleme legate de bazele de date relaționale , inclusiv, în special, proiectarea acestora.

Definiții

Dependență funcțională

Fie ca o relație să fie dată cu o schemă (antet) și să  fie câteva subseturi ale setului de atribute al relației . Un set depinde funcțional de dacă și numai dacă fiecare valoare a setului este asociată cu exact o valoare a setului . Desemnat .

Cu alte cuvinte, dacă două tupluri au aceeași valoare în , atunci au aceeași valoare în .

În acest caz ,  determinantul  este partea dependentă.

O dependență funcțională se spune că este trivială dacă partea dependentă este o submulțime a determinantului.

Închiderea unui set de dependențe

Unele dependențe funcționale pot implica alte dependențe funcționale. De exemplu, dependența funcțională,

.

Mulțimea tuturor dependențelor funcționale care sunt implicate de un set dat de dependențe funcționale se numește închiderea mulțimii .

Închiderea setului de atribute

Fie  un set de atribute ale relației și  setul de dependențe funcționale ale acestei relații. Închiderea setului de atribute în limite este un astfel de set de toate atributele relației încât dependența funcțională este un membru al închiderii .

Seturi ireductibile de dependențe

Să fie și  niște seturi de dependențe funcționale.

Evaluarea închiderii

Regulile de inferență ale lui Armstrong

În 1974, William Armstrong a propus un set de reguli pentru a deduce noi dependențe funcționale din date.

Să presupunem că avem o relație și un set de atribute . Pentru a scurta înregistrarea, vom scrie în schimb simplu .

Regulile de inferență ale lui Armstrong sunt complete (folosindu-le, se pot deriva toate celelalte dependențe funcționale implicate de setul dat) și fiabile („de prisos” dependențe funcționale nu pot fi deduse: dependența funcțională derivată este valabilă oriunde sunt dependențele funcționale originale (din care a fost derivate) sunt valabile).

În plus, mai multe reguli suplimentare sunt derivate pur și simplu din aceste reguli, care simplifică sarcina de a deriva dependențe funcționale.

Teoremă: O dependență funcțională este dedusă dintr-un set dat de dependențe funcționale conform regulilor de inferență ale lui Armstrong dacă și numai dacă .

Închiderea setului de atribute

Dacă aplicăm regulile din secțiunea anterioară până când crearea de noi dependențe funcționale se oprește de la sine, atunci obținem o închidere pentru un anumit set de dependențe funcționale. În practică, rareori este necesar să se calculeze această închidere de la sine, de cele mai multe ori suntem mult mai interesați să știm dacă cutare sau cutare dependență funcțională va fi inclusă în închidere. Pentru a face acest lucru, este suficient să calculăm închiderea determinantului. Există un algoritm destul de simplu pentru asta.

  1. Să fie  un set de atribute care vor deveni în cele din urmă o închidere.
  2. Căutăm dependențe funcționale de forma , unde și . Adăugăm partea dependentă a fiecărei dependențe găsite la .
  3. Repetați pasul 2 până când este imposibil să adăugați atribute la set.
  4. Un set la care nu pot fi adăugate atribute va fi o închidere.

Aplicație

Proiectare baze de date

Dependențe funcționale sunt constrângeri de integritate și definesc semantica datelor stocate în baza de date. Cu fiecare actualizare, SGBD -ul trebuie să verifice conformitatea acestora. Prin urmare, prezența unui număr mare de dependențe funcționale este nedorită, altfel încetinește activitatea. Pentru a simplifica sarcina, este necesar să reduceți setul de dependențe funcționale la minimum necesar.

Dacă este o acoperire ireductibilă a setului inițial de dependențe funcționale , atunci verificarea îndeplinirii dependențelor funcționale de la garantează automat îndeplinirea tuturor dependențelor funcționale de la . Astfel, sarcina de a găsi mulțimea minimă necesară se reduce la găsirea unei acoperiri ireductibile a mulțimii de dependențe funcționale, care va fi folosită în locul mulțimii inițiale.

Vezi și

Literatură