X

データベースに詳しい人ちょっと来て

■ このスレッドは過去ログ倉庫に格納されています
1以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:19:52.950
テーブルAのカラムに外部キー(テーブルBのレコードのID)を格納する仕組み (外部キー制約で)
 ・・・ ここまではできる。

テーブルAのカラムに外部キー(テーブルBのレコードのID)を「複数」格納する仕組み (同じく外部キー制約で)
 ・・・ これってできますか?

具体的には、
テーブルA:ユーザー情報
テーブルB:メッセージ情報。

Aに「既読」カラムを作る。
テーブルBの各メッセージ情報をそのユーザーが既読したか?開いたことのあるメッセージのIDを0個~最大いくつでも格納できる仕組みがやりたいです。
2以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:25:27.383ID:fYZLmfvV0
Aがユーザテーブル Bがメッセージのマスタなら
主キーがAのidとBのidの複合キーで既読カラム持つCテーブルを作ってどうぞ
3以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:29:52.576ID:Ak7LMNki0
>>2
あぁー 別テーブル作る発想は無かったです。

そこまで大掛かりにやらないと駄目ですか。

「データベース 配列 格納」と検索すると、1カラムに何件あるか分からないデータを格納するのは望ましくない、という答えが多いようで。
CSVで連結してテキストにして1カラムに格納するという試作はできているのですが、
制約が付けられないので、テーブルBのレコードが消えたときの扱いとかが面倒で困っていました。
4以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:35:57.697ID:b47Z6Gvta
なんで既読をAに管理させるんだ?
5以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:43:16.958ID:Ak7LMNki0
>>4
Bに格納する(読んだユーザーを覚えておく)設計も検討しましたが、手間としてはどちらも同じなのでは?
6以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:44:04.295ID:b47Z6Gvta
>>5
ん?
メッセージは多人数で交換するのか?
7以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:44:38.298ID:fYZLmfvV0
>>3
そんな大掛かりには感じないかなあ普通だよ
csv入れるとかは正規形に沿ってないしあんまやらないかな
8以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:45:18.338ID:jJuVRVrg0
Cテーブルを用意して

ユーザーとメッセージのidと既読フラグ持たせればおk
9以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:45:46.204ID:jJuVRVrg0
既読フラグもいらんな

Cテーブル自体が既読テーブル
10以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:47:28.551ID:z+D684VX0
自前でRDBMSもどきでも作ろうとしてそう
11以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:48:39.103ID:b47Z6Gvta
ユーザーのデータ見るときに過去の既読メッセージ全部転送しないといけないのヤバいな
12以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:51:56.644ID:Ak7LMNki0
>>6
そう。誰でも読める公開メッセージのようなもので、
どのユーザーがどのメッセージを既読かを覚えておかないといけないのです。
13以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:55:31.891ID:b47Z6Gvta
>>12
せめてメッセージにユーザー覚えさせたほうがまだマシじゃね?
14以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 18:57:56.066ID:Ak7LMNki0
>>13
全メッセージをいったんselect文で取得して、そのユーザーが未読のものだけを抽出する、というプログラムを書くと、
メッセージが大量にあった場合に無駄な通信が発生するのではないか?という考えです。
15以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:00:50.517ID:b47Z6Gvta
>>14
過去のメッセージを1件削除するだけで全ユーザーのデータを更新するのはいいのか?
16以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:03:51.497ID:Ak7LMNki0
>>15
そう。まさにそこで悩んでいます。

そうなるとまさに「テーブルC」案がベストなのですかね。
複合キーというのをやったことないのですが、
ユーザーかメッセージのどちらかが削除されたら、Cのレコードも自動で消えるということですか?
17以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:06:00.180ID:b47Z6Gvta
>>16
ってかそもそも既読って絶対に必要なのか?
既読やりたいなら掲示板よりメールボックスのほうがよくね?
18以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:08:50.892ID:jJuVRVrg0
>>16
ユーザーもメッセージも行は削除しない
それぞれに削除フラグをつける
2022/10/25(火) 19:11:32.872ID:J0F5ZLIc0
>>16
自動で消えるようにもできるけど全てに自身が持てるまでやらないほうがいい
20以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:15:13.090ID:qu74EQMx0
データベース設計のはじめの一歩じゃん
俗に言う連想エンティティとかいうやつ
21以下、5ちゃんねるからVIPがお送りします
垢版 |
2022/10/25(火) 19:18:33.842ID:Ak7LMNki0
>>17
どちらかというとSNSに近いのです。
全体に出すお知らせの「新着」の管理。未読のものだけ目立たせたり、件数を出したりしたいという感じです。
>>18-19
単に「既読」情報で重要なものは含まないので、削除で構わないです。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況