Datenbanklokalisierung
Ich habe eine Reihe von Datenbanktabellen, die enthaltenname
unddescription
Spalten, die lokalisiert werden müssen. Mein erster Versuch, ein DB-Schema zu entwerfen, das dies unterstützen würde, war wie folgt:
product
-------
id
name
description
local_product
-------
id
product_id
local_name
local_description
locale_id
locale
------
id
locale
Diese Lösung erfordert jedoch eine neuelocal_
Tabelle für jede Tabelle, die enthältname
und Beschreibungsspalten, die erfordernlocalization
. Um diesen Overhead zu vermeiden, habe ich das Schema so umgestaltet, dass nur ein einziges vorhanden istlocalization
Tisch wird benötigt
product
-------
id
localization_id
localization
-------
id
local_name
local_description
locale_id
locale
------
id
locale
Hier ist ein Beispiel für die Daten, die in diesem Schema gespeichert würden, wenn zwei Tabellen (Produkt und Land) lokalisiert werden müssten:
Land
id, localization_id
-----------------------
1, 5
Produkt
id, localization_id
-----------------------
1, 2
Lokalisierung
id, local_name, local_description, locale_id
------------------------------------------------------
2, apple, a delicious fruit, 2
2, pomme, un fruit délicieux, 3
2, apfel, ein köstliches Obst, 4
5, ireland, a small country, 2
5, irlande, un petite pay, 3
Gebietsschema
id, locale
--------------
2, en
3, fr
4, de
Beachten Sie, dass der zusammengesetzte Primärschlüssel deslocalization
Tisch ist(id, locale_id)
, aber der Fremdschlüssel in derproduct
Die Tabelle bezieht sich nur auf das erste Element dieser Verbindung PK. Dies scheint eine "schlechte Sache" aus der Sicht der Normalisierung zu sein.
Gibt es eine Möglichkeit, dieses Problem zu beheben, oder gibt es ein völlig anderes Schema, das die Lokalisierung unterstützt, ohne für jede lokalisierbare Tabelle eine eigene Tabelle zu erstellen?
Aktualisieren: Eine Reihe von Befragten hat eine Lösung vorgeschlagen, bei der für jede lokalisierbare Tabelle eine eigene Tabelle erstellt werden muss. Genau dies versuche ich jedoch zu vermeiden. Das Schema, das ich oben vorgeschlagen habe, löst das Problem fast zu meiner Zufriedenheit, aber ich bin unglücklich über die Tatsache, dass daslocalization_id
Fremdschlüssel beziehen sich nur auf einen Teil des entsprechenden Primärschlüssels imlocalization
Tabelle.
Danke, Don