SQL Server设计问题:将记录存储为行还是作为BLOB - NVARCHAR(MAX)

4
我正在为我们的工程师创建一个分析时间表。每天下载时间表并在本地计算机上进行分析。
现在,我面临这样一个困境:将时间表存储在数据库中作为表行还是作为nvarchar(max)。
以下是要求:
1. 时间表每天生成一次。每个时间表精确到1秒。因此,每个时间表最多包含86,400条记录。 2. 一天内,根据设置,系统可以为每个工程师生成高达100个时间表(我们有大约10个工程师)。 3. 时间表包含以下字段:INT | INT | INT | INT | NVARCHAR(1024) | NVARCHAR(64) | BIT | BIT | DATETIME | DATETIME (总结:4个整数、2个nvarchar、2个位和2个日期时间) 4. 时间表很少会被更新,但它可以被更新。可更新的字段是:2个位和1个日期时间。
现在看一下常见的情况:
一天内,它将生成大约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 BITs)。这些字段可以由应用程序 (在分析完日程表后) 或工程师 (手动) 在网站上更新。
  4. 所有生成的日程必须存储至少3个月,以便进行审计。
您的建议是什么?将日程存储为行
还是NVARCHAR(MAX)
1个回答

2
存储数据时,除了行数之外,将数据存储在一列中是否有任何好处?如果没有的话,按照规范化的方式存储数据对你来说是安全的。
我使用了两种存储数据的技术,因为有不同的需求。当然,在 VARBINARY(MAX)NVARCHAR(MAX) 中存储数据会带来许多困难:
  • 无法按某些字段进行索引和搜索
  • 为了执行更新操作,必须对数据进行规范化、修改,然后再次构建为字符串/二进制形式
  • 为了执行报告,必须再次规范化数据
因此,基于以上原因,我建议选择表格格式。此外,如果您认为将数据导出为某种序列化格式更好,您可以实现这样的 SQL CLR 字符串连接function 或者使用 内置函数(如果使用 SQL Server 2017 或更高版本)。
此外,最好使用分隔符,如CHAR(31)和CHAR(30),用于列和行。这比使用制表符/换行符/逗号/分号更清晰,因为输入数据不太可能包含这些字符并破坏您的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接