gpt4 book ai didi

mysql - 数据库规范化: Using separate tables to store a single field

转载 作者:行者123 更新时间:2023-11-29 06:09:50 25 4
gpt4 key购买 nike

目前,我们的数据库已设置为付款交易记录付款类型 ID,并且该 ID 链接到包含这些值的付款类型(现金、支票、信用)表。示例:

Payment Transaction:

  • ID
  • Amount
  • Date
  • Payment Type ID

Payment Type:

  • ID
  • Payment Type (Cash, Credit)

我的问题是我是否应该删除付款类型表,并将付款类型值作为文本存储在付款交易中。

这类似于 this question 。除了支付类型之外,可以肯定的是,不需要为每种支付类型添加新信息。 “现金”与任何东西都没有联系,我不需要了解任何关于现金本身的信息,它就是这样。

据我所知,用单个字段替换付款类型表的优点和缺点是:

优点

  • 每当需要查找付款类型时,都会删除几乎不必要的联接。
  • 交易的付款类型将始终准确反射(reflect)记录交易时的付款类型。即,如果我将付款类型表中的“现金”记录更改为“信用”(无论出于何种原因),则链接到现金的所有付款交易现在都将链接到信用。

缺点

  • 将付款类型存储为文本字段会减慢按付款类型的排序速度,并使排序比现在更加困惑。
  • 交易的付款类型将始终准确反射(reflect)记录交易时的付款类型。也就是说,如果我有一个拼写错误并且付款类型存储为“Kash”,我可以轻松修复该拼写错误,并且链接到该付款类型的所有交易都将自动更新。

我倾向于删除付款类型表并将单个字段添加到付款交易表中,您建议最好的做法是什么?

最佳答案

我不同意你的任何一个专业论点。

Removes a mostly unnecessary join whenever the payment type needs to be found.

您只是假设这将是性能瓶颈。当你有数据表明你必须这样做时,你应该做非规范化。现在不是这样的时候。

The payment type for a transaction will always accurately reflect what it was at the time the transaction was recorded. i.e. If I change the 'Cash' record in the payment types table to 'Credit' (for whatever reason), all payment transactions that link to Cash will now be linked to Credit.

您不应允许他人以这种方式修改付款类型。更改支付类型应该是另一笔交易,有自己的时间戳。

任何关系数据库都可以处理 JOIN 和规范化表。我担心您犯了过早优化的错误。

我会花更少的时间担心这个,而花更多的时间思考你将如何处理历史。在将交易移至历史表之前,您会将交易保留多长时间?您是否考虑过根据时间戳按月对数据库进行分区?那将更值得你的努力。

关于mysql - 数据库规范化: Using separate tables to store a single field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657631/

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