【发布时间】:2012-12-31 20:23:45
【问题描述】:
我正在编写代码(使用 MySQL)来解决类似于以下的问题:
有 20 个布尔选项(每个用户)。
我应该存储 20 ENUM('false','true') 还是只将这些选项的 ID 放入表中(因此每个用户可能少于 20 行)?
【问题讨论】:
-
是否有可能出现新选项?您是否需要一次通过多个选项过滤您的用户(例如
option1 = TRUE AND option2 = TRUE)?是否为每个用户设置了所有选项?百分之几的用户有选项集的非默认值? -
为什么不创建一个包含您的选项并拥有
option_id的表,接下来获取一个包含user_id、option_id和condition的链接表user_options,最后拥有您的@987654329 @表和你的user_id?这样,当你添加选项时,你不需要重新设计你的users表 -
@Quassnoi:可能会出现新选项。我从不按选项过滤用户,我只在选择用户时显示所有 20 个选项的值。对于每个用户,每个选项都应该被定义(真或假),当我们添加新的选项时可能会有例外(在这种情况下,选项默认为假)。具有非默认值的用户百分比可能在 50% 左右。
-
@Tikkes:你的建议正是我考虑的两种方式之一。另一种方法是删除
condition列并仅放置这些为 true 的 options_id。