Итак, для начала у нас имеется стандартный контейнер с элементами для построения ERD (entity relationship diagram). Их обозначения показаны на рисунке.
![image](https://habrastorage.org/getpro/habr/post_images/dc2/001/0d9/dc20010d9f22bc9f5d742a5139168636.png)
Небольшое отступление, если вам понадобится вставить просто текст на схему, т.е. без какого-либо блока, то следующие простые шаги из комментария от jaiprakash быстро решают эту проблему. «Выделяете любую связь -> add label -> вводите текст -> convert to node.»
Итак, поставим условную задачу построения следующей схемы.
![image](https://habrastorage.org/getpro/habr/post_images/e1a/0bd/bdb/e1a0bdbdb20b7d2788e5187ebed0dd66.png)
Создадим каркас из базовых элементов.
![image](https://habrastorage.org/getpro/habr/post_images/e83/2af/039/e832af03957200d476af7b237a21ae9c.png)
Для того, чтобы добавить обозначения первичных и внешних ключей придется немного исхитриться. Выбрав нужный элемент, добавим на него новый label, который назовем KEY. Т.к. он будет находится под основным блоком, то выделим его с помощью зажатого Ctr.
![image](https://habrastorage.org/getpro/habr/post_images/9fd/847/033/9fd8470337e26658760b9613fda1c1e8.png)
![image](https://habrastorage.org/getpro/habr/post_images/ce3/acc/b56/ce3accb56cb84755e3cb9bc94e99dfdc.png)
Настроим его Placment (размещение), выбрав Internal: top left (внутри, вверху слева), цвет по желанию, Distance(расстояние от краев) в ноль, Insets (вставка в пикселях) в 20 2 0 0, чтобы он был напротив поля атрибута с небольшим расстоянием, Font Family (шрифт) установим Segoe UI Symbol, т.к. он точно поддерживает необходимые символы.
![image](https://habrastorage.org/getpro/habr/post_images/316/4b1/40c/3164b140cd5db7a680c2598bd779c492.png)
Символы для копирования можно найти к примеру в таблице символов Windows.
![image](https://habrastorage.org/getpro/habr/post_images/a47/199/136/a4719913697118b719975ac7bbb0100a.png)
![image](https://habrastorage.org/getpro/habr/post_images/82c/ce8/3dc/82cce83dc06349b06a7ad1c8f3350bbc.png)
Аналогичным образом поступаем с стрелками.
![image](https://habrastorage.org/getpro/habr/post_images/f96/a33/6e3/f96a336e38f4920a0482aa38a5a9af67.png)
Для того, чтобы объединить несколько таблиц в блок, можно воспользоваться Grouping (группировка).
![image](https://habrastorage.org/getpro/habr/post_images/6eb/a80/b03/6eba80b03576119ddee5b171c4ef4a61.png)
Итоговый вариант примера получится такой. Все понятно и красиво :)
![image](https://habrastorage.org/getpro/habr/post_images/ac0/c41/a79/ac0c41a790a0ef5a8cbd60ef3c501aa7.png)
Надеюсь эта небольшая статья поможет кому-нибудь из начинающий проектировщиков баз данных. Спасибо за внимание, буду рад комментариям.
Комментарии (10)
Geckelberryfinn
14.06.2019 17:05Кстати, если нужно построить схему уже существующей БД, то можно использовать DBvisualizer, там как раз yFiles используется (который в yEd)
ArsenAbakarov
14.06.2019 18:58Тоже на работе пользуемся, я доволен, но вот не хватает хорошего упарвления z слоями, кстати еще есть и плагин для confluence, но работает он как то странно
miksoft
14.06.2019 22:33Меня yEd однажды здорово выручил. Надо было проанализировать связи полусотни таблиц на сервере, где одних только схем несколько тысяч, а количество таблиц вообще запредельное. Visio и несколько специализированных инструментов, видя такие объемы, задумывались на сутки, крашились и т.п., но результата не дали. А yEd понимает файлы связей в xls-формате (и не только). Выгрузил из словаря СУБД связи, загрузил в yEd — и готово!
sovetnik
16.06.2019 04:25А можете поподробней рассказать? В каком формате файл должен быть, чтоб yEd его смог прочесть?
miksoft
16.06.2019 17:16В простейшем случае это две колонки с именами узлов (для моей задачи таблицы были узлами). Тогда строится граф, в котором каждая строка превращается в связь между узлами.
Подробнее тут — Import of Excel Files
jaiprakash
15.06.2019 13:50если вам понадобится вставить просто текст на схему, т.е. без какого-либо блока
Выделяете любую связь -> add label -> вводите текст -> convert to node.
FDA847
Я сам давно пользуюсь этой программой для рисования несложных схем. Для себя нашёл пока один недостаток. Не получается привязать «резиновую» линию к другой линии. Мне приходится добавлять небольшие кружочки:
![image](https://habrastorage.org/webt/rd/bg/5o/rdbg5oxxeierujuvgz5yuiss2_g.png)
sudden_death Автор
Здравствуйте, если я правильно понял Вашу проблему с блок-схемой.
![image](https://habrastorage.org/getpro/habr/comment_images/ea5/ae6/0cb/ea5ae60cb76843b9cf0757fa1ab790c0.png)
То могу предложить следующие варианты, которые использую для устранения недостатка.
1. Можно просто накладывать линии друг на друга(т.е. все линии, что соединяются, сразу ведут в конечный блок) и сгибать в точках соединения, где это необходимо. При выделении и перемещении, структура не меняется.
2. Использовать из этого поста прием с невидимым блоком(см. пост). Тогда получится что-то вроде того же, только как по мне, может занять больше времени, зато «узлы» будут в панели со списком блоков.
Почти тоже самое
Линию придется кропотливо сдвигать по пикселям.
Скриншот
Линию без стрелки можно будет взять из блока UML или Edge Types(типы кромок). В принципе можно и сейчас их использовать в Ваших схемах с кружочками для более наглядного вида.
Скриншот
Надеюсь чем-то помог, спасибо за приглашение.
Busla
С кружочками даже лучше, иногда специально добавляю промежуточные фиктивные блоки, чтобы направление стрелки было видно не только у самого конечного блока. Хотя это несомненный костыль, который плохо сочетается с мощным функционалом авторазмещения.