我应该什么时候在mysql中反规范化数据?

m1m5dgzv  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(412)

我正在构建一个多货币应用程序。
考虑一个包含以下字段的post表:

id, country_id, price

每次获取price字段时,我还需要在前端显示货币。因此,我需要做两个连接(或者用laravel运行3个查询) with )每次我试着去邮局只是为了拿到钱。

post->country->currency

为了解决这个问题,我可以将货币存储在post表中。然而,这与正常化准则背道而驰。它还跨表复制数据。
我应该反规范化数据并将货币存储在post表中吗?

xa9qqrwz

xa9qqrwz1#

那要看情况了。
应该 price 销售时被冻结(我想是的。)不要正常化。
或者你需要根据当前汇率换算价格吗?一定要正常化。
也, country_id 不是合适的钥匙 currency . 这个 currency_id 应在发布时确定;保持平衡 country_id 如果你也需要的话。
然后,当一种货币贬值,或者一个国家转向欧元,或者……,模式不会妨碍你。
此外,也有一些情况下,旅游区是相当愿意采取现金在不同的货币。美国的许多杂志都以美元和加拿大元标价。
规范化目的:
一些“名字”或“地址”将来可能会改变。所以把它规范化到另一个表中。否则,当发生更改时,您需要在多个表中的多个行中执行更改。
正在节省空间。。。您有一个频繁出现的字符串,但是(比方说)它不太可能改变。通过“规范化”(错误的术语,但实现类似),可以将长字符串只放在一个位置。它被一个2字节的 SMALLINT UNSIGNED 允许多达65k个不同值。注意:如果字符串很短,比如标准的两个字母的国家代码,不要麻烦规范化。5个字符的zipcode几乎不值得缩减为2字节的smallint。货币代码有一个很好的标准(美元、欧元——只有3个字母),太短了,不需要正常化。
所以,如果其中任何一个适用的话,就规范化。以我的经验,“价格”不属于这两类。以及

相关问题