【发布时间】:2011-07-06 21:07:01
【问题描述】:
我很喜欢 Rails,但我们才刚刚开始约会。
用户可以对链接和 cmets 进行投票。除了主键和时间戳之外,我目前还为这些模型定义了以下属性:
- 链接 url、标题、submitter_id、分数
- 评论内容、commenter_id、score、link_id、parent_comment_id
- 投票 id、voter_id、link_id、方向
我刚刚添加了评论模型,并考虑了如何将它与投票相结合。一些选项:
- 将链接和 cmets 折叠成一个“Item”模型,并将投票映射到通用 item_id
- 有两个投票表,一个用于 cmets,一个用于链接
- 将comment_id 列添加到现有投票表
不确定什么是最好的。 #1 和 #3 引入了两用表,即表中的某些列仅与该表中的行子集相关。 #2 避免了这个问题,但显得多余和愚蠢。
权衡是不可避免的还是我没有看到黄金之路?你会推荐什么?如果您碰巧知道 github 上有一个处理类似情况的 rails 存储库,我非常感谢您提供链接!
【问题讨论】:
-
作为旁注,不要使用外键作为 voter_id、commenter_id.... 但是外表名 (user_id) 这就是惯例,如果你这样做,Rails 不会选择它up,你必须指定它
-
最小的指定工作似乎值得提交者、投票者、评论者与通用“用户”三者的可读性增益。但也许我应该走“用户”路线,只是为了可读性而编写包装器/别名方法?
-
您始终可以在您的模型中执行以下操作:
belongs_to :commenter, :class_name => 'User',您将能够保持代码的可读性和架构标准化。 -
是的,这就是我正在做的。抱歉,如果不清楚。
标签: ruby-on-rails database-design data-modeling