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は現会員と退会者を一つのテーブルで管理し、現会員のプロファイルの一部を公開します。退会者のプロファイルは使わないのですが、新規登録者とユーザー名がかぶらないようになど保管の必要も感じます。退会者の情報の取り扱いについてもアドバイスいただければと思います。
No.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に関しては利用経験などがあるため、内容により「専門家」、「経験者」、「一般人」を使い分けています。
MySQL の注意事項について早速読んでみました。詳しい情報をありがとうございます。
どちらも知らなかった事項なので大変参考になります。InnoDBで作る時のトランザクションの扱いは重要ですね。あまり意識してなかったのですが、オープンソースであることも念頭において使うようにしたいと思います。
No.1
- 回答日時:
MySQLのバージョンが不明ですが、InnoDBを使い、トランザクション単位で双方の表を更新するなら、心配するような事象はバグがない限り発生しないはずです。
ただし、これはあくまでも「異常処理中でも、仕様通りに動けば」という部分があり、開発元や保守請負会社との契約次第で、サポートを受けられる範囲があります。
万一のトラブルにも備える必要があるなら、商用RDBMSを選択することもできます。さらに、「(利用者側のミスもあり)消失してしまったデータの復旧」に全面的にサポートして欲しいといったケースもあるなら、国産のRDBMSを使用し、保守契約を結ぶといった選択肢もあります。
MySQLは5.0.41で、InnoDBで作ります。現在はwindows上で練習しています。
以前4.0.20cでidにindexをつけて auto_incrementにしたテーブルを作ったのですが、古い(小さい数の)idを数十件まとめて削除した後で新しくデータを挿入、コマンドプロンプトで表示すると、最後のidの次ではなくなぜか削除した番号にデータがふられていくという現象が起きました。その時は原因がわからないままテーブルを作り直してしまったので気になったのです。
レンタルサーバー会社による一般的な保守管理だけのサイトになるので安定運用を優先したいのですが、用途にあわせて別テーブルにする方が負荷が少なくレスポンスも早そうです。トランザクション単位で双方の表を更新すれば通常は発生しないこと--経験者の方からのアドバイスはとても参考になります。バグを作らないことが大切ですね。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
VIEWの元のテーブルのindexって...
-
insertを高速化させたい
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
一つ前のレコードの値と減算し...
-
SQLサーバから、項目の属性(型...
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
テーブル名を省略して「h.id」...
-
SELECT~LIKE~の結果が変
-
[MySQL] UNIQUE制約の値を更新...
-
1テーブル&複数レコードの更新...
-
マイクラPC版のコマンドで効率...
-
URL と行番号の指定
-
副問合せの書き方について
-
上位3位を求めるSQL文は?
-
SQLにて特定の文字を除いた検索...
-
mysqlのload data infileで連番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報