- ベストアンサー
多数のレターの購読管理
たとえば、 山田太郎さんという人が、レターA、レターB、レターEを購読 山田花子さんという人が、レターC、レターFを購読 田中太郎さんという人が、レターAを購読 などの複数のレターを購読するような場合、それをアクセスのデータとして管理する場合、 氏名、購読紙 山田太郎 A,B,E 山田花子 C,F 田中太郎 A というようなテーブルを作り、その上で各種のフォームなどに組合わせていくものなのでしょうか? それとも、 氏名 購読紙 山田太郎 A 山田太郎 B 山田太郎 E 山田花子 C ・・・・ のようにしていくべきなのでしょうか? プログラミング初心者の質問です。 #質問の意図は、どっちが、(あるいは別の方法)扱いやすいのかというようなことを知りたい。これから作業するにあたって、後悔しなくて済むよう・・。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リレーショナルデータベースとはなんぞや。 ということを知っていれば、 Table_A(ユーザ情報) user_is,user_name 1, 山田太郎 2, 山田花子 3, 田中太郎 Table_B(購読紙情報) letter_id,letter_name 1, レターA 2, レターB 3, レターC 4, レターD 5, レターE 6, レターF Table_C(購読状況情報) user_id,letter_id 1, 1 1, 2 1, 5 2, 3 2, 6 3, 1 といった構成をとるのが、模範解答になります。 これをデータベースの正規化と言います、 この形式だと、購読紙がいくつに増えても、同一 プログラムで対処可能です。ですが、この形だと、 山田太郎 A, B, E 山田花子 C, F 田中太郎 A の形の表を作るのに若干手間がかかります。 (クロス集計クエリを使用します) 従って、購読紙が一定数で今後増えないのあれば 山田太郎,1,1,0,0,1 山田花子,0,0,1,0,1 田中太郎,1,0,0,0,0 のような形式を使用したほうが「楽」です。 ただし、購読紙が増えると、プログラムの 書き直しになります。 あとは、あなたの気持ちしだいです。 データベース/プログラミングを学ぶ気があるなら、 前者をお薦めします。 多分後者だと、購読紙が増えるたびに 後悔すると思います。
その他の回答 (1)
- crimson
- ベストアンサー率40% (900/2202)
むしろ、全てのレターについて「購読/非購読」を明示 するような形式にした方が、データ量は増えますが管理 は容易になると思います。 以下、購読=1、非購読=0としますと、この例ならば 山田太郎,1,1,0,0,1 山田花子,0,0,1,0,1 田中太郎,1,0,0,0,0 …とするわけですね。 レターごと、メンバーごとの購読数も簡単に計算できる ようになります。