跳到主要內容

JSON 轉 ERD — 資料庫關聯圖

貼上資料庫 schema 的 JSON,立即產生可互動的 ERD:表、欄位、主鍵外鍵與關聯線。全程在瀏覽器內完成,不上傳。

三個步驟產生 ERD

  1. 開啟「如何取得 JSON schema」,選擇你的資料庫,複製查詢。
  2. 在資料庫執行該查詢,複製 erd_json 欄位的內容。
  3. 貼回編輯區,畫布會自動排版。

想先看效果,直接按「載入範例」。現成查詢附了 PostgreSQL、MySQL 與 SQL Server 三種, 其他資料庫只要輸出相同格式也能用。

圖上會畫出哪些資訊

  • 每張表是一個節點,節點標題依序是 schema、表名與表備註。
  • 每個欄位佔一列,依序是欄名、型別與欄位備註。
  • 星號代表該欄位為 NOT NULL
  • 預設值要把滑鼠移到欄位上才顯示,因為它通常很長,常駐會擠掉欄名的寬度。
  • 徽章 PK 代表主鍵,FK 代表外鍵,UQ 代表單欄唯一。
  • 關聯線接在具體欄位上,線上標示 1:1 或 1:N。

1:1 與 1:N 的判定規則

  • 外鍵蓋滿子表的整個主鍵時判定為 1:1。
  • 外鍵本身是單欄唯一時判定為 1:1。
  • 其餘情況一律判定為 1:N。
  • 複合主鍵中的單一欄位不算唯一,所以不會被判成 1:1。

JSON 需要哪些欄位

  • 必填的只有 tables[].tablecolumns[].name
  • schema 可以省略。
  • 常見別名都接受,例如 table_namecolumn_namedata_typeis_nullable: "NO"
{
  "tables": [
    {
      "schema": "public",
      "table": "users",
      "comment": null,
      "columns": [
        { "name": "id", "type": "bigint", "nullable": false,
          "is_primary_key": true, "is_unique": false, "comment": null }
      ]
    }
  ],
  "relations": [
    { "constraint_name": "orders_user_id_fkey",
      "from_schema": "public", "from_table": "orders", "from_columns": ["user_id"],
      "to_schema": "public",   "to_table": "users",    "to_columns": ["id"],
      "on_delete": "CASCADE" }
  ]
}

查詢會排除哪些物件

  • 三份查詢都跳過檢視表、序列、索引與系統 schema,只留 ERD 上有意義的物件。
  • PostgreSQL 的查詢會跳過分區子表、保留分區父表,因為一張分區表會展開成幾十個子表。
  • PostgreSQL 的查詢也會跳過分區上被複製的外鍵,否則同一條關聯會重複畫 N 次。
  • FDW 外部表有納入,但它們不能建主鍵與外鍵,所以只有欄位清單、沒有關聯線。

你貼上的 schema 會不會離開瀏覽器

不會。解析與排版都在你的瀏覽器裡完成,沒有任何請求會把 schema 送出去,存檔也只寫進localStorage。細節見隱私權政策