代码之家  ›  专栏  ›  技术社区  ›  epochwolf

数据库中的布尔标志是否可用于此选项列表?

  •  2
  • epochwolf  · 技术社区  · 16 年前

    我正在将用户提交的评论添加到个人项目中。

    注释有许多特殊用途的标志。注释的版本化也是为了适度,因此不需要在特定字段上设置时间戳。

    这些是我目前在功能设计中的选择。(列表不是最终的)这个列表在某个时候会改变,因为我知道我还没有弄清楚所有的事情。

    • 包装(文本隐藏在javascript链接后面)
    • 隐藏(评论文本对非审阅者隐藏)
    • 已锁定(无法编辑)
    • 已删除(注释已删除)
    • 主持人(隐藏海报名称)
    • 管理员(与版主相同,版主无法编辑除外)
    • 地狱禁令(除海报外删除的行为)

    有一些规则控制哪些标志可以一起存在。(就显示而言。)

    • 管理员/版主评论不应该被包装、隐藏、锁定或禁止。(主持人不能被禁止)
    • 评论不能同时是管理员和版主评论。
    • 他不应该删除。
    • 注释不能同时被包装和隐藏
    • 应锁定隐藏注释。

    布尔标志是否足以在数据库中实现这一点?(我将RubyonRails与sqlite/mysql结合使用,因此数据库不能有触发器/约束)

    3 回复  |  直到 16 年前
        1
  •  4
  •   S.Lott    16 年前

    布尔标志有一个问题:它们只有两个状态。

    许多事情都有多种条件,而一个简单的布尔值却不足够。

    有些东西实际上可能是布尔型的。然而,这是罕见的。

    我建议不要使用布尔值,而是使用某种值的枚举。

    • 包装(文本隐藏在javascript链接后面)。看布尔值:有一个链接或者没有链接。遗憾的是,您可能有不同类型的链接(内部、外部等),因此这可能会超出两个值。

    • 隐藏(评论文本对非审阅者隐藏)。看起来像布尔值——隐藏与否。当然,除了,非慢化剂的定义可能会扩大,然后这就变得更加复杂了。

    • 已锁定(无法编辑)。看起来像布尔值,锁定或打开。但是,您可能已经从一个用户类锁定,但没有从另一个用户类锁定。布尔值崩溃。

    • 已删除(注释已删除)。布尔值,直到添加挂起的删除,或需要另一个删除投票。

    • 主持人(隐藏海报的名字)。布尔值,直到您拥有其他类的用户、超级用户、更多特权用户和更少特权用户。

    • 被禁止(除海报外的行为被删除)。这似乎是评论作者的特征,而不是评论本身。这甚至不属于这里,而是属于您的模型中的其他地方。

    我投票支持枚举值,而不是简单的真/假。

        2
  •  0
  •   Adam Robinson    16 年前

    您可以将它们实现为布尔标志列,或者让一个int列充当位掩码。有些人可能会争辩(从技术上讲,他们是正确的)数据库中的位掩码违反了规范化(在一个列中存储了多个“值”),但我发现它们在过去很有用。唯一的问题是它可以降低代码的可读性。

    不过,最后,我会说你的方法没什么问题。

        3
  •  0
  •   Tom Ritter    16 年前

    对于规则,您似乎有两种选择:

    1. 您可以尝试设置约束和触发器,以强制不让坏数据进入数据库。
    2. 您可以在应用程序中通过函数的前置和后置条件(不一定要对前置和后置条件进行编码,但要明确定义并遵守这些条件)来确保它们不会引入坏数据。然后,您可以定期运行坏数据脚本,提醒您任何违反规则的情况。

    无论如何,你需要做一些2,除非你计划在数据库中提出例外,并在客户端处理它们(这对我来说很难闻…)但是我想我会犹豫是否做1除非你涵盖所有的情况,因为如果你没有,你会有一些强制执行,一些不执行,而且这对我来说也很难闻…