28

上下文:SQL Server 2008,C#

我有一个整数数组(0-10 个元素)。数据不会经常更改,但会经常检索。

我可以创建一个单独的表来存储数字,但由于某种原因,感觉这不是最佳选择。

问题 #1:我应该将数组存储在单独的表中吗?请给出一种或另一种方式的理由。

问题 #2:(不管 Q#1 的答案是什么),将 int[] 存储在数据库字段中的“最佳”方式是什么?XML?JSON?CSV?

编辑: 一些背景:被存储的数字只是一些不参与任何关系的系数,并且始终用作数组(即从不单独检索或使用值)。

4

6 回答 6

57

单独的表,标准化

不是 XML 或 json ,而是单独的行中的单独数字

不管你怎么想,这是最好的方法。您可以稍后感谢我

于 2011-03-17T15:28:56.137 回答
15

将数据存储在数据库中的“最佳”方式是最有利于将在其上执行的操作并且使维护变得最容易的方式。正是这个后来的要求应该引导您找到一个规范化的解决方案,这意味着将整数存储在具有关系的表中。除了更容易更新之外,下一个开发人员更容易了解信息的存储内容和方式。

于 2011-03-17T15:30:43.947 回答
7

将其存储为 JSON 数组,但要知道现在所有访问都将针对整个数组 - 不会对特定系数进行单独的读/写。

在我们的例子中,我们将它们存储为一个 json 数组。与您的情况一样,各个数组编号之间没有关系-数组仅作为一个单元才有意义,并且作为一个单元,它确实与表中的其他列有关系。顺便说一句,其他一切都正常化了。我把它比作:如果你要存储一个 10 字节的块,你会将它保存在 VARBINARY(10) 的单个列中。您不会将它分成 10 个字节,将每个字节存储在 VARBINARY(1) 的列中,然后用外键将它们拼接在一起。我的意思是你可以——但这没有任何意义。

作为开发人员,您将需要了解该 int 数组实际上是多么“单片”。

于 2012-11-21T01:49:59.850 回答
3

一个单独的表将是最“规范化”的方式来做到这一点。从长远来看,这可能会更好,因为您不必解析列的值来提取每个整数。

如果您愿意,也可以使用XML 列来存储数据。

稀疏列也可能是您的另一种选择。

如果你想让它变得非常简单,你可以只分隔值:10;2;44;1

于 2011-03-17T15:26:16.770 回答
1

我认为既然您在谈论 sql server,这表明您的应用程序可能是数据驱动的应用程序。如果是这种情况,我肯定会将数据库中的数组作为一个单独的表保存,每个值都有一条记录。它将被规范化和优化以进行检索。即使您在数组中只有几个值,您也可能需要将该数据与可能需要与您的数组值“连接”的其他检索数据结合起来。在这种情况下,通过使用索引、外键等(规范化)来优化 sql。

话虽如此,如果您不需要更改值,您始终可以硬编码代码中的 10 个值并保存到数据库的往返行程。这取决于您的应用程序如何工作以及该数组将用于什么。

于 2011-03-17T15:37:01.913 回答
0

我同意所有其他人关于最好是单独的标准化表的观点。但是,如果您坚持将它们全部放在同一张表中,请不要将数组放在一个单独的列中。相反,创建 10 列并将每个数组值存储在不同的列中。它将为您节省解析和更新问题。

于 2011-03-17T15:48:44.530 回答