gpt4 book ai didi

mysql - 什么时候应该对 MySQL 中的数据进行非规范化?

转载 作者:行者123 更新时间:2023-11-29 17:43:36 25 4
gpt4 key购买 nike

我正在构建一个多货币应用程序。

考虑一个包含以下字段的帖子表:

id, country_id, price

每次获取价格字段时,我还需要货币来将其显示在前端。因此,每次我尝试获取帖子以获得货币时,我都需要进行两次连接(或使用 laravel with 运行 3 个查询)。

post->country->currency

为了解决这个问题,我可以将货币存储在 post 表中。然而,这违反了正常化准则。它还跨表复制数据。

我应该对数据进行非规范化并将货币存储在 post 表中吗?

最佳答案

这要看情况。

销售时是否应该卡住价格? (我想是的。)不要正常化。

或者您需要根据当前汇率换算价格吗?进行标准化。

此外,country_id 不是currency 的正确键。 currency_id 应在发布时确定;如果您也需要,请保留 country_id

然后,当货币贬值,或者某个国家/地区转向欧元,或者......时,该架构不会妨碍您。

此外,在某些情况下,旅游区非常愿意接受不同货币的现金。美国的许多杂志都以美元和加元列出价格。

标准化目的:

  • 某些“名称”或“地址”将来可能会发生变化。因此将其规范化到另一个表中。否则,当发生更改时,您需要跑遍多个表中的多行才能使更改生效。
  • 节省空间...您有一个经常出现的字符串,但(比方说)不太可能改变。通过“规范化”(错误的术语,但类似的实现),您可以将长字符串仅放在一个位置。它被替换为 2 字节 SMALLINT UNSIGNED,允许最多 65K 不同的值。注意:如果字符串很短,例如标准的 2 字母国家代码,则无需进行标准化。 5 个字符的邮政编码几乎不值得缩减为 2 字节的smallint。货币代码有一个很好的标准(美元、欧元——只有 3 个字母),但太短,无法标准化。

因此,如果其中任何一个适用,请进行标准化。根据我的经验,“价格”不属于任何一类。并且

关于mysql - 什么时候应该对 MySQL 中的数据进行非规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com