2012-01-17 83 views
2

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

所以我想出了以下解决方案,并想知道是否有更好的方法来做到这一点,如果有人可以看到任何问题。我已经完成了测试,并且对于我选择的变体似乎工作正常。

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

  • 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 
+0

您目前有多少种选项(如标题中所写),并且预计将来会有多少? – shahkalpesh 2012-01-17 15:33:05

+0

目前我们有七个选项。我正在使用它来处理我们的数据库维护例程,因此很难说现在会有多少,我们在问题出现时添加更多的东西......为此,我发现这种方法的问题在于将数字相乘土地相当大。刚刚检查过,这在29上溢出。所以这只适用于少数选项。 – MarcoF 2012-01-18 05:58:45

回答

2

我想你可以使用去逐位权限模式。基本上,您将每个选项存储为2的幂。这样,您可以在一个整数字段中拥有所有可能的组合。 Just google Bitwise持续执行解决方案

0

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

3

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

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

延伸阅读:http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

+2

如果满足您的要求,这是最好的方法。我的XML答案有效,但正确的关系设计绝对是优越的。 – mwigdahl 2012-01-17 15:54:14

+0

我同意。我们一直在我们的服务器上使用连接表来处理这种事情。现在的问题是我们的数据库充斥着连接表,程序,函数甚至表格列,我们甚至不知道我们已经使用了。我现在尝试在开发时将事情保持在最低限度,并且感觉这会减少一些所需的对象。 – MarcoF 2012-01-17 16:08:00

相关问题