如何正确设计一个简单的收藏夹和阻止表?

时间:2010-03-27 17:25:44

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

我目前在rails中编写一个webapp,用户可以将项目标记为收藏夹并阻止它们。我提出了两种方法,并想知道哪种方式更常见/更好。

1。单独的连接表

为此设置2个表是明智的吗?像:

users_favorites
  - user_id
  - item_id

users_blocked
  - user_id
  - item_id

2。单表

users_marks (or so)
  - users_id
  - item_id
  - type (["fav", "blk"])

两种方式似乎都有优势。你会使用哪一个?为什么?

3 个答案:

答案 0 :(得分:2)

第二个至少具有(如果主键为users_id + item_id的优势,以确保没有用户将某个项目都设为收藏和阻止。

我想我会得到第二个解决方案 - 特别是考虑到第一个解决方案中的两个表将具有相同的结构,这似乎很奇怪;它还允许您将所有信息放在同一个地方,这可能会有所帮助,在某些情况下(例如报告?)

答案 1 :(得分:1)

我会选择#2。

它将所有适当的数据保留在一个表中。

否则,您可能不得不求助于联合或不同的联接来获取完整的详细列表。

答案 2 :(得分:1)

这只是一个项目的不同状态,所以#2将完成这项工作。如果它是颜色你会怎么做?两张不同的桌子?我不这么认为;)

编辑:您可能希望状态位于不同的表中并将其与外键相关联,但这取决于您。这取决于您期望拥有多少不同的状态。只是这两个或许多其他人?