First Normal Form (1NF) sisältää kaksi perussääntöä normalisoidulle ja järjestetylle tietokannalle. Ensimmäinen on poistaa päällekkäiset sarakkeet samasta taulukosta. Toinen on luoda erilliset taulukot kullekin liittyvien tietojen ryhmälle ja tunnistaa jokainen rivi yksilöivällä sarakkeella (ensisijainen avain). Mitä nämä säännöt tarkoittavat, kun ajatellaan tietokannan käytännön suunnittelua?
Poista päällekkäisyys
Ensimmäinen sääntö määrää, että emme saa kopioida tietoja samalla taulukon rivillä. Tietokantayhteisössä tätä käsitettä kutsutaan taulukon atomisuudeksi. Taulukoita, jotka täyttävät tämän säännön, kutsutaan atomeiksi. Tarkastellaan tätä periaatetta klassisella esimerkillä: HR-tietokannan taulukko, joka tallentaa esimiehen ja alaisen suhteen. Esimerkissämme asetetaan liiketoimintasääntö, että jokaisella johtajalla voi olla yksi tai useampi alainen, kun taas kullakin alaisuudella voi olla vain yksi johtaja. Kun luot luettelon tai laskentataulukon näiden tietojen seuraamiseksi, voimme luoda intuitiivisesti taulukon, jossa on seuraavat kentät:
- Manager
- alainen1
- alainen2
- alainen 3
- alainen 4
Muista kuitenkin ensimmäinen 1NF:n asettama sääntö: poista päällekkäiset sarakkeet samasta taulukosta. On selvää, että sarakkeet Aliste1 – Aliste4 ovat päällekkäisiä. Ota hetki ja mieti tämän skenaarion aiheuttamia ongelmia. Jos johtajalla on vain yksi alainen, Alainen2–Alainen4-sarakkeet ovat hukkaan heitettyä tallennustilaa (kallis tietokantatuote). Kuvittele lisäksi tapaus, jossa johtajalla on neljä alaista. Mitä tapahtuu, jos he palkkaavat toisen työntekijän? Taulukon rakennetta tulee muuttaa. Tässä vaiheessa tietokanta-aloittelijoille tulee yleensä toinen valoisa idea: emme halua enempää kuin yhden sarakkeen ja haluamme sallia joustavan määrän dataa; kokeillaan jotain tällaista:
- Manager
- alaistensa
Ja Alaiset-kentässä olisi useita merkintöjä muodossa «Mary, Bill, Joe». Tämä ratkaisu on lähempänä, mutta myös epäonnistuu. Alisteinen sarake on edelleen päällekkäinen ja ei-atomi. Mitä tapahtuu, jos meidän on lisättävä tai poistettava alainen? Meidän on luettava ja kirjoitettava koko taulukon sisältö. Se on okei tässä tilanteessa, mutta entä jos yhdellä johtajalla olisi sata työntekijää? Se myös vaikeuttaa tietojen valintaa tietokannasta tulevissa hauissa. Tässä on taulukko, joka täyttää 1NF:n ensimmäisen rivin:
- Manager
- alainen
Tässä tapauksessa jokaisella alaisuudella on yksi merkintä, mutta esimiehillä voi olla useita merkintöjä.
Tunnista ensisijainen avain
Entä sitten toinen sääntö: tunnista jokainen rivi ainutlaatuisella sarakkeella tai sarakejoukolla (ensisijainen avain). Voit katsoa yllä olevaa taulukkoa ja ehdottaa Alisteinen-sarakkeen käyttöä ensisijaisena avaimena. Itse asiassa Alainen-sarake on hyvä ehdokas ensisijaiseksi avaimeksi, koska liiketoimintasäännöissämme määrätään, että jokaisella alaisuudella voi olla vain yksi johtaja. Taulukkoon tallentamamme tiedot tekevät tästä kuitenkin vähemmän kuin ihanteellisen ratkaisun. Mitä tapahtuu, jos palkkaamme toisen työntekijän nimeltä Jim? Kuinka tallennamme hänen esimiehen ja alaisen suhteen tietokantaan? On parasta käyttää yksilöllistä tunnistetta, kuten a henkilöstökortti ensisijaisena avaimena. Finaalipöytämme näyttää tältä:
- Esimiehen tunnus
- Alisteinen tunnus
Nyt pöytämme on ensimmäisessä normaalimuodossa. Lisäksi on vaihtoehtoja laittaa tietokantasi toiseen normaalimuotoon sekä kolmanteen normaalimuotoon, jos olet innostunut järjestämisestä.