Kurssipalautetietokanta

Tekijä Tommi Lahtonen
Sähköpostiosoite tommi.j.lahtonen@jyu.fi
Pääaine Tietotekniikka
Kurssi Tietokannat

Aihe

Tietokantasovelluksella on tarkoitus pystyä helposti laatimaan kurssipalautekyselyjä. Tietokantaan kerätään kysymyspankkia, josta voi aina valita kurssille sopivat kysymykset tai luoda uusia kysymyksiä. Varsinainen vastausten kerääminen suoritetaan WWW-lomakkeella. Sopiva WWW-lomake muodostetaan automaattisesti tietokannan tietojen perusteella.

Vaatimusmäärittely

Sovelluksella täytyy olla mahdollista laatia kurssikysely johon voi luoda joko aivan uusia kysymyksiä tai käyttää jo ennestään olemassaolevia kysymyksiä. Kysymyksiä voidaan luoda useampaa tyyppiä eli joko monivalintakysymyksiä tai vapaita tekstikenttiä. Sovelluksen täytyy osata antaa kyselykohtaiset raportit annetuista vastauksista.

ER-kaavio

Tietokannan ER-kaavio

Relaatiot

Tietokannan relaatiot

Relaatioiden määritykset

Kurssi

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
Koodi CHAR(6) Kyllä Kolme ensimmäistä merkkiä ovat kirjaimia ja kolme viimeistä numeroita
Nimi VARCHAR(64) Kyllä

Kysely

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
ID INTEGER Kyllä
Aika DATE Kyllä
Nimi VARCHAR(128) Kyllä

Vastaus

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
Vastaaja INTEGER Kyllä
Kysymys INTEGER Kyllä Vain olemassaolevat tietyn kyselyn kysymykset kelpaavat (DELETE RESTRICT, UPDATE CASCADE)
Teksti VARCHAR(1024) Ei
Valinta INTEGER Ei Vain oikeaan kysymykseen liittyvät valinnat kelpaavat (DELETE RESTRICT, UPDATE CASCADE)

Vaihtoehto

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
VaihtoehtoID INTEGER Kyllä
Vaihtoehto VARCHAR(64) Kyllä

Kysymystyyppi

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
KysymystyyppiID INTEGER Kyllä
Kysymystyyppi VARCHAR(64) Kyllä

Kysymys

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
KysymysID INTEGER Kyllä
Kysymys VARCHAR(512) Kyllä
Kysymystyyppi INTEGER Kyllä Vain olemassaolevat kysymystyypit kelpaavat (DELETE RESTRICT, UPDATE CASCADE)

Valinta

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
ID INTEGER Kyllä
Kysymys INTEGER Kyllä Vain olemassaolevat kysymykset kelpaavat (DELETE RESTRICT, UPDATE CASCADE)
Nro INTEGER Kyllä 1 >=0
Vaihtoehto INTEGER Kyllä Vain olemassaolevat vaihtoehdot kelpaavat (DELETE RESTRICT, UPDATE CASCADE)

Kyselyn kysymys

Ominaisuus Tietotyyppi Pakollinen Oletusarvo Rajoitteet
ID INTEGER Kyllä
Nro INTEGER Kyllä 1 >=0
Kysymys INTEGER Kyllä Vain olemassaolevat kysymykset kelpaavat (DELETE RESTRICT, UPDATE CASCADE)
Kysely INTEGER Kyllä Vain olemassaolevat kyselyt kelpaavat (DELETE RESTRICT, UPDATE CASCADE)

Tähän vielä selitys mahdollisen normalisoinnin aiheuttamista muutoksista.

Relaatioiden luominen


DROP TABLE Vastaus
;
DROP TABLE Kyselyn_kysymys
;
DROP TABLE Valinta
;
DROP TABLE Kysymys
;
DROP TABLE Vaihtoehto
;
DROP TABLE Kysymystyyppi
;
DROP TABLE Kysely
;
DROP TABLE Kurssi
;

CREATE TABLE Kurssi (
Kurssikoodi		CHAR(6) 	NOT NULL,
Nimi			VARCHAR(64) NOT NULL,
CONSTRAINT Kurssi_PK
	PRIMARY KEY (Kurssikoodi)
)
;

CREATE TABLE Kysely (
ID				INTEGER 		NOT NULL,
Nimi			VARCHAR(128)	NOT NULL,
Aika			DATE 			NOT NULL,
Kurssi			CHAR(6)			NOT NULL,
CONSTRAINT Kysely_PK
	PRIMARY KEY (ID),
CONSTRAINT Kysely_UNIQ
	UNIQUE (Kurssi, Aika, Nimi),
CONSTRAINT Kysely_FK
	FOREIGN KEY (Kurssi)
	REFERENCES Kurssi (Kurssikoodi)
		ON UPDATE CASCADE
		ON DELETE RESTRICT
)
;

CREATE TABLE Kysymystyyppi (
ID				INTEGER		NOT NULL,
Kysymystyyppi	VARCHAR(64)	NOT NULL,
CONSTRAINT Kysymystyyppi_PK
	PRIMARY KEY (ID)
)
;

CREATE TABLE Vaihtoehto (
ID				INTEGER		NOT NULL,
Vaihtoehto		VARCHAR(64)	NOT NULL,
CONSTRAINT Vaihtoehto_PK
	PRIMARY KEY (ID)
)
;

CREATE TABLE Kysymys (
ID				INTEGER		NOT NULL,
Kysymys			VARCHAR(128) NOT NULL,
Kysymystyyppi	INTEGER		NOT NULL,
CONSTRAINT Kysymys_PK
	PRIMARY KEY (ID),
CONSTRAINT Kysymys_FK
	FOREIGN KEY (Kysymystyyppi)
	REFERENCES Kysymystyyppi (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT
)
;

CREATE TABLE Valinta (
ID				INTEGER		NOT NULL,
Vaihtoehto		INTEGER		NOT NULL,
Kysymys			INTEGER		NOT NULL,
Nro				INTEGER		NOT NULL DEFAULT 1 CHECK ( nro >= 0 ),
CONSTRAINT Valinta_PK
	PRIMARY KEY (ID),
CONSTRAINT Valinta_UNIQ
	UNIQUE (Kysymys, Nro),
CONSTRAINT Valinta_FK_Vaihtoehto
	FOREIGN KEY (Vaihtoehto)
	REFERENCES Vaihtoehto (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT,
CONSTRAINT Valinta_FK_Kysymys
	FOREIGN KEY (Kysymys)
	REFERENCES Kysymys (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT
)
;

CREATE TABLE Kyselyn_kysymys (
ID				INTEGER		NOT NULL,
Nro				INTEGER		NOT NULL DEFAULT 1 CHECK ( nro >= 0 ),
Kysely			INTEGER		NOT NULL,
Kysymys			INTEGER		NOT NULL,
CONSTRAINT Kyselykys_PK
	PRIMARY KEY (ID),
CONSTRAINT Kyselynkys_UNIQ1
	UNIQUE (Kysely, Kysymys),
CONSTRAINT Kyselynkys_UNIQ2
	UNIQUE (Kysely, Nro),
CONSTRAINT Kyselynkys_FK_Kysely
	FOREIGN KEY (Kysely)
	REFERENCES Kysely (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT,
CONSTRAINT Kyselynkys_FK_Kysymys
	FOREIGN KEY (Kysymys)
	REFERENCES Kysymys (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT
)
;


CREATE TABLE Vastaus (
Vastaaja		INTEGER		NOT NULL,
Kysymys			INTEGER		NOT NULL,
Teksti			VARCHAR(8192),
Valinta			INTEGER 	,
CONSTRAINT Vastaus_PK
	PRIMARY KEY (Vastaaja, Kysymys),
CONSTRAINT Vastaus_FK_Kysymys
	FOREIGN KEY (Kysymys)
	REFERENCES Kyselyn_kysymys (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT,
CONSTRAINT Vastaus_FK_Valinta
	FOREIGN KEY (Valinta)
	REFERENCES Valinta (ID)
		ON UPDATE CASCADE
		ON DELETE RESTRICT
)
;


Testidata


INSERT INTO kurssi (kurssikoodi,nimi) VALUES ('TIE160','Mikrotietokoneiden ohjelmistot');
INSERT INTO kysely (id,nimi,aika,kurssi) VALUES (1,'Kurssipalaute','2002-03-01','TIE160');
INSERT INTO kysymystyyppi (id,kysymystyyppi) VALUES (1,'Tekstikenttä');
INSERT INTO kysymystyyppi (id,kysymystyyppi) VALUES (2,'Radio');
INSERT INTO kysymystyyppi (id,kysymystyyppi) VALUES (3,'Checkbox');
INSERT INTO kysymystyyppi (id,kysymystyyppi) VALUES (4,'Combobox');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (0,'-');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (1,'TIE');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (2,'MAT');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (3,'FYS');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (4,'KEM');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (5,'Avoin yo');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (6,'TJT');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (7,'TLI');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (8,'TIL');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (9,'Muut');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (10,'Mies');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (11,'Nainen');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (20,'0');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (21,'1');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (22,'2');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (23,'3');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (24,'4');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (25,'5');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (26,'6');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (27,'7');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (28,'8');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (29,'9');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (30,'10');
INSERT INTO vaihtoehto (id,vaihtoehto) VALUES (31,'11');
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (1,'Pääaine',4);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (2,'Sukupuoli',2);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (40,'Ikä',1);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (3,'Kuinka monissa ohjatuissa demoissa kävit?',4);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (4,'Kuinka monet demot teit omalla ajallasi demoaikojen ulkopuolella?',4);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (5,'Kuinka monella luennolla olit?',4);
INSERT INTO kysymys (id,kysymys,kysymystyyppi) VALUES (6,'Kuinka monta luentoa kuuntelit kotisivuilta?',4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (0,0,1,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (1,1,1,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (2,2,1,3);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (3,3,1,4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (4,4,1,5);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (5,5,1,6);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (6,6,1,7);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (7,7,1,8);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (8,8,1,9);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (9,9,1,10);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (10,0,2,0);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (11,10,2,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (12,11,2,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (13,20,3,0);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (14,21,3,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (15,22,3,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (16,23,3,3);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (17,24,3,4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (18,25,3,5);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (19,26,3,6);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (20,27,3,7);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (21,28,3,8);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (22,20,4,0);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (23,21,4,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (24,22,4,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (25,23,4,3);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (26,24,4,4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (27,25,4,5);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (28,26,4,6);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (29,27,4,7);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (30,28,4,8);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (31,20,5,0);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (32,21,5,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (33,22,5,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (34,23,5,3);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (35,24,5,4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (36,25,5,5);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (37,26,5,6);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (38,27,5,7);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (39,28,5,8);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (40,29,5,9);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (41,30,5,10);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (42,31,5,11);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (43,20,6,0);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (44,21,6,1);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (45,22,6,2);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (46,23,6,3);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (47,24,6,4);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (48,25,6,5);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (49,26,6,6);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (50,27,6,7);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (51,28,6,8);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (52,29,6,9);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (53,30,6,10);
INSERT INTO valinta (id,vaihtoehto,kysymys,nro) VALUES (54,30,6,11);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (1,1,1,1);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (2,2,1,2);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (40,3,1,40);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (3,4,1,3);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (4,5,1,4);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (5,6,1,5);
INSERT INTO kyselyn_kysymys (id,nro,kysely,kysymys) VALUES (6,7,1,6);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,1,NULL,9);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,1,NULL,2);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,1,NULL,9);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,1,NULL,5);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,1,NULL,9);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,1,NULL,5);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,1,NULL,9);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,1,NULL,2);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,1,NULL,1);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,1,NULL,1);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,40,'22',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,40,'20',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,40,'36',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,40,'40',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,40,'27',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,40,'45',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,40,'23',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,40,'22',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,40,'24',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,40,'19',NULL);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,2,NULL,11);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,2,NULL,11);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,2,NULL,11);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,2,NULL,11);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,2,NULL,11);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,2,NULL,12);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,2,NULL,12);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,2,NULL,12);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,2,NULL,12);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,2,NULL,12);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,4,NULL,23);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,4,NULL,25);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,4,NULL,23);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,4,NULL,22);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,4,NULL,25);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,4,NULL,27);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,4,NULL,26);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,4,NULL,25);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,4,NULL,23);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,4,NULL,27);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,5,NULL,36);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,5,NULL,37);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,5,NULL,40);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,5,NULL,42);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,5,NULL,42);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,5,NULL,39);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,5,NULL,40);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,5,NULL,31);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,5,NULL,36);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,5,NULL,36);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (1,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (2,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (3,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (4,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (5,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (6,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (7,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (8,6,NULL,44);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (9,6,NULL,43);
INSERT INTO vastaus (vastaaja,kysymys,teksti,valinta) VALUES (10,6,NULL,43);

Kyselyt


-- Listataan kaikki vastaajat ja heidän vastauksensa

SELECT Vastaus.vastaaja, kysymys.kysymys, vaihtoehto.vaihtoehto
FROM Vastaus, kyselyn_kysymys, kysely, kysymys, valinta, vaihtoehto
WHERE Vastaus.kysymys = kyselyn_kysymys.id
AND kyselyn_kysymys.kysely = kysely.id
AND kyselyn_kysymys.kysymys = kysymys.id
AND vastaus.valinta IS NOT NULL
AND vastaus.valinta = valinta.id
AND valinta.vaihtoehto = vaihtoehto.id
AND valinta.kysymys = kysymys.id
ORDER BY Vastaus.vastaaja, kyselyn_kysymys.nro
;

-- Haetaan kukin kurssi ja siihen liittyvät kyselyt, näiden kysymykset ja kysymysten tyypit
SELECT kurssi.nimi, kysely.nimi, kyselyn_kysymys.nro, kysymys.kysymys, kysymystyyppi.kysymystyyppi
FROM kurssi 
JOIN kysely 			ON kurssi.kurssikoodi = kysely.kurssi
JOIN kyselyn_kysymys 	ON kysely.id = kyselyn_kysymys.kysely 
JOIN kysymys 			ON kyselyn_kysymys.kysymys = kysymys.id
JOIN kysymystyyppi		ON kysymys.kysymystyyppi = kysymystyyppi.id
ORDER BY kurssi.kurssikoodi, kysely.aika, kyselyn_kysymys.nro


-- Luodaan kysely, joka laskee kyselykohtaisesti jokaisen kysymyksen keskiarvon
CREATE VIEW Keskiarvot AS
SELECT Kysely.ID AS Kysely, Kysymys.ID AS Kysymys, ROUND(AVG(vastaus.valinta), 0) AS Keskiarvo
FROM Vastaus, kyselyn_kysymys, kysely, kysymys, valinta, vaihtoehto
WHERE Vastaus.kysymys = kyselyn_kysymys.id
AND kyselyn_kysymys.kysely = kysely.id
AND kyselyn_kysymys.kysymys = kysymys.id
AND vastaus.valinta IS NOT NULL
AND vastaus.valinta = valinta.id
AND valinta.vaihtoehto = vaihtoehto.id
AND valinta.kysymys = kysymys.id
GROUP BY Kysely.ID, Kysymys.ID
;

-- Haetaan tietyn kyselyn kysymykset, niiden vaihtoehdot ja kysymysten tyypit numerojärjestyksessä
SELECT kyselyn_kysymys.id as kysymys, kyselyn_kysymys.nro, valinta.id as valid, valinta.nro as valinta, kysymys.kysymys, 
kysymystyyppi.kysymystyyppi, vaihtoehto.vaihtoehto
FROM kyselyn_kysymys 	
JOIN kysymys 			ON kyselyn_kysymys.kysymys = kysymys.id
JOIN kysymystyyppi		ON kysymys.kysymystyyppi = kysymystyyppi.id
JOIN valinta			ON valinta.kysymys = kysymys.id
JOIN vaihtoehto			ON valinta.vaihtoehto = vaihtoehto.id
AND kyselyn_kysymys.kysely = 2
ORDER BY kyselyn_kysymys.nro, valinta.nro

-- Haetaan tietyn kyselyn kysymystyn tunnisteet ja tyypit
SELECT kyselyn_kysymys.id,  kysymystyyppi.kysymystyyppi
FROM Kysymys 
JOIN Kysymystyyppi ON kysymys.kysymystyyppi = kysymystyyppi.id
JOIN kyselyn_kysymys ON kysymys.id = kyselyn_kysymys.kysymys
WHERE kyselyn_kysymys.kysely = 2;


VIELÄ KESKEN

Kommentit

Harjoitustyön tekemiseen kului N tuntia.

Harjoitustyön tekemisessä koin ongelmaksi ... ....

Harjoitustyössä oli hyvää ...