プロが教える店舗&オフィスのセキュリティ対策術

MySQLとPHPでデータベースを勉強している初心者です。会員関連のテーブルについて下記のような構成を考えています。

Table A (会員ログイン用)
- id 
- ユーザー名
- パスワード

Table B (会員プロファイル)
- id
- item 1
- item 2
- item 3
  ・
  ・
- 登録日
- 退会日

idを主キーにしてTable AとTable Bを関連付けするつもりですが、何らかの原因で使っている途中でidの関連付けがうまくいかなくなることなどあるのでしょうか? そのような場合、idにずれが生じても見つけられないのではなどと考えてしまいます。Table Bにidとユーザー名を載せたり、いっそ一つのテーブルで管理するほうが確実でしょうか。通常はどのようにしていますか? 

Table Bは現会員と退会者を一つのテーブルで管理し、現会員のプロファイルの一部を公開します。退会者のプロファイルは使わないのですが、新規登録者とユーザー名がかぶらないようになど保管の必要も感じます。退会者の情報の取り扱いについてもアドバイスいただければと思います。

A 回答 (2件)

#1です。



オープンソースなので、「十分注意してください」と言いたかったのですが。。。
仮にMySQLにバグがあっても、パッチの有無等を調べるのは、保守契約がなければ自力で行うことになります。

auto_incrementに関し、MySQLのマニュアルにいくつか注意事項が掲載されていまのから、参考まで。

(1)MyIsamの場合、auto_incrementの列がキーの2番目の構成列であった場合
http://dev.mysql.com/doc/refman/4.1/ja/example-a …

(2)ロールバックした場合
ロールバックした場合
http://mysql.osuosl.org/doc/refman/4.1/ja/innodb …

=====備考=====
あるRDBMSに関しては専門知識があり、他の複数のRDBMSに関しては利用経験などがあるため、内容により「専門家」、「経験者」、「一般人」を使い分けています。
    • good
    • 0
この回答へのお礼

MySQL の注意事項について早速読んでみました。詳しい情報をありがとうございます。

どちらも知らなかった事項なので大変参考になります。InnoDBで作る時のトランザクションの扱いは重要ですね。あまり意識してなかったのですが、オープンソースであることも念頭において使うようにしたいと思います。

お礼日時:2007/08/10 18:01

MySQLのバージョンが不明ですが、InnoDBを使い、トランザクション単位で双方の表を更新するなら、心配するような事象はバグがない限り発生しないはずです。



ただし、これはあくまでも「異常処理中でも、仕様通りに動けば」という部分があり、開発元や保守請負会社との契約次第で、サポートを受けられる範囲があります。

万一のトラブルにも備える必要があるなら、商用RDBMSを選択することもできます。さらに、「(利用者側のミスもあり)消失してしまったデータの復旧」に全面的にサポートして欲しいといったケースもあるなら、国産のRDBMSを使用し、保守契約を結ぶといった選択肢もあります。
    • good
    • 0
この回答へのお礼

MySQLは5.0.41で、InnoDBで作ります。現在はwindows上で練習しています。

以前4.0.20cでidにindexをつけて auto_incrementにしたテーブルを作ったのですが、古い(小さい数の)idを数十件まとめて削除した後で新しくデータを挿入、コマンドプロンプトで表示すると、最後のidの次ではなくなぜか削除した番号にデータがふられていくという現象が起きました。その時は原因がわからないままテーブルを作り直してしまったので気になったのです。

レンタルサーバー会社による一般的な保守管理だけのサイトになるので安定運用を優先したいのですが、用途にあわせて別テーブルにする方が負荷が少なくレスポンスも早そうです。トランザクション単位で双方の表を更新すれば通常は発生しないこと--経験者の方からのアドバイスはとても参考になります。バグを作らないことが大切ですね。ありがとうございます。

お礼日時:2007/08/08 10:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!