TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI
Tarkastellaan Tietokannan fyysistä suunnittelua Menetelmän vaihetta 4 Looginen suunoitelma muutetaan toimiviksi tauluiksi
Id enimi snimi muuta 1 Aki Joki xxx 2 Esa Elo yyy Id katuos postios maa 1 Alikatu 20100 FI 2 Ylikatu 20880 FI Id tuotenro pvm kpl 1 11 010101 10 1 13 010101 12 2 11 010201 15 Tuotenro hinta nimike 11 100 metla 12 10 pesti 13 20 sevakko Muuan tietokanta - mahdollinen, mutta varoittava esimerkki - Huitaisten tehty ilman suunnitelmaa
Missä on se ero? Looginen tietokannan suunnittelu tuloksena looginen tietomalli ja sen kuvaukset taulujen kuvaukset riippumaton toteutuksen yksityiskohdista DBMS:n toiminnoista, sovellusohjelmista, ohjelmointikielistä pääkysymyksenä mitä (esitetään, kuvataan, talletetaan,... ) Fyysinen tietokannan suunnittelu pääkysymyksenä miten (talletus, organisointi, toimii,... ) toimitaan laitteiston ja ohjelmiston ehdoilla
Fyysisen tietokannan suunnittelun vaiheet 4. Käännä looginen tietomalli DBMS:lle sopivaksi 1. Suunnittele taulut 2. Suunnittele liiketoiminnalliset säännöt 5. Suunnittele fyysinen esitysmuoto 1. Analysoi tapahtumia 2. Valitse tiedostojen organisaatio 3. Valitse indeksit 6. Arvioi kontrolloidun redundanssin lisäämistä 1. Arvioi johdettua tietoa 2. Arvioi sarakkeiden kahdennusta tai taulujen liittämistä 7. Suunnittele turvallisuusmekanismit 1. Suunnittele käyttäjille näkymät 2. Suunnittele saantisäännöt 8. Valvo ja viritä toimivaa järjestelmää
Fyysisen tietokannan suunnittelun vaiheet - eli 4. Käännä looginen tietomalli DBMS:lle sopivaksi Suunnittelemme perustaulut ja niihin liittyvät eheyssäännöt valitun tietokantajärjestelmän mukaan 5. Suunnittele fyysinen esitysmuoto Valitsemme sopivan tiedosto-organisaation ja indeksit perustauluille 6. Arvioi kontrolloidun redundanssin lisäämistä Arvioimme mahdollisuuksia joustaa normalisointisäännöistä yleisen suorituskyvyn lisäämiseksi 7. Suunnittele turvallisuusmekanismit Suunnittelemme tietokannan turvalliseksi käyttää: tieto säilyy ja on vain niiden käytettävissä, joiden sitä kuuluukin käyttää 8. Valvo ja viritä toimivaa järjestelmää Jatkuvaa toimintaa tästä eteenpäin
4.1 Suunnittele taulut tietokantajärjestelmälle Tavoite: päättää miten loogisessa tietomallissa tunnistetut taulut esitetään valitussa tietokantajärjestelmässä
4.1 Suunnittele taulut tietokantajärjestelmälle
4.1 Suunnittele taulut tietokantajärjestelmälle Loogisen tietomallin perusteella tehdyssä tietohakemistossa on: taulun nimi sarakkeiden nimet pääavain, ehkä vierasavaimet ja muut avaimet viite-eheyssäännöt vierasavaimille sarakkeille arvoalue, tietotyyppi, pituus jne. sarakkeille mahdollinen oletusarvo sarakkeille tieto NULL-arvoista onko sarake johdettu ja jos on, miten
4.1 Suunnittele taulut tietokantajärjestelmälle Perustaulujen toteutus Tämä riippuu valitusta tietokantajärjestelmästä Toiset järjestelmät tarjoavat enemmän toimintoja Missä määrin eheyssääntöjä on kirjoitettava itse sovellusohjelmiin ja missä määrin järjestelmä hoitaa ne? Saantioikeudet ja rajoitukset?
4.1 Suunnittele taulut tietokantajärjestelmälle Esimerkkinä Branch-taulun määrittely ja luominen extenddd DBDL (Data Base Definition Language): domain Branch_Numbers fixed length character string length 4 domain Street_Names variable length character string maximum length 30 domain City_Names variabld length character string maximum length 20 domain State_Codes fixed length character string length 2 domain Zip_Codes fixed length character string length 5 domain Staff_Numbers fixed length character string length 5
4.1 Suunnittele taulut tietokantajärjestelmälle Esimerkkinä Branch-taulun määrittely ja luominen: branch( branchno Cranch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL, mgrstaffno Staff_Numbers NOT NULL ) Primary Key branchno Alternate Key zipcode Foreign Key mgrstaffno References Staff(staffNo) ON UPDATE CASCADE ON DELETE NO ACTION
4.1 Suunnittele taulut tietokantajärjestelmälle Perustaulujen toteutus Esimerkkinä 1. Vuoden 1992 ISO SQL standardi (SQL2) 2. Microsoft Access
Perustaulujen toteutus ISO SQL standardi SQL2 CREATE DOMAIN Branch_Numbers AS CHAR(4) CREATE DOMAIN Street_Names AS VARCHAR(30) CREATE DOMAIN City_Names AS VARCHAR(20) CREATE DOMAIN State_Codes AS CHAR(2) CREATE DOMAIN Zip_Codes AS CHAR(5) CREATE DOMAIN Staff_Numbers AS CHAR(5) CHECK ( VALUE IN ( SELECT staffno FROM Staff ) CREATE TABLE branch( branchno Branch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL, mgrstaffno Staff_Numbers NOT NULL ) PRIMARY KEY (branchno), FOREIGN KEY (mgrstaffno) REFERENCES Staff ON UPDATE CASCADE ON DELETE NO ACTION )
Perustaulujen toteutus ISO SQL standardi SQL2 eli: CREATE DOMAIN Branch_Numbers AS CHAR(4) CREATE DOMAIN Street_Names AS VARCHAR(30) CREATE DOMAIN City_Names AS VARCHAR(20) CREATE DOMAIN State_Codes AS CHAR(2) CREATE DOMAIN Zip_Codes AS CHAR(5) CREATE DOMAIN Staff_Numbers AS CHAR(5) Taulun sarakenimet ja arvoalueet ovat samat kuin edellä On kätevää antaa arvoalueille nimet, jolloin niitä voidaan muutella joustavammin
Perustaulujen toteutus ISO SQL standardi SQL2 CHECK ( VALUE IN ( SELECT staffno FROM Staff ) CREATE TABLE branch( branchno Branch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL UNIQUE, mgrstaffno Staff_Numbers NOT NULL ) PRIMARY KEY (branchno), FOREIGN KEY (mgrstaffno) REFERENCES Staff ON UPDATE CASCADE ON DELETE NO ACTION ) Pääavain määritellään PRIMARY KEY-osion avulla SQL2 pakottaa automaagisesti tälle sarakkeelle yksikäsitteisyyden
Perustaulujen toteutus ISO SQL standardi SQL2 CHECK ( VALUE IN ( SELECT staffno FROM Staff ) CREATE TABLE branch( branchno Branch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL UOIQUE, mgrstagfno Staff_Numbers NOT NULL ) PRIMARY KEY (branchno), FOREIGN KEY (mgrstaffno) REFERENCES Staff ON UPDATE CASCADE ON DELETE NO ACTION ) Vierasavain määritellään FOREIGN KEY-osion avulla, mihin on lisätty viite-eheyssäännöt
Perustaulujen toteutus ISO SQL standardi SQL2 CHECK ( VALUE IN ( SELECT staffno FROM Staff ) CREATE TABLE branch( branchno Branch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL UNIQUE, mgrstaffno Staff_Numbers NOT NULL ) PRIMARY KEY (branchno), FOREIGN KEY (mgrstaffno) REFERENCES Staff ON UPDATE CASCADE ON DELETE NO ACTION ) Vaihtoehtoinen avain, zipcode määritellään epäsuorasti: NOT NULL-vaatimus takaa sille aina arvon UNIQUE vaatimus takaa, ettei kahdella rivillä ole samaa arvoa
Perustaulujen toteutus ISO SQL standardi SQL2 CHECK ( VALUE IN ( SELECT staffno FROM Staff ) CREATE TABLE branch( branchno Branch_Numbers NOT NULL, street Street_Names NOT NULL, city City_Names NOT NULL, state State_Codes NOT NULL, zipcode Zip_Codes NOT NULL UNIQUE, mgrstaffno Staff_Numbers NOT NULL ) PRIMARY KEY (branchno), FOREIGN KEY (mgrstaffno) REFERENCES Staff ON UPDATE CASCADE ON DELETE NO ACTION ) Vierasavain on määritelty (FOREIGN KEY) ja viite-eheyssääntö: Päivityksessä CASCADE: kun staffno saa uuden arvon, vastaavat arvot mgrstaffno-sarakkeella Branch-taulussa päivitetään vastaavasti (vyörytys) ON DELETE NO ACTION: riviä ei poisteta Staff-taulusta, jos vastaava henkilö on jonkin toimiston johtaja
Perustaulujen toteutus Microsoft Access 97 Microsoft Access 97:ssä voi määritellä pääavaimet oletusarvot NOT NULL-kentät (nimitys: required, vaadittu) Microsoft käyttää aina sanaa kenttä (field) eikä sarake Microsoftilla ei ole erityistä FOREIGN KEY-lauseketta, mutta vierasavaimia voi määritellä suhteiden avulla Tietotyypit poikkeavat hiukan SQL2-standardista Nämä seikat täytyy pitää mielessä käytettäessä Microsoft Accessia
Perustaulujen toteutus Microsoft Access 97 Microsoft Access tarjoaa neljä tapaa määritellä tyhjä taulu Käyttäen tietokantavelhoa (Database Wizard) luomaan yhtenä operaationa kaikki tietokannan taulut, lomakkeet ja raportit. Velho luo uuden tietokannan, mutta sitä ei voi käyttää lisäämään näitä asioita olemassaolevaan Käyttäen tauluvelhoa (Table Wizard) valitsemaan kentät tauluun valmiiksi määriteltyjen taulujen valikoimasta
Perustaulujen toteutus Microsoft Access 97 Microsoft Access tarjoaa neljä tapaa määritellä tyhjä taulu Syöttäen tietoja suoraan tyhjään tauluun (datasheet) kun tämä talletetaan, Access analysoi datan ja automaagisesti asettaa sopivan tietotyypin ja muodon joka kentälle Käyttäen suunnittelunäkymää (Design View) määritellä kaikki taulujen yksityiskohdata tyhjästä
Perustaulujen toteutus MS Access Suhteiden määrittely kahden taulun välillä Suhteet määritellään Relationships-ikkunassa Suhteen määrittelemiseksi esitetään ikkunassa taulut, joiden välille suhde määritellään ja sitten raahataan (drag) hiirellä vanhempi-taulun pääavain lapsitaulun vierasavain-attribuutin päälle/ drag and drop it s a drag
Perustaulujen toteutus MS Access Suhteiden määrittely kahden taulun välillä Yhdestä moneen suhde (1 : * ) luodaan vain, jos yksi kentistä on pääavain tai sille on yksikäsitteinen indeksi. Yhdestä yhteen suhde ( 1:1 ) luodaan vain, jos molemmat kentät ovat pääavaimia tai niillä on yksikäsitteinen indeksi. Suhdetta Manages ( 1:1 ) luotaessa täytyy varmistaa, että staffno-kenttä taulussa Staff on määritelty pääavaimeksi ja mgsstaffno-kentällä Branch-taulussa on ominaisuus indexed asetettu arvoon Yes (No Duplicates)
Perustaulujen toteutus MS Access Suhteiden määrittely kahden taulun välillä Access tarjoaa vain kaksi viite-eheystoimintoa päivityksille ja poistoille: NO ACTION ja CASCADE. Jos aikaisemmin on määritelty tarpeellisiksi muita toimintoja, on mietittävä, pitäisikö näitä määritelmiä muuttaa vai pitäisikö kyseiset toiminnot hoitaa sovellusohjelmissa.
Perustaulujen toteutus - kaikki välineet Dokumentoi perustaulujen rakenne Taulujen rakenne on syytä dokumentoida huolella. Sen lisäksi dokumentoidaan perustelut valitun suunnitelman valinnoille. Erityisesti tilanteissa, joissa on valittu yksi monista vaihtoehdoista miksi tähän päädyttiin
4.2. Suunnittele liiketoiminnalliset säännöt tietokantajärjestelmälle sopiviksi Tavoite Suunnitella tunnetut liiketoiminnalliset säännöt valitun tietokantajärjestelmän puitteiden mukaan
4.2. Suunnittele liiketoiminnalliset säännöt tietokantajärjestelmälle sopiviksi Taulujen päivityksiin saattaa liittyä liiketoiminnallisia rajoituksia reaalimaailman tilanteiden mukaan. Sellaisten sääntöjen suunnittelu siippuu valitusta tietokantajärjestelmästä, koska jotkut toteuttavat asioita, joita toiset eivät. Jos järjestelmä toteuttaa SQL2-standardia, ovat monet asiat varsin helppoja.
4.2. Suunnittele liiketoiminnalliset säännöt tietokantajärjestelmälle sopiviksi Esimerkki. StayHome videovuokraamo noudattaa liiketoiminnallista sääntöä, jonka mukaan jäsenellä saa kerralla olla vuokralla korkeintaan 10 videota. SQL2-järjestelmässä tämä toteutetaan Create Table-lauseen yhteydessä (taululle RentalAgreement) seuraavasti:
4.2. Suunnittele liiketoiminnalliset säännöt tietokantajärjestelmälle sopiviksi Esimerkki. CONSTRAINT member_not_renting_too_many CHECK ( NOT EXISTS (SELECT memcerno FROM rentalagreement GROUP BY memberno HAVING COUNT(*) >= 10 )) Joissakin järjestelmissä voidaan käyttää liipaisinta (trigger) vastaavien rajoitusten toteuttamiseen. Tämä liipaisin virittyy ennen kuin rivi lisätään tauluun ja jos se laukeaa, estyy päivitysoperaatio
She said she ll come, she didn t I mthe onein love, sheisn t There s no girl standing there And there s no-one to care And the trees are so bare On the Boulevard de la Madeleine The Moody Blues