kstm-su / member-portal

kstmメンバーであることを確認し、また事務処理を簡潔化するためのポータルサイト
Apache License 2.0
1 stars 0 forks source link

データベースの設計 #8

Open Nlkomaru opened 2 months ago

Nlkomaru commented 2 months ago

member-portalに必要で、データベースに保管する必要のある情報をとりあえず挙げます。ほかに何かあったら、挙げてもらえると嬉しいです。

データベース設計

1. Users テーブル

Column Data Type Notes
user_id VARCHAR 主キー、ユーザーを一意に識別する
hashed_password VARCHAR ハッシュ化された認証用パスワード
name VARCHAR ユーザーの名前
role VARCHAR 役職 (OBかどうかはここで処理)

2. Affiliation テーブル(所属情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
faculty VARCHAR 学部
department VARCHAR 学科
grade INT 学年

3. Contact テーブル(連絡情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
school_email VARCHAR 学校のメールアドレス
sub_email VARCHAR サブのメールアドレス(Optional)
discord_id VARCHAR DiscordのID(Optional)
github_id VARCHAR GitHubのID(Optional)
phone_number VARCHAR 電話番号 (Optional)

4. Profiles テーブル(プロフィール情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
profile_image VARCHAR プロフィール画像のurl (オブジェクトストレージに保存) (Optional)
bio TEXT 簡単な自己紹介文 (Optional)
skills TEXT スキルや興味分野のリスト(カンマ区切りなど)(Optional)

5. Activity_Log テーブル(活動履歴)

Column Data Type Notes
activity_id INT 主キー、活動を一意に識別するID
user_id VARCHAR Usersテーブルとの外部キー
activity_date DATE 活動日
activity_description TEXT 活動の詳細 (大会出場等)
Cyndaquil1999 commented 2 months ago

2点気になったことがあります。

  1. Affiliation Tableの学部学科情報はマスタテーブルで管理してidをINTで指定する方が管理しやすいかもしれません。

  2. Usersのスキルの項目については、どういう活用するか次第ではありますが、仮に同じ分野に興味ある人を検索する機能を実装するみたいな時にこちらについてもマスタテーブルがあると良いかもしれません?

Nlkomaru commented 2 months ago

2点気になったことがあります。

1. Affiliation Tableの学部学科情報はマスタテーブルで管理してidをINTで指定する方が管理しやすいかもしれません。

2. Usersのスキルの項目については、どういう活用するか次第ではありますが、仮に同じ分野に興味ある人を検索する機能を実装するみたいな時にこちらについてもマスタテーブルがあると良いかもしれません?

1に関してはそちらの方が良いように感じるため、そのようにします。 2に関してはbioに取り込んで、削除します。

Nlkomaru commented 2 months ago

また、nameがnicknameなのかreal_nameなのかわからないため、nicknameにフィールド名を変更して、管理用にContactにfamily_name, last_name, middle_nameの属性を追加します。

Nlkomaru commented 2 months ago

Roleおよび学部学科情報をマスタテーブルに切り離し、また名前についてnicknameと本名の区別を明確化します。 また、こうしたほうがいいなどといった点があれば、あげていただけると嬉しいです。

データベース設計

1. Users テーブル

Column Data Type Notes
user_id VARCHAR 主キー、ユーザーを一意に識別する
nickname VARCHAR ユーザーのニックネーム

2. Auth テーブル(認証情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
hashed_password VARCHAR ハッシュ化された認証用パスワード
role_id INT Rolesテーブルとの外部キー

3. Roles テーブル(役職情報)

Column Data Type Notes
role_id INT 主キー、役職を一意に識別するID
role_name VARCHAR 役職名

4. Affiliation テーブル(所属情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
faculty_id INT Facultyテーブルとの外部キー
grade INT 学年

5. Faculty テーブル(学部情報)

Column Data Type Notes
faculty_id INT 主キー、学部を一意に識別するID
faculty_name VARCHAR 学部名
department_name VARCHAR 学科名

6. Contact テーブル(連絡情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
school_email VARCHAR 学校のメールアドレス
sub_email VARCHAR サブのメールアドレス(Optional)
discord_id VARCHAR DiscordのID(Optional)
github_id VARCHAR GitHubのID(Optional)
phone_number VARCHAR 電話番号 (Optional)

7. Name テーブル(名前情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
first_name VARCHAR 名前
last_name VARCHAR 苗字
middle_name VARCHAR ミドルネーム(Optional)

8. Profiles テーブル(プロフィール情報)

Column Data Type Notes
user_id VARCHAR 主キー、Usersテーブルとの外部キー
profile_image VARCHAR プロフィール画像のurl (オブジェクトストレージに保存) (Optional)
bio TEXT 簡単な自己紹介文 (Optional)

9. Activity_Log テーブル(活動履歴)

Column Data Type Notes
activity_id INT 主キー、活動を一意に識別するID
user_id VARCHAR Usersテーブルとの外部キー
activity_date DATE 活動日
activity_description TEXT 活動の詳細 (大会出場等)
erDiagram
    USERS {
        VARCHAR user_id PK
        VARCHAR nickname
    }

    AUTH {
        VARCHAR user_id PK, FK
        VARCHAR hashed_password
        INT role_id FK
    }

    ROLES {
        INT role_id PK
        VARCHAR role_name
    }

    AFFILIATION {
        VARCHAR user_id PK, FK
        INT faculty_id FK
        INT grade
    }

    FACULTY {
        INT faculty_id PK
        VARCHAR faculty_name
        VARCHAR department_name
    }

    CONTACT {
        VARCHAR user_id PK, FK
        VARCHAR school_email
        VARCHAR sub_email
        VARCHAR discord_id
        VARCHAR github_id
        VARCHAR phone_number
    }

    NAME {
        VARCHAR user_id PK, FK
        VARCHAR first_name
        VARCHAR last_name
        VARCHAR middle_name
    }

    PROFILES {
        VARCHAR user_id PK, FK
        VARCHAR profile_image
        TEXT bio
    }

    ACTIVITY_LOG {
        INT activity_id PK
        VARCHAR user_id FK
        DATE activity_date
        TEXT activity_description
    }

    USERS ||--o{ AUTH : has
    USERS ||--o{ AFFILIATION : has
    USERS ||--o{ CONTACT : has
    USERS ||--o{ NAME : has
    USERS ||--o{ PROFILES : has
    USERS ||--o{ ACTIVITY_LOG : logs
    AUTH }o--|| ROLES : has
    AFFILIATION }o--|| FACULTY : belongs_to