Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 通常,字符串(或varchar)字段用作联接字段吗?_Sql_String_Database Design_Types_Data Modeling - Fatal编程技术网

Sql 通常,字符串(或varchar)字段用作联接字段吗?

Sql 通常,字符串(或varchar)字段用作联接字段吗?,sql,string,database-design,types,data-modeling,Sql,String,Database Design,Types,Data Modeling,我们有两张桌子。第一个包含名称(varchar)字段。第二个表包含一个字段,该字段引用第一个表中的name字段。第二个表中的外键将对与该名称关联的每一行重复。通常不鼓励使用varchar/string字段作为两个表之间的连接吗?字符串字段何时可以用作连接字段的最佳情况?如果您关心性能,最好的了解方法是创建实现潜在设计选择的表,然后用大量数据加载这些表以查看发生了什么 理论上,非常小的字符串应该和连接中的数字一样好。实际上,这肯定取决于数据库、索引和其他实现选择。如果您关心性能,最好的了解方法是创

我们有两张桌子。第一个包含名称(varchar)字段。第二个表包含一个字段,该字段引用第一个表中的name字段。第二个表中的外键将对与该名称关联的每一行重复。通常不鼓励使用varchar/string字段作为两个表之间的连接吗?字符串字段何时可以用作连接字段的最佳情况?

如果您关心性能,最好的了解方法是创建实现潜在设计选择的表,然后用大量数据加载这些表以查看发生了什么


理论上,非常小的字符串应该和连接中的数字一样好。实际上,这肯定取决于数据库、索引和其他实现选择。

如果您关心性能,最好的了解方法是创建实现潜在设计选择的表,然后用大量数据加载这些表以查看发生了什么

理论上,非常小的字符串应该和连接中的数字一样好。实际上,它肯定取决于数据库、索引和其他实现选择

通常不鼓励使用varchar/string字段作为两个表之间的连接吗

如果要使用自然键(在现实生活中极为罕见,但州/省缩写就是一个很好的例子),那么VARCHAR字段就可以了

字符串字段用作联接字段的最佳情况是什么时候

取决于数据库,因为分配给数据类型的位,但通常VARCHAR(4)或更少占用与INT相同的空间量(更少的字符数)

通常不鼓励使用varchar/string字段作为两个表之间的连接吗

如果要使用自然键(在现实生活中极为罕见,但州/省缩写就是一个很好的例子),那么VARCHAR字段就可以了

字符串字段用作联接字段的最佳情况是什么时候


取决于数据库,因为为数据类型分配了位,但通常情况下,VARCHAR(4)或更少与INT占用的空间量(更少的字符数)大致相同。

在关系数据库中,您不应该在一个表中使用引用另一个表中相同字符串的字符串。如果第二个表是查找表,请为该表创建一个标识列,然后引用第一个表中的整数值。显示数据时,使用第二个表的联接。只需确保在第二个表中,您从未真正删除记录


唯一的例外情况是,如果您要创建一个存档表,以便准确存储在给定时间选择的内容。

在关系数据库中,您不应该在一个表中使用引用另一个表中相同字符串的字符串。如果第二个表是查找表,请为该表创建一个标识列,然后引用第一个表中的整数值。显示数据时,使用第二个表的联接。只需确保在第二个表中,您从未真正删除记录


唯一的例外情况是,如果您要创建一个归档表,以便准确存储在给定时间选择的内容。

这取决于数据的性质。 如果字符串是某个用户输入并更新的值,那么我可能会回避加入它。在父表和明细表中存储名称时,可能会遇到一致性困难

没有重复的名字


当使用guid或单字符标识符时,或者当我知道字符串是一个自然键时(尽管我几乎总是喜欢使用代理项),我使用了字符串字段作为连接。

这取决于数据的性质。 如果字符串是某个用户输入并更新的值,那么我可能会回避加入它。在父表和明细表中存储名称时,可能会遇到一致性困难

没有重复的名字


当我使用guid或单字符标识符时,或者当我知道字符串是一个自然键时,我使用了字符串字段作为连接(尽管我几乎总是喜欢使用代理)

一般来说,你不应该使用最终用户可编辑的任何内容,因为编辑不需要一次更新,但每个引用该键的表都有一个更新


其他人已经提到了查询的潜在性能影响,但更新成本也值得注意。我强烈建议改为使用生成的键。

一般来说,您不应该使用最终用户可编辑的任何内容作为FK,因为编辑不需要一次更新,而是每个引用该键的表都需要一次更新


其他人已经提到了查询的潜在性能影响,但更新成本也值得注意。我强烈建议使用生成的密钥。

自然主键(如邮政编码、电话号码、电子邮件地址或用户名)是按定义的字符串。有独特的和相对较短的


如果在这样的列上放置索引,那么将它们用作联接就没有问题。对性能的影响通常很小。

自然主键(如邮政编码、电话号码、电子邮件地址或用户名)是按定义的字符串。有独特的和相对较短的


如果在这样的列上放置索引,那么将它们用作联接就没有问题。对性能的影响通常是最小的。

当然可以使用varchar作为关键字段(或者简单地加入)。它的主要问题是基于通常存储在varchar字段中的内容;可变数据。严格来说,不建议更改关键字段。一个人的名字,电话号码,甚至他们的SSN都可以改变。但是,内部ID为3的员工将始终为ID 3,甚至