2011-08-11 38 views
0

给定两个表booksauthors,其中每个表都有一个唯一的密钥,它是varchar类型,它可以在我的生态系统中识别它们。 在多对多表中使用这些密钥作为外键有意义还是应该在表authorsbooks中发现int类型的主键以避免开销?已有的密钥长度不超过255.使用varchar列作为外键引用是否有意义?

回答

1

我总是喜欢代理键。它可以保护您免受未来未知的更改,因为它与应用程序数据分离。

0

我认为更好的方法是使用int key作为主键。首先 - 你会避免开销,其次 - 你会获得一些表现。

+0

感谢您的回答。也许你可以解释一下你为什么这么想?这是因为性能问题吗? – Aufwind

+0

特别表现。比较变量需要比整数更长的时间。其次 - 添加自动增量键比通过数据库并检查varchar键是否已经存在要快得多。当数据库变得足够大时,这可能会非常糟糕。 – vaidas

+0

这些都是很好的论据。感谢您指出了这一点! – Aufwind

0

int将是更好的方法。你可能有一个大的努力,但重做现有的数据 - 这可能会影响你很难做出改变......

我建议,进行这项调整更早而不是更晚将在长期来看会更加容易。

0

创建一个新的主键是一个好主意, 作为一个主键也强制非空约束。

0

虽然我也认为int键更好,但我认为您不应该对主键进行任何更改,因为它已经可以工作。例如,你的varchar键可能是有意义的,例如,书本的ISBN码。 如果没有损坏,请不要修复它

相关问题