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

Potrebna pomoc oko izrade baze

[es] :: MySQL :: Potrebna pomoc oko izrade baze

[ Pregleda: 1570 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

S-A-L-E

Član broj: 261830
Poruke: 2
*.gov.me.



Profil

icon Potrebna pomoc oko izrade baze10.06.2010. u 12:22 - pre 170 meseci
Cao ljudi, terebala bi mi pomoc pri izradi jedne baze... Da ne duzim, u pitanju je MySQL 5.1 na Windowsu 7(32bit), a baza bi se koristila za evidenciju clanova fitnes kluba. Posto nemam nekog velikog iskustva sa bazama (par procitanih tutorijala), osim pitanja koja imam, dobro bi mi doslo da me ispravite sve sto mislite da nisam napravio kako treba.

Opis baze bi bio sledeci ... Baza treba da evidentira CLANOVE, INSTRUKTORE i VRSTE_TRENINGA. Svaki "clan" ili vise njih, "treniraju" jednu ili vise "vrsta treninga", koju "vodi" jedan ili vise "instruktora". Recimo, jedna ista cura moze kod Marka da "trenira" fitnes, a potom kod Janka da "trenira" pilates ili teretanu, dok i Marko i Janko mogu da "vode" vise "vrsta treninga", recimo pilates, jogu, istezanje grcko-rimskim stilom isl... "Insturktori" su obavezni da "vode" bar jednu "vrstu treninga" da bi uopste bili "instruktori". "Clan" je obavezan da "trenira" barem jednu "vrstu treninga" da bi bio "clan". Jedino "vrsta treninga" moze da postoji ako za nju trenutno nema ni "clana" ni "instruktora" - situacija kad bi "instruktor" pilatesa bio jedini i da otkaz, nema potrebe brisati tu "vrstu treninga" vec samo zaposliti novog "instruktora" i dodijeliti mu vec postojecu "vrstu treninga" koju je vodio stari "instruktor".

Dijagram sam nacrtao ovako:




Pitanje: Ne znam da li sam ovu situaciju pravilno prepoznao kao gerund?

A ovako sam ga preveo:

CLAN (ID_CLANA, Ime, ...)
INSTRUKTOR (ID_INS, Ime, ...)
VRSTA_TRENINGA (ID_VT, Naziv, ...)
VODI (ID_VT, ID_INS, Period_Od, Period_Do)
TRENIRA(ID_CLANA, ID_VT, ID_INS,)

A ako je sve do sad ok, da vidimo kod koji mi je izgenerisao MySQL Administrator iz kojeg sam pravio tabele:

CREATE TABLE `clan` (
`ID_CLANA` int(10) unsigned NOT NULL AUTO_INCREMENT,
`PREZIME` varchar(25) NOT NULL,
`IME` varchar(20) NOT NULL,
`ADRESA` varchar(45) DEFAULT NULL,
`TELEFON` varchar(20) DEFAULT NULL,
PRIMARY KEY (`ID_CLANA`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;


Instruktor i Vrste treninga su na isti kalup


CREATE TABLE `vodi` (
`Id_Ins` int(10) unsigned NOT NULL DEFAULT '0',
`Id_Vt` int(5) unsigned NOT NULL DEFAULT '0',
`Period_Od` date NOT NULL,
`Period_Do` date NOT NULL,
PRIMARY KEY (`Id_Ins`,`Id_Vt`) USING BTREE,
KEY `FK_vodi_vrstatreninga` (`Id_Vt`) USING BTREE,
CONSTRAINT `FK_vodi_instruktor` FOREIGN KEY (`Id_Ins`) REFERENCES `instruktor` (`ID_INS`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_vodi_vrstatreninga` FOREIGN KEY (`Id_Vt`) REFERENCES `vrsta_treninga` (`ID_VT`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



Pitanja:

- Posto je ovaj primarni kljuc takozvano “slozen” tj. sastoji se iz 2 vrijednosti, da li i spoljni kljuc moze uopste da sadrzi dvije vrijednosti i ako moze, moraju li one biti referencirane na istu tabelu ili mogu da referenciraju 2 vrijednosti iz razlicitih tabela, u fazonu ‘fk_primjer’ foreign key (‘id_ins’,’id_vt’)? Kako bi taj kod isao ako moze?
- Cemu mi sluzi ovo USING BTREE, i ostale vrijednosti koje se nude u Admin-u kao sto su HASH i RTREE – za ovo me samo uputite na neku literaturu da ne smaram previse..
- Sto sad sa tabelom “TRENIRA” ?! Treba da imam kljuc koji ce se sastojati iz vrijednosti kljuca tabele “CLAN” i tabele “VODI” koji je pritom slozen? Kako to da napisem?

Hvala unaprijed!

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Potrebna pomoc oko izrade baze10.06.2010. u 12:48 - pre 170 meseci
nesto "globalno":
0. uzmi 5.5 kada je windoze u pitanju radi mnogo bolje od 5.1
1. skini neki normalan alat za dizajniranje baze ... http://wb.mysql.com/ je free, odlican i radi 1:1 sa mysql-om
2. batali notacije koje se u normalnom svetu ne koriste 30+ godina
3. kod pisi u [ code ] tagovima .. ovo plavo se na mom crnom skinu ne vidi uopste

sad vezano za tvoja pitanja:

4. mozda ti je bolje da imas (nisam bas skroz razmislio ali mi deluje bolje od tog tvog, samo malo razradi prema realnoj situaciji)
- user (user_id, user_name, user_last_name....) // korisnici - SVI - polaznici, visi polaznici, nizi instruktori, visi instruktori, velike baje...
- position (position_id, position_name) // pozicije - polaznik, ozbiljan polaznik, nizi instruktor ... cistacica, nocni cuvar ..
- user_position (user_id, position_id) // koji korisnik sta radi, ako jedan covek moze samo jednu stvar da radi onda position_id moze da ode u user tabelu ali ako jedan user moze da bude i nizi instruktor i cistacica onda ovako
- trening (trening_id, trening_name, trening_last ...) // koje treninge imas
- user_leading (user_id, trening_id) // ko vodi koji trening
- user_following(user_id, trening_id) // ko posecuje
- user_trener (polaznik_id, trener_id ) //ko kod koga uci
5. Innodb ume da koristi samo Btree tako da to nije mnogo bitno (http://dev.mysql.com/doc/refman/5.5/en/create-index.html) drugi storage engine-u umeju jos po nesto
6. foreign key - generalno "da", procitaj: http://dev.mysql.com/doc/refma...b-foreign-key-constraints.html



 
Odgovor na temu

S-A-L-E

Član broj: 261830
Poruke: 2
*.crnagora.net.



Profil

icon Re: Potrebna pomoc oko izrade baze16.06.2010. u 23:32 - pre 170 meseci
Izvinjavam se zbog male neaktivnosti na forumu, neki je povecani obim posla u firmi, pa ne stizem...

Instalirao sam workbench i extra je alat, hvala ti, a 5.5 verziju servera cu instalirati ubrzo.

Da se vratimo na dijagram... Razmisljao sam o tvom predlogu i predpostavljam da si ovako zamislio



Ono sto iz ovog pristupa ne mogu da vidim je koji clan kod kojeg trenera trenira? Znaci morao bih imati rekurziju na tabelu USER..
Mogu da imam sledecu situaciju:

Milena trenira fitness(trening) kod Petra
Milena trenira i pilates ali kod Ivana
Dusko trenira bodybilding(trening) isto kod Petra
A Maja trenira pilates kod nekog trenera, pa sad oce da predje kod Ivana jer je recimo nezadovoljna programom

Sto se tice USER_POSITION mislim da je logicki ispravan pristup, samo ne znam koliko mi je potrebno da tako razdvajam ako znam da ce jedine "pozicije" tj. uloge koje ce se evidentirati biti "clan" i "instruktor" odnosno trener ? Ostale vrste uloga nisu bitne za IS.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Potrebna pomoc oko izrade baze17.06.2010. u 11:06 - pre 170 meseci
da ... tako nekako samo ti u user following fali jedno polje (koga prati user), no kao sto rekoh nisam se mnogo udubio ...

sto se tice user+user_position+position .. to je nesto gde mozes da odradis "denormalizaciju" ako si 1000% siguran da mozes da zivis sa limitima ...
- ako nemas sigurno nista osim "trener" i "polaznik" onda mozes da izbacis tabelu "position"
- ako si siguran da nikada niko nece biti i trener i polaznik, onda ti ne terba ni user_position nego u user dodas enum "trener", "polaznik" i to je to..

to je ono sto samo ti znas - da li mozes ili ne da imas taj limit

sto se tice:
Citat:

Milena trenira fitness(trening) kod Petra
Milena trenira i pilates ali kod Ivana
Dusko trenira bodybilding(trening) isto kod Petra


ovo sve odradjuje ovaj model koji si nacrtao u wb-u

user: (milena), (petar), (ivan), (dusko)
user_position: (milena, polaznik), (petar, trener), (ivan, trener), (dusko, polaznik)
position: (polaznik), (trener)
trening: (fitnes), (pilates), (bbilding)
user_leading: (petar, bbilding), (ivan, pilates)
user_following: (milena, petar, fitnes), (milena, ivan, pilates), (dusko, petar, bbilding)

Citat:

A Maja trenira pilates kod nekog trenera, pa sad oce da predje kod Ivana jer je recimo nezadovoljna programom


ref integritet kaze da "neki" trener ne postoji .. dakle moze da bude kod petra ili kod ivana .. (ili kod zike ako ga dodas ..) ... mozes da dodas "note" kod usera .. da "zali nesto .." to stavis kao obican text .. i mozes da mu stavis neki flag "alert/nezadovoljan" ili tako nesto

ono sto ti ovakav sistem omogucava je da imas da

petar trenira pilates kod ivana !!

dakle petar je i trener i polaznik .. sad, jeste da u teretanama to oni medjusobno dogovore i rade za dz ali .. ako sutra budes hteo da vodis evidenciju ..
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.dsl.t-2.net.



+18 Profil

icon Re: Potrebna pomoc oko izrade baze18.06.2010. u 21:09 - pre 170 meseci
Naravno da mozes iz ovakve strukture saznati ko kod koga trenira.
Evo meni je ovo bilo interesantno pa sam napisao i query ;)


Tabele:

users( id, ime )
trening ( id, ime )
user_leading ( id_user, id_trening )
user_following ( id_user, id_trening )


query:

Code:

select 
    usr1.ime as clan, 
    usr2.ime as leader,
    trening.ime as trening

FROM users usr1

INNER JOIN user_following fol
ON fol.id_user = usr1.id

INNER JOIN user_leading lead ON
lead.id_trening = fol.id_trening

INNER JOIN users usr2 ON
usr2.id = lead.id_user

INNER JOIN trening ON
trening.id = lead.id_trening

WHERE usr1.id = 2 # <<< id korisnika za kojeg hoces da vidis ko ga trenira


E sad ti mozes po zelji prosirivat tabele, ali mislim da ti je ovo osnova...

Javi ako ti je sta pomoglo?!

P.S. jbg, malo sam mjesao srpski i engleski :(
 
Odgovor na temu

[es] :: MySQL :: Potrebna pomoc oko izrade baze

[ Pregleda: 1570 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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