Ich habe eine Reihe von Datenbanktabellen, die name
und description
Spalten enthalten, die lokalisiert werden müssen. Mein erster Versuch, ein DB-Schema entwerfen, das war so etwas wie unterstützen würde:Datenbank-Lokalisierung
product
-------
id
name
description
local_product
-------
id
product_id
local_name
local_description
locale_id
locale
------
id
locale
Diese Lösung ist jedoch eine neue local_
Tabelle für jede Tabelle benötigt, die name
und Beschreibung Spalten enthält, die localization
erfordern. In einem Versuch, diesen Aufwand zu vermeiden, neu gestaltete ich das Schema, so dass nur eine einzige localization
Tabelle benötigt wird
product
-------
id
localization_id
localization
-------
id
local_name
local_description
locale_id
locale
------
id
locale
Hier ein Beispiel für die Daten ist, die in diesem Schema gespeichert werden würden, wenn es 2 Tabellen (Produkt und Land) erfordern Lokalisierung:
Land
id, localization_id
-----------------------
1, 5
Produkt
id, localization_id
-----------------------
1, 2
Lokalisierungs
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
locale
id, locale
--------------
2, en
3, fr
4, de
Hinweis, dass die Verbindung Primärschlüssel der localization
Tabelle ist (id, locale_id)
, aber die Fremdschlüssel in der product
Tabelle bezieht sich nur auf das erste Element dieser Verbindung PK. Dies scheint eine "schlechte Sache" aus dem POV der Normalisierung zu sein.
Gibt es eine Möglichkeit, dieses Problem zu beheben, oder gibt es alternativ ein vollständig anderes Schema, das Lokalisierung unterstützt, ohne eine separate Tabelle für jede lokalisierbare Tabelle zu erstellen?
Aktualisierung: Eine Anzahl von Befragten hat eine Lösung vorgeschlagen, die das Erstellen einer separaten Tabelle für jede lokalisierbare Tabelle erfordert. Genau das versuche ich jedoch zu vermeiden. Das Schema, das ich oben vorgeschlagen habe, löst das Problem fast zu meiner Zufriedenheit, aber ich bin nicht glücklich darüber, dass sich die Fremdschlüssel nur auf einen Teil des entsprechenden Primärschlüssels in der Tabelle localization
beziehen.
Danke, Don
"aber ich bin unglücklich darüber, dass sich die Fremdschlüssel localization_id nur auf einen Teil des entsprechenden Primärschlüssels in der Lokalisierungstabelle beziehen". Ich sehe das Problem nicht, es gibt eine Eins-zu-viele-Beziehung vom Produkt zur Lokalisierung, die Datenbankstruktur folgt den Anforderungen, Sie haben eine gute Lösung gefunden. –
Dies sollte auf http://dba.stackexchange.com/ –