You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

DataGrip ER图无关联截图

排查与解决步骤

  • 确认存储引擎支持外键
    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图显示设置

    1. 打开ER图后,点击顶部菜单View,确保Show Relationships选项已勾选
    2. 在右侧Properties面板中,确认Relationships的显示开关处于开启状态
    3. 右键点击ER图空白区域,选择Reload刷新图表
  • 验证外键约束是否正常创建
    执行以下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:24