Цитата:
Сообщение от OKJI
Как построить вот такую схему с помощью БД?
|
Построить? БД не строит, она (точнее система управления БД - СУБД) хранит, и обрабатывает информацию перед выдачей)
Например, SQL представляет собой таблицы (как визуальные таблицы в акаде, только гораздо более удобнее-). При этом каждая строка строка таблицы однозначно определяется ключом ID. Простейший пример:
Есть таблица данных спецификации:
Цитата:
Таблица данные_спецификации
----------------------------------
ID строки таблицы
Имя_продукта
Тип_продукта
Код_продукта
и дальше те поля, что фигурируют в спецификации
|
Есть таблица списка примитивов:
Цитата:
Список_примитивов
----------------------------------
ID строки таблицы
Хэндл примитива
ID внешнего ключа, ссылающийся на строки таблицы данных спецификации
|
Каждый примитив, участвующий в организации информационной модели (молчать про BIM -), заносится в данную таблицу. А в XData примитива заносится ID строки таблицы. Соответственно, надо через события отслеживать удаление/восстановление примитивов для поддержки актуальности таблицы. И кликнув по любому объекту, можно получить из его XData ID строки таблицы, потом - сделав запрос в БД по ID внешнего ключа - информацию из таблицы данных спецификации.
Теперь описываем соединение кабеля на плане:
Цитата:
Таблица_соединений_кабелей
----------------------------------
ID кабеля = ID строки таблицы "Список примитивов"
ID примитива, откуда идет
ID примитива, куда идет
Номер кабеля
|
И вводим таблицу связей с выносками
Цитата:
Связь с выносками
-----------------------
ID примитива
ID выноски
Вид вывода информации (перечисление - только номер кабеля, или еще и тип кабеля, например)
|
Выглядит сложновато, но что это дает: физическая связь с элементами чертежа на уровне таблицы "Список примитивов", вся остальная логика работает уже вне чертежа. Можно заменять любой примитив, предварительно сохранив его ID из XData и потом обновив запросом хэндл в таблице "Список_примитивов" - и все связи логические останутся. Метод обновления выноски (привязанной к кабелю) унифицирован, туда передается ID примитива - а остальное метод подгребет сам из БД соответствующим запросом (в завимости от значения "Вид вывода информации"). И т.д. А заодно таблица "Список_примитивов" поможет восстановить XData в чертеже, если "продвинутый" пользователь во время чистки чертежа или рукожопый "программист" очередной надстройки их снесет)
Ну это изначально надо было формировать БД в программе, а не когда уже написана куча кода)