• ベストアンサー

レコードに対する各ユーザの未読管理

メインのテーブルのレコードに対する、ユーザごとの未読・既読フラグをつけたいと思い、いろいろな案を考えてみてはいますが、何か懸念事項がありなかなかいい方法が見つかりません。 サーバにDBがあり、メインテーブルに 管理番号・版数・内容・削除フラグがあるとします。 ※管理番号・版数が主キー 各ユーザは、VBで作成したシステムから上記テーブルへ更新を行います。 ※各ユーザはクライアントに依存せず、様々なPCからログインをし、ユーザ数は増減します 新規の場合、MAX(管理番号)+1 を管理番号に設定し、版数を1で登録します。 修正の場合、既存のレコードに削除フラグを立て、管理番号は同じで版数を+1してINSERTします。 削除の場合、削除フラグをたてます。 新規・修正の場合、登録ユーザ以外のユーザは未読として扱います。 また、未読の間に何度も版数アップされても、他のユーザは最新のレコードのみ閲覧し、既読にします。 未読フラグについて、自分なりにいろいろ考えてみましたが、それぞれ懸念事項が発生します (1)メインテーブル(もしくは他のテーブル)のレコードに対して、未読フラグフィールドを設定   ・ユーザ情報を格納してるテーブルに、各ユーザ事に1から連番を振っておく   ・未読フラグは「01001」のようにデータを持たせ、1番のユーザは未読、2番のユーザは既読と判断する  →ユーザが減少したときに無駄なビットがどんどん増えていく (2)別テーブルに、管理番号・ユーザID・(版数)を持たせる   ・レコードがあるときは未読で、既読の時はレコードを削除  →登録時にユーザ数分レコードを作る必要があり、負荷がかかる。しかし、基本は未読→既読のため、データの圧迫はほとんどなし。 (3)各ユーザ事に未読フラグフィールドを作成   ・「010010011100」のようなデータを格納   ・管理番号を1からの連番にし、管理番号のビットが 0なら未読・1なら既読  →修正で更新した際に未読にするのが大変 (4)メインテーブル(もしくは他のテーブル)へ各ユーザようにフラグを管理するフィールドを設定  →フラグ管理をしたり、他ユーザが更新・追加をしたときに楽。しかし、ユーザが増えた時に都度フィールドを追加しなければならないため、現実的ではない。 といった感じです。ちなみに環境は、 OS:XP 、 PG:VB.NET 、 DB:ACCESS or SQLServer になります。 今のところ(1)が一番有効方法かと思いますが、他にもっと効率の良い方法を探しています。 とても長文になり、また分かりづらい文書になってしまいすいません。 同じような経験があるかたや知識豊富な方、ぜひご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

(1)または(2)の方法、どちらにしても、 1番のユーザはAさん 2番のユーザはBさん と静的に対応させる必要はないんじゃないかな、と思います。 どういうことかというと、(1)の方法でいうと、 未読フラグは「01001」としたら、 1番のユーザは、対応テーブルを参照して、Aさん で未読 2番のユーザは、同じくBさん で既読(または更新者) 3番のユーザは現在いません。 4番のユーザは、同じくDさん で未読 5番のユーザは、同じくCさん で既読(または更新者) 対応テーブル 位置 数値(未読フラグの何バイト目に対応するか) ユーザ 文字列(ユーザID) <データ> 1,AさんのID 2,BさんのID 4,DさんのID 5,CさんのID ・・・ユーザー登録・更新・削除時にいっしょに処理します。    メインテーブルの登録・更新・削除は関係しません。 また、(1)の方法に関して言うと、 メインテーブルの更新者を記録しておきたかったら、 メイン以外の別テーブルに分けたほうがいいと思う。 文書の更新は、メインテーブルの更新者IDを更新するが、 文書閲覧でメインテーブルが更新されたら、更新者IDを更新してはいけない、 なんてややこしいことになるから。 項目としては、管理番号・版数・未読フラグ・削除フラグ(管理番号・版数キー)か 管理番号・未読フラグ・削除フラグ(管理番号キー)か。 削除フラグは、未読の一覧を出すとか言うことがあるならあると楽だがいらないかもしれません。 修正の取消っていうのがあるなら、管理番号・版数キーにしておかないと、1世代前へ戻れません。 (ないなら、どちらでもいいと思います。) あと、アクセス権限という概念はないんですね? 例えば、登録や更新した人以外の人が勝手に削除していいのか? とか、参照してほしくない人がでてきたら除外できない、とか・・・。 ⇒何か作るのなら、未読フラグに2とか3とか作れば簡単に対応できそうですが。

関連するQ&A