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