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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage