Olen lukenut 1NF: n määritelmän, joka on ”Jos kukin relaation attribuutti on atominen”. Kerro minulle, mikä on Atomic.
Kommentit
- Asiaankuuluva .
vastaus
1NF edellyttää, että jokaisen attribuutin sijainti jokaisessa releassa jokaisessa tuplassa sisältää yhden sopivan tyyppisen arvon . Tyypit voivat olla mielivaltaisesti monimutkaisia. Itse asiassa tyypit voivat olla suhteita. (CJ Date: n kirja Tietokanta perusteellisesti: relaatioteoria ammattilaisille käsittelee tätä kysymystä tavalla, joka on melko helppo ymmärtää.)
”Atomic” ei ole koskaan tarkoittanut ”jakamaton”, minkä vuoksi kyseinen termi on vihdoin epäonnistumassa. ”Atominen” tarkoittaa löyhästi, jos arvolla on komponenttiosia, dbms joko jättää huomiotta näiden osien olemassaolon tai tarjoaa toimintoja niiden manipuloimiseksi. Esimerkiksi aikaleiman arvossa on nämä osat.
- Vuosi
- Kuukausi
- Päivä
- Tunnit
- Minuutit
- Sekunnit
- Millisekunnit
Tällainen arvo on selvästi jaettavissa, ja kaikki tietokannan hallintajärjestelmät tarjoavat toimintoja näiden osien manipulointiin. Ne tarjoavat myös tavan valita aikaleima yhtenä arvona. (Mikä tietysti on.)
Vastaus
”Atomic” viittaa Coddin alkuperäiseen käsitykseen vuodelta 1969, että jokaisen relaation kunkin dupleksin kunkin attribuutin tulee koostua yhdestä arvosta, eikä se saa sallia moniarvoisia rakenteita, joita tuetaan tietokannoissa, kuten CODASYL-mallissa.
Nykyaikaisissa SQL DBMS: issä atomisuus ei ole oikeasti ongelma. SQL-taulukot eivät salli moniarvoisia sarakkeita, ja arvot ovat aina ”atomisia”.
Kommentit
- Teknisesti totta, mutta SQL-taulukot sallivat suuret merkkijonot arvoina , joka on porsaanreikä käytännössä. Merkkijonokenttä, joka sisältää useita pilkulla erotettuja desimaalilukuja, ASCII-päivämääriä jne., Näyttää varmasti rikkovan atomiteetin tarkoitusta riippumatta siitä, seuraako se kirjainta vai ei.
Vastaus
Atomilla tarkoitetaan tietoja, joita ei voida jakaa edelleen.
Atomiteettisääntö:
- sääntö 1: sarakkeessa, jossa on atomitietoja, ei voi olla useita saman tyyppisten tietojen arvoja samassa sarakkeessa.
- sääntö2: atomitietoja sisältävässä taulukossa ei voi olla useita sarakkeita, joilla on sama tietotyyppi.
Kuten koko nimi -sarakkeessa, ei voi sanoa, että se voi olla atominen, koska se voidaan edelleen jakaa sukunimeksi, etunimeksi. Kiinnostava sarake voidaan myös jakaa edelleen, joten sarake, joka voi ” Jaettu tunnetaan atomina.
Vastaus
Se tarkoittaa, että avainta ei voida hajottaa. Sanotaan, että sinulla on taulukko, jossa on kolme saraketta, etunimi, sukunimi ja puhelinnumero. Ilmoitat yhdistetyn ensisijaisen avaimen kohdassa (etunimi, sukunimi). Tämä ensisijainen avain on ei atominen, koska se on itse asiassa koostuu kahdesta sarakkeesta. Sanotaan nyt, että vaihdat taulukon kahteen sarakkeeseen, koko_nimi ja puhelinnumero, ensisijaisen avaimen ollessa koko_nimi. Onko avain nyt atominen? Ei, koska sovelluksessasi voit jakaa sen etu- ja sukunimeksi edelleen, välilyönnillä. Tehkäämme nyt taulukoiden tunnus, koko_nimi ja puhelinnumero, ensisijainen avain tunnukselle (joka on kokonaisluku). Se on atomi, koska kokonaislukua ei voida hajottaa mielekkäästi.
Kommentit
- esimerkkisi alkaa kuitenkin lauseesta, jonka mukaan atomiikka ” tarkoittaa, että avainta ei voida hajottaa ”. Että ’ ei ole mitä se tarkoittaa. Se tarkoittaa, että attribuutit koostuvat yhdestä arvosta. ei-atominen ” useasta attribuutista koostuva avain.
Vastaa
Codd näyttää alun perin tarkoittaneen sitä, että mikään arvo ei itsessään ole joukko. Tämä on hyödyllinen lähtökohta, mutta ”atomilla” ei ole ontologista merkitystä tietokantojen suhteen (jotain CJ-päivämäärä on oikea Codd yritti muodostaa määritelmän sellaiseksi, jota ei voida hajottaa edelleen spesifikaation ulkopuolella tietokantatoiminnot (ts. aikaleima on atominen, koska vuoden poiminta on erityinen tietokantatoiminto). Toisin sanoen, jos tietokanta voi purkaa aliarvoja, se on ok. Mutta sinulla ei pitäisi olla sarjoja (järjestämättömiä luetteloita) tai objekteja, jotka vaativat sovelluslogiikan hajoamisen.
Ajan myötä ja kamppailemalla tämän ongelman kanssa käyttöympäristöissä ehdotan atomisuuden välimääritelmää, joka on tiukempi kuin Codd ja ilman kaninreikää, josta päivämäärä kertoo:
Arvo on atominen ensimmäisessä normaalimuodossa vain ja vain, jos:
- Arvo ei ole joukko (kyllä, Tiedän, että päivämäärä on eri mieltä) ja
- Ei ole vierasavaimen viitteitä mihinkään kentän alaosaan.
Erityisesti arvon esitys ei voi määrittää sen atomiteettia. IP-osoitteen esittäminen nimellä ”10.0.0.1” vs ARRAY [10,0,0,1] vs 167772161 ei ole väliä 1NF-analyysissä, koska kaikki kolme viittaavat samaan atomiarvoon.
Erityisesti yhteinen (ja joskus hyödyllistä!) 1NF: n rikkomuksia atomiteetin suhteen ovat:
- Tunnisteiden ryhmän tallentaminen blogikirjoitukseen tai kommenttiin.
- Taulukoiden tallentaminen taulukoihin, joissa sisempi taulukko on viitteellinen eheysvaatimus toista relaatiota vastaan muualla.
Nämä ongelmat aiheuttavat enemmän tai vähemmän samoja tietojen poikkeavuuksia.
Vastaus
Harkitse sijaintia maapallolla. Voin löytää sen (pituusaste, leveysaste) pareilla tai HTM (Hierarchical Triangular Mesh) -koodilla. Koska molemmat mittaavat samoja tietoja. Tämä on fyysinen tosiasia, jonka voimme mitata matkapuhelimella; se kääntää ruudukon numeron [pituusaste, leveysaste] sinulle), niiden molempien on oltava joko atomia tai yhdistelmiä mallissasi.
Älä sekoita mittaukseen käytettyä asteikkoa ja merkintää, jota käytetään tietojen näyttämiseen tietojen luonne.
Kommentit
- Olen muokannut tätä viestiä pari kirjoitusvirhettä. En usko ’ uskoakseni, että tämä käyttäjä on todellinen Joe Celko, mutta etsin toisena henkilönä esiintymistä osoitteessa meta.stackexchange.com ja löysin tämän lanka . Katso pinotapahtuman perustajien Atwoodin ja Spolskyn vastaukset. Se näyttää olevan sallittua.
Vastaus
Atomiavain on sellainen ensisijainen avain, jota ei voida hajottaa. Mikä tarkoittaa, että tätä avainta ei jaeta edelleen, kuten Student_ID, Employee_ID.