Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zaprojektować tabele w bazie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
mal2065
Witam!

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"
  1. CREATE TABLE `accounts` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `email` varchar(128) NOT NULL DEFAULT '',
  4. `hashedPassword` varchar(40) NOT NULL DEFAULT '',
  5. `www` varchar(64) NOT NULL DEFAULT '',
  6. `public` tinyint(1) NOT NULL DEFAULT '0',
  7. `status` enum('0','1','2') NOT NULL DEFAULT '0',
  8. PRIMARY KEY (`id`)
  9. );


Dane dotyczące personaliów danego użytkownika znajdują się w osobnej tabeli "details":

  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `accountId` int(11) NOT NULL DEFAULT '0',
  4. `name` varchar(64) NOT NULL DEFAULT '',
  5. `secondName` varchar(64) NOT NULL DEFAULT '',
  6. `city` varchar(64) NOT NULL DEFAULT '',
  7. PRIMARY KEY (`id`)
  8. );
- skrócony wyciąg z tabeli; zawiera ona więcej danych, dane z tej tabeli będą rzadziej wykorzystywane, niż z "accounts"

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.
Problem w tym, że "własnych" może być różna ilość i mogą się one nazywać zgodnie z życzeniem Kasi. Dodatkowo może, ale nie musi ona dodać wszystkich podstron z listy. Tzn. Kasia może mieć dwie podstrony - [Główną] i [Historię], a Tomek może mieć cztery [Główną],[Historię],[Galerię] i [Hodowla](czyli "własna" o zmienionej nazwie).

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ą.
morawcik89
Nie wiem czy to optymalnie ale ja bym zrobił tak:
- Nową tabelę:
id | owner | menu | tresc
i tak:
- id -> wiadomo
- owner -> id lub login właściciela
- menu -> np główna, historia etc.
- tresc -> zawartość podtrony

A i można by było dodać pole link gdzie przechowywany by był link do podstrony.
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.