Closed djkazunoko closed 7 months ago
アプリの仕様として、毎日定時に全てのEventを削除する
のであれば過去データはあまり重要でないのかなと思いました。ならば、退会したときにオーナーになっているEventごとごっそり消してしまってもいいんじゃないですかね?
いくつかのテーブルでの
owner_idは退会時を想定してnullを許可
する必要もなくなり、仕組みとしてもシンプルになるんじゃないですかね。いかがでしょうか。
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"
}
拝見致しました。ユーザが退会した場合、
という方針ですかね? Groupはまぁ残したほうがよさそうですが、PostsとTiekctsは残すならどちらも残す、消すならどちらも消すほうが一貫性ありそうな気がしました。
退会したユーザが参加して発言したGroupsを考えた場合に、誰か不明だけど発言はあるのに、参加者情報を見てもその人は完全にいなかったことになってしまうのは違和感ないですか?
ご確認いただきありがとうございます。
ユーザ退会時のデータの扱いが曖昧だったので、以下のように仕様を明確にしてみました。
上記の仕様を採用すると、退会ユーザのPostに関しては、「退会してもPostは残るがユーザ情報は見れない(退会済みのユーザとわかる)」がいいのかなと思っています。
上記で問題なければ、各テーブルの制約は以下のようになると思っています。
null: false
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 "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"
}
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"
}
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" } ```備考
技術スタック