1
1

データベース設計の手順(転職サイトの場合)

Last updated at Posted at 2024-08-03

転職サイトにおけるデータベース設計と分析手順

前書き

転職サイトのデータベース設計は、求人情報の管理や応募プロセスの追跡、ユーザー体験の向上など、多くの目的を持っています。この記事では、「とある転職サイト」ということを例にデータベース設計の基本手順を紹介します。データベース設計の基本から具体的な手順までを理解することで、データの効率的な利用や分析が可能になります。

1. データベース設計の基本概念

転職サイトにおけるデータベース設計は、以下の主なテーブルを含みます。

  • Users(ユーザー)
  • Jobs(求人)
  • Applications(応募)
  • Interviews(面接)
  • Companies(企業)
  • JobTypes(雇用形態)
  • ApplicationStatusHistory(応募ステータス履歴)
  • InterviewFeedback(面接フィードバック)
  • WorkHistory(職歴)
  • JobCategories(職種)

1.1 リレーショナルデータベース

リレーショナルデータベースは、データを表形式で管理します。各テーブルは行(レコード)と列(カラム)で構成されます。

1.2 正規化

正規化は、データの重複を減らし、一貫性を保つためのプロセスです。データを正規化することで、更新、削除、挿入時の異常を防ぎます。

1.3 主キーと外部キー

主キー(Primary Key)は、テーブル内の各レコードを一意に識別するためのカラムです。外部キー(Foreign Key)は、他のテーブルの主キーを参照するカラムで、テーブル間のリレーションシップを表現します。

2. データベース設計のステップ

2.1 要件の収集と分析

システム要件を収集し、分析します。ユーザーのニーズや業務プロセスの理解が重要です。

2.2 概念設計(ER図の作成)

エンティティ、属性、リレーションシップを特定し、ER図を作成します。

2.3 論理設計(テーブル設計)

ER図を基に、実際のテーブルを設計します。テーブル、カラム、主キー、外部キーを定義します。

2.4 物理設計

論理設計を基に、具体的なデータベーススキーマを作成します。

3. ER図の作成

ER図は、エンティティとそのリレーションシップを視覚的に表現するための図です。以下は、ER図の例です。

Users
---------
id (PK) -- ユーザーID(主キー)
name -- 名前
email -- メールアドレス
password -- パスワード
phone_number -- 電話番号
resume -- 履歴書(ファイルパス)
registration_date -- 登録日

Jobs
---------
id (PK) -- 求人ID(主キー)
company_id (FK) -- 企業ID(外部キー)
job_type_id (FK) -- 雇用形態ID(外部キー)
category_id (FK) -- 職種ID(外部キー)
description -- 説明
location -- 勤務地
salary -- 給与
posted_date -- 掲載日
expiration_date -- 有効期限

Applications
---------
id (PK) -- 応募ID(主キー)
user_id (FK) -- ユーザーID(外部キー)
job_id (FK) -- 求人ID(外部キー)
application_date -- 応募日
current_status -- 現在のステータス

Interviews
---------
id (PK) -- 面接ID(主キー)
application_id (FK) -- 応募ID(外部キー)
interview_date -- 面接日
interviewer -- 面接官
location -- 面接場所
notes -- 面接ノート

Companies
---------
id (PK) -- 企業ID(主キー)
name -- 企業名
location -- 所在地
industry -- 業種
description -- 企業説明

JobTypes
---------
id (PK) -- 雇用形態ID(主キー)
type -- 雇用形態

ApplicationStatusHistory
---------
id (PK) -- 履歴ID(主キー)
application_id (FK) -- 応募ID(外部キー)
status -- ステータス
changed_date -- 変更日

InterviewFeedback
---------
id (PK) -- フィードバックID(主キー)
interview_id (FK) -- 面接ID(外部キー)
feedback -- フィードバック内容
rating -- 評価
feedback_date -- フィードバック日

WorkHistory
---------
id (PK) -- 職歴ID(主キー)
user_id (FK) -- ユーザーID(外部キー)
company_name -- 企業名
start_date -- 開始日
end_date -- 終了日
description -- 説明

JobCategories
---------
id (PK) -- 職種ID(主キー)
category_name -- 職種名

4. テーブル設計

Users(ユーザー)

CREATE TABLE Users (
    id SERIAL PRIMARY KEY,  -- ユーザーID(主キー)
    name VARCHAR(100),  -- 名前
    email VARCHAR(100),  -- メールアドレス
    password VARCHAR(100),  -- パスワード
    phone_number VARCHAR(20),  -- 電話番号
    resume VARCHAR(255),  -- 履歴書(ファイルパス)
    registration_date DATE  -- 登録日
);

Jobs(求人)

CREATE TABLE Jobs (
    id SERIAL PRIMARY KEY,  -- 求人ID(主キー)
    company_id INT REFERENCES Companies(id),  -- 企業ID(外部キー)
    job_type_id INT REFERENCES JobTypes(id),  -- 雇用形態ID(外部キー)
    category_id INT REFERENCES JobCategories(id),  -- 職種ID(外部キー)
    description TEXT,  -- 説明
    location VARCHAR(100),  -- 勤務地
    salary DECIMAL(10, 2),  -- 給与
    posted_date DATE,  -- 掲載日
    expiration_date DATE  -- 有効期限
);

Applications(応募)

CREATE TABLE Applications (
    id SERIAL PRIMARY KEY,  -- 応募ID(主キー)
    user_id INT REFERENCES Users(id),  -- ユーザーID(外部キー)
    job_id INT REFERENCES Jobs(id),  -- 求人ID(外部キー)
    application_date DATE,  -- 応募日
    current_status VARCHAR(50)  -- 現在のステータス
);

Interviews(面接)

CREATE TABLE Interviews (
    id SERIAL PRIMARY KEY,  -- 面接ID(主キー)
    application_id INT REFERENCES Applications(id),  -- 応募ID(外部キー)
    interview_date DATE,  -- 面接日
    interviewer VARCHAR(100),  -- 面接官
    location VARCHAR(100),  -- 面接場所
    notes TEXT  -- 面接ノート
);

Companies(企業)

CREATE TABLE Companies (
    id SERIAL PRIMARY KEY,  -- 企業ID(主キー)
    name VARCHAR(100),  -- 企業名
    location VARCHAR(100),  -- 所在地
    industry VARCHAR(50),  -- 業種
    description TEXT  -- 企業説明
);

JobTypes(雇用形態)

CREATE TABLE JobTypes (
    id SERIAL PRIMARY KEY,  -- 雇用形態ID(主キー)
    type VARCHAR(50)  -- 雇用形態
);

ApplicationStatusHistory(応募ステータス履歴)

CREATE TABLE ApplicationStatusHistory (
    id SERIAL PRIMARY KEY,  -- 履歴ID(主キー)
    application_id INT REFERENCES Applications(id),  -- 応募ID(外部キー)
    status VARCHAR(50),  -- ステータス
    changed_date DATE  -- 変更日
);

InterviewFeedback(面接フィードバック)

CREATE TABLE InterviewFeedback (
    id SERIAL PRIMARY KEY,  -- フィードバックID(主キー)
    interview_id INT REFERENCES Interviews(id),  -- 面接ID(外部キー)
    feedback TEXT,  -- フィードバック内容
    rating INT,  -- 評価
    feedback_date DATE  -- フィードバック日
);

WorkHistory(職歴)

CREATE TABLE WorkHistory (
    id SERIAL PRIMARY KEY,  -- 職歴ID(主キー)
    user_id INT REFERENCES Users(id),  -- ユーザーID(外部キー)
    company_name VARCHAR(100),  -- 企業名
    start_date DATE,  -- 開始日
    end_date DATE,  -- 終了日
    description TEXT  -- 説明
);

JobCategories(職種)

CREATE TABLE JobCategories (
    id SERIAL PRIMARY KEY,  -- 職種ID(主キー)
    category_name VARCHAR(100)  -- 職種名
);

後書き

この記事では、転職サイトのデータベース設計と、各テーブルの役割やカラムの詳細について説明しました。これらの設計を基に、求人情報の管理や応募プロセスの追跡を効率的に行い、ユーザー体験を向上させることが可能になります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1