ユーザ関連データを3つのテーブルに分けて管理しようとしていますが、新規登録の際に3つのテーブルに3つとも失敗なくSQL文を実行するなど、とても不便になってきました。
テーブルは大体以下の用になっています。(実際にはもっとフィールドがあります。)
■ ユーザ名、メールアドレス、パスワード用テーブル users_table
user_id, mail_address, password ...
■ ユーザのプロフィール用 profile_table
user_id, birthyear, birthmonth, birthday, comment ...
■ ユーザの投稿数保存用 posts_table
user_id, posts ...
調べたところ、MySQL4.0系では、INSERTクエリーを3つ同時に叩くことは無理らしく、現在は、はじめのuser_idは、auto_incrementで、後の2つは、LAST_INSERT_ID() を駆使して、1つづつINSERTさせているのですが、user_idが全て一緒のこの3つのテーブルをもっとうまく管理する方法はないでしょうか?
テーブルは、user_idを軸に一つにまとめるべきでしょうか?
アドバイスを頂ければと思います。
#このページ、この本を読めばわかる、という情報も歓迎です。
もうちょっと各テーブルの情報が欲しいけれど、見た限り全てのテーブルは user_id をキーにして1対1で対応してます?
この場合全てのテーブルを1つにまとめるのがベストだと思います。
テーブル変更が難しければ InnoDB にしてトランザクション使えばいいと思いますけどね。
テーブルの正規化の問題かと。
通常、複数のテーブルを変更する場合、
最初に トランザクションをかけて
エラーが発生したら、ロールバック
すべて 処理できたら コミット とします。
INSERTは 三回 やればいいでしょう。
一度で 三つのテーブルにINSERTは できませんから。
一回ずつ コミットするのではなく、最後まで うまくできたら
コミットするのです。
>3つとも失敗なくSQL文を実行するなど
失敗の原因は 何でしょうか?
一意制約等でしたら、INSERTする前に 調べてから
INSERTしたらいいでしょう。