Есть некая таблица, которая имеет поле "название". Изначально оно на русском языке, например это может быть название книги, название компании или вообще написание какого-то слова. Список небольшой, буквально до 5000 штук.
Вопрос: каким образом можно хранить название на разных языках в БД? Я могу в таблице сделать 20 колонок для разных языков (name_ru, name_en, name_jp, name_ ...), но будет ли это правильно? Думаю нет. К тому же, а что если будет ещё какое-то поле из таблицы иметь несколько языков? Тогда ж кол-во колонок растёт безумно активно.
Мой вариант:
1 таблица - база всех слов: id, оригинал слова - на эту базу опираемся, если нет перевода по языку.
2 таблица - база возможных языков: id, название языка.
3 таблица - база переводов: id, id слова, id языка перевода, перевод.
Семён Семёнов: А чем это плохо? Стройная архитектура проекта. 20 таблиц - это мелочь, никакой нагрузки в плане перерасхода ресурсов и снижения производительности точно не будет. Дешево и сердито. Если бы языков было 20 тыс, то да, не очень удобно. А как Вы думаете организована работа словарей? Да по сути также...
dude2012: Как вы будете связывать заказ с товаром, если у вас двадцать таблиц товара. А если синхронизировать данные между таблицами? А комментарий к товару попадёт в какую таблицу? А редактирование даты поступления товара будет тоже по 20 таблицам делаться? :)))
Словари хранятся в отдельных таблицах, товары в других. Словарь : id слова, значение слова. таблица товар: id слова, дата, комментарий итд.. цена.., все что угодно.. ничего не надо синхронизировать, есть текущий язык, для него выбирается таблица и из неё нужное слово, а товары вообще в другом диалоге. если слова нет, то придется брать дефолтное (английское скорее всего), но если такая локализация кривая, то это явный косяк, все должно быть переведено иначе смотрится некарисво.