用于在数据库中存储“二进制”值(例如Male / Female)的模式

时间:2010-04-27 20:28:22

标签: ruby-on-rails database-design schema

简介

我正在尝试决定如何最好地为(Rails)模型设置数据库模式。我有一个与货币相关的模型,表明价值是收入(正现金价值)还是支出(负现金价值)。

我希望单独的列表明它是收入还是费用,而不是依赖于存储的值是正还是负。


问题:

您如何存储这些值?为什么?

  • 只有一列,比如Income, 并存储1如果是收入,0 如果是费用,null如果不是 已知的。
  • 有两列,IncomeExpense,将其值设置为10 适当。
  • 别的什么?

我认为这个问题类似于将一个人的性别存储在数据库中(忽略外星人/变性人/等)因此我的头衔。


到目前为止我的想法

  • 使用单个列可能更容易查找,但0(未知)可能会误以为falsenull,费用)。
  • 拥有单独的列可能更难维护(如果我们在两列中都以1结束会怎样?

也许这不是什么大不了的事情,但是在我走得更远并且必须改变我的代码库之前提出任何问题/想法会很好,因为我错过了应该有的东西很明显!

谢谢, 菲利普

3 个答案:

答案 0 :(得分:4)

  

您如何存储这些值?为什么?

我会将它们存储为单列。尽管您希望将数据分成多个列,但任何理解会计或簿记的人都会知道交易的美元价值是一回事,而不是两个单独的事情,取决于它的收入或支出(或资产,负债,股权等)等)。

作为实际编写完全平衡的复式会计应用程序和不太正式的预算应用程序的人,我建议您重新考虑您的决定。它将使这项工作的未来工作变得更加容易。

对不起,这可能不是你想听到的,可能会给我带来好的代表,但我不能,说实话,不要告诉你这将是一个什么样的错误。

你的“迄今为止的想法”表明已经出现的问题。

1 /“具有单独的列可能更难维护(如果我们最终在两列中都得到1会发生什么?” - 嗯,这不应该发生。数据应该与数据模型内部一致你最好建议使用插入/更新触发器来阻止它,或者说,不允许它发生的单个列: - )

2 /“使用单个列可能更容易查找,但存在将0(错误,费用)误认为空(未知)的风险。” - 如果符号以值的大小存储,则不会出错。而不知道某项是费用还是收入的整个想法对会计师来说是令人憎恶的。在创建交易时,这种知识就存在了,在交易发生后的某个时刻,这不是模糊不清的事。

答案 1 :(得分:0)

有时候我会使用一个角色。例如,我的数据库中有一列gender,用于存储mf

我通常只选择一列。

答案 2 :(得分:0)

我通常会将标志实现为nchar(1)并使用一些有意义的缩写。我认为这是最容易合作的事情。例如,你可以使用'I'作为收入,'E'作为费用。

那就是说,我认为这不是制作这个系统的好方法。

我可能会把收入和费用放在不同的表格中,因为它们似乎是不同类型的东西。一旦通过标志而不是消极值和负值来区分含义,我可以想到将它们放在同一个表中的唯一优点就会丢失。

相关问题