Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [projekt bazy] wersje językowe
Forum PHP.pl > Forum > Bazy danych
shpyo
Witam,
chciałem się Was poradzić, w jaki sposób (najbardziej optymalny) można zaprojektować bazę z wersjami językowymi. Na dniach będę pisał serwis, gdzie będę musiał coś takiego zaprojektować.
Pewnie to zależy od projektu i struktury klas czy modułów więc przedstawię mój punkt widzenia.

Każdy moduł na mojej stronie (newsy, działy, sondy czy księga gości itp) to u mnie oddzielna klasa. W każdej tej klasie mam pole prywatne $sqlTable (lub więcej podobnych pól gdy trzeba tworzyc relacje między bazami), które przechowuje tabelę z danymi.

Wpadłem na pomysł, gdzie przy przełączaniu języka ustawiana będzie sesja i na podstawie jej będę zmieniał tabele np.
język angielki - $_SESSION['lang'] = 'en' -> tabela prefix_TABELA_LANG

Teraz pytanie: czy takie rozwiązanie jest dobre (tworzenie oddzielnych baz na poszczególne wersje językowe)?
Zastanawiałem się jeszcze nad tworzeniem dodatkowych pól w bazie na tekst dla wersji językowej.

A może ktoś ma jeszcze lepsze rozwiązanie?
mike
Mnożenie tabel w zależności od wersji językowych to błąd.
Tracisz elastycznść, bo jak przyjdzie Ci dodać 3 języki to bedziesz miał kilka tabel, które przechowują dokładnie to samo, ale inaczej się nazywają.
Jest to zabużenie relacyjności i normalizacji w bazie danych.

Pomijam już to że czasem możesz chcieć wyciągnąć na przykład newsy, nie uzależniając ich od języka. Wtedy z ilu tabel wyciągniesz? Z dwóch, trzech, .... no właśnie. Nie wiadomoz ilu.

Najlepszym rozwiązaniem jest tabela z językami, na przykład:
languages
id | shortCode | longCode | name

A potem w każdej tebali, która ma być wersjonowana dajesz klucz obcy do tabeli languages, na przykład:
articles
id | languageId | title | content | ...

Wtedy przeskakiwanie między językami jest banalne. Korzystasz nadal z tych samych tabel, zapytań.

  1. SELECT * FROM articles WHERE languageId = 1;
shpyo
sprytne smile.gif
Dzięki, teraz już wiem.
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.