2017-01-07 8 views
0

私は2つのテーブルuseruserprofileMySQLに入れています。私はこれらのテーブルへのデータの挿入を処理する私のWebサーバ上のPHPスクリプトを持っています。他のテーブルの外部キーによって参照される主キーを取得するにはどうすればよいですか?

ここには、テーブルを定義するために使用されるSQLコマンドがあります。

CREATE TABLE user (
    USER_ID INT NOT NULL AUTO_INCREMENT, 
    USERNAME VARCHAR(20), 
    USER_PASSWORD VARCHAR(255), 
    PRIMARY KEY (USER_ID) 
); 

CREATE TABLE userprofile (
    USER_ID INT NOT NULL, 
    FULL_NAME VARCHAR(255), 
    AGE INT, 
    FOREIGN KEY (USER_ID) REFERENCES user (USER_ID) 
); 

私は正常に私が定義したPHP関数の内部で実行され、次のコマンドSQL"INSERT INTO user (USERNAME, USER_PASSWORD) VALUES ('$username', '$hashedPassword')"userテーブル用PHPを使用してデータベーステーブルに書き込むことができています。

私が今経験している問題は、ユーザーのFULL_NAMEAGEなどの情報を追加する必要があるとします。私は後でこの情報をユーザーに含めることを許可しているので(ユーザーのプライバシーのためにオプションです)。 USER_IDを持たないデータベーステーブルuserprofileをどのくらい正確に入力しますか?

データベーステーブルを作成するためのドキュメントを見てきましたが、私の定義が正しいと思います。私の最初の考えは、データベースから現在のユーザーのUSER_IDを取得し、そのデータをuserprofileテーブルに挿入するための関数を実装することでした。上記のSQLコマンドを使用してユーザーを追加した後に、予想外の動作があった場合、userprofileには、外部キーUSER_IDによってリンクされているため、行が作成されます。私は本当にこれらの2つのテーブルが互いに同期していることを保証する方法はわかりません。

+0

私は自分のプロフィールを更新したいときは 'User_id'のレコードが存在しない場合にのみ' profile'テーブルに挿入するべきだと思います!そうでなければ、既存のものを更新する必要があります。この投稿は参考になるかもしれません:http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table –

+0

@AhmadMobarakiそれは私が見落としてきた非常に良い点です。私はこれを念頭に置いておきます。 – AvP

答えて

1

ユーザーの名前と年齢を保存するには、にはUSER_IDが必要です。これは、ユーザの一意の識別子としてUSER_IDを使用しており、userprofileテーブルの外部キーであるためです。

通常、ユーザーが「ログイン」した場合(ウェブサイトの意味を問わず)、USER_IDと判断され、セッション変数として使用されます(例:$_SESSION)。彼らのプロフィールを編集するページ)。

同期について:あなたの定義に基づいて、と同時にuserprofileにレコードを追加する必要はありません。あなたはできますが、彼らの名前や年齢はまだ分かっていないので、それは事実上空です。

あなたはまた、彼らのuserprofileが既に存在するかどうかを確認する必要があります。つまり、プロフィールを更新したり追加したりしていますか?したがって、ユーザーレコードを作成するときにユーザープロファイルレコードを作成する方が簡単です。そうすれば、あなたはいつも更新していることが分かります。

userprofileスキーマのUSER_IDには、UNIQUEという制約を追加する必要があります。そうすれば、誤って重複レコードを追加することはありません。

+0

テーブルに外部キーがある場合、他のテーブルのプライマリキーにアクセスする必要がありますか? – AvP

+0

はい。どのように2つをリンクする方法を知っていますか? – dave

+0

ありがとうございました!私はそれらを実装することを確認します。 – AvP

関連する問題