Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza
upload
Upload






























A treia forma normala

Baze de date


A treia forma normala

7.3. A treia forma normala (FN3)

O relatie este în forma normala trei FN3 daca:



1. se gaseste în FN2 si

2. fiecare atribut care nu este cheie (nu participa la o cheie) depin 111g65b de direct de cheia primara.

A treia regula de normalizare cere ca toate câmpurile din tabele sa fie independente între ele.

Etapele de aducere a unei relatii de la FN2 la FN3 sunt:

I. Se identifica toate atributele ce nu fac parte din cheia primara si sunt surse ale unor dependente functionale;

II. Pentru aceste atribute, se construieste câte o relatie în care cheia primara va fi atributul respectiv, iar celelalte atribute, destinatiile din DF considerate;

III. Din relatia de la care s-a pornit se elimina atributele destinatie din DF identificata la pasul I, pastrându-se atributele surse.

Exemplu: În relatia FACTURI se observa ca atributul „nume_client” determina în mod unic atributele „adresa_client”, „banca_client” si „nr_cont_client”. Deci pentru atributul „nume_client” se construieste o relatie CLIENTI în care cheia primara va fi acest atribut, iar celelalte atribute vor fi „adresa_client”, „banca_client” si „nr_cont_client”. Câmpurile „valoare” si „valoare_tva” depind de câmpurile „cantitate”, „pret_unitar”, si de un procent fix de TVA. Fiind câmpuri ce se pot calcula în orice moment ele vor fi eliminate din tabela LINII FACTURI deoarece constituie informatie memorata redundant.



Fig. 8.1. Relatia FACTURI în a treia forma normala FN3

Observatia 1: Aceasta a treia forma normala mai poate suferi o serie de rafinari pentru a putea obtine o structura performanta de tabele ale bazei de date. De exemplu se observa ca „nume_client” este un câmp în care este înscris un text destul de lung format dintr-o succesiune de litere, semne speciale (punct, virgula, cratima), spatii,    numere. Ordonarea si regasirea informatiilor dupa astfel de câmpuri este lenta si mai greoaie decât dupa câmpuri numerice. Din acest motiv se poate introduce un nou atribut „cod_client” care sa fie numeric si care sa fie cheia primara de identificare a pentru fiecare client.

Observatia 2: O alta observatie care poate fi facuta în legatura cu tabelele aflate în cea de a treia forma normala este aceea ca „total_valoare_factura” este un câmp care ar trebui sa contina informatii sintetice obtinute prin însumarea valorii tuturor ofertelor aflate pe o factura. Este de preferat ca astfel de câmpuri sa fie calculate în rapoarte sau interogari si sa nu fie memorate în tabelele bazei de date.

Verificarea aplicarii corecte a procesului de normalizare se realizeaza astfel încât uniunea acestora sa produca relatia initiala, cu alte cuvinte, descompunerea este fara pierderi.

Celelalte forme normale se întâlnesc mai rar în practica. Aceste forme nu sunt respectate, în general, pentru ca beneficiile de eficienta pe care le aduc nu compenseaza costul si munca de care este nevoie pentru a le respecta.





Document Info


Accesari: 6546
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare



document.addEventListener('DOMContentLoaded', () => { setTimeout(initGTM, 2500); }); document.addEventListener('scroll', initGTMOnEvent); document.addEventListener('mousemove', initGTMOnEvent); document.addEventListener('touchstart', initGTMOnEvent); function initGTMOnEvent(event) { initGTM(); event.currentTarget.removeEventListener(event.type, initGTMOnEvent); } function initGTM() { if (window.gtmDidInit) { return false; } window.gtmDidInit = true; const script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.onload = () => { dataLayer.push({ event: 'gtm.js', 'gtm.start': new Date().getTime(), 'gtm.uniqueEventId': 0 }); }; script.src = 'https://www.googletagmanager.com/gtm.js?id=G-PPWHHVFVQQ'; document.head.appendChild(script);

Copyright © Contact (SCRIGROUP Int. 2024 )