SQLについて

解決


ひで  2003-07-01 21:03:03  No: 78487

教えていただきたいのですが。
SQLを使用してデータベースを扱っています。
データベースはテーブルを3つ用意しており、
それぞれをそのデータIDで関連付けしています。

で、データIDとしてオートナンバーのフィールドをキーにしているのですが、
削除、登録を繰り返しているとオートナンバーに空きが生じますよね?
そのとき、新規登録を行なうと、3つのテーブルで違うナンバーで登録されてしまうときがあるんです。
これをなんとかする方法ありませんか?

空き番号をつめる方法があればなんとかなるかも・・。

よろしくお願いします。


mysterious thief KID  2003-07-01 22:07:52  No: 78488

追加や削除する時は、必ず
3つのテーブルすべてに対して行うようにすればよいのでは?
そうすれば、削除して空きができても、
3つのテーブルとも同じ番号だけが空くようになるのでは?


nanashi  2003-07-01 22:59:36  No: 78489

テーブルの設計に問題があると思います。
メインのテーブルのデータIDのみオートナンバーにして他のテーブルは普通のInt型にし、
メインテーブルのデータIDの値をセットしてあげれば問題は起こらないと思います。

空き番号を詰める方法は、あるとは思いますがVBのプログラムなどからは出来ないと思いますし、一般的ではないです。
オートナンバーを使わなければ対処のしようもありますが。


ひで  2003-07-01 23:20:09  No: 78490

なるほど。。
現在3つのテーブルのデータIDはすべてオートナンバーとなってました。
でも。。メインにセットされたデータIDの値はどうすればわかりますか?

すいません。。まだほとんど初心者なもので。。


ひで  2003-07-01 23:40:44  No: 78491

メインにセットされたデータIDを知る方法なんですが。
メインにデータを追加後、そのキーでデータを読み出し、
そのデータIDを他のテーブルにセットするようにしたらうまくいきました。
これでいいのでしょうか?他に「このほうが安全だ」とかありましたら
ご教授願えませんか?

よろしくお願いします。


クリリン  2003-07-02 18:23:24  No: 78492

私が行なうデータベースの設計方法ですが、
基本的に、オートナンバーは使用しません。
その代わり、番号テーブルというものを用意し、各IDを保持しておきます。
例えば、伝票番号などです。
で、登録時に番号テーブルからIDの+1を取得します。
そうする事で、IDを管理できますし、メンテナンスも楽です。おまけに、アプリケーション側でIDを操作できるので、テーブル間で違うナンバーで登録される事もありません。もちろん、バグで有ればしょうがありませんが・・・
やりかたによっては、IDは文字型でもできます。


nanashi  2003-07-02 19:28:34  No: 78493

あ、私もオートナンバーは使わないで自分でIDを発行しています。
あんまり一般的じゃないのかなーと思って発言を控えていたんですが(^^;
私の場合はテーブル内の最大ID+1を新しいレコードに振っています。

オートナンバーだと色々不都合な点とかあるので
(リセットするのが面倒、テーブルを移し変えたりするのが厄介)
極力使わないようにしています。


ひで  2003-07-04 22:46:55  No: 78494

お礼のレスが遅くなってすいませんでした。
みなさん、貴重な回答、本当にありがとうございました。
そうですね。確かにIDはオートナンバーじゃないほうがいいかも。。

データベースの構造、再検討してみます。

本当にありがとうございました。

またよろしくお願いします!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加