Существует ли какое-либо бесплатное программное обеспечение для моделирования данных, которое экспортирует схему в машиночитаемый формат, отличный от SQL?

Я нахожусь в процессе отображения открытых данных моей страны и взаимосвязей между ними, и мне нужно сделать это как в человеческом, так и в машиночитаемом форматах.

Я смотрю на инструменты построения диаграмм для удобочитаемой части, но мне нужен инструмент, чтобы иметь возможность экспортировать результаты в машиночитаемый формат, отличный от SQL, например json или xml, чтобы иметь возможность передать его в программа моего собственного написания для последующей обработки.

Поскольку мне не нужно было бы зависеть от SQL, я хотел бы, чтобы поддерживалось как можно больше типов отношений UML. Однако я мог бы обойтись ассоциациями, рефлексивными ассоциациями (самореференцией) и множественностью.

Есть ли какой-либо бесплатный инструмент, который может достичь этого?

PS: Если нет, существуют ли библиотеки Python или C#, которые могут считывать операторы SQL DDL в структуру класса?

Какая выразительность вам нужна? Например, направленные отношения, множественность и т. д. Может быть, даже наследование? (что не может сделать большинство инструментов моделирования SQL)
В какую программу(ы) вы будете передавать данные? И вы имеете в виду конкретную операционную систему / диалект SQL?
@NicolasRaoul Я обновил свой вопрос
@Mawg Программа, вероятно, будет моим собственным сценарием. Операционная система будет либо Windows, либо Mac OS. Я не имел в виду какой-то конкретный диалект SQL, но, возможно, те, у которых есть доступные библиотеки парсеров, были бы лучше. Еще не проверял, какие именно.
Что вы называете «рефлексивной ассоциацией»? двунаправленная ассоциация?
@NicolasRaoul нет, я имею в виду ссылку на себя.

Ответы (2)

SQL Power Architect сохраняет свое определение в виде XML-файла. Однако я считаю, что этот формат довольно сложно использовать, например, из XSLT.

Но он также поддерживает формат Liquibase XML для «прямой разработки», который легче обрабатывать, чем формат, используемый Power Architect (по крайней мере, на мой взгляд).

Я все еще немного неясен. Не могли бы вы использовать Python для запроса базы данных и использования этого результата для генерации XML?

А, «открытые данные моей страны и взаимосвязь между ними». Итак, не обязательно все данные, но, например, отношения между таблицами?

Если у вас есть доступ к метаданным (схеме). Если вы это сделаете, это не должно быть сложно. Если нет, можете ли вы подать в суд на SQL-запросы, или вы ограничены только получением данных в формате, который они (какой-то правительственный веб-сайт) хотят вам предложить?

Чтобы уточнить: для определения отношений между данными лучше всего искать внешние ключи .

Вы можете получить это из схемы базы данных. Или, например, выполнив SHOW CREATE TABLEкоманду MySql.

Этот отличный ответ показывает

Для таблицы:

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, который выполняет запросы за вас.

В таком случае я вижу две возможности:

1) Связаться с тем, кто предоставляет данные. Если они сделают его бесплатным, то они, вероятно, будут не только готовы, но и действительно рады вам помочь. Если вам действительно повезет, вы получите полный доступ только для чтения и сможете использовать такие инструменты, как MySql Workbench , которые могут помочь вам реконструировать существующую базу данных и визуализировать ее следующим образом.

http://download.nust.na/pub6/mysql/tech-resources/articles/workbench-screenshot.png (извините, мой браузер загружается и не вставляет изображение)

2) Дамп каждой таблицы. Это не будет представлено таким образом, но вы, вероятно, получите результат `SELECT * From ' и ищете вручную или с помощью кода столбцы с одинаковыми именами.

В хорошем дизайне базы данных столбцы со значимыми именами будут иметь одно и то же имя столбца, используемое в нескольких столбцах. Например customer_id, order_idи т.д.

И, при хорошем дизайне базы данных/удачи, они будут иметь вид <table_name¬_Id, или <table_name>_index, или подобный.

Из чего вы можете предположить, что customer_idэто ПЕРВИЧНЫЙ КЛЮЧ в customersтаблице, а ui используется в качестве ВНЕШНЕГО КЛЮЧА в ordersтаблице, тем самым устанавливая ваши отношения.

Я попробую ваше предложение связаться с провайдерами, но, зная немного о закулисной жизни, я сомневаюсь, что мы получим от этого много пользы. Кроме того, существует более тысячи источников данных, включая местные и федеральные государственные учреждения. Инициатива открытых данных в нашей стране находится в зачаточном состоянии и находится в процессе всеобщей стандартизации. Мы намерены участвовать в этом. Кроме того, мы хотим создать отношения между различными источниками данных, поэтому в этом случае прямое подключение к базам данных не будет очень полезным, если мы вообще до этого доберемся.
Есть несколько ключей для связывания данных из разных источников, но они применяются не к одной реляционной базе данных с ограничениями внешнего ключа, а к основному стандарту. В нынешнем виде я считаю, что задача сопоставления данных и взаимосвязей должна выполняться вручную.
Тогда я думаю, что вы вряд ли получите здесь ответ на свое решение. Можете ли вы задать еще один вопрос, чтобы помочь вам получить инструменты, которые помогут вам в вашей задаче? Меня очень заинтересовала идея. Будете ли вы документировать то, что вы делаете где-либо?