現在、投稿型サイトを制作しており、一点構造上どのようにすべきか悩んでいる点がございます。
例えば、本サービスのteratailも採用していると思うのですが、userログインされていることを前提に
投稿された記事に対して「評価する」ボタンが準備されており、①userと②評価されている記事の情報が紐付いていると思います。より具体的に申し上げれば、例えばAと言う、第3者の質問記事について、評価ボタンを押した場合、評価が1つ追加され、ページリロード後に同じ記事を閲覧すると当然評価が1つ追加されており、改めてクリックすると1件減少し、取り下げることができるようになっていることから、「紐付いている」と表現いたしました。
さて、ここでMYSQL上現在、以下のような2つTABLEあります。
1.post_table(個別記事の情報に関するtable)
SQL
1postid int(10) PRIMARY KEY AUTO INCREMENT/*一意の記事ID*/ 2postby varchar(20) /*投稿者の名前*/ 3postcontent varchar(255) /*投稿内容*/
2.user_table(ユーザ情報の関するtable)
SQL
1userid int(10) PRIMARY KEY AUTO INCREMENT/*一意のuserID*/ 2username varchar(10)/*投稿者の名前*/
実務上、どのようにするのか是非アドバイスをお尋ねしたいのです(必ずしも答えは一つではないので、こうするのが良いですよというご意見でも結構ですので)
このような場合、
- post_tableのように記事情報に一つカラムを設けて、"1,4,7"(番号はuserid)のようにカンマ区切り等で複数つなげた情報を持たせるべきでしょうか?または、同じような話ではありますが、user_table側に一つカラムを設けて、"1,4,7"(番号はpostid)として、ユーザー側情報に「いいね」をした記事の情報を持たせるべきでしょうか?
2) または、post_tableやuser_tableにいいねがあるたびにカラムを増やしていく方法(思いつきで申し上げているの現実的かどうかは定かではないのですが)
- または、記事ごとに記事ごとにまた別のtableを設けて、ユーザーから「いいね」をされるたびにその該当tableを参照して、追加または削除の判断をする(複数のテーブルを管理したことがなく、実務的にこのように無限に増える可能性があるテーブルを作っていくことが実務的に正しいかどうかが自身、懐疑的ではあります)
上記で申し上げた、「ユーザー」と「いいね」の紐付け及びその一般的な管理のしやすさ(例えば、「いいね」が押された場合に、既にされているかどうかの検索のスピードや上記で述べた、無限にテーブルが増えていってしまう煩雑さを含めて)について、どのような方法が実務的なのでしょうか。
漠然とした抽象的な質問になってしまって申し訳ございません。もっと具体的にこのような機能を実装したいので、その場合はどのようなテーブルの持ち方をすれば良いですかとお問い合わせできれば良いのですが、なにぶん初心者で理解が不足している箇所も多々あると思いますが、取り掛かるにあたってのアドバイスを願えれば幸いです。
よろしくお願い申しあげます
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/22 08:16
2019/07/22 08:19
2019/07/22 08:21
2019/07/22 08:30