在mysql中存储固定数量的项目

时间:2012-06-11 10:43:08

标签: mysql sql database-design

我将以固定值和固定顺序存储抽奖号码(1-60)。

  

一次平局有4个数字
  另一个有6个数字
  另外2个数字

我的想法是在单独的sql表中分隔每个绘制类型。问题是,将数字存储在由分隔符分隔的单个列中是否最佳....

ID(int) | numbers(varchar)

或将每个号码存储在一个单独的列中?

ID(int) | num1(tinyint) | num2(tinyint) | num3(tinyint) | num4(tinyint)

我们不需要在存储时搜索这些数字。

3 个答案:

答案 0 :(得分:1)

分隔列(Database normalization

答案 1 :(得分:1)

如果您不需要搜索数字(即找到哪个数字具有特定数字),那么我会将数字存储在同一个字段中。

<强>澄清

他自己说,他只是存储数据而不需要对其进行任何操作。这些数据无关紧要。它恰好在2到6个数字之间,但这是无关紧要的。除非您出于某种原因需要它,否则没有理由将它们放在单独的列中。

我要做的是只使用一个表,其中包含三列:id,draw_type,numbers

使用3个不同的表格,每个表格分别为3到7列,这比使用起来容易得多。

答案 2 :(得分:1)

如果您不需要单独搜索它们或单独检索它们,那么从数据库的角度来看它们只是一个不透明的“blob”,您不会违反principle of atomicity和1NF将它们存储在单个字段中。

但是,只是因为现在的情况,并不意味着它将来不会改变。所以至少使用第二个选项。此外,这将允许DBMS强制域的完整性并确保这些实际上是数字和任何字符串。

但是,为了使您的数据能够面向未来,我会更进一步,使用以下结构:

enter image description here

除了以统一的方式处理数字并避免许多NULL之外,它还允许您轻松改变最大值。如果有必要的数字。我怀疑在这种结构中查询也会更容易。

顺便说一句,如果没有(other fields)且没有至少一个数字就不能存在抽奖,你可以完全免除DRAW表,只需使用DRAW_NUMBER。