【发布时间】:2011-02-13 01:38:12
【问题描述】:
简介
我正在尝试决定如何最好地为 (Rails) 模型设置我的数据库架构。我有一个与金钱相关的模型,它表明价值是收入(正现金价值)还是费用(负现金价值)。
我想要单独的列来表明它是收入还是支出,而不是依赖于存储的值是正值还是负值。
问题:
您将如何存储这些值,为什么?
- 只有一个列,比如
Income, 并存储1,如果是收入,0如果是费用,null如果不是 已知。 - 有两列,
Income和Expense,将它们的值设置为1或0为 合适的。 - 还有别的吗?
我认为这个问题类似于将一个人的性别存储在数据库中(忽略外星人/跨性别/等),因此我的标题。
到目前为止我的想法
- 使用单列查找可能更容易,但存在将
0(false,费用)误认为null(未知)的风险。 - 单独的列可能更难维护(如果我们最终在两列中都有
1会发生什么?
也许我走的路没什么大不了的,但是在我走得太远并且不得不更改我的代码库之前提出任何疑虑/想法会很棒,因为我错过了应该有的东西很明显!
谢谢, 菲利普
【问题讨论】:
-
您甚至还没有开发表格,并且您已经期望它们被错误的数据填充(0 表示空值,1 表示收入和费用列)?您希望如何在这样的环境中拥有一个可以工作的系统?
-
对于“未知”交易类型,您到底会怎么做?
-
@Jeffrey - 我当然希望这两种情况都没有真正发生,我只是想考虑这两种模式可能的优点/缺点。
-
@kurosch - 我不打算实际保留未知交易。相反,我在考虑如果交易还没有被分配为收入/费用,而不是仅仅默认为一个或另一个,价值会是什么。
-
@latentflip - 大多数关系数据库系统都有很好的设施来维护数据完整性。不要希望坏数据不会出现,只需验证数据始终是好的。使用存储过程作为看门人(并拒绝对表本身的更新权限),使用检查约束、外键等。始终尽可能明确地说明数据值的含义。除非有很好的理由,否则使列不可为空。然后让它们无论如何都不可为空。 :)
标签: ruby-on-rails database-design schema