用于保存数据的外键 table 与父 table 中的数据 'inlining' 相比?表现?

Foreign Key tables to hold data vs 'inlining' that data within the parent table? Performance?

我很好奇创建一个子 table 来保存一组数据与首先将所有数据放在主 table 中是否有任何权衡?

我的情况是我有处理各种指标的数据。如 LastUpdated 和 AmtOfXXX。我很好奇将所有这些数据放在 Table 中(专门用于指标)并通过外键引用它会更好,还是将所有这些字段直接放在主 table 中并放弃任何外键?有取舍吗?性能注意事项?

我指的是关系数据库管理系统,例如 SQL Server,具体来说,我将使用 Entity Framework Core with MS SQL Server。

您的问题似乎更多地是关于两种方法之间的注意事项,而不是问哪种方法更好。后者更多是一种意见。这解决了前者。

具有单独的 table 即 1-1 的主要优点是将指标与有关实体的其他信息隔离开来。这种类型的数据模型有一个名称,垂直分区(或者至少这是我第一次了解它时的名称)。

这有一定的好处:

  • 数据行的宽度较小。因此,仅需要“真实”数据(或仅指标)的查询速度更快。
  • 指标是孤立的。因此添加新指标不需要重写“真实”数据。
  • 诸如 select * 之类的查询仅针对“真实”数据 returns 真实数据。
  • 仅修改指标的查询不会锁定“真实”数据。

如果您有很多列并且它们适合两个 table 但不适合一个,则也可能存在边缘情况。

当然有开销:

  • 你需要一个 JOIN 来连接两个 table。 (虽然使用相同的主键,但连接会很快)。
  • 同时修改“真实”数据和指标的查询更加复杂,必须同时锁定 tables。