Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Struktura bazy danych
Forum PHP.pl > Forum > Przedszkole
mlawnik
Witam,

tworzę aplikację logującą się do dziennika elektronicznego mojej szkoły, a następnie wysyłającą w różne sposoby nowe oceny użytkownikom.
Chciałbym poprosić o odpowiedź na kilka pytań:
Oto schemat bazy danych:
  1. --
  2. -- Structure for table `grades`
  3. --
  4.  
  5. DROP TABLE IF EXISTS `grades`;
  6. CREATE TABLE IF NOT EXISTS `grades` (
  7. `userId` int(11) NOT NULL COMMENT 'unikalne Id użytkownika',
  8. `subjectId` int(11) NOT NULL COMMENT 'Id danego przedmiotu',
  9. `gradeValue` int(1) NOT NULL COMMENT 'Ocena: 1, 1+,2, 2+...,6',
  10. `gradeWeight` int(1) NOT NULL COMMENT 'Waga oceny (średnia ważona)',
  11. `gradeGroup` varchar(160) NOT NULL COMMENT 'Komentarz nauczyciela, raczej nie dłuższy niż 160 znaków',
  12. `gradeTitle` varchar(160) NOT NULL COMMENT 'Komentarz nauczyciela, raczej nie dłuższy niż 160 znaków',
  13. `gradeDate` date NOT NULL COMMENT 'Data otrzymania oceny(pobierana z dziennika)',
  14. `gradeAbbrev` varchar(3) NOT NULL COMMENT 'Skróty ocen są dwu lub trójliterowe (KK - kartkówka SPR-sprawdzian - itp.)',
  15. `gradeTrimester` tinyint(1) NOT NULL COMMENT 'Rok szkolny podzielony jest na 3 części - trymestry',
  16. `gradeShown` tinyint(1) NOT NULL COMMENT 'Czy ocena została wysłana do użytkownika.',
  17. KEY `userId` (`userId`)
  18. ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8;
  19.  
  20. --
  21. -- Structure for table `subjects`
  22. --
  23.  
  24. DROP TABLE IF EXISTS `subjects`;
  25. CREATE TABLE IF NOT EXISTS `subjects` (
  26. `subjectId` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id przedmiotu',
  27. `subjectName` varchar(30) NOT NULL COMMENT 'nazwa przedmiotu, przykłady: j. polski, robotyka gr.2,chemia, itd. ',
  28. PRIMARY KEY (`subjectId`)
  29. ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8;
  30.  
  31. --
  32. -- Structure for table `users`
  33. --
  34.  
  35. DROP TABLE IF EXISTS `users`;
  36. CREATE TABLE IF NOT EXISTS `users` (
  37. `userId` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Iunikalne id użytkownika',
  38. `userName` varchar(30) NOT NULL COMMENT 'Nazwa użytkownika w moim systemie',
  39. `userPassword` varchar(0) NOT NULL COMMENT 'Hasło użytkownika do mojego systemu',
  40. `registerUsername` varchar(30) NOT NULL COMMENT 'Nazwa użytkownika w dzienniku, w formie imie.nazwisko lub imie_nazwisko (starsze roczniki mają tak, rok temu zmieniono system nazywania)',
  41. `registerPassword` varchar(100) NOT NULL COMMENT 'Hasło do dziennika, muszę je odczytać do zalogowania',
  42. UNIQUE KEY `userId` (`userId`)
  43. ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8;
  44.  


1. Jakiego typu danych użyć do przechowywania hasła użytkownika, zakładając szyfrowanie bcryptem?
2, Jakiego typu danych użyć do przechowywania hasła do dziennika, zakładając szyfrowanie kluczem publicznym?
3. Czy w którymś miejscu mogę użyć bardziej pasującego typu danych?
4. Średnią dla przedmiotu/całościową lepiej liczyć samemu czy pobierać z dziennika?
5. Czy warto zapisywać datę pobrania oceny? Jeśli tak, to w jakim typie pola?
6. Ocenę trzymać w bazie w formie 2+ czy konwertować do 2,5? Jakiego pola użyć?
7. Jakieś sugestie?

Z góry dziękuję za odpowiedź,
mlawnik
Damonsson
1,2. Normalnie Varcharem. Ewentualnie Char z konkretną długością.
6. Zdecydowanie 2,5, 2+ nic nie mówi. Jak będziesz liczył jakąś średnią czy wykonywał jakiekolwiek operacje, to tylko z 2,5 policzysz.
3. Skoro nie będziesz używał liczb całkowitych, to zmień Int na odpowiedni typ wszędzie tam gdzie będziesz ich używać.
4. Jak Ci wygodniej, jak już masz policzone, to po co liczyć jeszcze raz.
5. Jeśli zastanawiasz się czy warto, to dodaj, może kiedyś się przyda, a jedna kolumna więcej w bazie to nie problem. typ np.: Datetime.
7. Możesz sobie dodać index dla ocen, może się kiedyś przydać.
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.