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