Sql server 在数据库字段中存储数字数组

Sql server 在数据库字段中存储数字数组,sql-server,database,datastore,data-storage,Sql Server,Database,Datastore,Data Storage,上下文:SQLServer2008,C# 我有一个整数数组(0-10个元素)。数据不经常更改,但经常检索 我可以创建一个单独的表来存储这些数字,但出于某种原因,我觉得这样做并不理想 问题#1:我应该将数组存储在单独的表中吗?请给出这样或那样的理由 问题2:(不管问题1的答案是什么),在数据库字段中存储int[]的“最佳”方式是什么?XML?JSON?CSV 编辑: 一些背景:存储的数字只是一些不参与任何关系的系数,并且始终用作数组(即,从未检索或单独使用任何值)。一个单独的表将是最“规范化”的方

上下文:SQLServer2008,C#

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

我可以创建一个单独的表来存储这些数字,但出于某种原因,我觉得这样做并不理想

问题#1:我应该将数组存储在单独的表中吗?请给出这样或那样的理由

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

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

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

如果您愿意,您也可以使用存储数据

也可能是你的另一个选择


如果你想让它真正简单,你可以只划分值:
10;2.44;1

单独表格,标准化

不是XML或json,而是在不同的行中使用不同的数字


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

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

我认为,因为您所说的sql server表明您的应用程序可能是数据驱动的应用程序。如果是这样的话,我会将数组作为一个单独的表保留在数据库中,每个值都有一条记录。将对其进行规范化和优化,以便检索。即使数组中只有几个值,也可能需要将该数据与可能需要与数组值“联接”的其他检索数据相结合。在这种情况下,通过使用索引、外键等对sql进行优化(标准化)


也就是说,如果不需要更改值,您可以始终硬编码代码中的10个值,并将往返过程保存到DB。这取决于应用程序的工作方式以及此数组的用途。

我同意所有其他人的看法,最好是使用一个单独的规范化表。但是,如果您坚持将所有数组都放在同一个表中,请不要将数组只放在一列中。而是创建10列,并将每个数组值存储在不同的列中。它将为您省去解析和更新问题。

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

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


作为开发人员,您需要了解int数组的“整体性”。

XML列有一些恼人的限制,比如不能从链接服务器工作。很高兴知道,谢谢。如果我的回答不清楚,我建议在大多数情况下使用一个单独的表格作为合适的解决方案。我不太同意这一点-有时你可能需要2列,其他时候可能需要40列。如果你的表中有一堆可选列,那么它们只会占用空间。@Josh,据我从OP了解,它永远不会超过10。你好,我来自遥远的未来(2014)。我在这里感谢您。@gbn,我很好奇为什么您认为这是最好的选择,而不是其他选择。你能扩大你的答案吗?谢谢对于很多应用来说,这是一个非常糟糕的解决方案。您认为这个解决方案可以扩展吗?我有一个400K整数的有序数组,我很难认为这是有效的。正如@jorge所问的,你能展开吗?@MartinHansen这个答案来自我们发现数组被视为块的编辑之前。如果数组不需要DB解析或工作,那么从DB的角度来看,它不是一个“数字序列”,而是一个简单的对象,可以存储为test、CSV或JSON等。在许多情况下,当有人要求解析该数组以进行搜索或导出等操作时,这会反过来对您产生不利影响。关于这个主题,这里有很多问题。这就是为什么像我这样的DB类型会推荐分离方法。。为什么这有x3张选票作为公认的答案。。。