Ce este relația atomică în prima formă normală

Am citit definiția 1NF care este, „Dacă fiecare atribut de relație este atomic”. Vă rog să-mi spuneți ce este Atomic.

Comentarii

Răspuns

1NF necesită ca fiecare poziție de atribut din fiecare tuplu din fiecare relație să conțină o singură valoare de tipul corespunzător . Tipurile pot fi în mod arbitrar complexe. De fapt, tipurile pot fi relații. (Cartea lui CJ Date Baza de date în profunzime: teoria relațională pentru practicieni tratează această problemă într-un mod care este destul de ușor de înțeles.)

„Atomic” nu a însemnat niciodată cu adevărat „indivizibil”, motiv pentru care acest termen cade în cele din urmă din favoare. Vorbind liber, „atomic” înseamnă dacă o valoare are părți componente, dbms fie ignoră existența acelor părți, fie oferă funcții pentru a le manipula. De exemplu, o valoare a marcajului de timp are aceste părți.

  • Anul
  • Luna
  • Ziua
  • Ore
  • Minute
  • Secunde
  • Milisecunde

Acest tip de valoare este evident divizibil și toate sistemele de gestionare a bazelor de date oferă funcții pentru a manipula acele părți. De asemenea, acestea oferă o modalitate de a selecta un timestamp ca valoare unică. (Care, desigur, este.)

Răspuns

„Atomic” se referă la noțiunea originală a lui Codd din 1969 că fiecare atribut din fiecare tuplu dintr-o relație ar trebui să fie format dintr-o singură valoare și să nu permită structuri multivalorate de genul suportat în baze de date, cum ar fi modelul CODASYL.

În SGBD-urile moderne SQL atomicitatea nu este într-adevăr o problemă. Tabelele SQL nu permit coloane cu mai multe valori și valorile sunt întotdeauna „atomice”.

Comentarii

  • Tehnic adevărat, dar tabelele SQL permit șiruri mari ca valori , care este o lacună în practică. Un câmp de șir care conține mai multe numere întregi zecimale separate prin virgulă, date ASCII etc., ar părea cu siguranță că încalcă intenția atomicității, indiferent dacă urmează litera sau nu ….

Răspuns

Atomic înseamnă date care nu pot fi împărțite în continuare.

Regula atomicității:

  • regula 1: o coloană cu date atomice nu poate avea mai multe valori ale aceluiași tip de date în aceeași coloană.
  • regula 2: o tabelă cu date atomice nu poate avea mai multe coloane cu același tip de date.

Ca și coloana fullname, nu se poate spune că ar putea fi atomică, deoarece poate fi divizată mai departe în prenume, prenume. O coloană cu interes ar putea fi, de asemenea, împărțită în continuare, deci o coloană care poate divizarea este cunoscută sub numele de atomic.

Răspuns

Înseamnă că cheia nu poate fi descompusă. Să spunem că aveți un tabel cu trei coloane, prenume, prenume și număr_telefon. Declarați o cheie primară compusă pe (prenume, prenume). Cheia principală este nu atomică, deoarece este de fapt compus din două coloane. Acum să spunem că vă schimbați tabelul în două coloane, full_name și phone_number, cu o cheie principală pe full_name. Cheia este acum atomică? Nu, deoarece în aplicația dvs. ați putea să-l împărțiți în prenume și prenume, pe spațiu. Acum, să facem ID-ul tabelei, full_name și telephone_number, cheia principală pe id (care este un număr întreg). Asta este atomic, deoarece întregul nu poate fi descompus în mod semnificativ.

Comentarii

  • Exemplul dvs. începe totuși cu afirmația că atomicitatea ” înseamnă că cheia nu poate fi descompusă „. ‘ nu înseamnă ce înseamnă. Înseamnă că atributele constau dintr-o singură valoare. Nu există nimic ” non-atomic ” despre o cheie constând din mai multe atribute.

Răspuns

Codd pare să fi însemnat inițial că nicio valoare nu este ea însăși un set. Acesta este un punct de plecare util, dar „atomic” nu are nicio semnificație ontologică atunci când vine vorba de baze de date (ceva CJ Date este corect Codd a încercat să oficializeze definiția ca ceva care nu putea fi descompus în afara spec operațiuni de bază de date (adică un timestamp este atomic deoarece extragerea anului este o operațiune specială în baza de date). Cu alte cuvinte, dacă baza de date poate diviza subvalori, este în regulă. Dar nu ar trebui să aveți seturi (liste neordonate) sau obiecte care necesită logica aplicației pentru a se defecta.

De-a lungul timpului și luptându-mă cu această problemă în mediile operaționale aș propune o definiție intermediară a atomicității, una mai strictă decât Codd și fără gaura de iepure pe care o discută Data:

O valoare este atomică în scopul primei forme normale dacă și numai dacă:

  1. Valoarea nu este un set (da, Știu că Data nu este de acord) și
  2. Nu există referințe cheie străine la nicio sub-porțiune a câmpului.

În special, reprezentarea unei valori nu poate determina atomicitatea acesteia. Reprezentarea unei adrese IP ca „10.0.0.1” vs ARRAY [10,0,0,1] vs 167772161 nu contează pentru analiza 1NF, deoarece toate cele trei se referă la aceeași valoare atomică.

În special, comun (și uneori util!) Încălcările 1NF în ceea ce privește atomicitatea includ:

  1. Stocarea unui set de etichete într-o postare de blog sau comentariu.
  2. Stocarea tabelelor în tabele, unde tabelul interior are o cerință de integritate referențială față de o altă relație din altă parte.

Aceste probleme generează, mai mult sau mai puțin, aceleași anomalii ale datelor.

Răspuns

Luați în considerare o locație pe Pământ. Îl pot găsi cu perechi (longitudine, latitudine) sau cu codul HTM (Hierarchical Triangular Mesh). Deoarece ambii măsoară aceleași date. Acesta este un fapt fizic, pe care îl putem măsura cu un telefon mobil; traduce un număr de grilă în [longitudine, latitudine] pentru dvs.), ambele trebuie să fie fie atomice, fie compuse în modelul dvs.

Nu confundați scara utilizată pentru măsurare și notație utilizată pentru a afișa datele cu natura datelor.

Comentarii

  • Am editat această postare pentru câteva greșeli de scriere. Nu ‘ nu cred că acest utilizator este adevăratul Joe Celko, dar am căutat uzurparea pe meta.stackexchange.com și am găsit acest fir . Consultați răspunsurile domnilor Atwood și Spolsky, fondatorii stackexchange. Se pare că este permis.

Răspuns

Cheia atomică este acel tip de cheie primară care nu poate fi descompusă. înseamnă că această cheie nu este divizată în continuare, cum ar fi Student_ID, Employee_ID.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *