上下文:SQL Server 2008,C#
我有一个整数数组(0-10 个元素)。数据不会经常更改,但会经常检索。
我可以创建一个单独的表来存储数字,但由于某种原因,感觉这不是最佳选择。
问题 #1:我应该将数组存储在单独的表中吗?请给出一种或另一种方式的理由。
问题 #2:(不管 Q#1 的答案是什么),将 int[] 存储在数据库字段中的“最佳”方式是什么?XML?JSON?CSV?
编辑: 一些背景:被存储的数字只是一些不参与任何关系的系数,并且始终用作数组(即从不单独检索或使用值)。
上下文:SQL Server 2008,C#
我有一个整数数组(0-10 个元素)。数据不会经常更改,但会经常检索。
我可以创建一个单独的表来存储数字,但由于某种原因,感觉这不是最佳选择。
问题 #1:我应该将数组存储在单独的表中吗?请给出一种或另一种方式的理由。
问题 #2:(不管 Q#1 的答案是什么),将 int[] 存储在数据库字段中的“最佳”方式是什么?XML?JSON?CSV?
编辑: 一些背景:被存储的数字只是一些不参与任何关系的系数,并且始终用作数组(即从不单独检索或使用值)。
单独的表,标准化
不是 XML 或 json ,而是单独的行中的单独数字
不管你怎么想,这是最好的方法。您可以稍后感谢我
将数据存储在数据库中的“最佳”方式是最有利于将在其上执行的操作并且使维护变得最容易的方式。正是这个后来的要求应该引导您找到一个规范化的解决方案,这意味着将整数存储在具有关系的表中。除了更容易更新之外,下一个开发人员更容易了解信息的存储内容和方式。
将其存储为 JSON 数组,但要知道现在所有访问都将针对整个数组 - 不会对特定系数进行单独的读/写。
在我们的例子中,我们将它们存储为一个 json 数组。与您的情况一样,各个数组编号之间没有关系-数组仅作为一个单元才有意义,并且作为一个单元,它确实与表中的其他列有关系。顺便说一句,其他一切都正常化了。我把它比作:如果你要存储一个 10 字节的块,你会将它保存在 VARBINARY(10) 的单个列中。您不会将它分成 10 个字节,将每个字节存储在 VARBINARY(1) 的列中,然后用外键将它们拼接在一起。我的意思是你可以——但这没有任何意义。
作为开发人员,您将需要了解该 int 数组实际上是多么“单片”。
我认为既然您在谈论 sql server,这表明您的应用程序可能是数据驱动的应用程序。如果是这种情况,我肯定会将数据库中的数组作为一个单独的表保存,每个值都有一条记录。它将被规范化和优化以进行检索。即使您在数组中只有几个值,您也可能需要将该数据与可能需要与您的数组值“连接”的其他检索数据结合起来。在这种情况下,通过使用索引、外键等(规范化)来优化 sql。
话虽如此,如果您不需要更改值,您始终可以硬编码代码中的 10 个值并保存到数据库的往返行程。这取决于您的应用程序如何工作以及该数组将用于什么。
我同意所有其他人关于最好是单独的标准化表的观点。但是,如果您坚持将它们全部放在同一张表中,请不要将数组放在一个单独的列中。相反,创建 10 列并将每个数组值存储在不同的列中。它将为您节省解析和更新问题。