web-dev-qa-db-ja.com

テーブル間の関係を知る方法

MySQLに誰かが作成したデータベースがあります。データベースのドキュメントはありません。

テーブル間の関係を知るにはどうすればよいですか?

関係を簡単に見つけられるようにレポートを生成するクエリまたは手順はありますか?

スキーマ情報を調べて手動で把握することはできますが、関係レポートを生成できればすばらしいと思います。

21
Narasimha Maiya

プログラム的に言えば、次のように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;
13
Ankit Agrawal

以下の手順を実行すると、MySql Workbenchで概要を取得できます。

  1. 「データベース」メニューオプションに移動します。
  2. 「リバースエンジニア」オプションを選択します。
  3. ウィザードが開き、表示されるEER図が生成されます
19
Smita Ahinave

SchemaSpyを試してみてください( http://schemaspy.sourceforge.net/ ):

SchemaSpyはJavaベースのツール(Java 5以上が必要))であり、データベース内のスキーマのメタデータを分析し、ブラウザーで表示可能な形式でスキーマの視覚的表現を生成します。

http://schemaspy.sourceforge.net/sample/ からのサンプル出力のHTMLページのスクリーンショットを次に示します。

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

コマンドラインを使用したくない場合は、素敵なGUIもあります。 http://schemaspygui.sourceforge.net/

どちらのツールもオープンソースであり、私の意見では非常に軽量で使いやすいツールです。私があなたが説明した状況にあったとき、私はそれらを数回使用しました:スキーマの概要とさらに深く掘り下げるためのいくつかの詳細を得るため(「異常」レポートをご覧ください。)


更新

http://schemaspy.org でSchemaSpyの次期バージョンを必ずチェックしてください。

12
Riggs

Mysqlワークベンチをインストールするだけの場合、もう1つの価値あるオプションが考えられます。( を参照 )そして、「データベースからEERモデルを作成する」を試してください。テーブル間の関係を確実に確認できます。

5
Web Artisan

データベースを使用するSELECTsはありますか? それが関係の最良のソースである可能性があります。

5
Rick James

information_scheme.KEY_COLUMN_USAGEテーブル

推奨されるとおり、KEY_COLUMN_USAGEビューを使用してFK(外部キー参照)を一覧表示する簡単な方法があります。

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

Phpmyadminを使用している場合:

  1. データベースに移動します。
  2. テーブルを選択し、その構造に移動します。
  3. テーブル構造の下部にリレーションビューがあります。
3
Bishal

Mysqlワークベンチを使用することをお勧めします。 ER図を生成するためのオプションがあります。 phpmyadminを使用している場合は、任意のテーブルを選択します。テーブルの構造を確認できる構造タブがあります。うまくいけば、これは役立ちます。