Я знаю, что это не совсем нормализовано, но перенос всех локализованных данных всего моего приложения в несколько таблиц мне очень поможет.
Я должен быть в состоянии связать некоторые общиетаблица к таблице LocalisedContent, которая будет содержать разные строки для каждой из локализованных пар ключ-значение общей таблицы, присоединенной к ней ... Я думаю, вы могли бы сказать, что это будет отношение один ко многим.
Проблема, которую я обнаружил, заключается в том, что я не уверен, как лучше всего смоделировать это ... Я могу придумать два пути, и я не уверен, какой из них лучше:
Мой первый вариант:
AnExampleOfAGenericTable
------------
AnExampleOfAGenericTableID
...other non-localised data...
AnotherGenericTable
------------
AnotherGenericTableID
...other non-localised data...
LocalisedContent
----------------
LocalisedContentID
genericTablePKName
GenericTableID
LanguageID
field
content
Выше можно было бы получить локализованное содержимое для универсальной таблицы с помощью SQL-запроса, например:
SELECT AnExampleOfAGenericTableID, field, content
FROM AnExampleOfAGenericTable LEFT JOIN LocalisedContent
ON AnExampleOfAGenericTable.AnExampleOfAGenericTableID =
LocalisedContent.GenericTableID
WHERE genericTablePKName = 'AnExampleOfAGenericTableID'
Или:
SELECT AnotherGenericTableID, field, content
FROM AnotherGenericTable LEFT JOIN LocalisedContent
ON AnotherGenericTable.AnotherGenericTableID = LocalisedContent.GenericTableID
WHERE genericTablePKName = 'AnotherGenericTableID'
Второй вариант выглядит примерно так:
AnExampleOfAGenericTable
------------
AnExampleOfAGenericTableID
...other non-localised data...
localisedGroupID
AnotherGenericTable
------------
AnotherGenericTableID
...other non-localised data...
localisedGroupID
LocalisedContent
----------------
LocalisedContentID
localisedGroupID
LanguageID
field
content
И тогда я мог бы использовать запрос SQL, например:
SELECT AnExampleOfAGenericTableID, field, content
FROM AnExampleOfAGenericTable LEFT JOIN LocalisedContent
ON AnExampleOfAGenericTable.localisedGroupID = LocalisedContent.localisedGroupID;
Или:
SELECT AnotherGenericTableID, field, content
FROM AnotherGenericTable LEFT JOIN LocalisedContent
ON AnotherGenericTable.localisedGroupID = LocalisedContent.localisedGroupID;
Второй вариант мне кажется более лаконичным, но он требует, чтобы я присоединился к двум ФКчто кажется немного странным.Это также требует большого количества дополнительных столбцов «localisedGroupID».
В конечном итоге оба приведенных мной примера могут быть ошибочными, и у меня нет опыта, чтобы узнать лучшее решение для этого.(Прежде чем вы отметите, что это не полностью нормализовано, я уже сказал, что не хочу, чтобы сотни разных локализованных таблиц данных для каждой из моих таблиц ... Я действительно хочу некоторой степени централизации в локализации, даже если онапотеряет меня немного ссылочной целостности.)
Идеи?