Buna,
Am ca proiect crearea unei baze de date pentru un cinematograf. Unul dintre tabele trebuie sa fie program, care trebuie sa contina urmatorul tabel:
ProgramCinema ( ziua, luna, an, ora, film )
Intrebarea mea este: in aceasta relatie care ar putea fi cheie primara ? In cazul in care as alege cheia primara ziua, se poate seta un auto increment pentru campul ziua care sa creasca de la 1 pana la 30 ? in timp ce pentru campurile luna si an sa setez valori fixe.
Imi puteti da va rog o sugestie ?
Cheia primara in relatia
Moderatori: Zamolxe, Moderatori
-
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: Cheia primara in relatia
PK-urile sunt folosite sa distinga (deci sa identifice) intre randurile unui table.
PK trebuie sa fie unic in acel tabel. Or nu poti PK 1-30, wtf? Cum distingi intre doua programe din aceeasi zi? Oricum, engine-ul mysql nu te-ar lasa.
Cel mai bine faci o noua coloana - "program_id" - PK cu auto increment. Acum poti distinge intre programe, fara sa intervii in domeniul aplicatiei tale.
De ex., unii pun ca PK email-ul userilor. E valid, fiindca email-ul e unic, presupunand un tabel cu userii aplicatiei. Dar e urat, fiindca PK va fi string. Comparatiile cu string sunt greoaie etc.
Nu mai spun ca trebuie sa duplice acele email-uri in foreign key-uri.
Regula de baza: fa cate coloane vrei, dar prima pastreaz-o pt un PK de tip int/bigint. Joinurile si alte artifcii la nivel de mysql se vor folosi de acel PK, iar aplicatia ta php de celelalte coloane.
PS: Ce ai tu acolo e "one-to-many" - mai multe programe pt o singura cinema. In cazul asta se procedeaza asa:
- tabel "cinema": cinema_id (PK, AI, int 10), name (varchar, 255), address, tel
- tabel "programe": program_id (PK, AI, int 10), cinema_id (foreign key catre "cinema.cinema_id", int 10), movie, day, month, year
PK trebuie sa fie unic in acel tabel. Or nu poti PK 1-30, wtf? Cum distingi intre doua programe din aceeasi zi? Oricum, engine-ul mysql nu te-ar lasa.
Cel mai bine faci o noua coloana - "program_id" - PK cu auto increment. Acum poti distinge intre programe, fara sa intervii in domeniul aplicatiei tale.
De ex., unii pun ca PK email-ul userilor. E valid, fiindca email-ul e unic, presupunand un tabel cu userii aplicatiei. Dar e urat, fiindca PK va fi string. Comparatiile cu string sunt greoaie etc.
Nu mai spun ca trebuie sa duplice acele email-uri in foreign key-uri.
Regula de baza: fa cate coloane vrei, dar prima pastreaz-o pt un PK de tip int/bigint. Joinurile si alte artifcii la nivel de mysql se vor folosi de acel PK, iar aplicatia ta php de celelalte coloane.
PS: Ce ai tu acolo e "one-to-many" - mai multe programe pt o singura cinema. In cazul asta se procedeaza asa:
- tabel "cinema": cinema_id (PK, AI, int 10), name (varchar, 255), address, tel
- tabel "programe": program_id (PK, AI, int 10), cinema_id (foreign key catre "cinema.cinema_id", int 10), movie, day, month, year
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
Re: Cheia primara in relatia
Multumesc pentru raspuns.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 8 vizitatori