教えていただきたいのですが。
SQLを使用してデータベースを扱っています。
データベースはテーブルを3つ用意しており、
それぞれをそのデータIDで関連付けしています。
で、データIDとしてオートナンバーのフィールドをキーにしているのですが、
削除、登録を繰り返しているとオートナンバーに空きが生じますよね?
そのとき、新規登録を行なうと、3つのテーブルで違うナンバーで登録されてしまうときがあるんです。
これをなんとかする方法ありませんか?
空き番号をつめる方法があればなんとかなるかも・・。
よろしくお願いします。
追加や削除する時は、必ず
3つのテーブルすべてに対して行うようにすればよいのでは?
そうすれば、削除して空きができても、
3つのテーブルとも同じ番号だけが空くようになるのでは?
テーブルの設計に問題があると思います。
メインのテーブルのデータIDのみオートナンバーにして他のテーブルは普通のInt型にし、
メインテーブルのデータIDの値をセットしてあげれば問題は起こらないと思います。
空き番号を詰める方法は、あるとは思いますがVBのプログラムなどからは出来ないと思いますし、一般的ではないです。
オートナンバーを使わなければ対処のしようもありますが。
なるほど。。
現在3つのテーブルのデータIDはすべてオートナンバーとなってました。
でも。。メインにセットされたデータIDの値はどうすればわかりますか?
すいません。。まだほとんど初心者なもので。。
メインにセットされたデータIDを知る方法なんですが。
メインにデータを追加後、そのキーでデータを読み出し、
そのデータIDを他のテーブルにセットするようにしたらうまくいきました。
これでいいのでしょうか?他に「このほうが安全だ」とかありましたら
ご教授願えませんか?
よろしくお願いします。
私が行なうデータベースの設計方法ですが、
基本的に、オートナンバーは使用しません。
その代わり、番号テーブルというものを用意し、各IDを保持しておきます。
例えば、伝票番号などです。
で、登録時に番号テーブルからIDの+1を取得します。
そうする事で、IDを管理できますし、メンテナンスも楽です。おまけに、アプリケーション側でIDを操作できるので、テーブル間で違うナンバーで登録される事もありません。もちろん、バグで有ればしょうがありませんが・・・
やりかたによっては、IDは文字型でもできます。
あ、私もオートナンバーは使わないで自分でIDを発行しています。
あんまり一般的じゃないのかなーと思って発言を控えていたんですが(^^;
私の場合はテーブル内の最大ID+1を新しいレコードに振っています。
オートナンバーだと色々不都合な点とかあるので
(リセットするのが面倒、テーブルを移し変えたりするのが厄介)
極力使わないようにしています。
お礼のレスが遅くなってすいませんでした。
みなさん、貴重な回答、本当にありがとうございました。
そうですね。確かにIDはオートナンバーじゃないほうがいいかも。。
データベースの構造、再検討してみます。
本当にありがとうございました。
またよろしくお願いします!
ツイート | ![]() |