CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(16) NOT NULL,
)
CREATE TABLE `catalog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(16) NOT NULL,
)
CREATE TABLE `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT',
  `catalog_id` int(11) NOT NULL COMMENT '目录 id',
  `author_id` int(11) NOT NULL COMMENT '作者 id',
  CONSTRAINT `author_fk` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`),
  CONSTRAINT `catalog_fk` FOREIGN KEY (`catalog_id`) REFERENCES `catalog` (`id`)
)
如以上所示的三张表, 在 article 创建外键的时候, 一般是用 id 还是直接使用 name 的好(name 值可能经常会做出修改)?
如果外键用 id, 查询 article 怎么能让结果返回直接使用 name 显示
|  |      1Duolingo      2019-07-17 12:14:03 +08:00 via Android 不要用外键 连表查询 | 
|      2aoscici2000 OP @codingadog 为何呢? | 
|  |      3gz911122      2019-07-17 13:06:15 +08:00 @aoscici2000 因为没啥必要.. | 
|  |      4agdhole      2019-07-17 13:13:23 +08:00 不要用外键 | 
|  |      5sunny2580839896      2019-07-17 13:37:04 +08:00 为啥不用外键??不用外键两个表怎么关联???只是针对上面回答的一些疑惑。 | 
|  |      6laravel      2019-07-17 13:41:58 +08:00 一般不用外键约束,就是这个 CONSTRAINT `author_fk` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`), CONSTRAINT `catalog_fk` FOREIGN KEY (`catalog_id`) REFERENCES `catalog` (`id`) | 
|  |      7LeeSeoung      2019-07-17 13:51:30 +08:00 人为约定而不建立约束。。因为外键约束很容易出问题,外键一般推荐用唯一标志 id | 
|  |      8akira      2019-07-17 14:05:48 +08:00  1 刚学数据库吧,如果是考试,那就老老实实按着书本来做。如果是工作了,三范式什么的就赶紧扔了。 1. 工作环境严重不建议用“ FOREIGN KEY ”, 直接做索引连表查询就好了。 更进一步的话,我们会把作者和分类的名字都冗余进文章表里面,这样直接单表就能出必要数据了。 2. 典型 的 sql 的 left join 应用场景 | 
|  |      9fhsan      2019-07-17 14:10:57 +08:00 如果不用外键,一定要有一套代码来检查逻辑,要不然就是作死。 | 
|  |      10iwishing      2019-07-17 14:16:12 +08:00 看你数据量多少了 有很多最佳实践提倡不要用外键,实际看你自己的需求。 | 
|      11hailiang88      2019-07-17 14:26:00 +08:00 外键可以保持数据一致性啊 | 
|  |      12arthas2234      2019-07-17 14:41:56 +08:00 1、关联 id 2、关联查询,left join 搞定 3、不要用外键 | 
|      14haon      2019-07-17 16:39:06 +08:00 想知道大厂现在都抛弃外键了吗 | 
|      16qsbaq      2019-07-18 09:08:56 +08:00 不要用外键+1 |