Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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_Composite Key - Fatal编程技术网

Sql 复合键中的一个字段是否可以依赖于另一个字段?

Sql 复合键中的一个字段是否可以依赖于另一个字段?,sql,composite-key,Sql,Composite Key,我正在考虑为我的表(由两个字段组成,字段a和B)创建一个复合键。但是,字段B依赖于字段A。此复合键是否违反任何数据库设计原则?是的。它确实违反了数据库设计原则。为什么不直接使用A?也就是说,您总是可以使用JOIN查找B的值,因此不需要复合外键引用。在引用表中存储B的值是冗余和低效的(占用数据页和索引页中的空间) 在某些情况下,这样的外键很有用。您没有提供足够的信息来了解您是否有此类案例。因此,作为一般的设计原则,这听起来并不正确。可能会有例外,所以这并不总是一个坏主意。嗯,是的。它确实违反了数据

我正在考虑为我的表(由两个字段组成,字段a和B)创建一个复合键。但是,字段B依赖于字段A。此复合键是否违反任何数据库设计原则?

是的。它确实违反了数据库设计原则。为什么不直接使用
A
?也就是说,您总是可以使用
JOIN
查找
B
的值,因此不需要复合外键引用。在引用表中存储
B
的值是冗余和低效的(占用数据页和索引页中的空间)


在某些情况下,这样的外键很有用。您没有提供足够的信息来了解您是否有此类案例。因此,作为一般的设计原则,这听起来并不正确。可能会有例外,所以这并不总是一个坏主意。

嗯,是的。它确实违反了数据库设计原则。为什么不直接使用
A
?也就是说,您总是可以使用
JOIN
查找
B
的值,因此不需要复合外键引用。在引用表中存储
B
的值是冗余和低效的(占用数据页和索引页中的空间)


在某些情况下,这样的外键很有用。您没有提供足够的信息来了解您是否有此类案例。因此,作为一般的设计原则,这听起来并不正确。可能会有例外,所以这并不总是一个坏主意。

?你的意思是B在某种程度上是从A计算出来的,还是别的什么?计算列可以用作键,仅供参考。在这种情况下,代理主键(如标识列)可能更可取。这只是一个示例,但这里的情况与我的类似。假设你有一个汽车制造商专栏和一个汽车模型专栏。数据库将看起来包含以下列(汽车制造商、型号)。由于有许多车型属于同一家汽车制造商,因此必须将汽车制造商和车型结合起来,才能有唯一的索引。型号取决于制造商,因此它符合我最初发布的A和B模式。这样的表格结构(代理_prime、汽车制造商、模型)不合适,(在下一篇评论中继续),因为模型仍然依赖于汽车制造商,而汽车制造商不是主键。如果模型是唯一的,意味着两个不同的品牌不能拥有相同的模型,那么模型应该是您的主键,make应该是引用汽车制造商表的外键。是否依赖?你的意思是B在某种程度上是从A计算出来的,还是别的什么?计算列可以用作键,仅供参考。在这种情况下,代理主键(如标识列)可能更可取。这只是一个示例,但这里的情况与我的类似。假设你有一个汽车制造商专栏和一个汽车模型专栏。数据库将看起来包含以下列(汽车制造商、型号)。由于有许多车型属于同一家汽车制造商,因此必须将汽车制造商和车型结合起来,才能有唯一的索引。型号取决于制造商,因此它符合我最初发布的A和B模式。这样的表格结构(代理_prime、汽车制造商、模型)不合适,(在下一篇评论中继续),因为模型仍然依赖于汽车制造商,而汽车制造商不是主键。如果模型是唯一的,意味着两个不同的品牌不能拥有相同的模型,那么模型应该是您的主键,make应该是引用汽车制造商表的外键。B可能依赖于a以及C、D等。在这种情况下,a本身可能不足以成为唯一的主键,并且需要类似于B的东西(依赖于a和其他依赖项)来形成唯一的复合主键。我认为这类事情并非完全不合理。B可能依赖于A以及C、D等。在这种情况下,A本身可能不足以成为唯一的主键,需要类似B的东西(依赖于A和其他依赖项)来形成唯一的复合主键。我认为这类事情并非完全不合理。