A da odvojis tabele? Evo pokusacu da ti pomognem koristeci visi nivo normalizacije...
Kreiras tabelu za godine:
Code:
CREATE TABLE godina (
godinaID tinyint(1) NOT NULL,
nazivSmjera VARCHAR(30),
PRIMARY KEY(godinaID)
);
Kreiras tabelu sa popisima predmeta:
Code:
CREATE TABLE predmeti (
predmetID tinyint(2) NOT NULL AUTO_INCREMENT,
nazivPredmeta VARCHAR(100) NOT NULL,
PRIMARY KEY(predmetID)
);
Zatim kreiras agregatnu (lookup) tabelu za predmete sa odredjene godine:
Code:
CREATE TABLE godina_predmet (
godinaID tinyint(1),
predmetID tinyint(2),
PRIMARY KEY(godinaID, predmetID)
);
Dalje, kreiras tabelu za ocjene (1-5 ili 6-10; Da li se moraju zapisati i podaci kada student padne na ispitu?):
Code:
CREATE TABLE ocjene (
ocjenaID int(11) NOT NULL AUTO_INCREMENT,
ocjena tinyint(1) NOT NULL,
datum DATETIME, -- komentar: ili uzmes samo DATE ...
PRIMARY KEY(ocjenaID)
);
Kreiras tabelu za studente:
Code:
CREATE TABLE studenti(
studentID mediumint(8) auto_increment,
ime varchar(20) not null,
prezime varchar(40) not null,
username char(16),
passwd char(16) not null,
adresa char(40) not null,
grad char(20) not null,
telefon char(20) not null,
email varchar(100),
PRIMARY KEY(studentID)
);
Povezes studente sa godinom na kojoj studiraju:
Code:
CREATE TABLE godina_student (
godinaID tinyint(1) NOT NULL,
studentID mediumint(8) NOT NULL,
PRIMARY KEY(godinaID, studentID)
);
Povezes studente sa dobijenom ocjenom:
Code:
CREATE TABLE predmet_student_ocjena (
predmetID tinyint(2) NOT NULL,
studentID mediumint(8) NOT NULL,
ocjenaID int(11) NOT NULL,
PRIMARY KEY(predmetID, studentID, ocjenaID)
);
Kada zelis npr. saznati koje je ocjene student prve godine Marko Markovic (studentID = 35) dobio iz predmeta algoritmi ( predmetID = 9), koristices npr. ovaj query (pod uslovom da imas aplikaciju koja pretrazuje po imenu, prezimenu, nekom studentskom identifikacijskom broju ili slicno ... Ja sam uzeo za primjer da trazis po studentID, koji unosis interaktivno ili putem dinamicke skripte iz baze):
Code:
SELECT o.ocjena
FROM ocjena o, studenti s, predmeti p, predmet_student_ocjena pso
WHERE
o.ocjenaID = pso.ocjenaID
AND
pso.studentID = s.studentID
AND
pso.predmetID = p.predmetID
AND
p.predmetID = 9
AND
s.studentID = 35;
Ako zelis da dobijes sve studente prve godine, imaces query:
Code:
SELECT s.*
FROM godina g, studenti s, godina_studenti gs
WHERE
s.studentID = gs.studentID
AND
gs.godinaID = g.godinaID
AND
g.godinaID = 1;
Ufff, naporno je ovo :)
Nisam provjeravao ovo i radio sam napamet iz glave, tako da je moguce da negdje ima greska ... Vjerovatno bi nesto valjalo i denormalizovati, ali to prepustam tebi...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA