Диаграмма Erd с Graphviz: Как улучшить макет рендеринга - PullRequest
0 голосов
/ 01 июля 2019

Я реализовал короткий скрипт на python, используя библиотеку graphviz , которая анализирует данную документацию и автоматизирует рендеринг упрощенной ER-диаграммы.

Мне удалось отобразить сущности и их отношения, но в результате компоновка не является оптимальной:

current_diagram

Мне бы хотелось что-то более читабельное, ориентированное на ландшафт, например:

enter image description here

Я попытался поиграть с некоторыми атрибутами из документации Graphviz , как size или ratio, и закончил со скриптом этой формы:

digraph G {
    graph [overlap=false rankdir=LR ratio=3 size="5,8!" splines=true]
    node [fontname=Verdana fontsize=10 shape=record]
    edge [arrowhead=crow style=dashed]
    Tbl1 [label=<
            <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
                <tr><td bgcolor="lightblue">Tbl1</td></tr>
                <tr><td port='0' align='left'>id  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='1' align='left'>field2  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='2' align='left'>field3  <i style='margin-left: 4px'>[date]</i></td></tr>
                <tr><td port='3' align='left'>Tbl2Id  <i style='margin-left: 4px'>[int]</i></td></tr>
            </table>
            > margin=0 shape=none]
    Tbl2 [label=<
            <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
                <tr><td bgcolor="lightblue">Tbl2</td></tr>
                <tr><td port='0' align='left'>id  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='1' align='left'>field2  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='2' align='left'>field3  <i style='margin-left: 4px'>[str]</i></td></tr>
            </table>
            > margin=0 shape=none]
    Tbl3 [label=<
            <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
                <tr><td bgcolor="lightblue">Tbl3</td></tr>
                <tr><td port='0' align='left'>id  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='1' align='left'>field2  <i style='margin-left: 4px'>[int]</i></td></tr>
                <tr><td port='2' align='left'>field3  <i style='margin-left: 4px'>[str]</i></td></tr>
                <tr><td port='3' align='left'>field4  <i style='margin-left: 4px'>[str]</i></td></tr>
                <tr><td port='4' align='left'>Tbl2Id  <i style='margin-left: 4px'>[str]</i></td></tr>
            </table>
            > margin=0 shape=none]
    Tbl1:3 -> Tbl2:0
    Tbl3:4 -> Tbl2:0
}

Есть ли что-то, чтобы сделать это? Должен ли я использовать подписи? Некоторые другие атрибуты графа или узлов?

...