› 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
gdb
V2EX  ›  MySQL

请问谁能推荐一个数据库建表的设计工具,类似于 GUI 的那种,表和表之间会自动加一些箭头

  •  1
     
  •   gdb · Aug 13, 2023 · 6249 views
    This topic created in 1138 days ago, the information mentioned may be changed or developed.

    我最近打算使用 mysql 设计一个软件,数据库用来存放一些历史数据,需要设计一些数据库的表格。

    我在网上看到有一些工具,设计不同的表之后,表和表之间的外键连接会通过箭头连接的方式显示在 gui 界面里面。

    同时能生成 sql 的语句来创建这些表,请问有这样的工具么?在线的或者离线的都可以推荐,最好是免费可以使用的,谢谢!

    35 replies  •  2024-11-12 15:12:24 +08:00
    teli
        1
    teli  
       Aug 13, 2023
    不建议添加外键
    ruochen666
        2
    ruochen666  
       Aug 13, 2023
    powerdesigner
    balancircle
        3
    balancircle  
       Aug 13, 2023
    wusheng0
        4
    wusheng0  
       Aug 13, 2023 via Android
    taotaodaddy
        6
    taotaodaddy  
       Aug 13, 2023
    navicat 较新版本有带连线和箭头的设计工具
    565656
        7
    565656  
       Aug 13, 2023
    jb 全家桶里好像有个
    lujiaxing
        8
    lujiaxing  
       Aug 13, 2023
    PowerDesigner 就可以.
    你要是觉得 PD 比较古老你可以试试 Navicat. 也有这种功能.
    lujiaxing
        9
    lujiaxing  
       Aug 13, 2023
    @teli 为什么不建议
    loading
        10
    loading  
       Aug 13, 2023   ❤️ 1
    《为什么数据库不应该使用外键》

    https://draveness.me/whys-the-design-database-foreign-key/
    akira
        11
    akira  
       Aug 13, 2023
    外键,触发器这些东西,用的时候是爽了,出问题的时候,排查起来头大的要命
    gdb
        12
    gdb  
    OP
       Aug 13, 2023 via Android
    我是一个初学者,楼上好几个人都说不要使用外键,但我觉得很奇怪,如果不使用外键的话,这个关系型数据库如何进行表和表之间的关联呢?
    AEDaydreamer
        13
    AEDaydreamer  
       Aug 13, 2023
    用逻辑外键,非物理外键。
    ktqFDx9m2Bvfq3y4
        14
    ktqFDx9m2Bvfq3y4  
       Aug 13, 2023 via iPhone
    @gdb
    数据库知道地越少,压力就越小。

    表之间没有关联会阻止你关联查询数据么?
    charlie21
        15
    charlie21  
       Aug 13, 2023 via iPhone
    外键、索引、约束 ( constraint ,删掉一行数据时候会提示无法删除因为有约束存在),三者关系是什么?

    如果一个约束是为了在 “误删”数据之时丢出报错,那么在无外键的情况下还有一个约束吗?
    loading
        16
    loading  
       Aug 13, 2023
    @charlie21 #15 现在都是逻辑删除,不是真删除。
    逻辑删除无论是性能还是防误操作,都更优。

    逻辑删除一般就是有个 delete_time 一类的字段默认 null ,not null 就是已经删除了。
    iseki
        17
    iseki  
       Aug 13, 2023   ❤️ 3
    @loading 阅读了下这篇文章,结论基本可以从不使用外键修改为不使用 MySQL 。
    至于文章中讨论的,数据删除导致大量写入,这就是需求本身所要求的,无论你用不用外键,数据删除是一定要删的。
    至于 #16 提及的,所谓软删除,是彻彻底底的反模式,基本可以视为概念不清导致的混乱设计,可以查看[这个链接]( https://twitter.com/haoel/status/1440633425279389707)。

    @gdb 你需要的是 ERD 软件,Navicat 和 MySQL 自带的 MySQL Workbench 可以满足这个需求
    iseki
        18
    iseki  
       Aug 13, 2023
    loading
        19
    loading  
       Aug 13, 2023
    @iseki #17 数据库传统模式和现在的访问量需求和读写差异问题几乎是矛盾的,特别是范式。

    软删除很多时候不是防止误删除,还有其他产品上某些功能和体验上的需求,不只从 DB 方面考虑了。
    iseki
        20
    iseki  
       Aug 13, 2023   ❤️ 3
    @loading 链接中有讲到,如果产品和功能上有要求,那显然就不该是简单的删除。该是什么就叫什么,是隐藏就是隐藏,是禁用就是禁用,而不是一个笼统的删除。

    @loading 这里我不愿意提及 MySQL 的各种问题。单论你说的外键导致的级联删除,这一点不是不用外键就可以规避的。
    此外,数据库的外键可以极大程度保证数据的一致性。我所见很多程序员,高喊着不用外键,然后写出完全不考虑异常状态下一致性和完整性的代码,不一定是他们不愿意考虑,也有时是他们想不明白。这种情况下,数据库的实现要远远比应用自己实现的更可靠,成本更低。
    iseki
        21
    iseki  
       Aug 13, 2023
    至于针对性能的讨论,这个可能就要 case by case 地分析和论证了
    Rache1
        22
    Rache1  
       Aug 13, 2023
    Jetbrains 的 DataGrip 生成的图会自动考虑你表名(复数、单数)和字段名之间的关系,来生成 “箭头”,不依赖外键。

    比如:

    users 表有用户 id ,posts 表有 user_id ,那就会自动把 posts 表和 users 表关联起来。

    再比如,categories 表和 products 表有一个关系表,分别有 category_id 和 product_id ,DataGrip 也能帮你自动连起来。

    也就是说,只要你表名称是复数的,字段名字是单数 + id 的形式,他就可以自动推断出来。
    isbase
        23
    isbase  
    PRO
       Aug 13, 2023 via iPhone
    @Rache1 表名单数也可以
    leonshaw
        24
    leonshaw  
       Aug 14, 2023
    @gdb 大胆用,做个简单的软件用数据库存点数据,什么性能不性能的,怎么方便怎么来。
    qsnow6
        25
    qsnow6  
       Aug 14, 2023
    用就完事,国外的社区主流的观点都是应用尽用。
    不然搞 ORM 搞啥。
    a33291
        26
    a33291  
       Aug 14, 2023
    曾经有一个项目必须走边界摆渡数据到内网,然后边界摆渡时,如果有外键则经常导致数据错乱,没办法只能删掉外键🤣
    kinXdle
        27
    kinXdle  
       Aug 14, 2023
    不用外键是因为没有 dba 啊
    TomatoCLI
        28
    TomatoCLI  
       Aug 14, 2023 via iPhone
    没想到外键警察也出现了....都魔怔了
    TomatoCLI
        29
    TomatoCLI  
       Aug 14, 2023 via iPhone
    我喜欢用 plantuml 来画 如果不想折腾 navicat 之类的 当然记得导出的时候去除外键
    YinHeWL
        30
    YinHeWL  
       Aug 14, 2023
    用 MySQL 不用外键的,真令人无语
    manasheep
        31
    manasheep  
       Aug 14, 2023
    @teli
    @akira
    @Chad0000
    那是不是直接用非关系数据库更好~
    hakuya7
        32
    hakuya7  
       Aug 14, 2023
    PlanetScale 直接就是明确不支持外键的,在这篇文章有提到原因 https://planetscale.com/docs/learn/operating-without-foreign-key-constraints
    sorcerer
        33
    sorcerer  
       Aug 14, 2023 via Android
    pdman
    gdb
        34
    gdb  
    OP
       Aug 14, 2023
    各位楼上的,你们说的 pdman 是国产软件,是这个么?现在似乎改名为 pdmaner 了?
    PDManer Releases - Gitee — https://gitee.com/robergroup/pdmaner/releases
    cl472903345
        35
    cl472903345  
       Nov 12, 2024
    mac store 搜索 ER Designer ,看看小弟写的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   843 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 21:38 · PVG 05:38 · LAX 14:38 · JFK 17:38
    ♥ Do have faith in what you're doing.