Я создаю многовалютное приложение.
Рассмотрим таблицу сообщений со следующими полями:
id, country_id, price
Каждый раз, когда я выбираю поле цены, мне также нужна валюта, чтобы отобразить ее на интерфейсе. Поэтому мне нужно сделать два соединения (или запустить 3 запроса с laravel with
) каждый раз, когда я пытаюсь получить сообщение, чтобы получить валюту.
post->country->currency
Чтобы решить эту проблему, я мог бы просто сохранить валюту в таблице сообщений. Это, однако, идет вразрез с нормативными положениями. Он также дублирует данные по таблицам.
Должен ли я денормализовать данные и хранить валюту в таблице сообщений?
Это зависит от.
Если price
будет заморожена во время продажи? (Я так думаю.) Не нормализуйтесь.
Или вам нужно конвертировать цену на основе текущего обменного курса? Нормализуйте.
Кроме того, country_id
не является надлежащим ключом для currency
. Значение currency_id
должно быть определено в момент публикации; сохраните country_id
если вам это нужно.
Затем, когда валюта девальвирована или страна переходит к евро, или..., схема не мешает вам.
Кроме того, бывают случаи, когда туристическая зона вполне готова брать наличные деньги в разных валютах. Многие журналы в США перечисляют цену как в долларах США, так и в канадских долларах.
Нормировка:
SMALLINT UNSIGNED
допускающим до SMALLINT UNSIGNED
различных значений. Внимание: если строка коротка, например, стандартные 2-буквенные country_codes, не беспокойтесь о нормализации. 5-символьный zipcode вряд ли стоит сжиматься до 2-байтового маленького шрифта. коды валют имеют хороший стандарт (доллары США, EUR - только 3 буквы), слишком короткие, чтобы нормализовать нормализацию.Итак, нормализуйте, если это применимо. По моему опыту, "цена" не относится ни к одной из категорий. А также