web-dev-qa-db-fra.com

Comment connaître les relations entre les tables

J'ai une base de données dans MySQL créée par quelqu'un. Je n'ai aucune documentation sur la base de données.

Comment puis-je connaître la relation entre les tables?

Existe-t-il une requête ou une procédure pour générer un rapport afin de trouver facilement les relations?

Je peux consulter les informations du schéma et les comprendre manuellement, mais ce serait bien si je pouvais générer un rapport de relation.

21
Narasimha Maiya

La meilleure façon, en termes de programmation, est de collecter des données à partir de INFORMATION_SCHEMA.KEY_COLUMN_USAGE tableau comme suit:

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

et un autre est

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
13
Ankit Agrawal

Vous pouvez obtenir un aperçu dans MySql Workbench en procédant comme suit:

  1. Allez dans l'option de menu "Base de données".
  2. Sélectionnez l'option "Reverse engineering".
  3. Un assistant sera ouvert et générera un diagramme EER qui apparaît
19
Smita Ahinave

Essayez SchemaSpy ( http://schemaspy.sourceforge.net/ ):

SchemaSpy est un outil basé sur Java (nécessite Java 5 ou supérieur) qui analyse les métadonnées d'un schéma dans une base de données et génère une représentation visuelle de celui-ci dans un format affichable par navigateur.

Voici une capture d'écran de la page HTML de l'exemple de sortie de http://schemaspy.sourceforge.net/sample/ :

Screenshot of the HTML page of the sample output from http://schemaspy.sourceforge.net/sample/

Il y a aussi une belle interface graphique si vous ne souhaitez pas utiliser la ligne de commande: http://schemaspygui.sourceforge.net/

Les deux outils sont open source et à mon avis très légers et faciles à utiliser. Je les ai utilisées plusieurs fois lorsque j'étais dans des situations que vous avez décrites: Pour avoir un aperçu du schéma et même quelques détails pour approfondir. (Jetez un œil au rapport "Anomalies".)


Mettre à jour

N'oubliez pas de consulter la prochaine version de SchemaSpy à http://schemaspy.org

12
Riggs

Une autre option peut être utile si vous installez simplement mysql workbench. ( se réfère à ) Et essayez "Créer des modèles EER à partir de la base de données". Vous pourrez sûrement voir les relations entre les tables.

5
Web Artisan

Avez-vous le SELECTs qui utilise la base de données? That peut être la meilleure source de relations.

5
Rick James

Vous pouvez jeter un œil à information_scheme.KEY_COLUMN_USAGE table

Comme il est suggéré, il existe un moyen rapide de répertorier vos FK (références de clé étrangère) à l'aide de la vue 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;
4
max

Si vous utilisez phpmyadmin, alors:

  1. Aller à la base de données.
  2. Sélectionnez la table et accédez à sa structure.
  3. Vous trouverez la vue des relations au bas de la structure de votre table.
3
Bishal

Mieux vaut utiliser Mysql workbench. Il existe une option pour générer un diagramme ER. Si vous utilisez phpmyadmin, sélectionnez n'importe quelle table. Il y a un onglet de structure d'où vous pouvez voir la structure du tableau. J'espère que cela vous aidera.