Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc przy projekcie bazy danych
Forum PHP.pl > Forum > Bazy danych
Szymciosek
Tak dla celów naukowych chciałem zrobić sobie powiedzmy dzienniczek ocen, który będzie miał możliwość dodawania/usuwania semestrów, przedmiotów, ocen.

Próbowałem pomyśleć nad tabelami...

Kod
+--+--------+---------------------------------+
|ID|Semestr |Przedmioty                       |
+--+--------+---------------------------------+
|1 |Pierwszy|Polski, Matematyka, Geografia    |
|2 |Drugi   |Matematyka, Historia             |
|3 |Inny    |Geografia, Wok, Wos              |
+--+--------+---------------------------------+

+--+---------+-----+----------+
|ID|Przedmiot|Ocena|Opis oceny|
+--+---------+-----+----------+
|1 |Polski   |2    |Spr       |
|2 |Polski   |5    |Akt       |
+--+---------+-----+----------+


Ale teraz pytania:
1. Czy taka tabela ma sens ? Niby jest wszystko co wymieniłem wyżej, ale nie jestem tego pewien.
2. Jakieś relacje też muszą zajść między tymi tabelami, a tego nie ogarnąłem jeszcze zbytnio... dlatego prosiłbym o łopatologiczne wyjaśnienie tego, najlepiej na przykładach.
skowron-line
Z tymi oceniami to nie bardzo rozumiem. Ale jeżeli chodzi o relacje semestr - przedmiot to ja bym to tak rozwiązał.
  1. CREATE TABLE przedmioty
  2. (
  3. id_przedmiotu smallint UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  4. nazwa varchar(100)
  5. );
  6.  
  7. CREATE TABLE semestr
  8. (
  9. id_semestr smallint UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  10. start date,
  11. stop date
  12. );
  13.  
  14. CREATE TABLE semestr_przedmiot
  15. (
  16. id_przedmiot_semestr smallint UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  17. przedmiot_id smallint UNSIGNED,
  18. semestr_id smallint UNSIGNED
  19. );


Kluczowa jest tutaj tabela semestr_przedmiot w której będziesz miał informacje jakie przedmioty w jakim semestrze będą występować. Do ocen potzebna będzie osobna tabela powiązaniem do tabeli semestr_przedmiot i tabela studentów
Szymciosek
Wiesz może czy gdzieś w internecie znajdę przykłady takie właśnie z relacjami ? Żeby były pokazane tabele, dlaczego taka relacja, a nie inna itd... Jak już pisałem, nie do końca to zrozumiałem.

Skąd PHP wie, że właśnie ostatnia tabela jest połączeniem dwóch poprzednich ? Bo chyba o takie coś tutaj chodzi ?
skowron-line
Cytat(Szymciosek @ 15.05.2012, 20:39:46 ) *
Skąd PHP wie, że właśnie ostatnia tabela jest połączeniem dwóch poprzednich ? Bo chyba o takie coś tutaj chodzi ?

To nie skąd PHP wie, tylko Mysql a dokładnie "zapytanie" które ty definujesz poprzez złączenia tabel w WHERE i JOIN

http://www.codinghorror.com/blog/2007/10/a...-sql-joins.html joiny i różnice między nimi na diagamach Vanna
http://dev.mysql.com/doc/refman/5.5/en/select.html i manual Mysql z którego dowiesz się jak pisać "zapytania"
Szymciosek
Mam stworzone teraz 3 tabele:

Przedmioty -> ID, nazwa
Oceny -> ID, ocena
Users -> ID, imie, nazwisko, przedmiot_id, ocena_id

I teraz pytanie czy takie coś jest prawidłowo ? Co prawda po takim zapytaniu jak
Kod
SELECT users.id, imie, nazwisko, oceny.ocena, przedmioty.nazwa FROM users INNER JOIN oceny ON users.ocena_id = oceny.id INNER JOIN przedmioty ON przedmiot_id = przedmioty.id;


otrzymuję:

Kod
+--+------+----------+------+------+
|ID|imie   |nazwisko|ocena|nazwa|
+--+------+----------+------+------+
|1  |Marek|Kowalski |3       |Polski|
+--+-------+----------+-----+-------+


Przy większej ilości wpisów przy tym zapytaniu ID segreguje (a właśnie nie segreguje) w ten sposób: 1,3,7,2,4,6,5... Skąd taki wynik ?

A drugą sprawą jest edycja Przedmiotów... Bo teraz mam przypisane po ID, a ID jest tworzone automatycznie i cały czas do góry, co jeśli usunę np jeden przedmiot i będę miał lukę w liczbach ID ? Jak to później połączyć ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.