DataGrip图表未显示表之间的关系。

5

我一直遇到这个奇怪的问题,我的DataGrip图表生成不展示表之间的关系(也就是说,关系箭头没有出现)。

这是我所说的内容的图片。

我是这样创建DataGrip图表的:右键单击我的模式-->图表-->显示可视化。每次得到的结果都是上面的图片。

如何修复以显示箭头?在你问之前,我已经在我的架构表中有引用其他表中其他列的外键。


2
这些表的主键和外键是否都已正确创建? - user8406805
1
如果您创建一个带有关系的新数据库,会发生什么?它们会出现吗? - moscas
1
你好,你找到这个问题的解决方案了吗?我正在使用Postgres数据库,并且遇到了数据报的问题。 - Tinkaal Gogoi
1
我也遇到了这个问题。 - Tim Seed
@TimSeed,你能提供一个样本代码块来重现这个问题吗? - Vasilii Chernov
显示剩余3条评论
2个回答

1

确保外键的声明正确。

在左侧的数据库详细信息视图中检查列状态。

如果您使用的是MySQL 8,则在创建任何表后可能需要添加ENGINE=INNODB

例如:

CREATE TABLE person
(
....
) ENGINE = INNODB;

如果这个更改解决了您的问题,请接受答案。 - M.Kasaei

0
我曾经遇到过类似的问题。在使用PostgreSQL作为数据库时,一切都正常,但当我切换到MYSQL并执行相同的查询以在PostgreSQL中创建表时,表之间的关系不再显示。我使用了DataGrip的Diagramm工具来可视化它。
然后我比较了我的两个数据库之间表的数据类型:PostgreSQL和MYSQL,我意识到在创建主键时,我使用了SERIAL数据类型,而PostgreSQL将其设置为INTEGER数据类型,而MYSQL将其设置为BIGINT UNSIGNED。
我用于在PostgreSQL中创建表的查询如下:
CREATE TABLE account(
    user_id     SERIAL          PRIMARY KEY,
    username    VARCHAR(50)     UNIQUE NOT NULL,
    password    VARCHAR(50)     NOT NULL,
    email       VARCHAR(250)    UNIQUE NOT NULL,
    created_on  TIMESTAMP       NOT NULL,
    last_login  TIMESTAMP
);
CREATE TABLE job(
    job_id      SERIAL          PRIMARY KEY,
    job_name    VARCHAR(200)    UNIQUE NOT NULL
);
# now a table which connects the two above
CREATE TABLE account_job(
    user_id     INTEGER     REFERENCES  account(user_id),
    job_id      INTEGER     REFERENCES  job(job_id),
    hire_date   TIMESTAMP
);

这个查询在使用PostgresSQL和MYSQL时都可以无错误地执行,但是对于MYSQL来说,表之间的关系不会显示或者不起作用。

我不得不将查询的最后一个命令更改如下:

CREATE TABLE account_job(
    user_id     BIGINT UNSIGNED,
    FOREIGN KEY (user_id)   REFERENCES account(user_id),
    job_id      BIGINT UNSIGNED,
    FOREIGN KEY (job_id)    REFERENCES job(job_id),
    hire_date   TIMESTAMP
);

请注意命令的语法已更改,数据类型也不再是INTEGER,而是BIGINT UNSIGNED。
在进行这些更改后,我的问题得到了解决。我希望这能帮助到面临同样问题的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接