Dependența de baze de date funcționale. Dependențe între atribute. Tipuri principale: funcționale, tranzitive și polisemantice

Ce este o funcție? Dependenta functionala, sau funcție, este o relație între două variabile în care fiecare valoare a variabilei independente corespunde unei singure valori a variabilei dependente. Variabila independentă este altfel numită un argument, iar variabila dependentă se spune că este o funcție a acestui argument. Toate valorile pe care variabila independentă le ia formează domeniul funcției.


Există mai multe moduri de a specifica o funcție: 1. Folosind un tabel. 2.Grafic. 3. Folosind o formulă. Graficul unei funcții este mulțimea tuturor punctelor planului de coordonate, ale căror abscise sunt egale cu valorile argumentului, iar ordonatele sunt egale cu valorile corespunzătoare ale funcției.



O funcție liniară este o funcție care poate fi specificată printr-o formulă de forma y=kx+b, unde x este variabila independentă, k și b sunt numere date. Pentru a reprezenta un grafic funcție liniară Este suficient să găsiți coordonatele a două puncte pe grafic, să marcați aceste puncte în planul de coordonate și să trasați o linie dreaptă prin ele. Proporționalitatea directă este o funcție de forma y=kx, unde x este o variabilă independentă, k nu egal cu zero număr. Un grafic de proporționalitate directă este o linie dreaptă care trece prin origine.


Trasarea unui grafic al unei funcții liniare Pentru a reprezenta un grafic al unei funcții liniare, trebuie: - să selectați oricare două valori ale variabilei x (argument), de exemplu, 0 și 1; - calculați valorile corespunzătoare ale variabilei y (funcția). Este convenabil să scrieți rezultatele obținute în tabelul x01 y - punctele A și B obținute sunt reprezentate în sistemul de coordonate; - conectați punctele A și B folosind o riglă. Să reprezentăm grafic funcția liniară y = -3 x+6. x01 y63


Proporționalitatea inversă este o funcție care poate fi specificată printr-o formulă de forma y=k/x, unde x este variabila independentă și k este un număr diferit de zero. Domeniul de definire al unei astfel de funcții este mulțimea tuturor numerelor, altele decât zero. Dacă mărimile x și y sunt invers proporționale, atunci relația funcțională dintre ele este exprimată prin ecuația y = k / x, unde k este oarecare constant. Un grafic de proporționalitate inversă este o linie curbă formată din două ramuri. Acest grafic se numește hiperbolă. În funcție de semnul lui k, ramurile hiperbolei sunt situate fie în sferturile 1 și 3 de coordonate (k pozitive), fie în sferturile de coordonate 2 și 4 (k negative). Figura prezintă un grafic al funcției y = k/x, unde k este un număr negativ.



CAZURI SPECIALE DE FUNCȚIE LINEARĂ. y=kx, k0, b=0 - proporționalitate directă. Graficul este o linie dreaptă care trece prin origine; y=b, k=0, b0. (b>0, deasupra axei OX; b 0, deasupra axei OX; b"> 0, deasupra axei OX; b"> 0, deasupra axei OX; b" title=" CAZURI SPECIALE DE FUNCȚIE LINIARĂ. y=kx, k0, b=0 - proporționalitate directă,. Grafic - dreaptă care trece prin origine; y=b, k=0, b0. (b) > 0, deasupra axei OX;"> title="CAZURI SPECIALE DE FUNCȚIE LINEARĂ. y=kx, k0, b=0 - proporționalitate directă. Graficul este o linie dreaptă care trece prin origine; y=b, k=0, b0. (b>0, deasupra axei OX; b"> !}

Atunci când proiectați o bază de date într-un SGBD relațional, scopul principal al dezvoltării unui model de date logic este de a crea o reprezentare precisă a datelor, a relațiilor dintre acestea și a constrângerilor necesare. Pentru a face acest lucru, este necesar să se determine mai întâi un set adecvat de relații. Metoda folosită pentru aceasta se numește normalizare. Normalizarea este o variantă a abordării de jos în sus a designului bazei de date, care începe cu stabilirea relațiilor între atribute.

Scopul normalizării

Normalizare - o metodă de creare a unui set de relații cu proprietăți specificate pe baza cerințelor de date stabilite într-o organizație.

Normalizarea este adesea efectuată ca o serie de teste asupra unei relații pentru a verifica dacă îndeplinește (sau nu îndeplinește) cerințele unei forme normale date.

Procesul de normalizare este o metodă formală care permite identificarea relațiilor pe baza cheilor lor primare (sau a cheilor candidate, ca în cazul BCNF) și a dependențelor funcționale care există între atributele lor. Proiectanții de baze de date pot folosi normalizarea sub formă de seturi de teste aplicate relațiilor individuale pentru a normaliza schema relațională la o formă dată, specifică, prevenind astfel potențiala apariție a anomaliilor de actualizare.

Scopul principal al proiectării bazei de date relaționale este de a grupa atributele și relațiile astfel încât să minimizeze redundanța datelor și astfel să reducă cantitatea de memorie necesară pentru a stoca fizic relațiile reprezentate ca tabele.

Dependențe funcționale

Dependența funcțională descrie relația dintre atribute și este unul dintre conceptele de bază ale normalizării. Această secțiune oferă o definiție a acestui concept, iar secțiunile următoare descriu relația acestuia cu procesele de normalizare a relațiilor cu bazele de date.

Dependenta functionala- descrie relația dintre atributele unei relații. De exemplu, dacă în relație. R conținând atributele A și B, atributul B depinde funcțional de atributul A (care este notat cu AB), apoi fiecare valoare a atributului A este asociată cu o singură valoare a atributului B. (Mai mult, fiecare dintre atributele A și B poate consta din unul sau mai multe atribute.)

Dependența funcțională este o proprietate semantică (sau semantică) a atributelor unei relații. Semantica unei relații specifică modul în care atributele sale pot fi legate între ele și, de asemenea, definește dependențe funcționale între atribute sub forma unor restricții impuse unor atribute.

Relația dintre atributele A și B poate fi reprezentată schematic sub forma unei diagrame prezentate în Figura 5.

Determinant- determinantul unei dependențe funcționale este un atribut sau un grup de atribute situat pe diagrama dependenței funcționale din stânga simbolului săgeată.

Figura 5 - Diagrama dependenței funcționale

Când există o dependență funcțională, atributul sau grupul de atribute situat pe diagrama sa din stânga simbolului săgeată se numește determinant. De exemplu, în Fig. 6.1 atributul A este determinantul atributului B.

Conceptul de dependență funcțională este un concept central în procesul de normalizare.

Dependențe funcționale

Dependența funcțională descrie relația dintre atribute și este unul dintre conceptele de bază ale normalizării. Să ne prefacem că schema relațională are atribute (A, B, C,…, Z) și întreaga bază poate fi reprezentată ca o singură relație universală R=(A, B, C,…, Z). Prin urmare, fiecare atribut din baza de date are un nume unic.

Dacă A și B sunt atribute ale unei relații R și fiecare valoare a lui A este asociată cu una și numai o singură valoare a lui B (și fiecare dintre atribute poate consta din unul sau mai multe atribute), atunci atributul B dependente funcțional din atributul A (ВАА).

Se numește o dependență funcțională care este valabilă în orice condiții banal. Dependențe netriviale definesc constrângerile de integritate asupra relațiilor.

Dependenta tranzitiva pentru atributele A, B și C ale unei relații înseamnă următoarele: dacă AàB și BàC, atunci C depinde tranzitiv de atributul A prin atributul B (cu condiția ca A să fie independent funcțional de B sau C).

Pentru a evita redundanța datelor, care poate duce la pierderea integrității, este necesar să se utilizeze un set minim suficient de dependențe.

Proiectarea bazei de date folosind normalizarea începe cu definirea dependențelor funcționale care sunt evidente din punct de vedere semantic, de exemplu. reducerea la prima formă normală.

Un tabel în prima formă normală trebuie să îndeplinească următoarele cerințe:

1) tabelul nu trebuie să aibă înregistrări duplicat;

2) tabelul nu trebuie să conțină grupuri duplicate de câmpuri;

3) fiecare câmp trebuie să fie indivizibil din punct de vedere semantic.

Un tabel în a doua formă normală trebuie să îndeplinească toate cerințele 1NF orice câmp non-cheie este identificat în mod unic Set complet câmpuri cheie, adică fiecare atribut al relației este complet sau parțial dependent funcțional de un alt atribut.

Dependența funcțională a AàB este deplin dependenţă funcţională dacă eliminarea oricărui atribut din A duce la pierderea acestei dependenţe. Dependența funcțională a AàB se numește parțial, dacă în A există un anumit atribut, atunci când este eliminat, această dependență rămâne.

Un tabel care este în a treia formă normală trebuie să îndeplinească toate cerințele din 2NF niciun câmp non-cheie nu este identificat de un alt câmp non-cheie, adică o relație care este în prima și a doua formă normală și nu are atribute care nu sunt; în cheia primară a atributelor , care ar fi într-o dependență funcțională tranzitivă de această cheie primară.

Boyce Code Normal Form (BCNF) se bazează pe dependențe funcționale care iau în considerare toate cheile potențiale ale unei relații, dar cu restricții mai stricte.

Determinant al dependenței funcționale este un atribut (sau un grup de atribute) de care un alt atribut depinde complet funcțional.

Pentru a verifica dacă o relație aparține BCNF, este necesar să găsiți toți determinanții ei și să vă asigurați că sunt potențiale chei.

Diferența dintre 3NF și BCNF este că dependența funcțională AàB este permisă în 3NF dacă atributul B este cheia principala, iar atributul A nu este neapărat o cheie candidată. Pentru BNF, această dependență este permisă numai atunci când atributul A este o cheie candidată. Prin urmare, BCNF este o versiune mai strictă a 3NF, deoarece fiecare relație BCNF este 3NF, dar nu fiecare relație 3NF este BCNF.

O relație este în BCNF numai dacă fiecare dintre determinanții ei este o potențială cheie.

Al patrulea forma normala(4NF) – o relație în BCNF care nu conține dependențe multivalorice non-triviale.

Dependență multivalorică reprezintă o relație între atributele unei relații (de exemplu, A, B și C), astfel încât fiecare valoare a lui A reprezintă un set de valori pentru B și un set de valori pentru C. Cu toate acestea, seturile de valori pentru că B și C sunt independente unul de celălalt.

O dependență cu mai multe valori poate fi definită în continuare ca fiind trivială sau netrivială. O dependență multivalorică AàB a unei relații R este definită ca fiind trivială dacă atributul B este un subset al atributului A sau . În schimb, o dependență cu mai multe valori este definită ca netrivială dacă nicio condiție nu este îndeplinită. O dependență multivalorică trivială nu impune nicio restricție asupra acestei relații, dar una netrivială o face.

Când partiționați o relație folosind operația de proiecție, metoda de descompunere utilizată este determinată cu precizie. Este necesar ca atunci când relațiile rezultate sunt reconectate, relația inițială să poată fi restabilită. Această descompunere se numește descompunerea conexiunii fără pierderi(sau o alăturare win-win sau non-additive) deoarece păstrează toate datele din relația originală și elimină crearea de rânduri inactiv suplimentare.

A cincea formă normală (5NF), numită și formă normală conjunctivă proiectivă, înseamnă că o relație în această formă nu are dependențe de îmbinare. O relație R cu un subset de atribute A,B,...,Z satisface o dependență de îmbinare dacă fiecare valoare admisibilă R este egal cu unirea proiecțiilor sale pe submulțimile A,B,...,Z.

Când se reprezintă o diagramă conceptuală ca model relațional Sunt posibile diferite opțiuni pentru alegerea schemelor de relații. Unele opțiuni de selecție au fost luate în considerare în secțiunile anterioare (secțiunea 6.2.3), altele sunt obținute prin combinarea (sau împărțirea) unor scheme de relații. Din alegerea corecta Diagramele de relații care reprezintă schema conceptuală vor afecta foarte mult performanța bazei de date.

Să luăm în considerare, ca exemplu, o schemă de relație specifică și să analizăm deficiențele acesteia. Să presupunem că datele despre studenți, facultăți, specialități sunt incluse într-un tabel cu următoarea schemă de relații: STUDENT (Cod Student, Nume, Nume Facultate, Nume Specialitate).

Acest tipar de relații determină următoarele dezavantaje baza de date corespunzatoare:

  • Duplicarea informațiilor (redundanță). Pentru studenții care învață în aceeași catedre, numele catedrei va fi repetat. Specialitățile vor fi repetate pentru diferite facultăți.
  • Incoerență potențială ( anomalii de actualizare). Dacă, de exemplu, numele unei specialități se schimbă, atunci schimbându-l într-un tuplu (pentru un student), este necesar să îl schimbați în toate celelalte tupluri în care este prezent.
  • Pierderea potențială de informații ( anomalii de ștergere). Când ștergem informații despre toți studenții care intră într-o anumită specialitate, pierdem toate informațiile despre această specialitate.
  • Posibil ca informații să nu fie incluse în baza de date ( anomalii de comutare). Baza de date nu va conține informații despre o specialitate dacă nu există studenți care studiază în ea.

ÎN teoriile bazelor de date relaționale există metode formale de construire a unui model de bază de date relaţională în care nu există redundanţă şi anomalii de actualizare, eliminarea și includerea.

Normalizare. Prima formă normală.

Construirea unei versiuni raționale a schemelor de relații (care are proprietăți mai bune pentru operațiunile de includere, modificare și ștergere a datelor decât toate celelalte seturi de scheme) se realizează folosind așa-numitele normalizare modele de relație. Normalizarea se realizează în mai multe etape. Pe stadiul inițial diagrama relațiilor ar trebui să fie în prima forma normala(1NF).

Relația este în prima forma normala, dacă toate atributele unei relaţii acceptă valori simple(atomic sau indivizibil), nu o mulțime sau un tuplu de componente mai elementare.

Luați în considerare următorul exemplu.

Tabelul reprezintă entitatea RAPORT DE EXAMINARE

Cod student Nume de familie Cod de examen Subiect și data Nota
1 Sergheev 1 Matematică 5.06.08 4
2 Ivanov 1 Matematică 5.06.08 5
1 Sergheev 2 Fizica 9.06.08 5
2 Ivanov 2 Fizica 9.06.08 5

Acum, la intersecția oricărui rând și a oricărei coloane există o singură valoare și, prin urmare, acest tabel este în primul forma normala.

În continuare, relația prezentată în primul forma normala, este transformată succesiv în al doilea și al treilea forme normale. Procesul de construire a formei normale a doua și a treia va fi descris în următoarele subsecțiuni. În baza unor ipoteze despre date, a treia forma normala este cea mai bună opțiune dorită.

Dacă aceste ipoteze nu sunt îndeplinite, atunci procesul de normalizare continuă și raportul este convertit în a patra și a cincea forme normale. Construcția formelor corespunzătoare este descrisă în literatură și nu este discutată în această carte.

Înainte de a trece la construirea celui de-al doilea formă normală, este necesar să se definească o serie de concepte formale.

8.2. Dependențe funcționale (dependențe între atributele unei relații)

Fie R(A 1, A 2, ..., A n) o schemă de relații, iar X și Y submulțimi (A 1, A 2, ..., A n).

Dependenta functionala pe atitudine R este o afirmaţie de forma „Dacă două tupluri R se potrivesc cu atributele setului(adică aceste tupluri au aceleași valori în componentele lor corespunzătoare pentru fiecare atribut al mulțimii X ), atunci trebuie să coincidă în atributele setului . Formal, această dependență este scrisă prin expresie X -> Y, si se spune ca X definește funcțional Y. O altă afirmație folosită des este: X definește funcțional Y sau Y depinde funcțional de X( notat cu X -> Y) dacă şi numai dacă fiecare valoare a mulţimii X relaţie R asociat cu o valoare a setului Y relaţie R. Cu alte cuvinte, dacă două tuple R coincid în sens X, au aceleași semnificații Y.

Cometariu. În general, termenul „relație” poate însemna două concepte:

  • relaţia ca o variabilă care poate lua sensuri diferite(un tabel în care pot fi introduse diferite valori în rânduri și coloane);
  • o relație ca un set de valori specifice (un tabel cu elemente umplute).

Dependențe funcționale caracterizați toate relațiile care pot fi valori ale schemei de relații R în principiu. De aceea singura cale defini dependențe funcționale– analizați cu atenție semantica (sensul) atributelor.

Dependențe funcționale sunt, în special, constrângeri de integritate, de aceea este indicat să le verificați de fiecare dată când baza de date este actualizată.

Exemplu de dependențe funcționale pentru relația RAPORT DE EXAMINARE

Cod student -> Prenume Cod student, Cod examen -> Notă

Un exemplu de dependențe funcționale pentru relația STUDENT dat la începutul acestei prelegeri

Cod student -> Nume, Cod student -> Facultate

Rețineți că ultima dependență există cu condiția ca un student să nu poată studia în mai multe facultăți.

Set complet de dependențe funcționale

Pentru fiecare relație există un set bine definit de dependențe funcționale între atribute această relație. Mai mult, din una sau mai multe dependențe funcționale inerente relației luate în considerare, se pot deriva altele dependențe funcționale, de asemenea inerente acestei relatii.

Un set dat de dependențe funcționale pentru o relație R să notăm F un set complet de dependențe funcționale din care pot fi derivate logic F numită închidere F si este desemnat F+.

Dacă un set de dependențe funcționale coincide cu o închidere set dat, atunci un astfel de set de dependențe funcționale se numește complet.

Conceptele introduse ne permit să definim formal conceptul de cheie.

Să existe o schemă R cu atribute A 1 A 2 ...A n , F – un set de dependenţe funcţionale şi X - un subset R. Apoi X se numește cheie dacă, în primul rând, în F+ exista o dependenta X -> A 1 A 2 ...A n și în al doilea rând, pentru niciun subset Y inclus în X, dependenta Y -> A 1 A 2 ...A n nu apartin F+.

O dependență funcțională completă este dependența unui atribut non-cheie de întreaga cheie compusă..

O dependență funcțională parțială este dependența unui atribut non-cheie de o parte a unei chei compuse..

A calcula închiderea dependențelor funcționale multiple sunt folosite următoarele reguli de inferență (

O bază de date relațională conține atât structurale, cât și informație semantică. Structura unei baze de date este determinată de numărul și tipul de relații pe care le conține și de relațiile unu-la-mulți care există între tuplurile acestor relații. Partea semantică descrie setul de dependențe funcționale care există între atributele acestor relații. Să definim dependența funcțională.

Definiție: Dacă sunt date două atribute X și Y ale unei relații, atunci se spune că Y depinde funcțional de X dacă în orice moment de timp fiecare valoare a lui X corespunde exact unei valori a lui Y. Dependența funcțională este notată cu X -> Y. Rețineți că X și Y pot reprezenta nu sunt doar atribute unice, ci și grupuri formate din mai multe atribute ale unei relații. Putem spune că dependențele funcționale sunt relații unu-la-mai multe care există în cadrul unei relații.

    Relația de a doua formă normală (2NF). Determinarea dependenței funcționale complete și 2NF. Caracteristicile relațiilor în 2NF. Algoritm pentru reducerea la 2NF. Teorema lui Heath. Exemple.

Conceptdependență funcțională completă.

Definiție: atribut non-cheie complet dependente din punct de vedere funcțional dintr-o cheie compusă dacă este dependentă funcțional de întreaga cheie în ansamblu, dar nu este dependentă funcțional de niciunul dintre atributele sale constitutive.

Definiție: dependență funcțională excesivă- o dependență care conține informații care pot fi obținute pe baza altor dependențe disponibile în baza de date.

2NF - a doua formă normală.

Definiția celei de-a doua forme normale: o relație este în 2NF, dacă este în 1NF și fiecare atribut non-cheie este complet dependent funcțional de cheie.

O schemă de bază de date care nu are dependențe funcționale redundante este considerată corectă. În caz contrar, trebuie să recurgeți la procedura de descompunere (descompunere) a setului de relații existent. În acest caz, mulțimea generată conține un număr mai mare de relații, care sunt proiecții ale relațiilor mulțimii inițiale. (Operația de proiecție este descrisă în secțiunea despre algebra relațională.) Procesul reversibil pas cu pas de înlocuire a unui set dat de relații cu o altă schemă, eliminând dependențele funcționale redundante, se numește normalizare.

Condiția de reversibilitate impune ca descompunerea să păstreze echivalența circuitelor la înlocuirea unui circuit cu altul, i.e. în relațiile rezultate:

1) nu ar trebui să apară tuplurile care lipsesc anterior;

2) pe relații noua schema Setul original de dependențe funcționale trebuie să fie satisfăcut.

Teorema lui Heath

Să fie dată relația.

Dacă r satisface dependenţa funcţională, atunci este egală cu unirea proiecţiei sale şi

    Relația a treia formă normală (3NF). Definiția dependenței tranzitive și 3NF pentru reducerea la 3NF. Definiție și algoritm pentru reducerea la BCNF. Caracteristicile relațiilor în 3NF și în NFBC. Exemple.