SQL 具有由不同工具管理的相似数据的数据库的规范化

Normalization of SQL Database with similar data managed by different tools

我正在设计一个数据库来存储一堆产品数据,这些数据都是通过 API 提取并从网络上删除的。此抓取器将拉取一些静态数据和一些随时间变化的数据。因此,每种数据类型 (static/variable) 都有一个 table。我试图决定是否应该有一个单独的 table 用于与通过 API 提取的变量数据相比被抓取的变量数据。

起初,我认为它们应该存储在单独的 table 中,因为它们由单独的工具管理。但是,数据将通过 API 提取并按相同的时间表(每天)抓取,因此它们都将映射到相同的 ProductID 和日期。因此,似乎我可以将两个 table 的架构结合起来,以节省查询期间的连接时间,以便稍后处理数据。这样做的明显缺点是管理是否需要在其中一个进程运行时创建或更新行(哪个抓取工具与 API 工具创建或更新行)。

就其价值而言,这些脚本每天将提取数百万(也许数千万)行的数据,并将其存储相当长一段时间。所以,tables 将变得相当大,这就是我稍后关注连接时间的原因。

这里有一个例子,以防万一有点模糊。有多个行业,但我只使用房地产:
抓取的静态数据:ProductID、Address、City、State、Zip、SquareFeet 等
抓取的变量数据:ProductID、Price、PricePerSqFt 等
API 变量数据:ProductID、PageHits、UniqueVisitors 等

这里主要关注变量数据。所以,总结一下,为了通用设计原则分开 table,还是为了连接速度分开一个 table?

提前感谢您的输入

您给出的示例表明,除了有 2 或 3 个 table 之外,您还应该考虑只为静态和可变数据设置一个 table。只要一切的关键只是产品 ID,您就可以将描述特定 ID 值的所有信息保存在一条记录中。还是您打算将时间戳记作为可变数据键的一部分?

一旦确定了这一点,我看不出拥有比必要更多的 table 有什么好处。

  • 您提到的联接不会特别复杂,因为它们基本上意味着每次使用主键从每个 table 中读取一条记录,即快速地。但仍然阅读 3 条记录比阅读 2 条或仅阅读 1 条记录更费力。

  • 没有通用的设计原则说您应该为每种收集数据的方式设置单独的 table。相反,数据库的目的是根据数据的逻辑结构包含数据,而不(过多)考虑收集或访问数据的技术手段。

  • 决定是插入还是更新行的逻辑并不复杂。此外,如果您想验证您的数据,您可能仍然需要一些逻辑,例如确保只为已经具有静态数据的对象插入可变数据。