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


  付款交易:
  
  
  ID
  量
  日期
  付款类型编号
  
  
  付款方式:
  
  
  ID
  付款方式(现金,信用)
  


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

这类似于this question。除了付款方式外,可以肯定的是,每种付款方式都无需添加任何新信息。 “现金”没有链接到任何东西,关于现金本身,我不需要了解任何事情,只是。

据我所知,用单个字段替换付款类型表的利弊是:

优点


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


缺点


将付款类型存储为文本字段会减慢按付款类型排序的速度,并使这种排序比现在更混乱。
交易的付款类型将始终准确反映交易记录时的状态。即,如果我输入错误,并且付款类型存储为“ Kash”,我可以轻松地解决该错误,并且链接到该付款类型的所有交易都会自动更新。


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

最佳答案

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


  每当需要付款类型时,删除几乎不需要的联接
  被发现。


您仅假设这将成为性能瓶颈。当您拥有必须说明的数据时,应该执行非规范化操作。这不是那些时候之一。


  交易的付款类型将始终准确反映
  这是在记录交易的时间。即如果我更改
  付款类型表格中的“现金”记录改为“贷方”(无论
  原因),现在所有链接到现金的付款交易都将被链接
  信贷。


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

任何关系数据库都可以处理JOIN和规范化表。恐怕您过早优化了。

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

关于mysql - 数据库规范化:使用单独的表存储单个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9657631/

10-09 06:18
查看更多