Дизайн базы данных: как хранить переведенные числа? - PullRequest
1 голос
/ 12 мая 2011

Это общий вопрос проектирования БД. Предположим, следующая таблица:

======================================================================
| product_translation_id | language_id | product_id | name   | price |
======================================================================
| 1                      | 1           | 1          | foobar | 29.99 |
----------------------------------------------------------------------
| 2                      | 2           | 1          | !@#$%^ | &*()_ |
----------------------------------------------------------------------

(Предположим, что language_id = 2 - это язык, который не основан на латинских символах и т. Д.)

Правильно ли мне хранить переведенную цену в БД? Хотя это позволяет мне правильно отображать переводы, я обеспокоен тем, что у меня возникнут проблемы, когда я захочу выполнить над ними математические операции (например, добавить 10% налог с продаж к &*()_).

Какой хороший подход к обработке числовых переводов?

1 Ответ

2 голосов
/ 12 мая 2011

Если вы можете программно преобразовать «29,99» в «& * () _», то я бы поместил цену в таблицу продуктов и оставил ее перевод в слое отображения.Если вы сохраните его дважды, у вас возникнут две очевидные проблемы:

  1. У вас возникнут проблемы с согласованностью, поскольку вы храните одну и ту же вещь в двух разных местах в двух разных форматах.
  2. Вы будете хранить числовые данные в текстовом формате.

Первая проблема вызовет у вас сильную головную боль, когда вам нужно будет обновить цены, а ваши бухгалтеры будут ненавидеть вас за то, что вы запутались вкниги.

Вторая проблема заставит вашу базу данных ненавидеть вас всякий раз, когда вам понадобятся какие-либо вычисления или сравнения внутри базы данных.Вызов CONVERT(string AS DECIMAL) снова и снова будет стоить.

Вы можете сохранить цену в числовой форме в таблице продуктов (для вычисления, сортировки и т. Д.), А затем иметь локализованный перевод в своем переводе.таблица в виде строки.Этот подход только усиливает две проблемы выше, хотя.Однако, если вам нужно, чтобы люди переводили ваши цифры, такой подход может быть необходим.Если вы застряли с этим, то вы можете смягчить свои проблемы согласованности, запустив какой-либо инструмент проверки работоспособности после каждого обновления, вы даже сможете обернуть средство проверки работоспособности в какой-то триггер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...