Oikein suunniteltu tietokanta antaa ajan tasalla olevat ja tarkat tiedot. Koska oikea suunnittelu on tärkeää tavoitteiden saavuttamiseksi tietokannan parissa työskenneltäessä, hyvää rakennetta koskevien periaatteiden opiskelemiseen kannattaa käyttää aikaa. Loppujen lopuksi tuloksena on todennäköisesti tietokanta, joka täyttää tarpeesi ja mukautuu helposti muutoksiin.
Tämä artikkeli sisältää ohjeet tietokannan työpöytäversion suunnitteluun. Opit päättämään, mitä tietoja tarvitset, miten tiedot jaetaan sopiviin taulukoihin ja sarakkeisiin ja miten nämä taulukot liittyvät toisiinsa. Tämä artikkeli kannattaa lukea ennen ensimmäisen työpöytätietokannan luomista.
Tämän artikkelin sisältö
Tietokantaan liittyviin termeihin tutustuminen
Access järjestää tietoja taulukoiksi, eli rivien ja sarakkeiden luetteloiksi, jotka muistuttavat tilikirjaa tai laskentataulukkoa. Yksinkertaisessa tietokannassa saattaa olla vain yksi taulukko. Useimmissa tietokannoissa niitä tarvitaan useampia. Käytössä voi olla esimerkiksi taulukko, johon tallennetaan tietoa tuotteista, toinen taulukko, johon tallennetaan tietoja tilauksista, ja kolmas taulukko, joka sisältää tietoja asiakkaista.
Kutakin riviä kutsutaan paremmin tietueeksi ja jokaista saraketta kentäksi. Tietue on merkityksellinen ja yhdenmukainen tapa yhdistää tietoja jostakin. Kenttä on yksittäinen tietokohde, joka näkyy jokaisessa tietueessa. Esimerkiksi Tuotteet-taulukossa jokaisella rivillä, eli jokaisessa tietueessa, olisi tietoja yhdestä tuotteesta. Jokaisessa sarakkeessa, eli kentässä, olisi kyseistä tuotetta koskeva tietyntyyppinen tieto, kuten nimi tai hinta.
Mikä on hyvä tietokannan rakenne?
Tietyt periaatteet ohjaavat tietokannan suunnitteluprosessia. Ensimmäinen periaate on, että päällekkäiset tiedot (joita kutsutaan myös tarpeettomiksi tiedoiksi) ovat virheellisiä, koska ne vievät tilaa ja lisäävät virheiden ja epäjohdonmukaisuuksien todennäköisyyttä. Toinen periaate on, että tietojen oikeellisuus ja täydellisyys ovat tärkeitä. Jos tietokanta sisältää virheellisiä tietoja, kaikki tietokannasta tietoja hakevat raportit sisältävät myös virheellisiä tietoja. Tämän seurauksena kaikki näihin raportteihin perustuvat päätökset annetaan väärin.
Hyvän tietokannan rakenne on sellainen, joka
-
jakaa tiedot aihepohjaisiin taulukoihin päällekkäisten tietojen vähentämiseksi
-
tarjoaa Accessille sen tarvitsemat tiedot, jotta se voi liittää taulukoissa olevat tiedot yhteen tarpeen mukaan
-
auttaa tietojen tarkkuuden ja eheyden tukemisessa ja varmistamisessa
-
vastaa tietojen käsittely- ja raportointitarpeita.
Suunnitteluprosessi
Suunnitteluprosessi koostuu seuraavista vaiheista:
-
Määritä tietokantasi tarkoitus
Tämä auttaa valmistautumaan muihin vaiheisiin.
-
Etsi ja järjestä tarvittavat tiedot
Kerää kaikentyyppiset tiedot, jotka haluat tallentaa tietokantaan, kuten tuotteiden nimet ja tilausnumerot.
-
Jaa tiedot taulukoihin
Jaa tiedot pääkohteisiin tai -aiheisiin, kuten tuotteisiin tai tilauksiin. Jokaisesta aiheesta tulee taulukko.
-
Muuta tietokohteet sarakkeiksi
Määritä, mitä tietoja haluat tallentaa mihinkin taulukkoon. Jokaisesta kohteesta tulee kenttä, joka näkyy taulukossa sarakkeena. Työntekijätaulukossa voi olla esimerkiksi kentät Sukunimi ja Aloittanut.
-
Määritä perusavaimet
Valitse jokaisen taulukon perusavain. Perusavain on sarake, jolla yksilöidään kukin rivi. Se voi olla esimerkiksi Tuotetunnus tai Tilaustunnus.
-
Määritä taulukoiden yhteydet
Katso taulukoita ja päätä, miten taulukossa olevat tiedot liittyvät toisen taulukon tietoihin. Lisää tarvittaessa taulukoihin kenttiä tai luo uusia taulukoita yhteyksien selventämiseksi.
-
Tarkenna rakennetta
Analysoi rakenne virheiden varalta. Luo taulukoita ja lisää esimerkkitietoja tietueisiin. Katso, saatko taulukoista haluamasi tulokset. Muokkaa rakennetta tarvittaessa.
-
Käytä normalisointisääntöjä
Käytä normalisointisääntöjä, jotta näet, onko taulukoiden rakenne oikea. Muokkaa taulukoita tarvittaessa.
Tietokannan tarkoituksen määrittäminen
Tietokannan tarkoitus kannattaa kirjata muistiin paperille – sen käyttötarkoitus, sen käyttö ja sen käyttö. Esimerkiksi kotiyrityksen pienessä tietokannassa voit kirjoittaa jotain yksinkertaista, kuten "Asiakastietokanta säilyttää asiakastietojen luettelon postittajien ja raporttien tuottamiseksi". Jos tietokanta on monimutkaisempi tai sitä käyttävät monet käyttäjät, kuten usein yrityksen asetuksissa, tarkoitus voi helposti olla kappale tai enemmän, ja siinä pitäisi olla, milloin ja miten kukin käyttäjä käyttää tietokantaa. Ajatuksena on, että meillä on hyvin kehittynyt toiminta-ajatus, johon voidaan viitata koko suunnitteluprosessin ajan. Tällaisen lausekkeen avulla voit keskittyä tavoitteisiisi, kun teet päätöksiä.
Tarvittavien tietojen etsiminen ja järjestäminen
Aloita olemassa olevista tiedoista, jotta löydät tarvittavat tiedot ja voit järjestää ne. Voi esimerkiksi olla, että tallennat tällä hetkellä ostotilaukset tilikirjaan tai säilytät asiakastietoja arkistokaappiin säilöttävissä paperilomakkeissa. Kerää kyseiset asiakirjat ja luetteloi jokainen näytettävä tietotyyppi (esimerkiksi jokainen lomakkeessa täytettävä ruutu). Jos valmiita lomakkeita ei ole, mieti, millaisen lomakkeen suunnittelisit asiakastietojen tallentamiseen. Mitä tietoja laittaisit lomakkeeseen? Mitä täytettäviä ruutuja loisit? Tunnista ja luettele nämä kohteet. Oletetaan esimerkiksi, että pidät asiakasluetteloa kortistokorteilla. Kortteja tarkastelemalla saatat huomata, että jokaisessa kortissa on asiakkaan nimi, osoite, kaupunki, osavaltio, postinumero ja puhelinnumero. Niistä jokainen voi vastata taulukon saraketta.
Kun valmistelet luetteloa, älä yritä saada siitä täydellistä heti kerralla. Luetteloi sen sijaan jokainen kohta, joka tulee mieleen. Jos joku muukin käyttää tietokantaa, pyydä myös häneltä ideoita. Voit hienosäätää luetteloa myöhemmin.
Mieti seuraavaksi tietokannasta luotavia raportti- tai postitustyyppejä. Voit esimerkiksi luoda tuotteen myyntiraportin, jossa myynti näkyy alueittain, tai varaston yhteenvetoraportin, jossa näkyvät tuotevaraston määrät. Ehkä tarpeena on myös luoda asiakkaille lähetettäviä kirjeitä, joissa ilmoitetaan myyntitapahtumasta tai tarjotaan etuja. Suunnittele raportti mielessäsi ja kuvittele, miltä se näyttäisi. Mitä tietoja laittaisit raporttiin? Luettele jokainen kohta. Toimi samoin kirjeiden ja muiden haluamiesi raporttien kohdalla.
Raporttien ja postitusten miettiminen saattaa auttaa tunnistamaan tietokannassa tarvittavat kohteet. Oletetaan esimerkiksi, että annat asiakkaille mahdollisuuden vastaanottaa (tai olla vastaanottamatta) säännöllisiä sähköpostipäivityksiä ja haluat tulostaa luettelon asiakkaista, jotka ovat ilmoittaneet haluavansa vastaanottaa päivitykset. Tallennat tiedon lisäämällä asiakastaulukkoon Sähköpostin lähettäminen -sarakkeen. Voit asettaa jokaisen asiakkaan kohdalla kentän arvoksi Kyllä tai Ei.
Sähköpostiviestien lähettäminen asiakkaille tuo mukanaan toisen tallennettavan kohdan. Kun tiedät, että asiakas haluaa vastaanottaa sähköpostiviestejä, sinulla on myös oltava sähköpostiosoite, johon viestit lähetetään. Sen vuoksi on tallennettava jokaisen asiakkaan sähköpostiosoite.
On järkevää rakentaa prototyyppi kustakin raportista tai tulosluettelosta ja miettiä, mitä kohtia tarvitset raportin laatimiseen. Kun esimerkiksi tarkastelet lomakekirjettä, mieleen saattaa tulla muutamia asioita. Jos haluat käyttää tervehdyksen alussa olevaa tervehdysmerkkijonoa , esimerkiksi "Herra", "Rouva" tai "Ms", sinun on luotava tervehdyskohde. Saatat myös yleensä aloittaa kirjeen , jossa lukee "Hyvä herra Smith" eikä "Rakas. Herra Sylvester Smith." Tämä viittaa siihen, että haluat yleensä tallentaa sukunimen erillään etunimestä.
Kannattaa myös muistaa, että jokainen tieto tulee purkaa pienimpiin käyttökelpoisiin osiin. Nimen ollessa kyseessä nimi puretaan kahteen osaan, etunimeen ja sukunimeen, jotta sukunimi on helposti käytettävissä. Jos raportti halutaan esimerkiksi lajitella sukunimen mukaan, asiakkaan sukunimi on kätevästi tallennettuna erikseen. Jos haluat lajitella tai etsiä tietoja, suorittaa laskutoimituksen tai luoda raportin tietyn tiedon perusteella, sijoita kyseinen tieto omaan kenttäänsä.
Mieti kysymyksiä, joihin haluat saada vastauksen tietokannasta. Esimerkiksi kuinka monta kappaletta myit kyseistä tuotetta viime kuussa? Missä parhaat asiakkaasi asuvat? Kuka toimittaa myydyimmän tuotteesi? Näiden kysymysten ennakoiminen auttaa löytämään muut tallennettavat kohteet.
Tietojen keräämisen jälkeen olet valmis seuraavaan vaiheeseen.
Tietojen jakaminen taulukoihin
Jos haluat jakaa tietoja taulukoiksi, valitse pääkohteet tai -aiheet. Esimerkiksi tuotemyynnin tietokannan tietojen löytämisen ja järjestämisen jälkeen alustava luettelo voi näyttää tältä:
Tässä näkyviä pääkohteita ovat tuotteet, toimittajat, asiakkaat ja tilaukset. Näistä neljästä taulukosta kannattaa siis aloittaa: yhdessä on tuotteiden tiedot, toisessa toimittajia koskevat tiedot, kolmannessa asiakkaiden tiedot ja neljännessä tilausten tiedot. Vaikka luettelo ei olekaan täydellinen, se on hyvä lähtökohta. Voit jatkaa luettelon tarkentamista, kunnes tuloksena on hyvin toimiva rakenne.
Alustavaa luetteloa ensimmäistä kertaa tarkasteltaessa saattaa tulla mieleen, että ne voisi kaikki laittaa yhteen taulukkoon yllä olevassa kuvassa olevien neljän taulukon sijasta. Opit tässä, miksi se ei kannata. Mieti hetki alla näkyvää taulukkoa:
Tässä tapauksessa jokaisella rivillä on tietoja sekä tuotteesta että toimittajasta. Koska samalta toimittajalta voi olla useita tuotteita, toimittajan nimi- ja osoitetiedot on toistettava monta kertaa. Tämä vie turhaan levytilaa. Parempi ratkaisu on tallentaa toimittajan tiedot vain kerran erilliseen toimittajataulukkoon ja linkittää kyseinen taulukko sitten tuotetaulukkoon.
Toinen tämän rakenteen ongelma käy ilmi, kun sinun pitää muokata toimittajan tietoja. Oletetaan esimerkiksi, että sinun pitää muuttaa toimittajan osoitetta. Koska se on useissa paikoissa, saatat vahingossa muuttaa osoitteen yhdessä paikassa, mutta saatat unohtaa muuttaa sen muissa paikoissa. Toimittajan osoitteen tallentaminen vain yhteen paikkaan ratkaisee tämän ongelman.
Kun suunnittelet tietokantaa, yritä aina tallentaa kunkin tieto vain kerran. Jos huomaat toistavasi samat tiedot useassa paikassa, kuten tietyn toimittajan osoitteen, lisää kyseinen tieto erilliseen taulukkoon.
Oletetaan lopuksi, että olemassa on vain yksi Coho Wineryn toimittama tuote ja haluat poistaa tuotteen, mutta säilyttää toimittajan nimi- ja osoitetiedot. Miten tuotetietue voitaisiin poistaa poistamatta samalla toimittajan tietoja? Ei mitenkään. Koska jokainen tietue sisältää tiedon tuotteesta ja myös toimittajasta, toista ei voi poistaa poistamatta toista. Tiedot on pidettävä erillisinä jakamalla taulukko kahdeksi taulukoksi: toinen tuotteen tietoja ja toinen toimittajan tietoja varten. Tämän jälkeen tuotetietue poistettaessa poistetaan vain tuotteen tiedot, ei toimittajan tietoja.
Kun olet valinnut aiheen, jota taulukko edustaa, kyseisen taulukon sarakkeisiin kannattaa tallentaa tietoja vain kyseisestä aiheesta. Esimerkiksi tuotetaulukkoon tulee tallentaa vain tuotteita koskevia tietoja. Koska toimittajan osoite on toimittajaan liittyvä tieto eikä se koske tuotetta, osoite kuuluu toimittajataulukkoon.
Tietokohteiden muuttaminen sarakkeiksi
Määritä taulukon sarakkeet päättämällä, mitä tietoja taulukkoon tallennetusta aiheesta on seurattava. Esimerkiksi Asiakkaat-taulukossa sarakeluettelon lähtökohta voisi olla Nimi, Osoite, Kaupunki-osavaltio-postinumero, Tervehdys ja Sähköpostiosoite. Taulukon kukin tietue sisältää samat sarakkeet, joten voit tallentaa nimen, osoitteen, kaupungin, osavaltion, postinumeron, tervehdyksen ja sähköpostiosoitteen kullekin tietueelle. Osoitesarake sisältää esimerkiksi asiakkaiden osoitteet. Kukin tietue sisältää yhden asiakkaan tiedot, ja osoitekenttä sisältää kyseisen asiakkaan osoitteen.
Kun olet määrittänyt ensimmäisen sarakejoukon kullekin taulukolle, voit tarkentaa sarakkeita. Esimerkiksi asiakkaan nimi kannattaa tallentaa kahteen erilliseen sarakkeeseen (etunimi ja sukunimi), jotta voit lajitella ja indeksoida vain tarvittavat sarakkeet sekä tehdä niistä hakuja. Vastaavasti osoite koostuu viidestä erillisestä osasta (osoite, kaupunki, osavaltio, postinumero ja maa/alue), joten nekin kannattaa tallentaa eri sarakkeisiin. Jos haluat suorittaa haun, suodattaa tai lajitella esimerkiksi osavaltion mukaan, osavaltiotiedot on tallennettava erilliseen sarakkeeseen.
Harkitse myös, onko tietokannassa vain kotimaisia tietoja vai tallennetaanko siihen myös kansainväliset tiedot. Jos esimerkiksi aiot tallentaa kansainväliset osoitteet, osavaltion sarakkeen tilalla kannattaa olla alueen sarake, koska siihen voidaan tallentaa sekä osavaltioita että muiden maiden alueita. Vastaavasti tämä kannattaa huomioida myös postinumerossa, jos aiot tallentaa kansainvälisiä osoitteita.
Seuraavassa on lueteltu muutamia vinkkejä sarakkeiden määrittämiseen.
-
Älä sisällytä laskettuja tietoja
Useimmissa tapauksissa taulukoihin ei kannata tallentaa laskutoimitusten tulosta. Sen sijaan Access kannattaa määrittää tekemään laskutoimitukset silloin, kun tulos halutaan nähdä. Oletetaan esimerkiksi, että Tuotteita tilauksessa -raportissa näkyy välisumma tilauksen kustakin tietokannan tuoteluokasta. Missään taulukossa ei kuitenkaan ole Yksiköitä tilauksessa -välisummasaraketta. Sen sijaan Tuotteet-taulukko sisältää Yksiköitä tilauksessa -sarakkeen, johon on tallennettu kunkin tuotteen tilauksessa olevat yksiköt. Access laskee tietojen avulla välisumman aina, kun tulostat raportin. Itse välisummaa ei pidä tallentaa taulukkoon.
-
Tallenna tiedot pienimmissä loogisissa osissa
Sinua saattaa houkuttaa, että sinulla on yksi kenttä koko nimille tai tuotenimille sekä tuotekuvaukset. Jos yhdistät kenttään useita tietoja, yksittäisten tietojen noutaminen myöhemmin on vaikeaa. Yritä jakaa tiedot loogisiin osiin; Voit esimerkiksi luoda erilliset kentät etu- ja sukunimelle tai tuotteen nimelle, luokalle ja kuvaukselle.
Kun olet määrittänyt kunkin taulukon tietosarakkeet, voit valita jokaisen taulukon perusavaimen.
Perusavainten määrittäminen
Jokaisessa taulukossa tulisi olla sarake (tai sarakeryhmä), joka yksilöi jokaisen taulukkoon tallennetun rivin. Se on usein yksilöllinen tunnistenumero, esimerkiksi työntekijän tunnusnumero tai sarjanumero. Tietokantaterminologiassa tällaista tietoa kutsutaan taulukon perusavaimeksi. Access yhdistää usean taulukon tiedot ja tuo yhdistetyt tiedot nopeasti saatavillesi perusavainkenttien avulla.
Jos sinulla on jo taulukon yksilöllinen tunniste, kuten tuotenumero, joka yksilöi luettelon jokaisen tuotteen, voit käyttää kyseistä tunnistetta taulukon perusavaimena, mutta vain, jos tämän sarakkeen arvot ovat aina erilaiset kullekin tietueelle. Perusavaimessa ei voi olla arvojen kaksoiskappaleita. Älä esimerkiksi käytä henkilöiden nimiä perusavaimena, koska nimet eivät ole yksilöllisiä. Samassa taulukossa voi helposti olla kaksi samannimisen henkilön nimeä.
Perusavaimella on aina oltava arvo. Jos sarakkeen arvo voi muuttua määrittämättömäksi tai tuntemattomaksi (puuttuva arvo) jossain vaiheessa, sitä ei voi käyttää perusavaimen osana.
Valitse aina perusavain, jonka arvo ei muutu. Useita taulukoita käyttävässä tietokannassa taulukon perusavainta voidaan käyttää viittauksena muissa taulukoissa. Jos perusavain muuttuu, muutos on otettava käyttöön avaimen kaikissa viittauspaikoissa. Muuttumattoman perusavaimen käyttäminen pienentää sen mahdollisuutta, että perusavain poikkeaisi muista taulukoista, joissa siihen viitataan.
Usein perusavaimena käytetään satunnaista yksilöllistä numeroa. Jokaiselle tilaukselle voidaan esimerkiksi määrittää yksilöllinen tilausnumero. Tilausnumeron tarkoituksena on vain tilauksen yksilöiminen. Kun se on määritetty, se ei muutu.
Jos mielessäsi ei ole saraketta tai sarakejoukkoa, josta voi tulla hyvä perusavain, kannattaa käyttää saraketta, jonka tietotyyppi on Laskuri. Kun käytät Laskuri-tietotyyppiä, Access määrittää automaattisesti arvon puolestasi. Tällainen tunniste on tosiasiaton; se ei sisällä tietoja edustamastaan rivistä. Tosiasioihin perustuvat tunnisteet sopivat erinomaisesti perusavaimena käytettäväksi, koska ne eivät muutu. Perusavain, joka sisältää tietoja rivistä – esimerkiksi puhelinnumeron tai asiakkaan nimen – muuttuu todennäköisemmin, koska itse asiatiedot voivat muuttua.
1. Laskuri-tietotyypiksi määritetty sarake on usein hyvä perusavain. Tuotetunnus on aina yksilöllinen.
Joissakin tapauksissa voidaan käyttää vähintään kahta kenttää, jotka yhdessä muodostavat perusavaimen. Esimerkiksi tilaustietotaulukossa, johon tallennetaan tilausten rivinimikkeet, perusavain voi käyttää kahta saraketta: Tilaustunnus ja Tuotetunnus. Kun perusavain käyttää vähintään kahta saraketta, sitä kutsutaan myös yhdistelmäavaimeksi.
Tuotemyynnin tietokannalle voit luoda kullekin taulukolle Laskuri-sarakkeen, joka toimii perusavaimena: Tuotetunnus Tuotteet-taulukossa, Tilaustunnus Tilaukset-taulukossa, Asiakastunnus Asiakkaat-taulukossa ja Toimittajatunnus Toimittajat-taulukossa.
Taulukoiden yhteyksien luominen
Nyt kun tiedot on jaettu taulukoihin, tiedot on yhdistettävä uudelleen merkityksellisillä tavoilla. Esimerkiksi seuraava lomake sisältää tietoja useista taulukoista.
1. Tämän lomakkeen tiedot ovat Asiakkaat-taulukosta...
2. ...Työntekijät-taulukosta...
3. ...Tilaukset-taulukosta...
4. ...Tuotteet-taulukosta...
5. ...ja Tilaustiedot-taulukosta.
Access on relaatiotietokannan hallintajärjestelmä. Relaatiotietokannassa tiedot voidaan jakaa erillisiksi taulukoiksi aiheen mukaan. Sen jälkeen tiedot kerätään yhteen tarpeen mukaan taulukoiden välisten yhteyksien avulla.
Yksi-moneen-yhteyden luominen
Pohdi tätä esimerkkiä: Toimittajat- ja Tuotteet-taulukot tuotetilausten tietokannassa. Toimittaja voi toimittaa minkä tahansa määrän tuotteita. Tästä seuraa se, että Toimittajat-taulukossa olevalla toimittajalla voi olla useita tuotteita Tuotteet-taulukossa. Toimittajat-taulukon ja Tuotteet-taulukon välinen yhteys on siis yksi-moneen-yhteys.
Voit esittää yksi-moneen-yhteyden tietokannan rakenteessa ottamalla perusavaimen yhteyden yksi-puolelta ja lisäämällä sen lisäsarakkeena tai -sarakkeina taulukkoon yhteyden monta-puolelle. Tässä tapauksessa esimerkiksi lisäät Toimittajatunnus-sarakkeen Toimittajat-taulukosta Tuotteet-taulukkoon. Access voi tämän jälkeen etsiä kullekin tuotteelle oikean toimittajan Tuotteet-taulukossa olevalla toimittajan tunnusnumerolla.
Tuotteet-taulukon Toimittajatunnus-saraketta kutsutaan viiteavaimeksi. Viiteavain on toisen taulukon perusavain. Toimittajatunnus-sarake Tuotteet-taulukossa on viiteavain, koska se on myös Toimittajat-taulukon perusavain.
Luot perustan taulukoiden välisille yhteyksille muodostamalla perusavaimista ja viiteavaimista pareja. Jos et ole varma, millä taulukoilla kannattaa olla yhteinen sarake, yksi-moneen-yhteyden tunnistaminen varmistaa, että kahdessa toisiinsa liittyvässä taulukossa on oltava jaettu sarake.
Monta-moneen-yhteyden luominen
Otetaan esimerkiksi Tuotteet-taulukon ja Tilaukset-taulukon välinen yhteys.
Yksi tilaus saattaa sisältää useita tuotteita. Toisaalta taas yksi tuote voi esiintyä monessa tilauksessa. Siten Tilaukset-taulukon jokaista tietuetta kohti voi olla useita tietueita Tuotteet-taulukossa. Lisäksi Tuotteet-taulukon jokaista tietuetta kohti voi olla useita tietueita Tilaukset-taulukossa. Tällaista yhteyttä kutsutaan monta-moneen-yhteydeksi, koska millä tahansa tuotteella voi olla monta tilausta ja missä tahansa tilauksessa voi olla monia tuotteita. Huomaa, että taulukoiden välisen monta-moneen-yhteyden havaitseminen edellyttää yhteyden molempien puolien huomioon ottamista.
Näiden kahden taulukon aiheilla eli tilauksilla ja tuotteilla on monta-moneen-yhteys. Se aiheuttaa ongelman. Kuvittele ongelman ymmärtämiseksi, mitä tapahtuisi, jos yrittäisit luoda yhteyden kahden taulukon välille lisäämällä Tuotetunnus-kentän Tilaukset-taulukkoon. Jotta tilauksessa voisi olla useita tuotteita, Tilaukset-taulukossa on oltava useita tietueita tilausta kohti. Toistaisit yhtä tilausta koskevat tilaustiedot kullakin rivillä, joten tuloksena olisi tehoton rakenne, joka saattaa aiheuttaa virheellisiä tietoja. Sama ongelma tulee eteen, jos lisäät Tilaustunnus-kentän Tuotteet-taulukkoon: Tuotteet-taulukossa olisi useita tietueita kullekin tuotteelle. Miten ongelma ratkaistaan?
Vastaus on luoda kolmas taulukko, jota kutsutaan usein liitoskohtataulukoksi, joka jakaa monta-moneet-yhteyden kahdeksi yksi-mooli-yhteydeksi. Perusavain lisätään kummastakin taulukosta kolmanteen taulukkoon. Tämän seurauksena kolmas taulukko tallentaa yhteyden jokaisen esiintymän tai esiintymän.
Jokainen Tilaustiedot-taulukon tietue edustaa yhtä tilauksen rivinimikettä. Tilaustiedot-taulukon perusavain koostuu kahdesta kentästä: Tilaukset- ja Tuotteet-taulukoiden viiteavaimista. Yksistään Tilaustunnus-kentän käyttäminen perusavaimena ei toimi tässä taulukossa, koska yhdessä tilauksessa voi olla useita rivinimikkeitä. Tilaustunnus toistetaan tilauksen jokaiselle rivinimikkeelle, joten kenttä ei sisällä yksilöllisiä arvoja. Yksistään Tuotetunnus-kentän käyttäminenkään ei toimi, koska yksi tuote voi esiintyä monessa eri tilauksessa. Yhdessä nämä kaksi kenttää tuottavat yksilöllisen arvon kullekin tietueelle.
Tuotteiden myynnin tietokannassa Tilaukset-taulukko ja Tuotteet-taulukko eivät liity toisiinsa suoraan. Sen sijaan ne liittyvät toisiinsa epäsuorasti Tilaustiedot-taulukon kautta. Tilausten ja tuotteiden välinen monta-moneen-yhteys esitetään tietokannassa käyttämällä kahta yksi-moneen-yhteyttä:
-
Tilaukset-taulukolla ja Tilaustiedot-taulukolla on yksi-moneen-yhteys. Kussakin tilauksessa voi olla useita rivinimikkeitä, mutta kukin rivinimike on yhdistetty vain yhteen tilaukseen.
-
Tuotteet-taulukolla ja Tilaustiedot-taulukolla on yksi-moneen-yhteys. Kuhunkin tuotteeseen voi liittyä useita rivinimikkeitä, mutta kukin rivinimike viittaa vain yhteen tuotteeseen.
Voit määrittää Tilaustiedot-taulukossa kaikki tiettyyn tilaukseen liittyvät tuotteet. Voit myös määrittää kaikki tietyn tuotteen tilaukset.
Tilaustiedot-taulukon lisäämisen jälkeen taulukoiden ja kenttien luettelo voi näyttää esimerkiksi tällaiselta:
Yksi-yhteen-yhteyden luominen
Toinen yhteystyyppi yksi-yhteen-yhteys. Oletetaan esimerkiksi, että haluat tallentaa tuotteelle erityisiä lisätietoja, joita tarvitset vain harvoin tai jotka koskevat vain harvoja tuotteita. Koska tietoja ei tarvita usein ja koska tietojen tallentaminen Tuotteet-taulukkoon aiheuttaisi tyhjää tilaa jokaisessa tuotteessa, jota tiedot eivät koske, lisätiedot voi sijoittaa erilliseen taulukkoon. Tuotteet-taulukon tavoin Tuotetunnus toimii perusavaimena. Tämän lisätietotaulukon ja Tuotteet-taulukon välinen yhteys on yksi-yhteen-yhteys. Jokaiselle Tuotteet-taulukossa olevalle tietueelle on yksi vastaava tietue lisätietotaulukossa. Kun löydät tällaisen yhteyden, kummassakin taulukossa on oltava yhteinen kenttä.
Kun tunnistat tietokannassa tarpeen yksi-yhteen-yhteydelle, mieti, voisiko kahden taulukon tiedot yhdistää yhteen taulukkoon. Jos et halua tehdä sitä jostain syystä, koska se esimerkiksi aiheuttaa paljon tyhjää tilaa, seuraavassa on lueteltu tapoja esittää yhteys suunnittelussa:
-
Jos kummallakin taulukolla on sama aihe, voit ehkä määrittää yhteyden käyttämällä taulukoissa samaa perusavainta.
-
Jos kahdella taulukolla on eri aiheet ja erilaiset perusavaimet, valitse toinen taulukko (kumpi tahansa) ja lisää sen perusavain toiseen taulukkoon viiteavaimena.
Taulukoiden välisten yhteyksien määrittämisellä voit varmistaa, että oikeat taulukot ja sarakkeet ovat käytössä. Kun yksi-yhteen- tai yksi-moneen-yhteys on olemassa, yhteyteen liittyvissä taulukoissa on oltava yhteinen sarake tai useita yhteisiä sarakkeita. Kun monta-moneen-yhteys on olemassa, yhteyden esittämiseen tarvitaan kolmas taulukko.
Rakenteen hienosäätäminen
Kun sinulla on tarvittavat taulukot, kentät ja yhteydet, luo ja täytä taulukot esimerkkitiedoilla ja yritä käsitellä tietoja: kyselyjen luominen, uusien tietueiden lisääminen jne. Tämä auttaa korostamaan mahdollisia ongelmia. Sinun on esimerkiksi ehkä lisättävä sarake, jonka unohdit lisätä suunnitteluvaiheessa, tai sinulla voi olla taulukko, joka kannattaa jakaa kahdeksi taulukoksi päällekkäisyyden poistamiseksi.
Katso, voitko käyttää tietokantaa haluamiesi vastausten hakemiseen. Luo lomakkeista ja raporteista karkeita luonnoksia ja katso, näyttävätkö ne odottamiasi tietoja. Etsi tarpeettomia tietojen päällekkäisyyksiä ja, kun löydät niitä, poista ne muuttamalla rakennetta.
Alkuperäistä tietokantaa testatessasi huomaat todennäköisesti kehityskohtia. Esimerkiksi seuraavat asiat kannattaa tarkistaa:
-
Onko sarakkeita unohtunut? Jos on, kuuluvatko tiedot olemassa oleviin taulukoihin? Jos tiedot liittyvät johonkin muuhun, voit joutua luomaan uuden taulukon. Luo sarake jokaiselle seurattavalle tietokohteelle. Jos tietoja ei voi laskea muista sarakkeista, tarvitset todennäköisesti niille uuden sarakkeen.
-
Onko tietokannassa turhia sarakkeita, koska niiden tiedot voidaan laskea olemassa olevista kentistä? Jos tietokohde voidaan laskea olemassa olevista sarakkeista (alennettu hinta lasketaan esimerkiksi jälleenmyyntihinnasta), niin kannattaa yleensä toimia, jotta uuden sarakkeen luominen voidaan välttää.
-
Syötätkö toistuvasti samoja tietoja yhteen taulukoista? Jos näin on, taulukko on todennäköisesti jaettava kahdeksi taulukoksi, joilla on yksi-moneen-yhteys.
-
Onko taulukoissa useita kenttiä, rajallinen määrä tietueita ja useita tyhjiä kenttiä yksittäisissä tietueissa? Jos on, mieti taulukon suunnittelemista uudelleen, jotta kenttiä on vähemmän ja tietueita enemmän.
-
Onko jokainen tieto purettu pienimpiin käyttökelpoisiin osiin? Jos tietokohdetta tarvitaan raportoinnissa, lajittelussa, haussa tai laskemisessa, kyseinen tieto kannattaa lisätä omaan sarakkeeseensa.
-
Sisältääkö kukin sarake yhden tiedon taulukon aiheesta? Jos sarake ei sisällä tietoja taulukon aiheesta, se kuuluu toiseen taulukkoon.
-
Ovatko kaikki taulukoiden väliset yhteydet esitettyinä joko yhteisten kenttien tai kolmannen taulukon kautta? Yksi-yhteen- ja yksi-moneen-yhteydet edellyttävät yhteisiä sarakkeita. Monta-moneen-yhteyksissä on käytettävä kolmatta taulukkoa.
Tuotteet-taulukon hienosäätäminen
Oletetaan, että jokainen tuotemyynnin tietokannassa oleva tuote kuuluu yleisluokkaan, esimerkiksi juomiin, mausteisiin tai kalaruokiin. Tuotteet-taulukko sisältää kentän, jossa näytetään kunkin tuotteen luokka.
Oletetaan, että tietokannan rakenteen tarkastelun ja hienosäätämisen jälkeen päätät tallentaa luokan kuvauksen sen nimen kanssa. Jos lisäät Luokan kuvaus -kentän Tuotteet-taulukkoon, joudut toistamaan luokan kuvauksen jokaisessa kyseiseen luokkaan kuuluvassa tuotteessa, joten tämä ei ole hyvä ratkaisu.
Parempi ratkaisu on määrittää Luokat tietokannassa seurattavaksi uudeksi aiheeksi ja lisätä sille oma taulukko ja oma perusavain. Sen jälkeen voit lisätä Luokat-taulukon perusavaimen Tuotteet-taulukkoon viiteavaimena.
Luokat- ja Tuotteet-taulukoilla on yksi-moneen-yhteys: luokka voi sisältää useita tuotteita, mutta tuote voi kuulua vain yhteen luokkaan.
Kun tarkastelet taulukon rakennetta, etsi toistuvia ryhmiä. Kuvitellaan esimerkiksi, että taulukko sisältää seuraavat sarakkeet:
-
Tuotetunnus
-
Nimi
-
Tuotetunnus1
-
Nimi1
-
Tuotetunnus2
-
Nimi2
-
Tuotetunnus3
-
Nimi3
Tässä jokainen tuote on toistuva ryhmä sarakkeita, jotka eroavat muista vain siten, että sarakkeen nimen loppuun on lisätty numero. Kun näet tällä tavalla numeroituja sarakkeita, rakennetta kannattaa tarkastella uudelleen.
Tällaisessa rakenteessa on useita vikoja. Ensinnäkin se pakottaa asettamaan ylärajan tuotteiden määrälle. Kun ylität tämän rajan, sinun on lisättävä taulukkorakenteeseen uusi sarakeryhmä, joka on tärkeä hallintatehtävä.
Toinen ongelma on siinä, että tilaa hukkaantuu toimittajiin, joilla on tuotteita enimmäismäärää vähemmän, koska ylimääräiset sarakkeet on tyhjiä. Vakavin rakenteellinen vika on siinä, että rakenne vaikeuttaa useiden tehtävien suorittamista (esimerkiksi taulukon lajittelua tai indeksointia tuotetunnuksen tai nimen mukaan).
Aina, kun toistuvat ryhmät tarkastelevat rakennetta tarkasti ja tarkastelevat taulukon jakamista kahtia. Yllä olevassa esimerkissä on parempi käyttää kahta taulukkoa, yksi toimittajille ja toinen tuotteille, jotka on linkitetty toimittajatunnuksen mukaan.
Normalisointisääntöjen käyttäminen
Voit käyttää tietojen normalisointisääntöjä rakenteen seuraavassa vaiheessa. Käytä sääntöjä, jotta näet, onko taulukoiden rakenne oikea. Sääntöjen käyttämistä tietokannan rakenteeseen kutsutaan tietokannan normalisoinniksi tai vain normalisoinniksi.
Normalisoinnista on eniten hyötyä sen jälkeen, kun kaikki tietokohteet on esitetty ja alustava rakenne on valmis. Tavoitteena on varmistaa, että tietokohteet on jaettu sopiviin taulukoihin. Normalisointi ei kuitenkaan voi varmistaa, että kaikki oikeat tietokohteet ovat lähtökohtaisesti käytössä.
Sääntöjä sovelletaan peräkkäin, ja jokaisessa vaiheessa varmistetaan, että mallisi saapuu johonkin niin kutsuttuun "normaalimuotoon". Viisi normaalia muotoa on laajalti hyväksytty – ensimmäinen normaali muoto viidennen normaalimuodon kautta. Tämä artikkeli laajennetaan kolmeen ensimmäiseen, koska ne ovat kaikki pakollisia useimpien tietokantamallien osalta.
Ensimmäinen normaalimuoto
Ensimmäisessä normaalimuodossa todetaan, että taulukon jokaisessa rivin ja sarakkeen leikkauskohdassa on yksi arvo, ei koskaan arvoluetteloa. Sinulla ei esimerkiksi voi olla Hinta-nimistä kenttää, johon sijoitat useamman kuin yhden hinnan. Jos pidät kutakin rivien ja sarakkeiden leikkauskohtaa soluna, kussakin solussa voi olla vain yksi arvo.
Toinen normaalimuoto
Toisessa normaalimuodossa edellytetään, että kukin ei-avainsarake on täysin riippuvainen koko perusavaimesta, eikä vain avaimen osasta. Tätä sääntöä käytetään, kun käytössä on perusavain, joka koostuu useammasta kuin yhdestä sarakkeesta. Oletetaan, että taulukossasi on seuraavat sarakkeet, joissa Tilaustunnus ja Tuotetunnus muodostavat perusavaimen:
-
Tilaustunnus (perusavain)
-
Tuotetunnus (perusavain)
-
Tuotteen nimi
Tämä rakenne ei ole toisen normaalimuodon mukainen, koska Tuotteen nimi on riippuvainen tuotetunnuksesta, mutta ei tilaustunnuksesta, joten se ei ole riippuvainen koko perusavaimesta. Tuotteen nimi on poistettava taulukosta. Se kuuluu toiseen taulukkoon (Tuotteet).
Kolmas normaalimuoto
Kolmas normaalimuoto edellyttää, että sen lisäksi, että jokainen ei-avainsarake on riippuvainen koko perusavaimesta, kyseiset ei-avainsarakkeet ovat itsenäisiä toisiinsa nähden.
Toisin sanoen jokaisen ei-avainsarakkeen on oltava riippuvainen pääavaimesta ja vain pääavaimesta. Oletetaan esimerkiksi, että taulukko sisältää seuraavat sarakkeet:
-
Tuotetunnus (perusavain)
-
Nimi
-
OVH
-
Alennus
Oletetaan, että Alennus riippuu ohjevähittäishinnasta (OVH). Tämä taulukko ei ole kolmannen normaalimuodon mukainen, koska ei-avainsarake Alennus on riippuvainen toisesta ei-avainsarakkeesta (OVH). Sarakkeen riippumattomuus tarkoittaa sitä, että mitä tahansa ei-avainsaraketta pitäisi voida muuttaa ilman että se vaikuttaa toiseen sarakkeeseen. Jos muutat OVH-kentän arvoa, Alennus-kentän arvo muuttuu vastaavasti eli sääntöä rikotaan. Tässä tapauksessa Alennus pitää siirtää toiseen taulukkoon, jonka avaimena on OVH.