DataGrip中MySQL数据库表关系无法在ER图显示的解决求助
DataGrip中MySQL表关联关系在ER图不显示的排查方案
我上周开始学习SQL,编写了创建inventaireParcInformatique数据库的MySQL脚本,但在JetBrains DataGrip生成ER图时,表之间的关联关系无法显示。以下是我的脚本:
CREATE DATABASE IF NOT EXISTS inventaireParcInformatique; USE inventaireParcInformatique; CREATE TABLE UTILISATEUR ( idUser INT PRIMARY KEY, nom VARCHAR(40) NOT NULL, prenom VARCHAR(40) NOT NULL); CREATE TABLE SALLES ( numSalle INT, descriptif VARCHAR(250) NOT NULL, CONSTRAINT pk_salles PRIMARY KEY (numSalle)); CREATE TABLE FABRICANTS ( codeFabricant CHAR(5), nom VARCHAR(30) NOT NULL, telephone CHAR(10), CONSTRAINT pk_fabricants PRIMARY KEY (codeFabricant)); CREATE TABLE MACHINES ( idMachine INT, codeFabricant CHAR(5) NOT NULL, nom VARCHAR(100) NOT NULL, addIP VARCHAR(4000), addMAC VARCHAR(4000) NOT NULL, DNS VARCHAR(4000), commentaire LONGTEXT, mobile TINYINT(1) NOT NULL DEFAULT 0, numSalle INT, operationnel TINYINT(1) NOT NULL DEFAULT 1 CHECK (operationnel IN (0,1)), CONSTRAINT chk_mobile CHECK (mobile in (0,1)), CONSTRAINT pk_machines PRIMARY KEY (idMachine), CONSTRAINT fk_machines_fabricants FOREIGN KEY (codeFabricant) REFERENCES FABRICANTS(codeFabricant), CONSTRAINT fk_machines_salles FOREIGN KEY (numSalle) REFERENCES SALLES(numSalle)); CREATE TABLE AFFECTATION ( idUser INT NOT NULL, idMachine INT NOT NULL, dateDebut DATE NOT NULL, dateFin DATE, CONSTRAINT pk_affectation PRIMARY KEY (idUser, idMachine, dateDebut)); ALTER TABLE AFFECTATION ADD CONSTRAINT fk_affectation_machines FOREIGN KEY (idMachine) REFERENCES MACHINES(idMachine); ALTER TABLE AFFECTATION ADD CONSTRAINT fk_affectation_utilisateur FOREIGN KEY (idUser) REFERENCES UTILISATEUR(idUser); CREATE TABLE TYPESCOMPOSANTS ( codeType VARCHAR(10) PRIMARY KEY, libelle VARCHAR(50) NOT NULL);

排查与解决步骤
确认存储引擎支持外键
MySQL的MyISAM引擎不支持外键,若未指定引擎可能默认使用该引擎。执行以下命令检查表的存储引擎:SHOW CREATE TABLE MACHINES;若结果显示
ENGINE=MyISAM,修改为支持外键的InnoDB:ALTER TABLE UTILISATEUR ENGINE=InnoDB; ALTER TABLE SALLES ENGINE=InnoDB; ALTER TABLE FABRICANTS ENGINE=InnoDB; ALTER TABLE MACHINES ENGINE=InnoDB; ALTER TABLE AFFECTATION ENGINE=InnoDB; ALTER TABLE TYPESCOMPOSANTS ENGINE=InnoDB;后续创建表时建议直接在语句末尾添加
ENGINE=InnoDB;指定引擎。检查DataGrip的ER图显示设置
- 打开ER图后,点击顶部菜单
View,确保Show Relationships选项已勾选 - 在右侧
Properties面板中,确认Relationships的显示开关处于开启状态 - 右键点击ER图空白区域,选择
Reload刷新图表
- 打开ER图后,点击顶部菜单
验证外键约束是否正常创建
执行以下SQL查看数据库中的外键约束:SELECT TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_SCHEMA = 'inventaireParcInformatique';若结果中未显示对应外键,检查关联字段的类型是否完全匹配(比如
MACHINES.idMachine是INT,AFFECTATION.idMachine必须也是INT,不能有类型或长度差异)。重新生成ER图
关闭当前ER图,重新从数据库列表中选中所有表,右键选择Diagrams > Show Visualization生成新的ER图。
内容的提问来源于stack exchange,提问作者Kh75
相关产品推荐
相关产品推荐

