我遇到了这个问题:
- 用户有很多糖果(1:M),
- 其中一个糖果可以拥有主要旗帜
- 每个用户只能使用一个糖果作为主要糖果
哪种方式是做主要标志的更好解决方案?
解决方案1:
用户
| id | name |
| 1 | Joe |
糖果
| id | user_id | primary |
| 1 | 1 | true |
| 2 | 2 | false |
解决方案2:
用户
| id | name | primary_candy_id |
| 1 | Joe | 2 |
糖果
| id | user_id |
| 1 | 1 |
| 2 | 2 |
解决方案 1 的注释
- 我在 Candies table 中得到了与 Candy 相关的所有内容
- 如果我检查是否有任何 Candy 是主要的,则查询速度更快(不必加入)
- 如果用户有 100 个糖果,这样他就有 99 个是假的,只有 1 个有意义的真=> 99 个不必要的列记录
解决方案 2 的注释
- 这样我将只有一个列记录(保存 99 个其他)
- 如果我想检查 Candy 是否是主要的,我需要加入客户表
- 假设我介绍了更多带有与用户相关的主要标志的 1:M 表:冰淇淋、巧克力、垃圾食品……这样我将在用户中再添加 4 个列
这是更多的 SQL 问题,但我在项目中使用 Rails 3.*,因此欢迎来自该领域的最佳实践意见