【问题标题】:SQL Server: Design question - stored records as rows vs as BLOB - NVARCHAR(MAX)SQL Server:设计问题 - 将记录存储为行与 BLOB - NVARCHAR(MAX)
【发布时间】:2019-02-10 04:15:00
【问题描述】:

我正在为我们的工程师制定一个分析时间表。每天都会下载时间表,并在本地计算机上进行分析。

所以,现在,我处于将日程表存储为表行或 nvarchar(max) 的困境中。

这是要求

  1. 每天都会生成计划。每个时间表精确到 1 秒。因此,每个时间表最多将包含 86,400 条记录。
  2. 一天内,根据设置,系统可以为每位工程师生成多达 100 个时间表(我们有大约 10 名工程师)
  3. 计划包含以下字段:INT | INT | INT | INT | NVARCHAR(1024) | NVARCHAR(64) | BIT | BIT | DATETIME | DATETIME(总而言之:4x INT,2x NVARCHAR 、2x BIT 和 2x DATETIME)
  4. 时间表很少会更新,但可以更新。可更新字段为:2x BITs1x DATETIME

现在来看常见的情况:

一天之内,它会产生大约 1,296,000 条记录/

This is the calculation of common case scenario:
- 10 seconds accuracy per schedule = 8,640 rows
- 5 engineers run the scheduler each day
- Each engineer generates about 30 schedules

So total is: 8,640 * 5 * 30 = 1,296,000 records

如果我将每个计划存储为 NVARCHAR(MAX),并以 逗号分隔,那么记录数将减少到只有 每天 150 条记录

Here is the calculation:
- 10 seconds accuracy per schedule = 8,640 rows --> stored as NVARCHAR (becomes 1 record)
- 5 engineers run the scheduler each day
- Each engineer generates about 30 schedules

So total is: 5 * 30 = 150 records

现在,这是对这些时间表的要求:

  1. 可以在网站上查看生成的时间表。
  2. 应用程序每天都会下载时间表进行分析。
  3. 分析完成后,可以更新字段(2x BIT)。这些字段可以由应用程序更新(在完成计划分析后),也可以由网站上的工程师(手动)更新。
  4. 所有生成的计划必须至少保存 3 个月以供审核。

您的建议是什么?将计划存储为 表格行NVARCHAR(MAX)

【问题讨论】:

    标签: sql-server tsql database-design sql-server-2012 relational-database


    【解决方案1】:

    将数据存储在除行数之外的一列中是否有任何好处?如果没有,对我而言,您可以保存以标准化方式存储数据。


    由于需求不同,我使用了这两种技术来存储数据。当然,将数据存储在VARBINARY(MAX)NVARCHAR(MAX) 会带来很多困难:

    • 无法按某些字段索引和搜索
    • 为了执行更新,必须对数据进行规范化、修改,然后再次构建为字符串/二进制文件
    • 为了执行报告,数据必须再次标准化

    因此,由于上述原因,我会建议选择表格格式。此外,如果您觉得以某种序列化方式导出数据更好,您可以随时实现 SQL CLR string concatenation function 或使用 built-in 如果使用 SQL Server 2017 及更高版本。

    此外,最好将separators 与 CHAR(31) 和 CHAR(30) 一样用于列和行。然后使用制表符/换行符/逗号/分号更清楚,因为输入数据不太可能包含此类并破坏您的数据。

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2015-07-08
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多