我正在努力将用户提交的评论添加到个人项目中。
评论有许多用于特殊目的的标志。注释也会因审核目的而进行版本控制,因此特定字段不需要时间戳。
这些是我到目前为止在功能设计中的选项。 (列表不是最终的)这个列表会在某些时候发生变化,因为我知道我还没弄明白。
有一些规则可以管理哪些标志可以存在。 (就显示而言。)
布尔标志是否足以在数据库中实现这一点? (我正在使用带有SQLite / MySQL的Ruby on Rails,因此数据库不能有触发器/约束)
答案 0 :(得分:4)
这是布尔标志的问题:它们只有两种状态。
许多事情都变成了多个条件,而一个简单的布尔结果证明是不合适的。
有些东西实际上可能是布尔值。然而,这种情况很少见。
我建议不使用布尔值,而是使用某种值的枚举。
Wrapped(文本隐藏在javascript链接后面)。看起来布尔:有一个链接或没有链接。遗憾的是,您可能有不同类型的链接(内部,外部等),因此这可能会超出两个值。
隐藏(评论文本对非版主隐藏)。看起来布尔 - 隐藏或不隐藏。当然,除非主持人的定义可能会扩大,然后这会变得更加复杂。
已锁定(无法编辑)。看起来布尔,锁定或打开。除非您可能已锁定某类用户但未锁定其他类别的用户。布尔值分解。
已删除(已删除评论)。布尔值,直到您添加待删除,或需要另一个投票进行删除。
主持人(隐藏海报的名称)。布尔值,直到您拥有其他类别的用户,超级用户,更多特权用户和权限较低的用户。
Hellbanned(除了海报外,法案被删除)。这似乎是评论作者的一个特征,而不是评论本身。这甚至不属于此处,但属于您模型中的其他位置。
我投票支持枚举值,而不是简单的True / False。
答案 1 :(得分:0)
您可以将它们实现为布尔标志列,或者使用充当位掩码的int列。有些人可能认为(并且他们在技术上是正确的)数据库中的位掩码违反了规范化(因为多个“值”存储在单个列中),但我发现它们在过去很有用。唯一的问题是它可以使代码的可读性降低。
但最后,我会说你的方法没有错。
答案 2 :(得分:0)
对于规则,似乎有两种选择:
无论如何你都需要做一些#2,除非你打算在数据库中引发异常并处理它们的客户端(这对我来说闻起来很糟糕......)但我想我会犹豫不决做#1,除非你覆盖所有的情况,因为如果你不这样做,你会有一些强制执行,有些没有,这对我来说也很难闻......