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

one*_*jig 1 sql string database-design types data-modeling

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

Kei*_*thS 9

当然可以使用varchar作为关键字段(或者只是要加入的东西).它的主要问题是基于你通常存储在varchar字段中的内容; 可变数据.严格来说,关键字段的变化是不可取的.一个人的姓名,电话号码,甚至他们的SSN都可以改变.但是,即使有两个John Smiths,内部ID为3的员工也将始终为ID 3.

其次,字符串比较依赖于许多挑剔的细节,如文化,整理,翻译的空白,等等,可以打破没有立即-明显的原因联接.假设您使用制表空间字符\ t表示您正在加入的某个字符串.后来,你改变你的软件来替换\吨,3个空格,以减少你的原始字符串字符转义.您现在已经破坏了任何需要带有转义选项卡的字符串的功能,以匹配相同但不同组成的字符串.

最后,即使给出两个完全相同的字符串,比较两个整数而不是比较两个字符串有一点性能上的好处.整数比较实际上是恒定时间.字符串比较最多是线性的,基于字符串的长度.


OMG*_*ies 6

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

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

什么时候字符串字段可以用作连接字段的最佳情况?

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