0

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

一个抽签有 4 个号码,
另一个抽签有 6 个号码
,另一个抽签有 2 个号码

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

ID(int) | numbers(varchar)

还是将每个数字存储在单独的列中?

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

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

4

3 回答 3

1

单独的列(数据库规范化

于 2012-06-11T10:46:50.557 回答
1

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

澄清

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

我要做的是只使用一张表,三列:id,draw_type,numbers

使用 3 个不同的表(每个表有 3 到 7 列)要容易得多。

于 2012-06-11T10:48:46.757 回答
1

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

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

但是,为了让您的数据适应未来,我会更进一步并使用以下结构:

在此处输入图像描述

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

顺便说一句,如果没有(other fields)并且没有至少一个数字就不能存在平局,那么您可以完全放弃 DRAW 表而只使用 DRAW_NUMBER。

于 2012-06-11T15:59:45.647 回答