Давайте я сразу поделюсь своим алгоритмом анализа и разбора диаграммы БД при инженерном анализе.
Этот метод в принципе достаточно универсален и может быть использован для анализа сетей и графов вообще.
К сожалению, даже дорогие CASE-средства не умеют нормально строить диаграммы инженерного анализа без пересечений и повторений, поэтому родился такой алгоритм:
1) Сначала выделяю таблицы, имеющие наибольшее количество связей, и раскидываю их в разные стороны подальше друг от друга - это будут своеобразные центры кристаллизации, на которых, как на пяльцах, будет растянута схема. Те сильносвязанные таблицы из них, что связаны с большим количеством других "центров" помещаю ближе в середину диаграммы, остальные - по периферии.
2) Нахожу "справочные" однозависимые таблицы и их цепочки, которые связаны только с конкретным "центром" - выстраиваю сателлиты вокруг "планет".
3) Образующиеся независимые или слабозависимые отдельные кластера таблиц откидываю в процессе подальше или вообще выношу в другие диаграммы/пакеты.
4) Далее принимаюсь за "посредников" - таблицы, которые связывают между собой "центры кристаллизации", при необходимости производя своппинг их друг с другом, напоминающий заплетание косичек, с целью избавления от пересечений и стараюсь размещать из равноудалённо от связуемых.
5) Выравниваю по возможости таблицы так, чтобы было как можно больше прямых горизонтальных и вертикальных связей, что упрощает чтение.
6) "Сжимаю" диаграмму, пропорционально приближая таблицы друг к другу, добиваясь большей компактности, что важно для максимальной обозримости и читаемости диаграммы.