Вопрос или проблема
Я занимаюсь картографией открытых данных своей страны и взаимосвязей между ними, и мне нужно сделать это в человечески и машинно читаемых форматах.
Я рассматриваю инструменты для диаграммирования для части, читаемой человеком, но мне нужно, чтобы инструмент мог экспортировать результаты в машинно читаемый формат, отличный от SQL, такой как JSON или XML, чтобы я мог передать это в программу, написанную мной, для последующей обработки.
Поскольку мне не нужно зависеть от SQL, я хотел бы, чтобы поддерживалось как можно больше типов взаимосвязей UML. Однако я смог бы обойтись ассоциацией, рефлексивной ассоциацией (самоссылкой) и кратностью.
Существует ли какой-либо бесплатный инструмент, который может это сделать?
П.С.: Если нет, есть ли какие-то библиотеки Python или C#, которые могут читать SQL DDL инструкции в структуру класса?
Я все еще немного неясен. Не могли бы вы использовать Python для запроса к базе данных и использовать этот результат для генерации XML?
Ах, “открытые данные моей страны и взаимосвязи между ними”. Так что, не каждое единичное данное, а взаимосвязи между таблицами, например?
Если у вас есть доступ к метаданным (схеме). Если да, это не должно быть сложно. Если нет, можете ли вы использовать SQL запросы, или вы ограничены только получением данных в формате, который они (некоторые государственные сайты) хотят вам предложить?
Чтобы прояснить: чтобы определить взаимосвязи между данными, ваш лучший подход – это искать внешние ключи.
Вы можете получить это из схемы базы данных. Или, например, выполнив команду MySql SHOW CREATE TABLE
.
Этот отличный ответ показывает
Для таблицы:
SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = '<database>' AND
REFERENCED_TABLE_NAME = '<table>';
Для столбца:
SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = '<database>' AND
REFERENCED_COLUMN_NAME = '<column>';
Конечно, вероятно, что у вас нет такого прямого доступа к самой базе данных, а только API, который выполняет запросы за вас.
В этом случае я вижу две возможности:
- Связаться с тем, кто предоставляет данные. Если они делают их общедоступными, то они, вероятно, не только будут готовы, но и приятно удивлены, чтобы помочь вам. Если вам очень повезет, вы получите полный доступ только для чтения и сможете использовать такие инструменты, как MySql Workbench, которые могут помочь вам реверсировать существующую базу данных и визуализировать её так
- Сделать дамп каждой таблицы. Он не будет представлен таким образом, но вы, вероятно, получите результат `SELECT * FROM` и будете искать, вручную или с помощью кода, идентично названные столбцы.
Хороший дизайн базы данных будет иметь значимо названные столбцы с одинаковым именем столбца, используемым в нескольких столбцах. Например, customer_id
, order_id
и т.д.
И с хорошим дизайном базы данных/удачи, они будут иметь форму <имя_таблицы>_Id
, или <имя_таблицы>_index
, или подобное.
Из чего вы можете сделать вывод, что customer_id
является ПЕРВАЧНЫМ КЛЮЧОМ в таблице customers
, и используется как ВНЕШНИЙ КЛЮЧ в таблице orders
, таким образом устанавливая вашу взаимосвязь.
Ответ или решение
В процессе открытия данных в вашей стране важно использовать инструменты, которые помогут визуализировать связи между наборами данных и экспортировать их в машиночитаемых форматах, таких как JSON или XML. Вот некоторые бесплатные инструменты и библиотеки, которые могут удовлетворить ваши требования.
Бесплатные инструменты для моделирования данных
-
Draw.io
- Описание: Draw.io — это онлайн-инструмент для создания диаграмм, который позволяет вам визуализировать модели данных и связи между ними. Однако для экспорта схемы вам необходимо будет воспользоваться дополнительными методами (например, программами на Python или C#) для преобразования визуализации в JSON или XML.
- Поддержка UML: Не имеет прямой поддержки UML, но вы можете создать необходимые элементы, используя стандартные фигурные и текстовые блоки.
-
DBDiagram.io
- Описание: DBDiagram предоставляет возможность просто и быстро создавать диаграммы для моделирования баз данных. Он предлагает экспорт в различные форматы, но основной экспорт ограничивается SQL.
- Поддержка UML: Ограниченная поддержка, как правило, лучше всего для моделирования отношений баз данных.
-
Hackolade
- Описание: Hackolade — это инструмент, предназначенный для работы с NoSQL базами данных, который позволяет импортировать и экспортировать схемы в формате JSON. Хотя его компания предоставляет платные версии, существует бесплатная версия с ограниченными возможностями.
- Поддержка UML: Хорошо подходит для визуализации отношений и поддерживает мультипликативные отношения.
Библиотеки для работы с SQL в Python и C
Если перечисленные инструменты не удовлетворяют ваши требования, вы можете использовать библиотеки для работы с SQL и преобразования в объекты, например:
-
SQLAlchemy (Python)
- Описание: SQLAlchemy — это библиотека для Python, позволяющая вам взаимодействовать с реляционными базами данных. Вы можете использовать SQLAlchemy для извлечения схемы из базы данных и конвертации её в структуру классов.
- Функционал: Может автоматически генерировать классы на основе существующих таблиц и их отношений.
-
Entity Framework (C#)
- Описание: Entity Framework предоставляет мощные возможности для работы с базами данных в C#. Он позволяет загружать схемы и связи между таблицами в виде классов.
- Функционал: Вы можете работать с синтаксисом Entity SQL или обычным LINQ для извлечения данных из базы данных.
Заключение
Вам может потребоваться несколько вариантов, чтобы достичь желаемого результата. Если нет инструмента, который бы непосредственно экспортировал ваши данные в необходимый формат, комбинация визуальных инструментов с библиотеками для работы с базами данных может стать оптимальным решением. Обратитесь к поставщикам данных, доступным API, или выполните SQL-запросы для извлечения метаданных и построения структуры данных на основе потребностей вашего проекта.
Если у вас остаются вопросы по использованию указанных инструментов или библиотек, не стесняйтесь обращаться за разъяснениями.