Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 事实表中包含所有外键的优点/缺点是什么?_Sql_Foreign Keys_Primary Key_Normalization_Star Schema - Fatal编程技术网

Sql 事实表中包含所有外键的优点/缺点是什么?

Sql 事实表中包含所有外键的优点/缺点是什么?,sql,foreign-keys,primary-key,normalization,star-schema,Sql,Foreign Keys,Primary Key,Normalization,Star Schema,我们的团队正计划向事实表中添加缺少的维度键(FK),以允许在维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要较少的联接) 我在网上读到外键(FK)约束将影响插入、更新和删除的性能 是否还有其他需要考虑的事情? 主要缺点是事实表记录的大小增加了。您不指定行的大小,但添加新外键可能会显著影响行的大小 在大多数数据库中,事实表中增加行大小会减慢查询速度。然而,在一个专栏数据库中,这并不是一个问题 事实上,增加的大小可能会超过避免连接的好处 通常,我不会担心主

我们的团队正计划向事实表中添加缺少的维度键(FK),以允许在维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要较少的联接)

我在网上读到外键(FK)约束将影响插入、更新和删除的性能


是否还有其他需要考虑的事情?

主要缺点是事实表记录的大小增加了。您不指定行的大小,但添加新外键可能会显著影响行的大小

在大多数数据库中,事实表中增加行大小会减慢查询速度。然而,在一个专栏数据库中,这并不是一个问题

事实上,增加的大小可能会超过避免连接的好处

通常,我不会担心主键上的中小型维度表上的联接。也就是说,在进行这种根本性的更改之前,对全面数据进行大量测试

insert
s的影响只是需要验证密钥。但是,这是针对引用表的主键进行检查,因此这些检查非常快。“多”显然比“少”更贵,但开销可能不会阻碍演出

有一件事可能是有利的,也可能是不利的,那就是维度在输入时是静态的。更新事实表通常相当昂贵。然而,维度确实会发生变化。例如,偶尔会创建新的国家。这在历史数据中是如何表示的


在雪花模式中,您的最低地理级别(可能)比一个国家更精细,并且只需要更新维度。而且,如果事实表中的最低级别需要更新,则会影响相对较少的行。

感谢Gordon,这里我将介绍一些非常有见地的观点:)