【发布时间】:2021-12-21 18:12:44
【问题描述】:
我正在尝试使用 Graphviz 使用点绘制 ER 图。我有以下内容:
digraph ERD {
graph [ rankdir = "LR" ];
ranksep=1;
"DEPARTMENT" [ label="<DEPARTMENT> DEPARTMENT|<PK_DEPARTMENT>deptcode \l | <F_DEPARTMENT> self* \ldeptcode \ldeptname \l " shape = "record", style = "rounded" ];
"COURSE" [ label="<COURSE> COURSE|<PK_COURSE>cnum \l | <F_COURSE> self* \lcnum \lcname \ldepartment* \l " shape = "record", style = "rounded" ];
"PROFESSOR" [ label="<PROFESSOR> PROFESSOR|<PK_PROFESSOR>pnum \l | <F_PROFESSOR> self* \lpnum \lpname \loffice \ldepartment \l " shape = "record", style = "rounded" ];
"CLASS" [ label="<CLASS> CLASS|<PK_CLASS>term \l | <F_CLASS> self* \lcourse* \lterm \lsection \lprofessor* \l " shape = "record", style = "rounded" ];
"ENROLLMENT" [ label="<ENROLLMENT> ENROLLMENT|<PK_ENROLLMENT> | <F_ENROLLMENT> self* \lstudent* \lclass* \l " shape = "record", style = "rounded" ];
"SCHEDULE" [ label="<SCHEDULE> SCHEDULE|<PK_SCHEDULE>time \l | <F_SCHEDULE> self* \lclass* \lday \ltime \lroom \l " shape = "record", style = "rounded" ];
"MARK" [ label="<MARK> MARK|<PK_MARK>grade \l | <F_MARK> self* \lenrollment* \lgrade \l " shape = "record", style = "rounded" ];
"STUDENT" [ label="<STUDENT> STUDENT|<PK_STUDENT>snum \l | <F_STUDENT> self* \lsnum \lsname \lyear \l " shape = "record", style = "rounded" ];
"COURSE":"F_COURSE"->"DEPARTMENT":"PK_DEPARTMENT" [arrowhead = normal] [label="generic label"];
"PROFESSOR":"F_PROFESSOR"->"DEPARTMENT":"PK_DEPARTMENT" [arrowhead = normal] [label="generic label"];
"CLASS":"F_CLASS"->"COURSE":"PK_COURSE" [arrowhead = normal] [label="generic label"];
"ENROLLMENT":"F_ENROLLMENT"->"CLASS":"PK_CLASS" [arrowhead = normal] [label="generic label"];
"SCHEDULE":"F_SCHEDULE"->"CLASS":"PK_CLASS" [arrowhead = normal] [label="generic label"];
"MARK":"F_MARK"->"ENROLLMENT":"PK_ENROLLMENT" [arrowhead = normal] [label="generic label"];
}
但是,点引擎放置节点时会导致图中出现过多的负数/空白。它最终看起来像这样:
例如,PROFESSOR 表可以很容易地放在 COURSE 表上方以节省空间。可以对 SCHEDULE 表进行类似的优化。此外,DEPARTMENT 表可以放在 COURSE 和 PROFESSOR 的左侧,而不是右侧。
通过在互联网上阅读有关此内容,我发现可能设置了 rankdir。但是,我认为我需要它是 LR,因为否则节点本身是横向的......
有什么方法可以让箭头双向(不仅仅是从左到右,反之亦然?)以节省空间?或者我可以指定一些其他属性来最小化我的图表中不必要的负/空白的数量?不过我不想让节点、字体或箭头的长度变小。
谢谢!
【问题讨论】:
标签: graphviz dot graphing er-diagrams