データベース詳細設計 - pikawakapikka/SkillSync GitHub Wiki
users(ユーザー:求職者・企業共通)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
VARCHAR(255) | NOT NULL, UNIQUE | |||
password_hash | TEXT | NOT NULL | ||
name | VARCHAR(100) | NOT NULL | ||
role | VARCHAR(20) | NOT NULL('seeker' / 'employer') | ||
created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
seeker_profiles(求職者プロフィール)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
user_id | INTEGER | → users(id) | NOT NULL | |
desired_position | VARCHAR(100) | |||
summary | TEXT |
portfolios(ポートフォリオ)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
url | TEXT | NOT NULL | ||
description | TEXT |
skills(スキルマスタ)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
name | VARCHAR(100) | NOT NULL, UNIQUE |
seeker_skills(求職者のスキル)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
seeker_id | INTEGER | ✔(複合) | → seeker_profiles(id) | NOT NULL |
skill_id | INTEGER | ✔(複合) | → skills(id) | NOT NULL |
level | INTEGER | CHECK (1 <= level <= 5) |
skill_tests(スキルテスト定義)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
name | VARCHAR(100) | NOT NULL | ||
category | VARCHAR(50) |
test_results(スキルテスト結果)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
test_id | INTEGER | → skill_tests(id) | NOT NULL | |
score | INTEGER | NOT NULL | ||
taken_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
employers(企業情報)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
user_id | INTEGER | → users(id) | NOT NULL | |
company_name | VARCHAR(100) | NOT NULL |
job_posts(求人)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
employer_id | INTEGER | → employers(id) | NOT NULL | |
title | VARCHAR(100) | NOT NULL | ||
description | TEXT | |||
created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
job_skills(求人に必要なスキル)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
job_id | INTEGER | ✔(複合) | → job_posts(id) | NOT NULL |
skill_id | INTEGER | ✔(複合) | → skills(id) | NOT NULL |
required | BOOLEAN | NOT NULL |
job_matches(スキルマッチ結果)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
job_id | INTEGER | → job_posts(id) | NOT NULL | |
match_score | INTEGER | |||
created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
scouts(スカウト)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
job_id | INTEGER | → job_posts(id) | NOT NULL | |
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
message | TEXT | |||
created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
learning_courses(学習コース)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
name | VARCHAR(100) | NOT NULL | ||
url | TEXT | NOT NULL | ||
platform | VARCHAR(50) |
recommended_courses(推薦された学習コース)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
course_id | INTEGER | → learning_courses(id) | NOT NULL | |
reason | TEXT | |||
recommended_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |
mock_interviews(模擬面接)
カラム名 | データ型 | 主キー | 外部キー | 制約 |
---|---|---|---|---|
id | SERIAL | ✔ | ||
seeker_id | INTEGER | → seeker_profiles(id) | NOT NULL | |
type | VARCHAR(10) | CHECK (type IN ('video','text')) | ||
feedback | TEXT | |||
created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP |