Jag har läst definitionen av 1NF som är, ”Om varje attribut av relation är atomiskt”. Berätta för mig vad som är Atomic.
Kommentarer
- Relevans .
Svar
1NF kräver att varje attributposition i varje tupel i varje relation innehåller ett enda värde av lämplig typ . Typerna kan vara godtyckligt komplexa. Faktum är att typerna kan vara relationer. (CJ Dates bok Databas på djupet: relationsteori för utövare behandlar denna fråga på ett sätt som ”är ganska lätt att förstå.)
” Atomic ”har egentligen aldrig betydt ”odelbar”, varför termen äntligen faller i favör. Löst talat betyder ”atom” om ett värde har komponentdelar, ignorerar dbms antingen förekomsten av dessa delar, eller så ger det funktioner för att manipulera dem. Till exempel har ett tidsstämpelvärde dessa delar.
- År
- Månad
- Dag
- Timmar
- Protokoll
- Sekunder
- Millisekunder
Den typen av värde är uppenbart delbar och alla databashanteringssystem har funktioner för att manipulera dessa delar. De ger också ett sätt att välja en tidsstämpel som ett enda värde. (Vilket det naturligtvis är.)
Svar
”Atomic” avser Codds ursprungliga uppfattning från 1969 att varje attribut i varje tupel inom en relation bör bestå av ett enda värde och inte tillåta strukturer med flera värden av det slag som stöds i databaser som CODASYL-modellen.
I moderna SQL DBMS är atomicitet inte riktigt ett problem. SQL-tabeller tillåter inte kolumner med flera värden och värden är alltid ”atomiska”.
Kommentarer
- Tekniskt sant, men SQL-tabeller tillåter stora strängar som värden , vilket i praktiken är ett kryphål. Ett strängfält som innehåller flera komma-separata decimala heltal, ASCII-datum, etc., verkar verkligen bryta mot avsikten med atomicitet, oavsett om det följer bokstaven eller inte …
Svar
Atomic betyder data som inte kan delas vidare.
Atomicitetsregel:
- regel 1: en kolumn med atomdata kan ”inte ha flera värden av samma typ av data i samma kolumn.
- regel 2: en tabell med atomdata kan inte ha flera kolumner med samma datatyp.
Som kolumn med fullständigt namn kan det inte sägas att det kan vara atomiskt eftersom det kan delas in i efternamn, förnamn. En kolumn med intresse kan också delas vidare, så en kolumn som kan ” t delas kallas atom.
Svar
Det betyder att nyckeln inte kan sönderdelas. Låt oss säga att du har en tabell med tre kolumner, förnamn, efternamn och telefonnummer. Du förklarar en sammansatt primärnyckel på (förnamn, efternamn). Den primära nyckeln är inte atomisk eftersom den faktiskt är består av två kolumner. Låt oss nu säga att du ändrar din tabell till två kolumner, fullnamn och telefonnummer, med en primär nyckel på fullnamn. Är nyckeln nu atomär? Nej, för i din ansökan kan du dela det i förnamn och efternamn fortfarande, på utrymmet. Låt oss nu göra vårt tabell-id, fullständiga namn och telefonnummer, primärnyckel på id (vilket är ett heltal). Det är atomiskt, eftersom heltalet inte kan sönderdelas meningsfullt.
Kommentarer
- ditt exempel börjar dock med statamentet att atomicitet " betyder att nyckeln inte kan sönderdelas ". Att ' inte är vad det betyder. Det betyder att attributer består av ett enda värde. Det finns inget " icke-atomisk " om en nyckel som består av flera attribut.
Svar
Codd verkar ursprungligen ha inneburit att inget värde i sig är en uppsättning. Detta är en användbar utgångspunkt men ”atom” har ingen ontologisk betydelse när det gäller databaser (något CJ Date är rätt Codd försökte formalisera definitionen som något som inte kunde sönderdelas ytterligare utanför specifikationen ial databasåtgärder (dvs. en tidsstämpel är atomär för att extrahera året är en speciell databasåtgärd). Med andra ord, om databasen kan bryta ut undervärden, är det ok. Men du bör inte ha uppsättningar (oordnade listor) eller objekt som kräver applikationslogik för att bryta ner. och utan kaninhålet som Date diskuterar:
Ett värde är atomiskt för ändamålen av den första normala formen om och bara om:
- Värdet är inte en uppsättning (ja, Jag vet att Datum inte håller med) och
- Det finns inga främmande nyckelreferenser till någon del av fältet.
I synnerhet kan representationen av ett värde inte bestämma dess atomicitet. Att representera en IP-adress som ”10.0.0.1” vs ARRAY [10,0,0,1] mot 167772161 spelar ingen roll för 1NF-analys eftersom alla tre hänvisar till samma atomvärde.
Särskilt vanligt (och ibland användbart!) 1NF-överträdelser angående atomicitet inkluderar:
- Lagring av en uppsättning taggar i ett blogginlägg eller kommentar.
- Lagring av tabeller i tabeller, där den inre tabellen har ett referensintegritetskrav gentemot en annan relation någon annanstans.
Dessa problem genererar mer eller mindre samma dataavvikelser.
Svar
Tänk på en plats på jorden. Jag kan hitta den med (longitud, latitud) par eller med HTM-koden (Hierarchical Triangular Mesh). Eftersom de båda mäter samma data. Detta är ett fysiskt faktum, som vi kan mäta med en mobiltelefon; det översätter ett rutnummer till [longitud, latitud] för dig), de måste båda vara antingen atomära eller sammansatta i din modell.
Förväxla inte skalan som används för mätning och notering som används för att visa data med typ av data.
Kommentarer
- Jag redigerade det här inlägget för ett par skrivfel. Jag tror inte ' att den här användaren är den riktiga Joe Celko, men jag sökte efterliknande på meta.stackexchange.com och hittade den här tråd . Kolla in svaren från herrarna Atwood och Spolsky, grundarna av stackexchange. Det verkar vara tillåtet.
Svar
Atomnyckel är den typen av primärnyckel som inte kan sönderdelas. betyder att den här nyckeln inte delas vidare, som Student_ID, Employee_ID.