Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] jaka struktura bazy danych?
wiciu010
post 29.10.2007, 22:17:21
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

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


Chcę zrobić stronkę gdzie każdy użytkownik może się zarejestrować podając login i hasło. Wszystko będzie zapisywane do bazy MySQL do tabeli "users", gdzie będą pola id (kolejne liczby całkowite dla każdego użytkownika) login, hasło.
Każdy użytkownik będzie mógł w swoim profilu podawać takie dane jak:
-tytuł książki
-data przeczytania (np. 29.10.2007)
-gdzie kupiona

Czy te dane również zapisywać do tabeli users czy może jakiejś innej? Każdy użytkownik może podać po kilka tytułów itd. Jak powinna wyglądać struktura takiej bazy danych?
Go to the top of the page
+Quote Post
Chrom
post 29.10.2007, 22:29:17
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 17
Dołączył: 28.12.2005
Skąd: Warszawa

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


absolutnie do innej rozbij na tabele np. users oraz przeczytane

Ten post edytował Chrom 29.10.2007, 22:33:12
Go to the top of the page
+Quote Post
wiciu010
post 29.10.2007, 22:44:08
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

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


OK. Czyli mam dwie tabele users, z danymi z rejestracji i "przeczytane" z pozostałymi danymi, ale jak je powiązać ze sobą? Tzn. że zalogowany użytkownik będzie dodawał kolejne dane i odczytywał je?
Go to the top of the page
+Quote Post
Chrom
post 29.10.2007, 22:58:45
Post #4





Grupa: Zarejestrowani
Postów: 240
Pomógł: 17
Dołączył: 28.12.2005
Skąd: Warszawa

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


pewnie koledzy cos poprawią ale ja bym zrobił np tak
  1. CREATE TABLE `przeczytane` (
  2. `id_przeczytane` int(8) NOT NULL,
  3. `login` varchar(25) NOT NULL,
  4. `tytul` varchar(30) NOT NULL,
  5. `data` varchar(15) NOT NULL,
  6. `gdzie` varchar(20) NOT NULL
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  8.  
  9. CREATE TABLE `users` (
  10. `id` int(8) NOT NULL AUTO_INCREMENT,
  11. `login` varchar(25) NOT NULL,
  12. `haslo` varchar(32) NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;


Ten post edytował Chrom 29.10.2007, 22:59:16
Go to the top of the page
+Quote Post
prgTW
post 29.10.2007, 23:29:05
Post #5





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

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


  1. CREATE TABLE `przeczytane` (
  2. `id_przeczytane` int(8) UNSIGNED NOT NULL,
  3. `id_usera` int(8) UNSIGNED NOT NULL,
  4. `tytul` varchar(30) NOT NULL,
  5. `data` int(8) UNSIGNED NOT NULL,
  6. `gdzie` varchar(20) NOT NULL,
  7.  
  8. PRIMARY KEY (`id_przeczytane`)
  9. )
  10.  
  11. CREATE TABLE `users` (
  12. `id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  13. `login` varchar(25) NOT NULL,
  14. `haslo` varchar(40) NOT NULL,
  15.  
  16. PRIMARY KEY (`id`),
  17. UNIQUE KEY (`login`)
  18. )


przeczytane:
- id_usera (bo zlaczenia robi sie przez klucze w tabelach!
- data = int(8) - latwiej do wykorzystania z php (jako date ustawiasz wynik funkcji time(), formatowaniem zajmue sie html a nie baza)

- users:
- haslo = varchar(40) a nie varchar(32) - silniejsze hashowanie: sha1 zamiast md5, w bazie trzymaj hasla w formie hashowanej, a nie hasla uzytkownikow! przy logowaniu hashuj haslo ktore wpisze uzytkownik i porownuj z hashami w bazie.

dla szybkosci dzialania dodaj indeksy na id_usera (tabela przeczytane) i haslo (tabela userzy) - ale to tylko przy duzej liczbie wierszy w jednej lub drugiej tabeli, bo inaczej nie ma sensu zabierac miejsca na dysku, bo selecty i tak szybko sie beda wykonywac.

Ten post edytował prgTW 29.10.2007, 23:29:41


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:05