mysql 外键设置和查询

2019-07-17 11:51:15 +08:00
 aoscici2000

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 显示

4628 次点击
所在节点    MySQL
16 条回复
codingadog
2019-07-17 12:14:03 +08:00
不要用外键
连表查询
aoscici2000
2019-07-17 12:28:50 +08:00
@codingadog 为何呢?
gz911122
2019-07-17 13:06:15 +08:00
@aoscici2000 因为没啥必要..
agdhole
2019-07-17 13:13:23 +08:00
不要用外键
sunny2580839896
2019-07-17 13:37:04 +08:00
为啥不用外键??不用外键两个表怎么关联???只是针对上面回答的一些疑惑。
laravel
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`)
LeeSeoung
2019-07-17 13:51:30 +08:00
人为约定而不建立约束。。因为外键约束很容易出问题,外键一般推荐用唯一标志 id
akira
2019-07-17 14:05:48 +08:00
刚学数据库吧,如果是考试,那就老老实实按着书本来做。如果是工作了,三范式什么的就赶紧扔了。

1. 工作环境严重不建议用“ FOREIGN KEY ”, 直接做索引连表查询就好了。 更进一步的话,我们会把作者和分类的名字都冗余进文章表里面,这样直接单表就能出必要数据了。

2. 典型 的 sql 的 left join 应用场景
fhsan
2019-07-17 14:10:57 +08:00
如果不用外键,一定要有一套代码来检查逻辑,要不然就是作死。
iwishing
2019-07-17 14:16:12 +08:00
看你数据量多少了
有很多最佳实践提倡不要用外键,实际看你自己的需求。
hailiang88
2019-07-17 14:26:00 +08:00
外键可以保持数据一致性啊
arthas2234
2019-07-17 14:41:56 +08:00
1、关联 id
2、关联查询,left join 搞定
3、不要用外键
SKull4
2019-07-17 16:12:51 +08:00
@akira #8 这算不算一种倒退
haon
2019-07-17 16:39:06 +08:00
想知道大厂现在都抛弃外键了吗
akira
2019-07-17 18:31:54 +08:00
@SKull4 怎么会,理论都是说的理想情况,现实情况和理论不符合的多了去了
qsbaq
2019-07-18 09:08:56 +08:00
不要用外键+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX