Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabellendesign mit mehrsprachigen Inhalten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellendesign mit mehrsprachigen Inhalten

    Hallo Leute,

    ich habe eine Länderliste mit allen Ländern der Erde, die momentan wie folgt aufgebaut ist:
    Code:
    CREATE TABLE IF NOT EXISTS `countries` (
      `countryID` int(3) unsigned NOT NULL auto_increment,
      `country_de` varchar(100) NOT NULL,
      `country_en` varchar(100) NOT NULL,
      `country_fr` varchar(100) NOT NULL,
      `continentID` int(2) unsigned NOT NULL,
      `capital` varchar(100) NOT NULL,
      `area` int(10) unsigned NOT NULL,
      `population` int(8) unsigned NOT NULL,
      PRIMARY KEY  (`countryID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Also müsste ich für jede Sprache eine neue Spalte einfügen um den Ländernamen in der jeweiligen Sprache zu speichern.
    Der PHP-Code dazu ist natürlich auch etwas blöd:
    PHP-Code:
    $result mysql_query("SELECT * FROM countries WHERE countryID = 1");
    $countryData mysql_fetch_assoc($result);
    $countryName $countryData['country_'.$lang->getLanguage()]; 
    Meine Frage ist jetzt, wie ihr das machen würdet. Da ja die restlichen Werte außer dem Namen immer gleich sind, macht es ja eigentlich auch keinen Sinn eine Spalte language einzufügen und für jede sprache das land einzufügen. Außerdem entspricht die Tabelle ja dann nicht mehr der 4. Normalform.

    Man könnte natürlich noch eine Tabelle countryNames erstellen und, die beiden Tabellen verknüpfen.
    Aber dann wird es meiner Meinung nach unübersichtlich, da ich das Ganze noch mit anderen Tabellen machen muss oder was haltet ihr davon?

    Ich freue mich über eure Meinungen.

    mfg
    Tobby


  • #2
    Zusätzlich zu dem Ländernamen musst du ja auch die Hauptstadt noch übersetzen (Warschau, Warsow, Warzowa). Fläche und Bevölkerungszahl bleiben in allen Ländern gleich, weshalb man vielleicht so was machen könnte:

    staaten
    id
    area
    population

    staaten_name
    id = staaten.id
    language (de/en/fr )
    name
    capital

    mit
    PHP-Code:
    SELECT 
        staaten
    .id,
        
    name,
        
    capital,
        
    population,
        
    area
    FROM 
        staaten_name
     LEFT JOIN 
        staaten 
    ON 
        staaten_name
    .id staaten.id
    WHERE 
        staaten_name
    .language 'de' 
    PHP-Code:
    if ($var != 0) {
      
    $var 0;

    Kommentar


    • #3
      Mach dich mal mit Datenbanknormalisierung vertraut.
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Danke euch beiden.

        Zitat von Chriz Beitrag anzeigen
        Mach dich mal mit Datenbanknormalisierung vertraut.
        Ich habe mich eigentlisch schon ein bisschen mit Datenbanknormalisierung beschäftigt. Wenn man nach der Datenbanknormalisierung gehen würde, müsste man entsprechend Wollas Idee aufgreifen, die ich ja selbst auch schon kurz erwähnt hatte.

        Und übrigens dir danke Wolla, hatte völlig vergessen die Hauptstädte zu übersetzen war völlig auf die Ländernamen konzentriert.

        Es ist wahrscheinlich auch die Beste Idee, nur muss ich halt noch andere Dinge in meiner Datenbank so machen (z.B. Kontinente, Regionen, ...).
        Deswegen hatte ich da eben bedenken, dass so zu tun, weil es dann immer mehr Tabellen werden.

        Aber ich denke (wenn mir kein anderer mehr widerspricht), dass es dann doch über 2 Tabellen gehen muss.

        Wenn jemand noch ne Meinung dazu ha oder sowas ähnliches auch schon mal gemacht hat, würde die mich natürlich auch interessieren.

        mfg
        Tobby

        Kommentar


        • #5
          Eigentlich sogar mehr Tabellen, wenn du die Entitäten richtig identifizierst.

          Sprache (Deutsch, Französisch, ..), Lokalisierung (Deutschland, Schweiz, Frankreich, ..), Hauptstadt, Übersetzungen der Hauptstädte, Länder, Übersetzungen der Länder
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            Zitat von Chriz Beitrag anzeigen
            Eigentlich sogar mehr Tabellen, wenn du die Entitäten richtig identifizierst.

            Sprache (Deutsch, Französisch, ..), Lokalisierung (Deutschland, Schweiz, Frankreich, ..), Hauptstadt, Übersetzungen der Hauptstädte, Länder, Übersetzungen der Länder
            Das wäre natürlich auch eine Überlegung wert, wobei ich mir die Tabelle Hauptstadt sparen kann und statt dessen in der Länder-Tabelle gleich die ID der Übersetzugn der Hauptstadt einzutragen. Aber wie schon gesagt, die Hauptstädte hätte ich ohne Wolle ganz vergessen

            Und die Lokalisierung ist ja genau genommen wieder ne Länderliste mit Sprachen-Zuweisen, aber da ein Land mehrere Sprachen haben kann, müsste ich die ja, wie du sagtest, auch wieder auslagern, ... Und das alles nur für ne Länderliste in ein paar Sprachen

            mfg
            Tobby

            Kommentar


            • #7
              Natürlich kommt es auf die Ansprüche an, ob du deine komplette Anwendung lokalisiert haben möchtest (siehe I18N, L10N), oder ob du nur ein paar feste Seitenbestandteile übersetzen möchtest.
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Naja, die Seiten selbst werden über language-files übersetzt, aber die länderübersetzungen hätte ich eben gerne mit in der db um das ganze in einer abfrage alles zu haben.

                mfg
                Tobby

                Kommentar

                Lädt...
                X