Jos et ole vielä tehnyt loppuun kahta ensimmäistä demoa niin viimeistele ne ennen, kuin jatkat näitä tehtäviä.
Edellisissä demoissa määriteltiin ER-kaavion pohjalta luotavat relaatiot ja niihin sisältyvät
kentät. Tällä kertaa tehdään varsinainen relaatioiden luominen SQL-kielen avulla. Samalla määritellään
myös relaatioiden väliset viite-eheydet.
CREATE TABLE Postinumero (
Postinumero CHAR(5) NOT NULL,
Postitoimipaikka VARCHAR(64) NOT NULL
)
;
Kenttien nimet, tietotyypit ja pakollisuusmääritykset saadaan suoraan Exceliin kirjoitetuista
tiedoista. Jos kenttä ei olisi pakollinen niin NOT NULL -määritys jäisi pois.
-kuvaketta tai painat
F5. Kokeile suorittaa kirjoittamasi SQL-koodi. Jos saat virheilmoituksen
niin tarkista kirjoititko SQL-lauseet varmasti oikein ja yritä uudelleen.
CREATE TABLE -lausetta lause, joka
poistaa luomasi taulun:
DROP TABLE Postinumero
;
Varmista, että kaikissa kirjoittamissasi SQL-lauseissa on komennon lopettava puolipiste omalla rivillään.
ODBC Query tool ei muuten osaa erottaa eri SQL-lauseita toisistaan.
Suorita SQL-koodi. Jos kaikki meni ok niin et saa virheilmoituksia vaan tietokannanhallintajärjestelmä
poisti ensin postinumero-taulun ja loi heti sen jälkeen taulun uudelleen. Tallenna.
DROP TABLE Postinumero
;
CREATE TABLE Postinumero (
Postinumero CHAR(5) NOT NULL,
Postitoimipaikka VARCHAR(64) NOT NULL,
CONSTRAINT Postinumero_PK
PRIMARY KEY (Postinumero)
)
;
CONSTRAINT-määrityksellä annetaan perusavaimelle yksilöllinen nimi, jonka avulla siihen
voidaan tarvittaessa myöhemmin viitata.
PRIMARY KEY -sanojen jälkeen listataan sulkeissa perusavaimen muodostava kenttä tai yhdistetyn avaimen tapauksessa pilkulla eroteltuina kentät.
Yritä suorittaa SQL-lauseet ja varmista taulun ilmestyminen Tables-listaan.
DROP TABLE Postinumero
;
CREATE TABLE Postinumero (
Postinumero CHAR(5) NOT NULL,
Postitoimipaikka VARCHAR(64) NOT NULL,
CONSTRAINT Postinumero_PK
PRIMARY KEY (Postinumero)
)
;
CREATE TABLE Tiedekunta (
TiedekuntaID INTEGER NOT NULL,
Nimi VARCHAR(64) NOT NULL,
CONSTRAINT Tiedekunta_PK
PRIMARY KEY (TiedekuntaID)
)
;
Suorita SQL-koodi. Tallenna. Lisää koko SQL-listauksen aivan ensimmäiseksi
DROP TABLE -lause, joka poistaa tiedekunta-taulun.
DROP TABLE Tiedekunta
;
DROP TABLE Postinumero
;
CREATE TABLE Postinumero (
Postinumero CHAR(5) NOT NULL,
Postitoimipaikka VARCHAR(64) NOT NULL,
CONSTRAINT Postinumero_PK
PRIMARY KEY (Postinumero)
)
;
CREATE TABLE Tiedekunta (
TiedekuntaID INTEGER NOT NULL,
Nimi VARCHAR(64) NOT NULL,
CONSTRAINT Tiedekunta_PK
PRIMARY KEY (TiedekuntaID)
)
;
CREATE TABLE Laitos (
LaitosID INTEGER NOT NULL,
Nimi VARCHAR(64) NOT NULL,
Tiedekunta INTEGER NOT NULL,
CONSTRAINT Laitos_PK
PRIMARY KEY (LaitosID)
)
;
Tallenna. Muista lisätä taas laitos-taulua vastaava DROP TABLE -lause
aivan ensimmäiseksi.
CREATE TABLE Laitos (
LaitosID INTEGER NOT NULL,
Nimi VARCHAR(64) NOT NULL,
Tiedekunta INTEGER NOT NULL,
CONSTRAINT Laitos_PK
PRIMARY KEY (LaitosID),
CONSTRAINT Laitos_FK_T
FOREIGN KEY (Tiedekunta)
REFERENCES Tiedekunta (TiedekuntaID)
)
;
Viite-eheys määritellään FOREIGN KEY -sanoilla joiden jälkeen sulkeissa
kerrotaan luotavan taulun kenttä tai kentät, jotka viittaavat toiseen tauluun.
REFERENCES-sanan jälkeen kerrotaan viitattavan taulun nimi ja sulkeissa
tässä taulussa oleva kenttä johon viitataan.
Testaa SQL-lauseiden toimivuus. Tallenna.
CREATE TABLE Laitos (
LaitosID INTEGER NOT NULL,
Nimi VARCHAR(64) NOT NULL,
Tiedekunta INTEGER NOT NULL,
CONSTRAINT Laitos_PK
PRIMARY KEY (LaitosID),
CONSTRAINT Laitos_FK_T
FOREIGN KEY (Tiedekunta)
REFERENCES Tiedekunta (TiedekuntaID)
ON UPDATE CASCADE
ON DELETE RESTRICT
)
;
ON UPDATE-määritys kertoo sallitaanko päivityksiä viitatussa taulussa. Jos
päivitykset sallitaan niin ne on vyörytettävä (CASCADE) myös tähän tauluun.
Jos päivityksiä ei sallita niin määritys on oltava RESTRICT.
ON DELETE-määritys kertoo sallitaanko poistot viitatussa taulussa. Jos poistot sallitaan
niin ne on vyörytettävä (CASCADE) myös tähän tauluun eli kaikki poistettuun
tietueeseen viitanneet tietueet poistetaan tästä taulusta. Poistojen kieltäminen tapahtuu
sanalla RESTRICT.
CREATE TABLE Opiskelija (
Sotu CHAR(11) NOT NULL,
Sahkopostiosoite VARCHAR(64),
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Lahiosoite VARCHAR(64) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Aloitusvuosi SMALLINT NOT NULL,
Laitos INTEGER NOT NULL,
CONSTRAINT Opiskelija_PK
PRIMARY KEY (Sotu),
CONSTRAINT Opiskelija_FK_L
FOREIGN KEY (Laitos)
REFERENCES Laitos (LaitosID)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT Opiskelija_FK_P
FOREIGN KEY (Postinumero)
REFERENCES Postinumero (Postinumero)
ON UPDATE CASCADE
ON DELETE RESTRICT
)
;
Testaa ja lisää myös vastaava DROP TABLE -lause. Tallenna.
CREATE TABLE Opiskelija (
Sotu CHAR(11) NOT NULL,
Sahkopostiosoite VARCHAR(64),
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Lahiosoite VARCHAR(64) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Aloitusvuosi SMALLINT NOT NULL DEFAULT 2002,
Laitos INTEGER NOT NULL,
CONSTRAINT Opiskelija_PK
PRIMARY KEY (Sotu),
CONSTRAINT Opiskelija_FK_L
FOREIGN KEY (Laitos)
REFERENCES Laitos (LaitosID)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT Opiskelija_FK_P
FOREIGN KEY (Postinumero)
REFERENCES Postinumero (Postinumero)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT Opiskelija_ch
CHECK ( aloitusvuosi >= 1990 )
)
;
Oletusarvot voi määritellä lisäämällä pakollisuusmääritteiden jälkeen sanan DEFAULT
ja heti perään halutun oletusarvon.
Tarkistuksia lisätään CHECK-määritteellä. Tarkistuksena voi käyttää melkein mitä tahansa
SQL-kyselyä tai ehtoa. Kyselyiden tekeminen opitaan myöhemmin.
DROP TABLE -lauseet.Jos sinulla vielä riittää aikaa ja innostusta niin luo myös futistietokanta SQL:n avulla.