首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
V2EX  ›  MySQL

mysql 外键设置和查询

  •  
  •   aoscici2000 · 40 天前 · 975 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    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 显示

    16 回复  |  直到 2019-07-18 09:08:56 +08:00
        1
    codingadog   40 天前 via Android
    不要用外键
    连表查询
        2
    aoscici2000   40 天前
    @codingadog 为何呢?
        3
    gz911122   40 天前
    @aoscici2000 因为没啥必要..
        4
    agdhole   40 天前
    不要用外键
        5
    sunny2580839896   40 天前
    为啥不用外键??不用外键两个表怎么关联???只是针对上面回答的一些疑惑。
        6
    laravel   40 天前
    一般不用外键约束,就是这个
    CONSTRAINT `author_fk` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`),
    CONSTRAINT `catalog_fk` FOREIGN KEY (`catalog_id`) REFERENCES `catalog` (`id`)
        7
    LeeSeoung   40 天前
    人为约定而不建立约束。。因为外键约束很容易出问题,外键一般推荐用唯一标志 id
        8
    akira   40 天前   ♥ 1
    刚学数据库吧,如果是考试,那就老老实实按着书本来做。如果是工作了,三范式什么的就赶紧扔了。

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

    2. 典型 的 sql 的 left join 应用场景
        9
    fhsan   40 天前
    如果不用外键,一定要有一套代码来检查逻辑,要不然就是作死。
        10
    iwishing   40 天前
    看你数据量多少了
    有很多最佳实践提倡不要用外键,实际看你自己的需求。
        11
    hailiang88   40 天前
    外键可以保持数据一致性啊
        12
    arthas2234   40 天前
    1、关联 id
    2、关联查询,left join 搞定
    3、不要用外键
        13
    SKull4   39 天前
    @akira #8 这算不算一种倒退
        14
    haon   39 天前
    想知道大厂现在都抛弃外键了吗
        15
    akira   39 天前
    @SKull4 怎么会,理论都是说的理想情况,现实情况和理论不符合的多了去了
        16
    qsbaq   39 天前
    不要用外键+1
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3900 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 07:05 · PVG 15:05 · LAX 00:05 · JFK 03:05
    ♥ Do have faith in what you're doing.