Как узнать отношения между таблицами

У меня есть база данных в MySQL, созданная кем-то. У меня нет документации по базе данных.

Как узнать связь между таблицами?

Есть ли какой-либо запрос или процедура для создания отчета, чтобы было легко найти отношения?

Я могу просмотреть информацию о Схеме и вручную вычислить ее, но было бы здорово, если бы я смог создать отчет о взаимоотношениях.

Ответы

Ответ 1

Лучший способ, как программно говоря, собирать данные из таблицы INFORMATION_SCHEMA.KEY_COLUMN_USAGE следующим образом:

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`,                           -- Foreign key column
  `REFERENCED_TABLE_SCHEMA`,               -- Origin key schema
  `REFERENCED_TABLE_NAME`,                 -- Origin key table
  `REFERENCED_COLUMN_NAME`                 -- Origin key column
FROM
  `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  -- Will fail if user don't have privilege
WHERE
  `TABLE_SCHEMA` = SCHEMA()                -- Detect current schema in USE 
  AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys

а другой -

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Ответ 2

Вы можете получить обзор в MySql Workbench, выполнив следующие шаги:

  • Перейдите в пункт меню "База данных".
  • Выберите опцию "Обратный инженер".
  • Мастер откроется и будет генерировать диаграмму EER, отображающую

Ответ 3

Попробуйте SchemaSpy (http://schemaspy.sourceforge.net/):

SchemaSpy - это инструмент на основе Java (требуется Java 5 или выше), который анализирует метаданные схемы в базе данных и генерирует визуальное представление ее в отображаемом браузере формате.

Вот скриншот страницы HTML сэмпла из http://schemaspy.sourceforge.net/sample/:

Снимок экрана с HTML-страницы образца, полученного из http://schemaspy.sourceforge.net/образец/

Также есть приятный графический интерфейс, если вы не хотите использовать командную строку: http://schemaspygui.sourceforge.net/

Оба инструмента имеют открытый исходный код и, на мой взгляд, очень легкий и простой в использовании. Я использовал их несколько раз, когда был в ситуациях, которые вы описали: Чтобы получить обзор схемы и даже некоторые детали, чтобы погрузиться глубже. (Взгляните на отчет "Аномалии".)


Update

Обязательно проверьте готовую версию SchemaSpy на http://schemaspy.org

Ответ 4

У вас есть SELECTs, который использует базу данных? Это может быть лучшим источником отношений.

Ответ 5

Еще один ценный вариант может быть, если вы просто установите mysql workbench. (относится к) И попробуйте "Создать модели EER из базы данных". Вы наверняка сможете видеть отношения между таблицами.

Ответ 6

Вы можете посмотреть information_scheme.KEY_COLUMN_USAGE table

Как предлагается быстрый способ перечислить ваши FK (ссылки внешнего ключа) с помощью представления KEY_COLUMN_USAGE:

SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;

Ответ 7

Если вы используете phpmyadmin, тогда:

  • Перейти к базе данных.
  • Выберите таблицу и перейдите к ее структуре.
  • Вы найдете вид отношений в нижней части структуры таблицы.

Ответ 8

Лучше использовать Mysql workbench. Существует опция для генерации диаграммы ER. Если вы используете phpmyadmin, выберите любую таблицу. Существует вкладка структуры, из которой вы можете видеть структуру таблицы. Надеюсь, это поможет.