前提・実現したいこと
登録済みユーザーがプロジェクトを作成し、そのプロジェクトに他の登録済みユーザーが参加する場合のtable設計を知りたいです。
githubなどのレポジトリに他の人を招待する感じが似ていると思っております。(権限設定とかはないですが)
フロー
- 登録済みユーザーが、タイトルと内容を設定後プロジェクトを作成。そのユーザーはオーナーとなる。
- オーナーは、プロジェクトページから、招待URLを発行し、他の登録ユーザーにチャットで送る。(xxx.com/invite/{hash})
- 招待された登録済みユーザーは、招待ページのボタンから参加する。
- オーナーのプロジェクトページには参加者の名前が一覧で見えている。
考えたtable設計
Users table
- id
- password
- screen_name
Projects table
- id
- user_id
- title
- contents
- invite_code
user_project table
- user_id
- project_id
という3つのテーブルを考えており、オーナーはproject.user_idから取得できて、
参加者はuser_projectの中間テーブルを辿れば取得できると考えております。
このような設計で大丈夫なのでしょうか?
他に良い設計があるのでしょうか?
「invite_code を知ってるユーザーは誰でもプロジェクトに参加できる」で良いならこれで良いのでは。
ありがとうございます。
さらに質問で申し訳ないのですが、projectやuserをis_deleteのようなflgでの論理削除の場合は
中間テーブルのforgin keyに対してON DELETEなどはつけなくて良いでしょうか?
ON UPDATEは、idを更新することはないだろうから必要ないのかなとと思ってます
CREATE TABLE `user_project` (
`user_id` int(11) NOT NULL,
`project_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`project_id`),
CONSTRAINT `user_project_fk_1` FOREIGN KEY (`project_id`) REFERENCES `Project` (`id`),
CONSTRAINT `user_project_fk_1` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
回答1件
あなたの回答
tips
プレビュー