質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1018閲覧

[DB]ユーザーと招待制のプロジェクトのtable設計について

php_practitione

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/03/04 06:49

前提・実現したいこと

登録済みユーザーがプロジェクトを作成し、そのプロジェクトに他の登録済みユーザーが参加する場合のtable設計を知りたいです。

githubなどのレポジトリに他の人を招待する感じが似ていると思っております。(権限設定とかはないですが)

フロー

  1. 登録済みユーザーが、タイトルと内容を設定後プロジェクトを作成。そのユーザーはオーナーとなる。
  2. オーナーは、プロジェクトページから、招待URLを発行し、他の登録ユーザーにチャットで送る。(xxx.com/invite/{hash})
  3. 招待された登録済みユーザーは、招待ページのボタンから参加する。
  4. オーナーのプロジェクトページには参加者の名前が一覧で見えている。

考えたtable設計

Users table

  • id
  • email
  • 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の中間テーブルを辿れば取得できると考えております。

このような設計で大丈夫なのでしょうか?
他に良い設計があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/04 07:00

「invite_code を知ってるユーザーは誰でもプロジェクトに参加できる」で良いならこれで良いのでは。
php_practitione

2020/03/04 08:29

ありがとうございます。 さらに質問で申し訳ないのですが、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;
guest

回答1

0

自己解決

コメント参照お願いします。

投稿2020/03/11 13:33

php_practitione

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問