我最近打算使用 mysql 设计一个软件,数据库用来存放一些历史数据,需要设计一些数据库的表格。
我在网上看到有一些工具,设计不同的表之后,表和表之间的外键连接会通过箭头连接的方式显示在 gui 界面里面。
同时能生成 sql 的语句来创建这些表,请问有这样的工具么?在线的或者离线的都可以推荐,最好是免费可以使用的,谢谢!
1
teli 2023-08-13 12:11:59 +08:00
不建议添加外键
|
2
ruochen666 2023-08-13 12:20:06 +08:00
powerdesigner
|
3
balancircle 2023-08-13 13:02:03 +08:00
PDMan
http://www.pdman.cn/ |
4
wusheng0 2023-08-13 13:05:07 +08:00 via Android
|
5
wusheng0 2023-08-13 13:05:53 +08:00 via Android
|
6
taotaodaddy 2023-08-13 14:02:04 +08:00
navicat 较新版本有带连线和箭头的设计工具
|
7
565656 2023-08-13 14:03:32 +08:00
jb 全家桶里好像有个
|
8
lujiaxing 2023-08-13 14:43:58 +08:00
PowerDesigner 就可以.
你要是觉得 PD 比较古老你可以试试 Navicat. 也有这种功能. |
10
loading 2023-08-13 15:23:29 +08:00 1
|
11
akira 2023-08-13 15:54:47 +08:00
外键,触发器这些东西,用的时候是爽了,出问题的时候,排查起来头大的要命
|
12
gdb OP 我是一个初学者,楼上好几个人都说不要使用外键,但我觉得很奇怪,如果不使用外键的话,这个关系型数据库如何进行表和表之间的关联呢?
|
13
AEDaydreamer 2023-08-13 16:24:17 +08:00
用逻辑外键,非物理外键。
|
15
charlie21 2023-08-13 16:42:32 +08:00 via iPhone
外键、索引、约束 ( constraint ,删掉一行数据时候会提示无法删除因为有约束存在),三者关系是什么?
如果一个约束是为了在 “误删”数据之时丢出报错,那么在无外键的情况下还有一个约束吗? |
16
loading 2023-08-13 16:56:35 +08:00
@charlie21 #15 现在都是逻辑删除,不是真删除。
逻辑删除无论是性能还是防误操作,都更优。 逻辑删除一般就是有个 delete_time 一类的字段默认 null ,not null 就是已经删除了。 |
17
iseki 2023-08-13 17:14:22 +08:00 2
@loading 阅读了下这篇文章,结论基本可以从不使用外键修改为不使用 MySQL 。
至于文章中讨论的,数据删除导致大量写入,这就是需求本身所要求的,无论你用不用外键,数据删除是一定要删的。 至于 #16 提及的,所谓软删除,是彻彻底底的反模式,基本可以视为概念不清导致的混乱设计,可以查看[这个链接]( https://twitter.com/haoel/status/1440633425279389707)。 @gdb 你需要的是 ERD 软件,Navicat 和 MySQL 自带的 MySQL Workbench 可以满足这个需求 |
18
iseki 2023-08-13 17:15:05 +08:00
|
19
loading 2023-08-13 17:26:22 +08:00
|
20
iseki 2023-08-13 17:31:25 +08:00 3
|
21
iseki 2023-08-13 17:32:38 +08:00
至于针对性能的讨论,这个可能就要 case by case 地分析和论证了
|
22
Rache1 2023-08-13 17:52:44 +08:00
Jetbrains 的 DataGrip 生成的图会自动考虑你表名(复数、单数)和字段名之间的关系,来生成 “箭头”,不依赖外键。
比如: users 表有用户 id ,posts 表有 user_id ,那就会自动把 posts 表和 users 表关联起来。 再比如,categories 表和 products 表有一个关系表,分别有 category_id 和 product_id ,DataGrip 也能帮你自动连起来。 也就是说,只要你表名称是复数的,字段名字是单数 + id 的形式,他就可以自动推断出来。 |
25
qsnow6 2023-08-14 01:16:39 +08:00
用就完事,国外的社区主流的观点都是应用尽用。
不然搞 ORM 搞啥。 |
26
a33291 2023-08-14 08:51:16 +08:00
曾经有一个项目必须走边界摆渡数据到内网,然后边界摆渡时,如果有外键则经常导致数据错乱,没办法只能删掉外键🤣
|
27
kinXdle 2023-08-14 09:13:34 +08:00
不用外键是因为没有 dba 啊
|
28
cyrivlclth 2023-08-14 09:45:20 +08:00 via iPhone
没想到外键警察也出现了....都魔怔了
|
29
cyrivlclth 2023-08-14 09:50:56 +08:00 via iPhone
我喜欢用 plantuml 来画 如果不想折腾 navicat 之类的 当然记得导出的时候去除外键
|
30
YinHeWL 2023-08-14 09:52:31 +08:00
用 MySQL 不用外键的,真令人无语
|
32
lzgshsj 2023-08-14 12:00:01 +08:00
PlanetScale 直接就是明确不支持外键的,在这篇文章有提到原因 https://planetscale.com/docs/learn/operating-without-foreign-key-constraints
|
33
sorcerer 2023-08-14 18:19:32 +08:00 via Android
pdman
|
34
gdb OP 各位楼上的,你们说的 pdman 是国产软件,是这个么?现在似乎改名为 pdmaner 了?
PDManer Releases - Gitee — https://gitee.com/robergroup/pdmaner/releases |