オンライン・データベース設計:ER 図・方言変換・構造チェック
Web処理はすべてブラウザ内で完結します。データは送信されません
左に DDL を貼ると、右に 3 つ出ます: 1. テーブル関連図 —— テーブルごとに箱、主キーと外部キーを表示、外部キーは線で結びます; 2. 対象方言の DDL —— MySQL / PostgreSQL / SQLite。型と自動採番の書き方を変換します; 3. 構造チェック —— ここが本命です。 チェックを独立させる価値:何十枚ものテーブルを目で見て回るのは無理があります。しかもここの指摘はすべて確定した事実です: · 外部キーが参照するテーブル・列が存在しない(図では分からず、実行時に落ちます); · PostgreSQL は外部キーの列に自動で索引を作りません(MySQL は作ります)—— 結合と親行の削除が遅くなります; · 主キーがない、列名が重複、整数でない型に自動採番; · 列名が SQL の予約語なのに引用符がない(多くのデータベースで構文エラー); · `VARCHAR` に長さがない(MySQL はエラー、PostgreSQL は無制限扱い); · `ON DELETE` の指定がない(既定は RESTRICT で、親行の削除が止まります)。 変換で黙って捨てることはしません:型の対応表は短く明示的で、対応がない/意味が失われるもの(MySQL の `unsigned`、`ON UPDATE CURRENT_TIMESTAMP`、`ENUM`)には必ず注記を付けます。出力した DDL を実行してから数か月後に制約の欠落に気づく、という事態を避けるためです。 解析する範囲は意図的に狭くしています:`CREATE TABLE` と `ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY` のみ。ビュー・トリガー・生成列の式は解析せず、分からない行は「この行は解析できませんでした」と警告します(黙って捨てると、きれいな図からテーブルが 1 枚消えていることに気づけません)。 すべてブラウザー内で完結し、送信はしません。
機能
- テーブル関連図:テーブル名・列名・型・PK / FK の印・外部キーの線
- 3 方言の DDL:MySQL / PostgreSQL / SQLite
- 型の変換:AUTO_INCREMENT → SERIAL、DATETIME → TIMESTAMP、TINYINT(1) → BOOLEAN など
- 生成した DDL は依存順(参照されるテーブルが先)なので、まとめて実行できます
- 構造チェック:外部キーの参照先、索引の欠落、主キー、列名重複、予約語、型の書き方、ON DELETE
- 指摘は「エラー / 警告 / 参考」に分け、対象の名前を必ず添えます
- 変換の注記:失われる意味を 1 件ずつ表示(黙って処理しません)
- 解析できなかった行は報告します(黙って捨てません)
- 引用符は必要なときだけ付けます(予約語や特殊文字を含む場合)
- Ctrl / Cmd + Enter で分析。サンプルを最初から入れてあります
使い方
- 左の欄に DDL を貼る(そのままサンプルでも可)
- 対象の方言を選ぶ:MySQL / PostgreSQL / SQLite
- 「分析」を押す(Ctrl / Cmd + Enter でも可)
- 左に関連図、右にテーブル一覧・チェック結果・生成した DDL が出ます
- 行ごとのコピーボタンで生成した DDL を取り出せます
よくある質問
- どの SQL に対応していますか?
- `CREATE TABLE`(列定義・列レベルと表レベルの主キー・UNIQUE・索引・外部キー・CHECK)と `ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY` のみです。ビュー・トリガー・ストアドプロシージャ・生成列・複雑な `DEFAULT` は解析せず、「この行は解析できませんでした」と警告します。推測するより、出さないほうがましだからです。
- PostgreSQL で外部キー列の索引を指摘するのはなぜですか?
- PostgreSQL は外部キーの参照列に自動で索引を作らないのに対し、MySQL(InnoDB)は作るからです。索引がないと、結合や親行の削除が走査に落ちます。対象方言ごとの指摘なので、MySQL を選ぶと出ません。
- 型の変換は信用できますか?何が失われますか?
- 対応表は短く明示的で(よくある型 20 種類ほど)、出力と突き合わせて確認できます。意味が失われる変換には必ず注記を付けます:`unsigned` は PostgreSQL に対応がなく(範囲が変わります)、`ENUM` は TEXT に退化し(値の制約が失われます)、`ON UPDATE CURRENT_TIMESTAMP` は移行先ではトリガーが必要です。表にない型はそのまま残して警告します。
- 生成した SQL はそのまま実行できますか?
- できます。しかも依存順(参照されるテーブルが先)なので、まとめて実行しても存在しないテーブルへの外部キーで失敗しません。ただし 2 点:SQLite は外部キーが既定で無効なので、接続ごとに `PRAGMA foreign_keys = ON` が必要です(生成 SQL にもその旨を書いています)。またデータ移行のロジックは生成しません —— 既存データの移し方はお任せします。
- 逆はできますか(データベースから DDL を出す)?
- できません。このサイトにはデータベースに接続するサーバーがありません。ただし `mysqldump --no-data`、`pg_dump --schema-only`、`sqlite3 .schema` で DDL を書き出して貼り付けられます —— それがこの道具の一般的な使い方です。
関連ツール
URL 解析
WebURL を解析し、スキーム・ホスト・ポート・パス・クエリパラメータ・アンカーに分解します。パラメータは元の値とデコード値を並記。すべてブラウザ内で処理します。
UA 解析
WebUser-Agent を解析し、ブラウザ・バージョン・OS・デバイス種別・エンジンを判定します。判定はパターン照合による概算です。すべてブラウザ内で処理します。
HTTP ステータスコード
WebHTTP ステータスコードの検索。番号から意味を、キーワードから番号を引けます。1xx〜5xx の分類・利用場面・確認のポイント付き。すべてブラウザ内で処理します。
MIME タイプ
Web拡張子から MIME タイプを、MIME タイプから既定の拡張子を検索。js なら text/javascript、image/svg+xml なら .svg が返ります。すべてブラウザ内で処理します。
.gitignore 生成
Web.gitignore 生成:言語・フレームワーク・エディタ・OS の 17 テンプレートを選び、重複を除去してテンプレートごとに注記で区切ります。ブラウザ内で処理します。
画像 Base64 変換
Web画像を Base64 / Data URL に変換。ドラッグ・選択・貼り付けに対応し、長辺での縮小と PNG/JPEG/WebP への変換ができます。ブラウザ内で処理し、送信しません。