-3

私はリレーショナルデータベースをよりよく理解しようとしていますが、私がぶつかり続けて理解できないことがあります。この2つの表を見てみましょう。

ここに画像の説明を入力してください

この場合、は設定されLogin.IDた主キーであり、外部キーです。ユーザーが作成され、そのユーザー名とパスワードがデータベースに保存されると、現在のユーザー名とパスワードに対応するものが自動的に追加されますか、それともこれを行うためにSQLステートメントを作成する必要がありますか?auto_incrementProfile.ID_LOGINloginIDID_LOGIN

ID_LOGINSQLステートメントを作成する必要がある場合、正しく追加していることを確認するために、を追加する方法を教えてください。

4

7 に答える 7

1

両方のテーブルにデータを追加する必要があります(2つの挿入ステートメント)。まず、ユーザーを挿入し、自動生成されたIDを取得します。次に、最初の挿入で取得したuser_idを使用してプロファイルレコードを挿入できます。

つまり、 1対多の関係(ユーザーは複数のプロファイルを持つことができます)を記述していますが、各ユーザーには常に1つのプロファイルしかなく、各プロファイルは1つのユーザーにしか対応しないため、ユーザーとプロファイルの関係は1対1である必要があります。

于 2012-10-18T11:12:18.013 に答える
1

厳密に言えば、外部キーを持つことは、あるテーブルの単なるフィールドであり、別のテーブルのレコードへの参照を格納する場所です。したがって、コードは両方のテーブルにデータを入力し、外部キーを設定する必要があります。

データベースには外部キー制約の機能があり、外部キーの値によって参照される他のテーブルにレコードがない場合に外部キーを残すデータベース操作を禁止するのに役立ちます。

SQLデータベースで外部キーを維持することについて本当に便利なことは、クエリで必要なときに関連データを取得するために簡単に結合を実行できることです。

ところで、Ruby on Railsは、関連付けを使用して外部キーを管理します。したがって、Ruby on Railsでプログラムすると、外部キーが設定され、必要な結合が行われることがよくあります。

于 2012-10-18T11:12:31.223 に答える
1

プロファイルテーブルにレコードを追加するSQLステートメントを作成する必要があります。FK制約では、ログインテーブルにないID_LOGINを追加できないため、手動で確認する必要はありません。

于 2012-10-18T11:01:39.097 に答える
1

外部キーを使用して行をtbaleに挿入するときは、外部キー列に挿入しようとしている値がリンクされたテーブルに存在することを事前に確認する必要があります。

つまり、たとえばID_LOGINが25に設定されたプロファイルに行を挿入しようとしたときに、ID 25のログインテーブルに行が存在しない場合、エラーが発生します。

于 2012-10-18T11:03:17.417 に答える
1

自動的には追加されません。createステートメントを使用して追加する必要があります。自動的に追加する場合は、ログインテーブルを使用してトリガーを作成する必要があります。

于 2012-10-18T11:04:58.773 に答える
1

プロファイルレコードを作成するときは、正しいログインレコードをリンクしていることを確認する必要があります。

たとえば、jsmith @ thecompany.comの電子メールを受け取り、johns/passwordのユーザー/パスの組み合わせを持っているJohnSmithという人の場合

Insert into Profile values ('John Smith', jsmith@thecompany.com, (select ID from Login where user = jsmith))

ログインレコードにリンクするプロファイルを作成します。

于 2012-10-18T11:05:17.960 に答える
1

プロファイルテーブルに追加するには、常にSQLクエリを作成する必要があります。ただし、プロシージャ/トリガー/関数を使用すると、ログインテーブルに行が追加されるとすぐにクエリを追加できるクエリを作成できる場合があります。

于 2012-10-18T11:06:19.193 に答える