我将以固定值和固定顺序存储抽奖号码(1-60)。
一次平局有4个数字
另一个有6个数字
另外2个数字
我的想法是在单独的sql表中分隔每个绘制类型。问题是,将数字存储在由分隔符分隔的单个列中是否最佳....
ID(int) | numbers(varchar)
或将每个号码存储在一个单独的列中?
ID(int) | num1(tinyint) | num2(tinyint) | num3(tinyint) | num4(tinyint)
我们不需要在存储时搜索这些数字。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您不需要搜索数字(即找到哪个数字具有特定数字),那么我会将数字存储在同一个字段中。
<强>澄清强>
他自己说,他只是存储数据而不需要对其进行任何操作。这些数据无关紧要。它恰好在2到6个数字之间,但这是无关紧要的。除非您出于某种原因需要它,否则没有理由将它们放在单独的列中。
我要做的是只使用一个表,其中包含三列:id,draw_type,numbers
使用3个不同的表格,每个表格分别为3到7列,这比使用起来容易得多。
答案 2 :(得分:1)
如果您不需要单独搜索它们或单独检索它们,那么从数据库的角度来看它们只是一个不透明的“blob”,您不会违反principle of atomicity和1NF将它们存储在单个字段中。
但是,只是因为现在的情况,并不意味着它将来不会改变。所以至少使用第二个选项。此外,这将允许DBMS强制域的完整性并确保这些实际上是数字和任何字符串。
但是,为了使您的数据能够面向未来,我会更进一步,使用以下结构:
除了以统一的方式处理数字并避免许多NULL之外,它还允许您轻松改变最大值。如果有必要的数字。我怀疑在这种结构中查询也会更容易。
顺便说一句,如果没有(other fields)
且没有至少一个数字就不能存在抽奖,你可以完全免除DRAW表,只需使用DRAW_NUMBER。