Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

データベースの設計 #8

Open
Nlkomaru opened this issue Aug 14, 2024 · 4 comments
Open

データベースの設計 #8

Nlkomaru opened this issue Aug 14, 2024 · 4 comments

Comments

@Nlkomaru
Copy link
Contributor

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
Copy link
Contributor

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

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

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

@Nlkomaru
Copy link
Contributor Author

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

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

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

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

@Nlkomaru
Copy link
Contributor Author

Nlkomaru commented Aug 16, 2024

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

@Nlkomaru
Copy link
Contributor Author

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
Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants