djkazunoko / nijikai-go

0 stars 0 forks source link

DB設計 #2

Closed djkazunoko closed 7 months ago

djkazunoko commented 10 months ago
erDiagram
    Users {
        bigint id PK "null: false"
        string provider "null: false"
        string uid "null: false"
        string name "null: false"
        string image_url "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
    Users ||--o{ Events : ""
    Users ||--o{ Groups : ""
    Users ||--o{ Posts : ""
    Users ||--o{ Tickets : ""
    Events {
        bigint id PK "null: false"
        bigint owner_id FK
        string name "null: false"
        string hashtag "null: false, unique: true"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Events ||--o{ Groups : ""
    Groups {
        bigint id PK "null: false"
        bigint owner_id FK
        bigint event_id FK "null: false"
        string join_restriction "null: false"
        int capacity "default: null"
        string location "null: false"
        string theme "null: false"
        string payment_method "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Groups ||--o{ Posts : ""
    Groups ||--o{ Tickets : ""
    Posts {
        bigint id PK "null: false"
        bigint group_id FK "null: false"
        bigint user_id FK
        text content "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Tickets {
        bigint id PK "null: false"
        bigint user_id FK "null: false"
        bigint group_id FK "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
mermaid.jsのコード ``` erDiagram Users { bigint id PK "null: false" string provider "null: false" string uid "null: false" string name "null: false" string image_url "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Users ||--o{ Events : "" Users ||--o{ Groups : "" Users ||--o{ Posts : "" Users ||--o{ Tickets : "" Events { bigint id PK "null: false" bigint owner_id FK string name "null: false" string hashtag "null: false, unique: true" datetime created_at "null: false" datetime updated_at "null: false" } Events ||--o{ Groups : "" Groups { bigint id PK "null: false" bigint owner_id FK bigint event_id FK "null: false" string join_restriction "null: false" int capacity "default: null" string location "null: false" string theme "null: false" string payment_method "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Groups ||--o{ Posts : "" Groups ||--o{ Tickets : "" Posts { bigint id PK "null: false" bigint group_id FK "null: false" bigint user_id FK text content "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Tickets { bigint id PK "null: false" bigint user_id FK "null: false" bigint group_id FK "null: false" datetime created_at "null: false" datetime updated_at "null: false" } ```

備考

技術スタック

maedana commented 7 months ago

アプリの仕様として、毎日定時に全てのEventを削除する

のであれば過去データはあまり重要でないのかなと思いました。ならば、退会したときにオーナーになっているEventごとごっそり消してしまってもいいんじゃないですかね?

いくつかのテーブルでの

owner_idは退会時を想定してnullを許可

する必要もなくなり、仕組みとしてもシンプルになるんじゃないですかね。いかがでしょうか。

djkazunoko commented 7 months ago

Eventモデルを無くした変更に伴い、データ設計を修正しました。https://github.com/djkazunoko/after-party/issues/20#issuecomment-1920239480

erDiagram
    Users {
        bigint id PK "null: false"
        string provider "null: false"
        string uid "null: false"
        string name "null: false"
        string image_url "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
    Users ||--o{ Groups : ""
    Users ||--o{ Posts : ""
    Users ||--o{ Tickets : ""
    Groups {
        bigint id PK "null: false"
        bigint owner_id FK
        string hashtag "null: false"
        string name "null: false"
        text details "null: false"
        int capacity "default: null"
        string location "null: false"
        string payment_method "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Groups ||--o{ Posts : ""
    Groups ||--o{ Tickets : ""
    Posts {
        bigint id PK "null: false"
        bigint group_id FK "null: false"
        bigint user_id FK
        text content "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Tickets {
        bigint id PK "null: false"
        bigint user_id FK "null: false"
        bigint group_id FK "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
mermaid.jsのコード ``` erDiagram Users { bigint id PK "null: false" string provider "null: false" string uid "null: false" string name "null: false" string image_url "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Users ||--o{ Groups : "" Users ||--o{ Posts : "" Users ||--o{ Tickets : "" Groups { bigint id PK "null: false" bigint owner_id FK string hashtag "null: false" string name "null: false" text details "null: false" int capacity "default: null" string location "null: false" string payment_method "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Groups ||--o{ Posts : "" Groups ||--o{ Tickets : "" Posts { bigint id PK "null: false" bigint group_id FK "null: false" bigint user_id FK text content "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Tickets { bigint id PK "null: false" bigint user_id FK "null: false" bigint group_id FK "null: false" datetime created_at "null: false" datetime updated_at "null: false" } ```
maedana commented 7 months ago

拝見致しました。ユーザが退会した場合、

という方針ですかね? Groupはまぁ残したほうがよさそうですが、PostsとTiekctsは残すならどちらも残す、消すならどちらも消すほうが一貫性ありそうな気がしました。

退会したユーザが参加して発言したGroupsを考えた場合に、誰か不明だけど発言はあるのに、参加者情報を見てもその人は完全にいなかったことになってしまうのは違和感ないですか?

djkazunoko commented 7 months ago

ご確認いただきありがとうございます。

ユーザ退会時のデータの扱いが曖昧だったので、以下のように仕様を明確にしてみました。

上記の仕様を採用すると、退会ユーザのPostに関しては、「退会してもPostは残るがユーザ情報は見れない(退会済みのユーザとわかる)」がいいのかなと思っています。

上記で問題なければ、各テーブルの制約は以下のようになると思っています。

maedana commented 7 months ago

なるほどー、では上記でいいと思います。あとは実際に作りながら必要なら微調整していきましょう!

djkazunoko commented 7 months ago
erDiagram
    Users {
        bigint id PK "null: false"
        string provider "null: false"
        string uid "null: false"
        string name "null: false"
        string image_url "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
    Users ||--o{ Groups : ""
    Users ||--o{ Posts : ""
    Users ||--o{ Tickets : ""
    Groups {
        bigint id PK "null: false"
        bigint owner_id FK "null: false"
        string hashtag "null: false"
        string name "null: false"
        text details "null: false"
        int capacity "default: null"
        string location "null: false"
        string payment_method "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Groups ||--o{ Posts : ""
    Groups ||--o{ Tickets : ""
    Posts {
        bigint id PK "null: false"
        bigint group_id FK "null: false"
        bigint user_id FK
        text content "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Tickets {
        bigint id PK "null: false"
        bigint user_id FK "null: false"
        bigint group_id FK "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
mermaid.jsのコード ``` erDiagram Users { bigint id PK "null: false" string provider "null: false" string uid "null: false" string name "null: false" string image_url "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Users ||--o{ Groups : "" Users ||--o{ Posts : "" Users ||--o{ Tickets : "" Groups { bigint id PK "null: false" bigint owner_id FK "null: false" string hashtag "null: false" string name "null: false" text details "null: false" int capacity "default: null" string location "null: false" string payment_method "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Groups ||--o{ Posts : "" Groups ||--o{ Tickets : "" Posts { bigint id PK "null: false" bigint group_id FK "null: false" bigint user_id FK text content "null: false" datetime created_at "null: false" datetime updated_at "null: false" } Tickets { bigint id PK "null: false" bigint user_id FK "null: false" bigint group_id FK "null: false" datetime created_at "null: false" datetime updated_at "null: false" } ```
djkazunoko commented 6 months ago

https://github.com/djkazunoko/nijikaigo/issues/50#issuecomment-1993663198 を受けて、 Groupsテーブルのcapacityカラムの制約をdefault: nullからnull: falseに変更。

erDiagram
    Users {
        bigint id PK "null: false"
        string provider "null: false"
        string uid "null: false"
        string name "null: false"
        string image_url "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }
    Users ||--o{ Groups : ""
    Users ||--o{ Posts : ""
    Users ||--o{ Tickets : ""
    Groups {
        bigint id PK "null: false"
        bigint owner_id FK "null: false"
        string hashtag "null: false"
        string name "null: false"
        text details "null: false"
        int capacity "null: false"
        string location "null: false"
        string payment_method "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Groups ||--o{ Posts : ""
    Groups ||--o{ Tickets : ""
    Posts {
        bigint id PK "null: false"
        bigint group_id FK "null: false"
        bigint user_id FK
        text content "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    } 
    Tickets {
        bigint id PK "null: false"
        bigint user_id FK "null: false"
        bigint group_id FK "null: false"
        datetime created_at "null: false"
        datetime updated_at "null: false"
    }