Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Primary key ili sta vec? | Dizajn baze za studente i ispite

[es] :: MySQL :: Primary key ili sta vec? | Dizajn baze za studente i ispite

[ Pregleda: 3846 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

define

Član broj: 41934
Poruke: 288
213.244.208.*



Profil

icon Primary key ili sta vec? | Dizajn baze za studente i ispite09.04.2005. u 09:42 - pre 231 meseci
Interesuje me sledece.
Npr. imam jednu tabelu sa imenima i prezimenima ucenika jedne skole.
Sada u drugoj tabeli se nalaze predmeti koje ti ucenici imaju.
Kako da konstruisem bazu tako da se za svakog ucenika moze uneti ocena, znaci treba da bude povezano. (recimo da ima ukupno 3 predmeta)
Imam problem sa ovim primary key-om. Ako moze neko malo da mi pojasni ukoliko me je razumeo.

Napomena: Znam kako bih uradio da sve to smestim u jednu tabelu, ali zbog vece funkcionalnosti i licne prakse bih volio da vidim kako se to radi i na ovaj nacin.

// Edit by StRiPy: Izmijenjen naslov teme.

[Ovu poruku je menjao StRiPy dana 05.05.2005. u 01:46 GMT+1]
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.nat-pool.bgd.sbb.co.yu.

ICQ: 162962030


Profil

icon Re: Primary key ili sta vec?09.04.2005. u 10:07 - pre 231 meseci
Trebalo bi kreirati jos jednu tabelu koja ce imati kolone id, ucenikId, predmetId i ocena. ucenikId i predmetId bi trebalo biti foreign keys-i na tabelu ucenik kolonu id i tabelu premet kolonu id, respektivno.
 
Odgovor na temu

define

Član broj: 41934
Poruke: 288
213.244.208.*



Profil

icon Re: Primary key ili sta vec?09.04.2005. u 11:11 - pre 231 meseci
Mozes li da napises kako to ide cisto da vidim da se konsultujem u vezi nekih stvari.
Interesuje me kakva je tu uloga primary keya i foreign keya. Sta mi oni pomazu?
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.sbb.co.yu.

ICQ: 162962030


Profil

icon Re: Primary key ili sta vec?09.04.2005. u 11:52 - pre 231 meseci
http://dev.mysql.com/doc/mysql...b-foreign-key-constraints.html
http://dev.mysql.com/doc/mysql/en/example-foreign-keys.html


 
Odgovor na temu

define

Član broj: 41934
Poruke: 288
213.244.208.*



Profil

icon Re: Primary key ili sta vec?09.04.2005. u 23:23 - pre 231 meseci
ma sve je to ok, kontam ja povezivanje tabela, ali ne kontam sta ce mi primary key kada mogu i bez njega...
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Primary key ili sta vec?10.04.2005. u 00:43 - pre 231 meseci
Svrha primarnog kljuca je da onemoguci pojavljivanje dva reda u tabeli sa istim vrednostima kolona koje cine primarni kljuc. Ako mislis da mozes bez primarnog kljuca onda samo napred.

@caiser
ucenikId i predmetId bi trebali da cine i primarni kljuc u toj tabeli.
Owl
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.nat-pool.bgd.sbb.co.yu.

ICQ: 162962030


Profil

icon Re: Primary key ili sta vec?10.04.2005. u 08:17 - pre 231 meseci
U tabelama ucenik i premet ili u tabeli ocene?
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Primary key ili sta vec?10.04.2005. u 13:38 - pre 231 meseci
U tabeli ocena (koja sadrzi kolone ucenikId, predmetId i ocena). Mada sada vidim da nigde ne pise da jedan ucenik moze imati samo jednu ocenu iz jednog predmeta (jbg. navika sa fax-a).
Owl
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.sbb.co.yu.

ICQ: 162962030


Profil

icon Re: Primary key ili sta vec?10.04.2005. u 20:48 - pre 231 meseci
Zato me je i zacudio tvoj predlog. :) Moze i tako ako baza sluzi samo za maturski sto je verovatno i slucaj (3 predmeta), ali bolje da se ostavi mogucnost za 'nadogradnju'. ;)
 
Odgovor na temu

define

Član broj: 41934
Poruke: 288
213.244.208.*



Profil

icon Re: Primary key ili sta vec?11.04.2005. u 13:41 - pre 231 meseci
Ovako
na jednoj strani se unose podatci za svakog novog ucenika

Code:

CREATE TABLE studenti(
    id        int PRIMARY KEY auto_increment,
    ime        char(15) not null,
    prezime        char(20) 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        char(40) ,
    godina        char(10) not null
);

a u druga tabela je za ocene za fax
Code:

CREATE TABLE prva(
    id        int,
    tehnicke                 int,
    linearna                 int,
    fizika        int,
    logika        int,
    prog1        int,
    analiza        int,
    arhitektura    int,
    engleski    int,
    algoritmi    int
);

eh sada kada se unesu podatci za ucenika admin moze i da unosi ocene za svakog ucenika
Mislio sam da se unese id studenta i njegove ocene u ovu tabelu prva, medjutim javlja se problem sto se moze uneti vise ocena, a meni je potrebno da se unosti samo jedna. I da napomenem da mi treba takodje da moze ocena da se azurira jer na ovaj nacin je moguce uneti samo jednom ocene, dok meni treba da mogu da se unose ocene redom kako ucenik dobija ocene, znaci nesto kao update.
Znao bih da uradim sve u jendoj tabeli ali bih volio da odradim ovako jer ovako i stedim prostor.
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.eunet.yu.

ICQ: 162962030


Profil

icon Re: Primary key ili sta vec?11.04.2005. u 13:46 - pre 231 meseci
Resenje ti je dato, na tebi je da odradis implementaciju. Ako hoces da neko to odradi umesto tebe zna se sta moras da uradis...
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Primary key ili sta vec?13.04.2005. u 21:45 - pre 231 meseci
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
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Primary key ili sta vec?14.04.2005. u 12:35 - pre 231 meseci
Zaboravio sam nesto. :(

Tabelu godine mozes prepraviti i izbaciti kolonu nazivSmjera.
Umjesto toga, mozes kreirati dodatnu tabelu za nazive smjerova:
Code:

CREATE TABLE smjerovi (
    smjerID tinyint(2) NOT NULL AUTO_INCREMENT,
    nazivSmjera VARCHAR(50),
    PRIMARY KEY(smjerID)
);


Naravno, moras povezati tabele godine i smjerovi:
Code:

CREATE TABLE godina_smjer (
    godinaID tinyint(1) NOT NULL,
    smjerID tinyint(2) NOT NULL,
    PRIMARY KEY(godinaID, smjerID)
);


Mislim da sad imas kompletan dizajn baze za svoju aplikaciju. Osim ako nemas jos neke potrebe za tu aplikaciju?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

[es] :: MySQL :: Primary key ili sta vec? | Dizajn baze za studente i ispite

[ Pregleda: 3846 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.