【发布时间】:2022-01-17 00:27:17
【问题描述】:
我在 SQL Server 中有一个相当大的数据库。为了说明我的用例,假设我有一个手机游戏,我想报告用户活动。
首先我有一个看起来像这样的表:
| userId | date | # Sessions | Total Session Duration |
|---|---|---|---|
| 1 | 2021-01-01 | 3 | 55 |
| 1 | 2021-01-02 | 9 | 22 |
| 2 | 2021-01-01 | 6 | 43 |
我正在尝试将每个会话的信息“添加”到此数据中。我正在考虑的选项是:
- 将会话数据添加为包含 JSON 数组的新列,其中包含每个会话的数据
- 用
userId&date索引的所有会话数据创建一个表 - 并根据需要查询此表。
这在 SQL Server 中可行吗? (我的经验来自 GCP 的 BigQuery)
【问题讨论】:
-
任何一种方法都是可行的,具体取决于您需要如何处理这些信息。如果您要经常查询数据,那么我会敦促您将数据正确规范化到相关表中。如果你不这样做,你将不断地解析你的 JSON 值,这并不理想。但如果是更多的历史数据,那么将其存储为 JSON 可能是一个非常合理的解决方案。这里最大的问题是没有足够的信息来提供太多帮助。任何建议都将基于意见。
-
是的。事实上,我正在尝试为一些字段构建类似“迷你图”的东西 - 我不确定嵌套 JSON 是否比获取数据的多个查询更好。 IE。是否值得尽量减少对数据库的查询次数?
-
最小化查询将以标准化、查询复杂性和最重要的性能为代价。正确规范化的数据库性能更高。 JSON 和 XML 等是为值的结构完全未定义而设计的,并且您只想存储一个 blob 供应用程序检索(想想文档、PDF、XHTML、来自非常不同来源的数据)
标签: sql-server tsql database-design