Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [projekt bazy] wersje językowe, jak optymalnie zaprojektować
shpyo
post
Post #1





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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;
Go to the top of the page
+Quote Post
shpyo
post
Post #3





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

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


sprytne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dzięki, teraz już wiem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:46