【问题标题】:Is there a way to store array like data in a column in SQL Server?有没有办法在 SQL Server 的列中存储类似数组的数据?
【发布时间】:2014-07-23 20:08:54
【问题描述】:

我有一个包含测试问题的表格。表格的每一行都包含针对特定用户的测试问题的详细信息。

向用户展示了 3-5 个可能的答案,我想存储已在行中检查的答案的详细信息。我真的不想为每个答案添加新行,因为这会创建大量行。

有没有一种方法可以在 SQL Server 的列中存储诸如答案数组之类的内容?目前我将数据存储为 JSON 字符串,但我记得 Oracle 有一些方法可以存储数组数据,我想知道 SQL Server 是否有相同的方法。

【问题讨论】:

  • Noooooooooooooooooo!!!!!!
  • 我不会太担心大量的行。 SQL Server 旨在处理大量行。此外,一旦您将数据作为行,您就可以创建很好的查询来汇总和报告它,这比将其存储在 json 或字段内的内容中要容易得多。 xprogramming.com/Practices/PracSimplest.html
  • 你可能会觉得这也很方便stackoverflow.com/questions/759244/…
  • 您的问题“我不想存储大量行”不是问题。这就是标准化设计存储此类数据的方式。您当然可以以您希望的方式存储它,但这将导致更多地访问 stackoverflow 并提出问题以解决这个糟糕的设计。
  • SQL Server 中的“数组”或“列表”是一个表!

标签: sql-server


【解决方案1】:

通常去规范化不是一个好主意。这很少是个好主意。但是,有时出于性能原因需要这样做。所以,如果不是太慢,甚至不要考虑它。

如果您在您的案例中使用 TestQuestionID(或任何您称之为单个问题的答案)作为聚集索引来制作辅助答案表,那么与非规范化相比,它根本不会有太大的性能差异表。

如果我对您描述的表进行非规范化,我可能只会在表中创建 5 列,您也可以使用 xml 字段,但您存储的只是 5 个答案,所以在这种简单的情况下我不会使用 xml。

既然你问这个问题,你就不是一个真正的经验丰富的专业人士(我们都是新手),你应该在去规范化之前咨询当地的 sql 专家。

添加警告,

既然您接受了这个答案,您确实需要确定非规范化是几乎总是错误的做法。这就是为什么包括我在内的每个人都想告诉你的原因。不要在没有与您的 DBA 交谈的情况下执行此操作——如果您没有本地 DBA(不幸的是太常见了),请采纳集体建议,不要非规范化。在我的职业生涯中,我只能想到 1 次我认为非规范化是正确的解决方案。而且我在很多情况下都被不恰当的反规范化(强加给我的)糟糕的设计所困扰。

【讨论】:

  • ...除了返回(正确答案)/(答案数量)的聚合视图数量的聚合视图,以便及时识别课程位置的子集,例如学校、学区或州。
  • 很明显你反对非规范化 99.97% 的时间是正确的,因为你举了一个例子——但是,仍然存在性能问题,当你做了所有其他事情时你会做什么,它仍然太慢了?不是你认为它太慢,而是它太慢了——性能考虑正在破坏你的应用程序,你必须让它更快。你咬紧牙关,去规范化并承担后果。
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 2022-11-17
  • 2021-06-29
相关资源
最近更新 更多