[SQL] - Gestion multilingue

[ul]
[li]Bonjour, voilà j’ai un petit problème avec ma base : [/li]
J’ai une table CONTINENTS avec les champs suivants :
[li]ID_CONTINENT (clé primaire) [/li][li]NOM[/li][/ul] Une table PAYS avec les champs suivants

[ul]
[li]ID_PAYS (clé primaire) [/li][li]NOM [/li][li]ID_CONTINENT (clé étrangère)[/li][/ul]
Je souhaiterai pouvoir gérer les langues mais je ne sais pas trop comment faire
Je pensais à un truc comme çà (enfin on fait on me l’a soufflé)

table CONTINENTS :
[ul]
[li]ID_CONTINENT (clé primaire) [/li][li]NOM[/li][/ul] table LANG_CONTINENT qui contient les noms des continents en fonction des langues
[ul]
[li]ID_LANG_CONTINENT (clé priamaire) [/li][li]ID_CONTINENT (clé étrangère) [/li][li]ID_LANGUE (clé étrangère) [/li][li]NOM_LOC_CONTINENT (Nom du continent dans la langue souahaitée)[/li][/ul] table PAYS :
[ul]
[li]ID_PAYS (clé primaire) [/li][li]NOM[/li][/ul] table LANG_PAYS :
[ul]
[li]ID_LANG_PAYS (clé primaire) [/li][li]ID_PAYS (Clé étrangère) [/li][li]ID_LANGUE (Clé étrangère) [/li][li]NOM_LANG_PAYS (Nom du pays dans la langue souhaitée.)*[/li][/ul] table LANGUE
[ul]
[li]ID_LANGUE (clé primaire) [/li][li]LABEL_LANGUE[/li][/ul]

La solution qu’on t’as filé me parait bien, tu lui reproches quoi ?
Mais je conserverais la clef ID_CONTINENT dans la table PAYS, histoire de sortir tous les pays d’un continent dans la langue que tu veux.

EzecKiel a dit: [ul]

[li]ID_LANG_CONTINENT (clé priamaire) [/li][li]ID_CONTINENT (clé étrangère) [/li][li]ID_LANGUE (clé étrangère) [/li][li]NOM_LOC_CONTINENT (Nom du continent dans la langue souahaitée)[/li][/ul]table LANG_PAYS :
[ul]
[li]ID_LANG_PAYS (clé primaire) [/li][li]ID_PAYS (Clé étrangère) [/li][li]ID_LANGUE (Clé étrangère) [/li][li]NOM_LANG_PAYS (Nom du pays dans la langue souhaitée.)[/li][/ul] [ul]
[/ul][/quote]
A quoi elle sert la redondance de “nom” dans la table “continent”, alors ?
A quoi elle sert ta clé primaire alors que le couple id_pays / id_langue est unique ?

M’est avis, garde une table continent_pays qui contient en foreign key ton id_continent et ton id_pays, avec le couple unique.

Après, récupérer un nom recherché est pas dûr :
SELECT idpays, nom FROM lang_pays WHERE nom LIKE ‘%TuguduLand%’

Pareil qu’Ainu, il y a des choses inutiles dans ton schema.

Ta clé ID_LANG_PAYS peut tres bien etre remplacé par les 2 clés Primaires etangeres. A la rigueur pour ta pas saouler, tu peux faire des

SELECT * from LANG_PAYS where ID_PAYS|ID_LANGUE=Quote(Variable1+"|"+Variable2)

ou meme plus simple :

SELECT * from LANG_PAYS where ID_PAYS=Variable1 and ID_LANGUE=Variable2

et c’est unique selon ta definition de table. Donc tu peux virer ID_LANG_PAYS et ID_LANG_CONTINENT.

Je suis entrain de me dire que tu peux carrement virer la table LANG_CONTINENT. Elle sert à rien. Vu que tu as un table Continent->Pays et une table Pays->Langue. C’est facile de faire Continent->Langue. Ta table LANG_CONTINENT c’est simplement le resultat de

SELECT CO.ID_CONTINENT, LA.ID_LANGUE
FROM CONTINENTS CO, LANG_PAYS LA, PAYS PA
WHERE CO.ID_PAYS=PA.ID_PAYS
AND PA.ID_PAYS=LA.ID_PAYS

Sauf si tu as besoin de stocker le nom du continent dans chaque langue…