4

我想知道哪种方法是在 sql 列中存储整数列表的最佳方法。.....即“1,2,3,4,6,7”

编辑:这些值代表 SQL 表中的其他 ID。该行看起来像

[1] [2]

id, listOfOtherIDs

到目前为止,我研究过的选择是:

  1. 具有“可爆炸性”的分隔值的 varchar,即通过逗号或制表符
  2. 一个单独包含所有值的 XML
  3. 为每个值使用单独的行。

哪种方法是最好的方法?

谢谢,伊恩

4

2 回答 2

7

记录的单个元素只能引用一个值;这是一个基本的数据库设计原则。

您将不得不更改数据库的设计:为每个值使用单行。您可能想阅读规范化

这里第一范式的描述所示:

第一种范式表明,在表中的每一行和每一列的交点处,都存在一个值,而不是值的列表。例如,您不能在名为 Price 的字段中放置多个 Price。如果您将每个行和列的交叉点视为一个单元格,则每个单元格只能包含一个值。

于 2013-09-26T01:52:02.753 回答
4

虽然 Jeroen 的答案对“多值”属性有效,但在某些情况下,多个逗号分隔的值实际上可能代表一个大值。路径数据(在地图上)、整数序列、素数列表等内容都可以存储在逗号分隔的 varchar 中。我认为最好解释一下您到底存储了什么以及您需要如何检索和使用该值。

编辑:

查看您的编辑,如果您的 ID 是指另一个表的 PK,那么这听起来像是该表与您正在存储其 ID 的表之间的真正 MN 关系。这些东西真的应该存储在一个单独的动名词中,顺便说一句,这是一个表,其中每个表的 PK 作为 FK,从而链接两个表的相关行。所以 Jeroen 的回答非常适合你的情况。

于 2013-09-26T02:00:07.440 回答