Tietokannan luominen

Kokonaisen tietokannan taulujen luomisessa pitää muistaa luoda taulut oikeassa järjestyksessä. Ensimmäiseksi on luotava ne taulut, jotka eivät viittaa muihin tauluihin, koska viittauksia ei voi normaalisti tehdä ennen viitattavan taulun luomista. Vastaavalla tavalla on tehtävä taulujen poistaminen eli ensin poistetaan ne taulut, jotka viittaavat muihin. Poistojärjestys on siis täysin vastakkainen luontijärjestykseen verrattuna.

Esimerkkinä kokonaisen tietokannan luomisesta ja kaikista siihen liittyvistä määrityksistä on tietokannan suunnittelukappaleessa suunnitellun tietokannan taulut. Ensimmäisenä luodaan ne, jotka ovat ER-kaavion ”reunoilla” eli ne taulut jotka eivät viittaa muihin tauluihin:

CREATE TABLE Osasto (OsastoID INTEGER NOT NULL,
OsastoNimi VARCHAR(32) NOT NULL,
CONSTRAINT PK_Osasto
PRIMARY KEY (OsastoID)
);

CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
SukuNimi VARCHAR(64) NOT NULL,
Hetu CHAR(11) NOT NULL UNIQUE,
Palkka NUMERIC(7,2) NOT NULL DEFAULT 2000,
Syntymaaika DATE NOT NULL DEFAULT '1.1.1970',
Osasto INTEGER NOT NULL DEFAULT 1,
CONSTRAINT PK_Tyontekija
PRIMARY KEY (TyontekijaID),
CONSTRAINT FK_T_Osasto
FOREIGN KEY (Osasto)
REFERENCES Osasto (OsastoID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);

CREATE TABLE Lapsi (
Huoltaja INTEGER NOT NULL,
Syntymaaika DATE NOT NULL,
CONSTRAINT PK_Lapsi
PRIMARY KEY (Huoltaja, Syntymaaika),
CONSTRAINT FK_Lapsi_Huoltaja
FOREIGN KEY (Huoltaja)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE CASCADE
ON UPDATE CASCADE
);

CREATE TABLE Toimittaja (
ToimittajaID INTEGER NOT NULL,
ToimittajaNimi VARCHAR(64) NOT NULL,
CONSTRAINT PK_Toimittaja
PRIMARY KEY (ToimittajaID)
);

CREATE TABLE Osa (
OsaID INTEGER NOT NULL,
OsaNimi VARCHAR(64) NOT NULL,
CONSTRAINT PK_Osa
PRIMARY KEY (OsaID)
);

CREATE TABLE Koostuu (
K_OsaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
Lukumaara SMALLINT NOT NULL DEFAULT 1,
CONSTRAINT PK_Koostuu
PRIMARY KEY (K_OsaID, OsaID),
CONSTRAINT FK_Koostuu_1
FOREIGN KEY (K_OsaID)
REFERENCES Osa (OsaID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK_Koostuu_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE CASCADE
ON UPDATE CASCADE
);

CREATE TABLE Projekti (
ProjektiID INTEGER NOT NULL,
ProjektiNimi VARCHAR(64) NOT NULL,
Projektipaallikko INTEGER NOT NULL,
CONSTRAINT PK_Projekti
PRIMARY KEY (ProjektiID),
CONSTRAINT FK_Projekti_P
FOREIGN KEY (Projektipaallikko)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);

CREATE TABLE Tekee (
TyontekijaID INTEGER NOT NULL,
ProjektiID INTEGER NOT NULL,
CONSTRAINT PK_Tekee
PRIMARY KEY (TyontekijaID, ProjektiID),
CONSTRAINT FK_Tekee_1
FOREIGN KEY (TyontekijaID)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT FK_Tekee_2
FOREIGN KEY (ProjektiID)
REFERENCES Projekti (ProjektiID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);

CREATE TABLE Toimittaa (
ToimittajaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
CONSTRAINT PK_Toimittaa
PRIMARY KEY (ToimittajaID, OsaID),
CONSTRAINT FK_Toimittaa_1
FOREIGN KEY (ToimittajaID)
REFERENCES Toimittaja (ToimittajaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT FK_Tekee_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);

CREATE TABLE Osan_toimitus (
ProjektiID INTEGER NOT NULL,
ToimittajaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
Lukumaara SMALLINT NOT NULL DEFAULT 1,
CONSTRAINT PK_OsaT
PRIMARY KEY (ProjektiID, ToimittajaID, OsaID),
CONSTRAINT FK_OSaT_1
FOREIGN KEY (ToimittajaID)
REFERENCES Toimittaja (ToimittajaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT FK_OsaT_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT FK_OsaT_3
FOREIGN KEY (ProjektiID)
REFERENCES Projekti (ProjektiID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);

Käyttäjien kommentit

Simo Tuhkanen ( 2010-12-05 10:35:57 )

Tietokannan luominen pitäsi esittää ennen taulujen luomista, vrt. otsikko.

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/doc/tiedonhallinta/sql/ddl/index4.html
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2010-12-08 21:36:53
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta