我很好奇,在创建一个子表来保存一组数据和将所有数据放在主表中放在第一位之间是否有什么折衷?
我的设想是,我有处理各种指标的数据。例如lastupdated和amtof。我很好奇,是将所有这些数据放在一个表中(特别是对于度量)并通过外键引用它,还是将所有这些字段直接放在主表中并放弃任何外键?有取舍吗?性能考虑因素?
我指的是关系型数据库管理系统,比如SQLServer,具体来说,我将使用EntityFrameworkCore和MSSQLServer。
我很好奇,在创建一个子表来保存一组数据和将所有数据放在主表中放在第一位之间是否有什么折衷?
我的设想是,我有处理各种指标的数据。例如lastupdated和amtof。我很好奇,是将所有这些数据放在一个表中(特别是对于度量)并通过外键引用它,还是将所有这些字段直接放在主表中并放弃任何外键?有取舍吗?性能考虑因素?
我指的是关系型数据库管理系统,比如SQLServer,具体来说,我将使用EntityFrameworkCore和MSSQLServer。
1条答案
按热度按时间hzbexzde1#
你的问题似乎更多地是关于这两种方法之间的考虑,而不是问哪种方法更好。后者更像是一种观点。这是针对前者的。
拥有一个1-1的独立表的主要优点是将度量与实体的其他信息隔离开来。这种类型的数据模型有一个名字,垂直分区(或者至少我第一次了解它时是这么叫的)。
这有一定的好处:
数据行的宽度较小。因此,只需要“真实”数据(或只需要度量)的查询速度更快。
指标是孤立的。因此,添加新的度量并不需要重写“真实”数据。
查询,例如
select *
对“真实”数据只返回真实数据。只修改度量的查询不会锁定“真实”数据。
如果您有很多列,并且它们可以放入两个表中,但不能放入一个表中,那么也可能存在边缘情况。
当然,还有开销:
你需要一个
JOIN
连接两张table(虽然使用相同的主键,但连接将非常快)。同时修改“真实”数据和度量的查询更加复杂,必须同时锁定这两个表。