Je sais que ce n'est pas exactement normalisé, mais en apportant toutes les données localisées dans mon l'application dans juste quelques tables m'aidera beaucoup.Comment puis-je concevoir une table de contenu localisée qui peut se joindre à un certain nombre de tables différentes (la relation doit être générique ...)
Je dois être capable de lier une table générique à une table LocalisedContent qui contiendra des lignes différentes pour chacune des paires clé-valeur localisées de la table générique qui lui est associée ... Je suppose que vous pourriez dire que ça va être une relation un-à-plusieurs.
Le problème que j'ai trouvé est que je ne suis pas sûr de savoir comment mieux ... ce modèle que je peux penser à deux voies et je ne suis pas sûr que l'on est le mieux:
Ma première option est:
AnExampleOfAGenericTable
------------
AnExampleOfAGenericTableID
...other non-localised data...
AnotherGenericTable
------------
AnotherGenericTableID
...other non-localised data...
LocalisedContent
----------------
LocalisedContentID
genericTablePKName
GenericTableID
LanguageID
field
content
Dans ce qui précède, il serait possible de sortir un contenu localisé pour une table générique avec une requête SQL comme:
SELECT AnExampleOfAGenericTableID, field, content
FROM AnExampleOfAGenericTable LEFT JOIN LocalisedContent
ON AnExampleOfAGenericTable.AnExampleOfAGenericTableID =
LocalisedContent.GenericTableID
WHERE genericTablePKName = 'AnExampleOfAGenericTableID'
Ou:
SELECT AnotherGenericTableID, field, content
FROM AnotherGenericTable LEFT JOIN LocalisedContent
ON AnotherGenericTable.AnotherGenericTableID = LocalisedContent.GenericTableID
WHERE genericTablePKName = 'AnotherGenericTableID'
La deuxième option semble être, quelque chose comme:
AnExampleOfAGenericTable
------------
AnExampleOfAGenericTableID
...other non-localised data...
localisedGroupID
AnotherGenericTable
------------
AnotherGenericTableID
...other non-localised data...
localisedGroupID
LocalisedContent
----------------
LocalisedContentID
localisedGroupID
LanguageID
field
content
Et puis je pourrais utiliser une requête SQL comme:
SELECT AnExampleOfAGenericTableID, field, content
FROM AnExampleOfAGenericTable LEFT JOIN LocalisedContent
ON AnExampleOfAGenericTable.localisedGroupID = LocalisedContent.localisedGroupID;
Ou:
SELECT AnotherGenericTableID, field, content
FROM AnotherGenericTable LEFT JOIN LocalisedContent
ON AnotherGenericTable.localisedGroupID = LocalisedContent.localisedGroupID;
La deuxième L'option me semble plus concise, mais elle me demande de rejoindre deux FK qui me paraissent un peu étranges. Cela nécessite également beaucoup de colonnes 'localisedGroupID' supplémentaires. En fin de compte, les deux exemples que j'ai donnés peuvent être faux et je n'ai pas l'expertise nécessaire pour connaître la meilleure solution à ce problème. (Avant de signaler que ceci n'est pas entièrement normalisé, j'ai déjà dit que je ne veux pas des centaines de tables de données localisées différentes pour chacune de mes tables ... Je veux une certaine centralisation de la localisation même si elle va me perdre un peu d'intégrité référentielle.)
Des idées?
Désolé pour le délai imparti. Très bonne réponse; m'a donné quelque chose à lire! :) – olive