Bientôt, je vais travailler sur le catalogue (php + mysql) qui aura un support de contenu multilingue. Et maintenant, je considère la meilleure approche pour concevoir la structure de la base de données. En ce moment, je vois 3 façons de manutention multilang:Multilang catalogue (avec des champs personnalisés) Conception de la structure de la base de données
1) Avoir des tables séparées pour chaque donnée langue spécifique, à savoir schematicly ça va ressembler à ceci:
- Il y aura une table Main_Content_Items, stocker des données de base qui ne peuvent pas être traduites comme ID, creation_date, hits, votes etc. - il n'y en aura qu'une et fera référence à toutes les langues.
Et voici les tableaux qui seront dublicated pour chaque langue:
- tableau Common_Data_LANG (exemple: common_data_en_us) (stockage commun/champs « statiques » qui peuvent être traduits, mais sont présents pour eny catalogue item: title, desc et ainsi de suite ...)
- Table Extra_Fields_Data_LANG (en stockant des champs supplémentaires qui peuvent être traduits, mais qui peuvent être différents pour des groupes d'items personnalisés, comme: | id | item_id | field_type | valeur | ...) Ensuite, sur la demande d'éléments, nous allons regarder dans la table en fonction de l'utilisateur/langue par défaut et joindre des données traduisibles avec main_content table.
Plus:
- nous pouvons mettre à jour les données « principales » (c.-à-coups, voix ...) qui sont mis à jour le plus souvent avec une seule requête
- on n'a pas besoin o données doublon 4x ou plus si nous avons 4 langues ou plus en comparaison avec la structure en utilisant seulement une table avec le champ 'lang'. Alors requêtes Mysql prendrait moins de temps pour passer par 100000 (par exemple) enregistre catalogue plutôt que 400000 ou plus
Moins:
- tables pour chaque langue
2) Utilisation du champ 'lang' dans les tables de contenu:
- Table Main_Content_Items (stockage de données de base qui ne peut pas être traduit comme ID, creation_date, frappe, vote ainsi de suite ...)
- Common_Data Table (stockage commun/champs « statiques » qui peuvent être traduits, mais sont présents pour eny item du catalogue: | id | item_id | lang | titre | desc | et ainsi de suite ...)
- Table Extra_Fields_Data (en stockant des données de champs supplémentaires qui peuvent être traduites, mais qui peuvent être différentes pour les groupes d'éléments personnalisés, par exemple: | id | item_id | lang | field_type | value | ... Nous allons donc joindre common_data et extra_fields à main_content_items en fonction du champ 'lang'.
Plus:
- nous pouvons mettre à jour "principaux" données (visites, votes ...) qui sont mis à jour le plus souvent avec une seule requête
- nous seulement 3 tables pour les données de contenu
Moins:
- nous avons table custom_data et extra_fields esprit rempli h données pour toutes les langues, de sorte que son temps de X plus gros et les requêtes fonctionnent plus lentement
3) Identique au mode 2, mais avec table Main_Content_Items fusionné avec Common_Data, qui a le champ « lang »:
Plus:
- ...?
Moins:
- nous avons besoin de mettre à jour la mise à jour "principales" données (visites, votes ...) qui sont mis à jour le plus souvent avec pour toutes les langues
- nous avons table custom_data et extra_fields rempli avec des données pour toutes les langues, de sorte que son temps X plus grand et les requêtes tournent plus lentement
Sera heureux d'entendre des suggestions sur "quoi de mieux" et "pourquoi"? Ou y a-t-il de meilleurs moyens?
Merci à l'avance ...
Merci pour la réponse, DrColossos. J'ai fait une erreur en décrivant une méthode, alors j'ai un aperçu de VARIANT FIXE. Eh bien, l'objectif principal (que j'aime vraiment) à propos de la première méthode est que nous ne mélangeons pas les différentes langues, en particulier en considérant que la table extra_fields peut avoir beaucoup d'enregistrements liés à un item dans la table Main_Content_Items Si nous avons 1000 éléments dans la table Main_Content_Items et 4 langs, extra_fields aura 4 * 1000 * 5 (ou 10 ou plus ...) enregistrements. C'est pourquoi je considère que cette méthode est plus performante que les deux autres ... – Nickolay
P.S.A propos de "extra_fields": il est utilisé comme table universelle pour tout type de champ supplémentaire (stocké comme | id | item_id | field_type | field_value (champ de texte simple) |), car il peut y avoir des champs spécifiques t (comme les paramètres du carnet et de l'appareil photo dans les shop-scripts). Nous ne pouvons donc abolir que la table "common_data" en déplaçant les champs de ses champs vers "extra_fields", mais je ne veux pas le faire car common_data contient plusieurs champs, alors que extra_fields n'en contient qu'un (voir structure) , donc je pense qu'il est préférable d'avoir 2 tables séparées pour cela. – Nickolay
Voir ma (plutôt courte) éditer. – DrColossos