给定两个表books
和authors
,其中每个表都有一个唯一的密钥,它是varchar
类型,它可以在我的生态系统中识别它们。 在多对多表中使用这些密钥作为外键有意义还是应该在表authors
和books
中发现int
类型的主键以避免开销?已有的密钥长度不超过255.使用varchar列作为外键引用是否有意义?
0
A
回答
1
我总是喜欢代理键。它可以保护您免受未来未知的更改,因为它与应用程序数据分离。
0
我认为更好的方法是使用int key作为主键。首先 - 你会避免开销,其次 - 你会获得一些表现。
0
int将是更好的方法。你可能有一个大的努力,但重做现有的数据 - 这可能会影响你很难做出改变......
我建议,进行这项调整更早而不是更晚将在长期来看会更加容易。
0
创建一个新的主键是一个好主意, 作为一个主键也强制非空约束。
0
虽然我也认为int键更好,但我认为您不应该对主键进行任何更改,因为它已经可以工作。例如,你的varchar键可能是有意义的,例如,书本的ISBN码。 如果没有损坏,请不要修复它。
相关问题
- 1. 使用对象散列代码作为内存缓存键是否有意义?
- 2. 使用“varchar”作为主键?馊主意?还是好的?
- 3. MySql/Cloudbees VARCHAR作为外键
- 4. 外键是否总是引用主键?
- 5. 外键引用的主键可以是mysql中的varchar(255)吗?
- 6. 总是使用Straight_JOIN是否有意义?
- 7. 是否有意义使用ViewModel
- 8. 是否有意义使用pg_pconnect(php-fpm)
- 9. 有可能引用一列作为多个外键
- 10. 使用列的值(而不是数字ID)作为外键引用
- 11. 使用基数较低的索引是否有意义?
- 12. 索引是否有意义加快UPDATE的使用?
- 13. 使用neo4j索引文件系统是否有意义
- 14. 是否有可能将视图中的列引用为外键(postgres)
- 15. 向多对多表添加外键关系是否有意义
- 16. 引用复合主键的一列作为外键
- 17. 是否有没有用于定义自动增量列作为主键
- 18. 有一个非可选的弱引用是否有意义?
- 19. 没有外键引用的Sql列
- 20. 意外const引用行为
- 21. 使用Socket.SendAsync时排队发送操作是否有意义?
- 22. 是否使包含另一个索引的索引有意义?
- 23. 多列外键引用
- 24. 当fk列是pk的子集时,主键索引是否会用作外键的索引?
- 25. 将列引用为外键的所有列
- 26. MySQL - 也使用外键作为主键
- 27. 使用复合主键作为外键
- 28. 使用外键作为主键
- 29. Nhibernate只返回列是否有意义?
- 30. OpenCV中的const Mat引用是否有意义?
感谢您的回答。也许你可以解释一下你为什么这么想?这是因为性能问题吗? – Aufwind
特别表现。比较变量需要比整数更长的时间。其次 - 添加自动增量键比通过数据库并检查varchar键是否已经存在要快得多。当数据库变得足够大时,这可能会非常糟糕。 – vaidas
这些都是很好的论据。感谢您指出了这一点! – Aufwind