Database
 sql >> база данни >  >> RDS >> Database

Как да накарате вашата база данни да говори много езици?

Сценарият

Вие сте собственик на онлайн магазин, намиращ се в Полша. По-голямата част от вашите клиенти са от Полша и говорят полски. Но вие искате да продавате продуктите си и в чужбина и вашите международни клиенти говорят основно английски. Така че искате вашият онлайн магазин да е наличен и на полски и английски . Очаквате също, че вашите продукти ще се продават добре във Франция, така че предвиждате, че ще трябва да подготвите френски версия на магазина също (и може би испански също, защото защо не?).

Искате вашите потребители да могат да преминават от полската версия

до английската версия и обратно.

И очевидно искате подробностите за продукта да преминат от полски към английски.

Как се прави многоезично уеб приложение?

Във вашето приложение има два типа текст. Единият е статичен данни:етикети на бутони, заглавки на таблици, графики (които често съдържат текст). Другият е дефиниран от потребителя данни, като име на продукт, цена на продукта, описание на продукта и т.н. Данните обикновено се вземат от базата данни.

Статичните данни са това, което бихте искали да запишете като низов литерал във вашия изход. Дефинираните от потребителя данни са данни, които взимате от вашата база данни.

Днес няма да говоря за статични данни. Всяка разумна уеб рамка ще се справи с интернационализацията на статичните данни. Консултирайте се с документацията на рамката на вашето уеб приложение за подробности. Потърсете ключови думи като „интернационализация“, „i18n“, „локализация“ или „преводи“.

Днес ще говоря за структурата на базата данни, която обикновено използваме тук в e-point, за да обработваме многоезични данни. В базата данни за вашия магазин вероятно имате product таблица, която съхранява информация за всички продукти, налични в магазина.




product таблицата има колони като name , description и price . Когато превеждате информацията за продукта на други езици, трябва да преведете само някои колони. Тук ще преведете само name и description , но price не се променя, когато превключите езиците.

Когато добавяме поддръжка за множество езици, добавяме нова таблица, наречена language_version , който съхранява всички езикови версии, налични в магазина. Обикновено добавяме колона, наречена code и един, наречен is_default (с подходящо ограничение:само една версия може да бъде по подразбиране).




След това разделяме product таблица на две таблици:таблица product и таблица product_lv . За всеки продукт ще има един ред в product таблица и няколко реда в product_lv маса; един ред за всяка езикова версия. Таблицата product_lv съдържа само колони, които трябва да бъдат преведени:name и description . Колоните, които са независими от езика (като price , защото продавате на една и съща цена, независимо дали клиентът ви говори английски или полски) останете в таблицата product .

Правим същото за всяка таблица, която съдържа преведени данни. Преведените данни отиват в table_lv таблица, независимите от езика данни остават в основната таблица.

Плюсове и минуси

Очевиден недостатък е, че всички операции за създаване, извличане, актуализиране или изтриване (CRUD) стават малко по-сложни. Винаги трябва да се присъедините с допълнителна таблица с езикови версии, за да получите правилното описание.

Предимството на този дизайн е, че не е нужно да променяте схемата на базата данни, когато добавяте нова езикова версия. Не казвам, че добавянето на нова езикова версия е лесно. В крайна сметка трябва да преведете ВСИЧКИ описания на продукти. Това е организационно предизвикателство, но от гледна точка на базата данни е доста лесно:много вложки.


Как проектирате своите многоезични бази данни?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проектирате система, готова за локализация

  2. Изненади и предположения при представянето:ВКЛЮЧЕТЕ NOCOUNT

  3. Обединяване на файлове с данни със Statistica, част 1

  4. Как да преброите броя на редовете в таблица в SQL

  5. Търсене в таблици в SortCL-съвместими IRI работни места