当前,我们的数据库已设置为使付款交易记录付款类型ID,并且此链接链接到包含这些值的付款类型(现金,支票,信用)表。例:
付款交易:
ID
量
日期
付款类型编号
付款方式:
ID
付款方式(现金,信用)
我的问题是我是否应该只删除支付类型表,而只将支付类型值存储为文本在支付交易中。
这类似于this question。除了付款方式外,可以肯定的是,每种付款方式都无需添加任何新信息。 “现金”没有链接到任何东西,关于现金本身,我不需要了解任何事情,只是。
据我所知,用单个字段替换付款类型表的利弊是:
优点
每当需要找到付款类型时,删除几乎不需要的联接。
交易的付款类型将始终准确反映交易记录时的状态。即,如果我将付款类型表中的“现金”记录更改为“信用”(无论出于何种原因),则所有链接到现金的付款交易现在都将链接到信用。
缺点
将付款类型存储为文本字段会减慢按付款类型排序的速度,并使这种排序比现在更混乱。
交易的付款类型将始终准确反映交易记录时的状态。即,如果我输入错误,并且付款类型存储为“ Kash”,我可以轻松地解决该错误,并且链接到该付款类型的所有交易都会自动更新。
我倾向于删除付款类型表,并将单个字段添加到付款交易表中,那么您建议的最佳做法是什么?
最佳答案
我不同意你的任何一个论点。
每当需要付款类型时,删除几乎不需要的联接
被发现。
您仅假设这将成为性能瓶颈。当您拥有必须说明的数据时,应该执行非规范化操作。这不是那些时候之一。
交易的付款类型将始终准确反映
这是在记录交易的时间。即如果我更改
付款类型表格中的“现金”记录改为“贷方”(无论
原因),现在所有链接到现金的付款交易都将被链接
信贷。
您不应允许某人以这种方式修改付款方式。更改付款类型应该是另一笔具有自己时间戳的交易。
任何关系数据库都可以处理JOIN和规范化表。恐怕您过早优化了。
我会花更少的时间来担心这个问题,而花更多的时间来思考如何处理历史。在将交易移到历史记录表之前,您需要保留多长时间?您是否考虑过根据时间戳按月对数据库进行分区?那将更值得您的努力。
关于mysql - 数据库规范化:使用单独的表存储单个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9657631/