質問: **最終的にやりたいこと** ・「登録した任意ユーザ」がブログへ記事を投稿 ・ブログ記事の一部を有料化 ・「該当記事へ対して課金したユーザのみ」が「該当記事」を閲覧できるようにしたい **現状のテーブル構成** ・ブログ記事テーブルb。u_idカラムあり ・ユーザテーブルu ※1対多 --- **分からないこと。判定フラグのDB格納** 「該当記事へアクセスしてきたユーザ」が、「該当記事へ課金したユーザ」かどうかの判定。 このような判定フラグをDBへ格納することは可能ですか? **分からないこと。テーブル構成** 「該当記事へ課金したユーザ」であることをDBへINSERTするにはどうすれば良い? * 案1.ブログ記事テーブルbにユーザ課金カラムを新規作成して、課金したユーザテーブルu_idを、「,」か何かで区切って複数格納していく * 案2.ユーザテーブルuの1カラムに、課金したブログ記事テーブルb_idを、「,」か何かで区切って複数格納していく * 案3.「課金テーブルk」を新規作成して、「ブログ記事テーブルb_id」と「ユーザテーブルu_id」を格納していく ※この時の三者の関係性は、「ブログ記事テーブルb」と「ユーザテーブルu」と「課金テーブルk」がそれぞれ「多対多」? その他の案は何かありますか? **補足** ブログはWordPressなどの一般的なものではありません
回答: mysqlのタグがあるのでRDBMSとすれば、案1・案2は基本的に避けて、案3を選択してください。 > > ※この時の三者の関係性は、「ブログ記事テーブルb」と「ユーザテーブルu」と「課金テーブルk」がそれぞれ「多対多」? > > > いいえ。 `ブログ記事`と`ユーザ`の関係が多対多であり、それを実現するのが`課金テーブルk`です。 これを「中間テーブル」と言ったりします。 > > ・このような判定フラグをDBへ格納することは可能ですか? > > > に対する回答としては、`課金テーブルk`のレコード有無で判断すれば良いでしょう。 要件によっては有効期限を持たせたり、無効化するフラグを持つ設計もアリだと思います。