Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pomoc przy projekcie bazy danych
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował skowron-line 15.05.2012, 21:19:42


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował Szymciosek 16.05.2012, 07:09:15
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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"


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Szymciosek
post
Post #5





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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ć ?

Ten post edytował Szymciosek 16.05.2012, 23:11:03
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 17:16