在单个字段中保存多个选项

时间:2012-01-17 15:29:24

标签: sql-server

我需要将多个选项保存到单个字段中,这样我就不必为每个选项创建一个列。可以选择的选项会随着时间的推移而增加,因此使用列可能不是最好的方法...一次可以选择太多选项并保存到数据库中。

所以我提出了以下解决方案,并想知道是否有更好的方法来做到这一点,以及是否有人可以看到任何问题。我已经完成了测试,它似乎对我选择的变化很好。

方法: 为所有选项分配唯一的素数,让用户选择他想要的选项,将所选选项的相应素数相乘,并将结果值保存在字段中。 检查选项是否已选中时:  如果保存的数字可以被没有剩余的素数整除,则用户选择该素数的相应选项。 例如:

  • 星期一2,星期二3,星期三5,星期四7,星期五11, 星期六13,星期日17日

选择: 周一,周五,周日 2 * 11 * 17 = 374

**Monday** = 374/2=187,  (Or 374 % 2 = 0)
Tuesday = 374/3=124.6666666666667, 
Wednesday = 374/5=74.8,  
Thursday = 374/7=53.42857142857143, 
**Friday** = 374/11=34,  
Saturday = 374/13=28.76923076923077, 
**Sunday** = 374/17=22

3 个答案:

答案 0 :(得分:3)

使用行。这似乎是一种标准的多对多关系。

创建一个表来保存选项,然后创建另一个表来将选项与原始表相关联。

进一步阅读:http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

答案 1 :(得分:2)

我认为您可以使用de bitwise权限模式。基本上,您将每个选项存储为2的幂。通过这种方式,您可以在单个整数字段中包含所有可能的组合。只需google Bitwise persmission来实现解决方案

答案 2 :(得分:0)

你的方法似乎特别神秘。如果必须在一列中存储多个数据,请考虑使用XML。使用XML类型的字段,您可以以相对干净的形式存储结构化数据,并使用XQuery至少有机会以与其他SQL查询兼容的方式查询和使用它。