C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 番号の振りなおしで悩んでいます


(過去ログ 37 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■19342 / inTopicNo.1)  番号の振りなおしで悩んでいます
  
□投稿者/ ねこだま (1回)-(2008/05/22(Thu) 13:38:13)

分類:[C#] 

WinXP SP2 + C#2005 + MySQLでWindowsアプリを作ってます

新聞等の記事見出しを入力したりまた検索したりという仕様です。
データベースの構造は、「日付・連番・記事見出し」で作っていました
連番は自動採番ではなく最大番号を取得しそれに+1する方法で登録してます

通常の運用では問題なかったのですが、レコードの挿入で問題が出てきまして

たとえば、5/1で3件,5/2で2件,5/3で1件とデータを入力していたとして
連番が1,2,3,4,5,6となってるとします

3件目のレコードを削除した時点で、
再度番号を振りなおして1,2,3,4,5としたいのです

テキストファイルであれば1件ずつ読み出して新しく書き出すとか思いつくのですが
データベースでどのようにすればよいかわからず悩んでいます

ご教示いただければ幸いです
よろしくお願いします。




引用返信 編集キー/
■19344 / inTopicNo.2)  Re[1]: 番号の振りなおしで悩んでいます
□投稿者/ れい (575回)-(2008/05/22(Thu) 13:46:23)
No19342 (ねこだま さん) に返信
> テキストファイルであれば1件ずつ読み出して新しく書き出すとか思いつくのですが
> データベースでどのようにすればよいかわからず悩んでいます

テキストファイルと同じで、読み出して変更します。

ですが、MySQLなどのRDBは連番という概念に適していません。

連番自体を諦めるのをオススメします。

どうしてもというなら
ある程度の量があつまって変更がすくなくなってから連番を振るとか、
適当な番号を振っておき、ソートして得られる序列を連番として使うとか、
工夫をしないと更新などが非常に大変になるかと思います。


引用返信 編集キー/
■19345 / inTopicNo.3)  Re[1]: 番号の振りなおしで悩んでいます
□投稿者/ はつね (731回)-(2008/05/22(Thu) 13:48:45)
はつね さんの Web サイト
No19342 (ねこだま さん) に返信
> テキストファイルであれば1件ずつ読み出して新しく書き出すとか思いつくのですが
> データベースでどのようにすればよいかわからず悩んでいます

DBが管理するための情報と人が見るための連番を別情報にしましょう。
そして、ソートなどはすべて「人が見るための連番」の方でやればOK。

引用返信 編集キー/
■19455 / inTopicNo.4)  Re[2]: 番号の振りなおしで悩んでいます
□投稿者/ じゅで (2回)-(2008/05/23(Fri) 11:09:22)
そもそも、レコード削除や挿入などで、動的に変わってしまうような連番を
DB上に登録しておくのが問題のような気もします。
私だったら、ソートキーだけ持たせておいて、表示時に連番はプログラムで振りなおします。
その時、上位の階層などで、そういった連番の振りなおしとかを意識させずに、
使いたいのであれば、DBアクセスの呼出し元のロジック側で、そういった処理を
実装してしまうかもしれません。
んでもって、読み書きは、全部その連番振りなおしと削除処理を実装している
クラスを通して、行うかなぁ〜

自分が作るならですよ。
これが正解というわけではないので、各処理と、お客さんの要件を確認して
出来る範囲でふぁいとぉ〜
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -