Pytanie dotyczy ogólnej konstrukcji bazy danych. Jak zaprojektować - tj. w jaki sposób rozdzielić dane na tabele?
Projektuję serwis pozwalający zarejestrowanym użytkownikom na posiadanie strony w domenie np. "domena.pl", czyli użytkownik kasia posiada stronę kasia.domena.pl. Dane dotyczące loginu, hasła i nazwy konta trzymam w osobnej tabeli, aby można było do nich szybko dotrzeć.
Tabela "accounts"
CREATE TABLE `accounts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(128) NOT NULL DEFAULT '', `hashedPassword` varchar(40) NOT NULL DEFAULT '', `www` varchar(64) NOT NULL DEFAULT '', `public` tinyint(1) NOT NULL DEFAULT '0', `status` enum('0','1','2') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) );
Dane dotyczące personaliów danego użytkownika znajdują się w osobnej tabeli "details":
- skrócony wyciąg z tabeli; zawiera ona więcej danych, dane z tej tabeli będą rzadziej wykorzystywane, niż z "accounts"
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `accountId` int(11) NOT NULL DEFAULT '0', `name` varchar(64) NOT NULL DEFAULT '', `secondName` varchar(64) NOT NULL DEFAULT '', `city` varchar(64) NOT NULL DEFAULT '', PRIMARY KEY (`id`) );
Załóżmy, że przykładowa Kasia zakłada stronę w serwisie. Może dodawać do niej podstrony ze zdefiniowanej listy:
- Główna,
- Historia,
- Galeria,
- Kontakt,
- Własna.
Tabela treści strony powinna być opatrzona identyfikatorem konta "accounts.id", aby można było przypisać treści strony i poniższe do konkretnego konta.
Aby to jeszcze trochę skomplikować oprócz treści Kasia może dodawać i usuwać obrazy z Galerii, a także grupować je w albumy. (czyli galeria podzielona na albumy). Istnieje możliwość modyfikacji szablonu strony, która opiera się na edycji wartości dla parametrów css arkusza stylów Kasi, czyli jeszcze trzeba przechowywać wartości atrybutów css w bazie.
Starałem się opisać sytuację w jak najjaśniejszy sposób. Czy macie pomysł, jak to ugryźć - jak podzielić te dane na tabele, aby były one szybko dostępne? Planowana ilość użytkowników (stron) kilka tysięcy i mam nadzieję na tendencję wzrostową.