Zastanawiam się jak powinna dobrze być zaprojektowana tabela użytkowników. Gdy ktoś posiada bazę danych z użytkownikami rzędu 300 tysiącami rekordów to zależy na tym, aby to wszystko miało jak najmniejszą pojemność, energooszczędność. Poniżej prezentuję moją bazę danych i mam do niej kilka pytań.
W serwisie użytkownik musi aktywować konto, czy lepiej jest, aby utworzyć oddzielną tabelę o nazwie "aktywacja", która zawierałaby trzy pola 'id_uzytkownika' int(11), 'kod' varchar(6) oraz 'czy_aktywowano' tinyint(1). Odpowiednio po rejestracji użytkownika generowany byłby rekord w tabeli z odpowiednim id użytkownika, kodem oraz czy rekord był używany. Odpowiednio po otrzymaniu e-mail'a i kliknięciu przez użytkownika w wygenerowany odnośnik rekord byłby usuwany z takiej tabeli, a w tabeli 'uzytkownicy' w polu 'status' pojawiłaby się cyfra 1 (oznaczająca aktywne konto). Czy takie rozwiązanie jest dobre, a może znacie inne, lepsze? Kolejne pytanie to, czy tworzyć nowe pole w tabeli 'uzytkownicy' o nazwie 'avatar', która zawiera ścieżkę do grafiki, czy lepiej nową tabelę? Z góry dziękuję za pomoc.
CREATE TABLE IF NOT EXISTS `uzytkownicy` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(50) COLLATE utf8_polish_ci NOT NULL, `email` varchar(100) COLLATE utf8_polish_ci NOT NULL, `haslo` varchar(50) COLLATE utf8_polish_ci NOT NULL, `kod` varchar(6) COLLATE utf8_polish_ci NOT NULL, `data_rejestracji` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ostatnie_logowanie` timestamp NULL DEFAULT NULL, `rola` varchar(5) COLLATE utf8_polish_ci NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=40 ;