pgAdmin 4 ER図の自動作成
ER図(エンティティ・リレーションシップ図)とは、データベースの設計や分析に使用される図で、データの構造を視覚的に表現するためのものです。ここでは、pgAdmin4 で外部キー制約を利用してER図を自動作成する方法を紹介します。
自動作成するER図
下記に示す「仕入先」「商品」「顧客」「購入テーブル」のER図を自動作成します。
- 「商品テーブル」の複数の商品は、「仕入先テーブル」の仕入れ先から仕入れています。
- 「購入テーブル」は、どの顧客が何の商品をいつ購入したかを記録するテーブルです。
エンティティ
ER図作成用データベースの作成
先ずは、「purchase_db」データベースを作成して、この中に上記4個のテーブルを作成します。
- 左メニューの「データベース(1)」を右クリックして「作成」→「データベース」を選択します。
データベース作成ダイアログボックスの「データベース名」にデータベース名称を入力して「保存」ボタンをクリックします。
入力した名称のデータべースが作成されました。
ER図作成用 各テーブルの作成
「purchase_db」の「スキーマ」を展開し「テーブル」を右クリック、「作成」→「テーブル」を選択します。
テーブル作成ウィザードで、「名前」にテーブル名称「supplier_tbl」を入力し、「General」タブ右側の「列」タブをクリックします。
右側の「+」ボタンをクリックして「列」入力欄を作成し、下図のように「名前」「データ型」「NOT NULL」「主キー」を入力します。本テーブルの「主キー」は「supplier_id」です。全て入力したら「保存」ボタンをクリックしてテーブルを作成します。
作成されたテーブル「supplier_tbl」です。
「supplier_tbl」のようにして、「customer_tbl」「merchandise_tbl」「purchase_tbl」を作成します。
ER図自動作成の為の、外部キー制約の設定
- ①「仕入れ先」テーブルと「商品テーブル」の「外部キー制約」
「商品テーブル」にある複数の商品は、「仕入れ先」テーブルにある「仕入れ先」から仕入れています。その為、「仕入れ先」テーブルと「商品テーブル」に「外部キー制約」を設定します。
「merchandise_tbl」 →「制約」→「作成」→「外部キー」を選択します。
「外部キー制約」の名称を入力します。ここでは分かり易いように「仕入先テーブル」の主キー「supplier_id」を入力しています。
「列」タブをクリックし、下記の情報を入力します。
- ①ローカル列
「商品テーブル」の外部キー「supplier_id]を入力 - ②参照テーブル
①のローカル列が参照しているテーブル「public.supplier_tbl」を入力 - ③参照列
「public.supplier_tbl」の参照している列「supplier_id」を入力 - ④「Add」ボタン
「外部キー制約」を追加する為、「Add」ボタンをクリックします。
下図のように「外部キー制約」が追加されます。
同じようにして、「顧客テーブル」と「購入テーブル」の「外部キー制約」と、「顧客テーブル」購入テーブル」の「外部キー制約」を作成します。
作成したら、「purchase_db」を右クリックして「データベースに対するERD」を選択します。
そうすると、下図のようにER図が自動作成されます。テーブル位置の関係で見難いですが、見易いように調整して下さい。
SQLによるER図の自動作成
上記でも紹介したように、テーブル間の関連付け(リレーションシップ)を行うには、主に外部キー制約(Foreign Key Constraint)を使ってテーブル同士の関係を設定します。以下に例を挙げて説明します。
ER図自動作成 データモデルの例
まず、簡単なデータモデルとしてここでは、ユーザーと注文の関係を例にします。
- users テーブル:ユーザーの情報を保持します。
- orders テーブル:各ユーザーの注文情報を保持します。
ここで、ordersテーブルは users テーブルに関連付けられており、注文をしたユーザーの情報を示すために users_id という外部キーを使います。
ER図自動作成用 テーブルの作成と関連付け
以下のSQLステートメントで、2つのテーブルを作成し、 users_id を使って関連付けを行います。
-- users テーブルの作成
CREATE TABLE users (
user_id SERIAL PRIMARY KEY, -- 主キー
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
-- orders テーブルの作成
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY, -- 主キー
order_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
user_id INT NOT NULL, -- 外部キーとして設定するカラム
FOREIGN KEY (user_id) REFERENCES users(user_id) -- usersテーブルのuser_idを参照する外部キー制約
);
外部キー制約の説明
上記の例では、 以下のようにordersテーブルの user_id カラムが外部キー制約として設定されています。
- user_idが外部キー(FOREIGN KEY)として設定され、usersテーブルのuser_idを参照しています。
- これにより、ordersテーブルのuser_idに存在する値は、必ずusersテーブルのuser_idに存在していなければならず、一貫性を保ちます。
ER図の自動作成
このように関連付けを定義し、「データベースに対するERD」を選択することで、users テーブルとorders テーブルのER図が自動作成されます。