php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.08.2010, 14:03  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard Design einer DB für mehrsprachigkeit

Hallo zusammen,

ich arbeite derzeit an einem CMS-System und bin nun beim Thema mehrsprachigkeit angekommen. In der vergangenheit habe ich bereits mehrsprachigkeit implementiert, bin aber jedesmal auf Probleme gestoßen die zum teil sogar nicht mehr zu bewältigen wahren.

Nachtrag: Die erwähnte mehrsprachigkeit bezieht sich auf die vom user eingegeben Texte und nicht auf die CMS Oberfläche selbst.

Ein Modell das zu jeder sprache den text in separate, den sprachen zugeordneten, felder speichert.
Code:
+----+----------+----------+---------+---------+
| id | titel_de | titel_en | text_de | text_en |
+----+----------+----------+---------+---------+
Problem:
Bei größeren projekten ist eine erweiterung der sprachen mit enormen aufwand verbunden.

Eine weitere Idee war es die Sprachen zentral zu speichert.

lang_titel
Code:
+-----+---------+---------+
| id  | lang    | titel   |
+-----+---------+---------+
| int | varchar | varchar |
+-----+---------+---------+
lang_text
Code:
+-----+---------+------+
| id  | lang    | text |
+-----+---------+------+
| int | varchar | text |
+-----+---------+------+
irgendeine_tabelle
Code:
+-----+---------------+--------------+
| id  | lang_titel_id | lang_text_id |
+-----+---------------+--------------+
| int | int           | int          |
+-----+---------------+--------------+
Problem:
Als irgendwann eine Suchfunktion zur Debatte stand, musste ich feststellen dass ich über alle Tabellen gehen muss um z.b. herauszufinden wo der lang_text mit der id 5 verknüpft ist. Also auch Schrott!

Eine weitere Idee war es für jede Tabelle in der übersetzungstexte auftauchen, eine eigene lang tabelle einzubinden. Diese Konzept habe ich aber nie umgesetzt da es das volumen der DB verdoppel bzw. verdreifachen würde.

Somit stehe ich nun wieder da und überlege wie ich ein sprachenmodell umsetzen soll.

Am liebsten würde ich bei der zentralen speicherung bleiben und diese dann um 2/3 Felder erweitern, in dennen ich speichern kann wo der text verwendet wird.

lang_titel
Code:
+-----+---------+---------+---------+-------------+---------------+
| id  | lang    | titel   | tabelle | tabellen_id | tabellen_feld |
+-----+---------+---------+---------+-------------+---------------+
| int | varchar | varchar | varchar | int         | varchar       |
+-----+---------+---------+---------+-------------+---------------+
Somit währe das ganze beliebig um sprachen erweiterbar und sollte mein damaliges Problem mit der Suche abfangen.

Da ich aber nicht wieder auf die schnauze fallen will, dachte ich mir ich Stelle das hier mal zu Diskussion und höre mir eure Ansätze an, sofern ihr diese teilen möchtet.

Über Links die sich mit diesem Thema befassen würde ich mich natürlich auch freuen.

Schönen Gruß
Squall
Squall ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.08.2010, 14:16  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 814
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Mal sowas probiert?

Code:
tables
+-----+---------+
| tid | name    |
+-----+---------+
| int | varchar |
+-----+---------+

fields
+-----+-----+----------+
| fid | tid | name     |
+-----+-----+----------+
| int | int | varchar  |
+-----+-----+----------+

langs
+-----+---------+
| lid | name    |
+-----+---------+
| int | varchar |
+-----+---------+

tables_fields_langs_texts
+-----+-----+-----+-----+---------+
| id  | tid | fid | lid | txt     |
+-----+-----+-----+-----+---------+
| int | int | int | int | varchar |
+-----+-----+-----+-----+---------+
chorn ist offline   Mit Zitat antworten
Alt 19.08.2010, 14:22  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.720
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

Zitat:
Zitat von Squall Beitrag anzeigen
Problem:
Als irgendwann eine Suchfunktion zur Debatte stand, musste ich feststellen dass ich über alle Tabellen gehen muss um z.b. herauszufinden wo der lang_text mit der id 5 verknüpft ist. Also auch Schrott!

Und wo ist das Schrott? Mit der richtigen Indizierung sollte das doch kein Problem sein?
fab ist gerade online   Mit Zitat antworten
Alt 19.08.2010, 14:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Schon mal die Foren-Suche bemüht? Dieses Thema haben wir bereits in aller Ausführlichkeit diskutiert.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 19.08.2010, 15:02  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

@chorn
Nein, noch nicht. Die Logik dahinter müsste die selbe mit dem letzten beispiel das ich erwähnte habe sein. Nur ist bei deinem Beispiel der aufbau ordentlicher, ausser ich habe daran etwas missverstanden. Hast du damit schonmal Probleme gehabt oder etwas zu bemängeln?

@fab
Was währe eine "richtige" Indizierung?

@Dr. e.
Habe ich, leider bekomme ich unmengen von Ergebnissen, habe mir einige angeschaut doch leider sind es meistens nur Problem und Lösung Fragen. Mir geht es um die generelle Frage wie sowas aufgebaut wird.

Da das CMS das ich jetzt aufbaue eine Lösung auf dauer sein soll, ist es mir wichtig nicht in einem halben Jahr festzustellen das ich mist gebaut habe. Bin in der Firma der einzige Programmirer, kann meine Lösungen daher leider nicht mit Kollegen durchsprechen und bin eben auf solche Platformen wie hier angewiesen.
Squall ist offline   Mit Zitat antworten
Alt 19.08.2010, 15:47  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.720
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

Ich würde sagen, ausgehend von deiner bestehenden Struktur: Je ein Index auf lang sowie auf lang_text_id und lang_title_id dort wo sie als foreign keys verwendet werden, FULLTEXT Index auf lang_text.text, dann kannst du in lang_text z.B. so suchen:
Code:
SELECT irgendeine_tabelle.id FROM lang_text t
LEFT JOIN irgendeine_tabelle cms ON lang_text_id=t.id
WHERE lang='de' AND MATCH (text) AGAINST ('Suchbegriff')
fab ist gerade online   Mit Zitat antworten
Alt 19.08.2010, 15:53  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.071
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Hi,

geht dieses Thema in deine Richtung?

http://www.php.de/php-fortgeschritte...t-mit-php.html (Mehrsprachigkeit mit PHP)
__________________
HalloPHP
Asipak ist offline   Mit Zitat antworten
Alt 19.08.2010, 16:02  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

Das würde funktionieren solange es nur irgendeine_tabelle gibt. Normalerweise hat man aber irgendeine_tabelle 1 bis X z.b. 30.

Jetzt erweitern wir das SQL-Statement damit es über 30 Tabellen prüft und holen uns einen Kaffee während er sucht. Zusätzlich tut mir der der da nochmal was ändern muss leid

Nachtrag:
@Asipak
leider nicht das verlinkte Thema beschäftigt sich mit der übersetzung der Begriffe die vom Programmierer definiert werden. Mir geht es um das System um Benutzereingaben zu übersetzen. Die eingaben die im ACP getätigt werden.

Geändert von Squall (19.08.2010 um 16:12 Uhr).
Squall ist offline   Mit Zitat antworten
Alt 19.08.2010, 16:07  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.720
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

Zitat:
Zitat von Squall Beitrag anzeigen
Das würde funktionieren solange es nur irgendeine_tabelle gibt. Normalerweise hat man aber irgendeine_tabelle 1 bis X z.b. 30.
Wenn die alle mit einer einzigen Suche abgegrast werden sollen, ist vielleicht gerade da der Wurm in deinem DB-Design. Was wären das denn z.B. für Tabellen? Und in was für Relationen stehen sie zu den Texten, gehört ein Text zu mehreren "irgendwelchen" Tabellen oder nur jeweils einer?
fab ist gerade online   Mit Zitat antworten
Alt 19.08.2010, 16:21  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Warum muss man in einem CMS nach Content-content (dämlicher Begriff, ich weiss ) suchen? Ich sehe da nicht wirklich viel Sinn drin...
cycap ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Suche] Anpassen von CMS an Design kelv Gewerblich 1 27.05.2010 20:33
Login bei einem fertigen Design anwenden! DjRay Trash 8 30.12.2009 02:19
Design für PHP-Trader CrashStudios Beitragsarchiv 0 27.12.2009 22:17
Design abändern ( Include auswechseln ) geccoline Trash 1 19.10.2009 22:29
Design Pattern Harry B. Software-Design 7 02.09.2008 20:49
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Suche 4free Design für Band - Logo vorhanden JonathanArcher Trash 6 25.04.2006 16:48
Design Beitragsarchiv 26 04.06.2005 20:56
[PHP] Design Schutz für ein Gästebuch I-Spy PHP Tipps 2005 5 01.01.2005 11:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
konzept software mehrsprachig, mehrsprachigkeit php, cms mehrsprachige texte, entwurfsmuster mehrsprachigkeit, php mehrsprachigkeit, php mehrsprachig db oder text, pattern mehrsprachige datenbankeinträge, cms texte mehrsprachig eingeben, php bibliothek für mehrsprachige texte, design pattern mehrsprachig, mehrsprachigkeit db design, datenbank mehrsprachig pattern, mehrsprachigkeit php mit db, mehrsprachigkeit mit php

Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum