0

ユーザー入力によって指定された部分 ID と部分外部キーで構成される SQL テーブルに属性を設定しようとしています。例: 従業員は 8 文字の長さの ID を持ち、最初の 4 桁はユーザーが入力する部分であり、最後の 4 文字はブランチ テーブルを参照してブランチ ID を使用します。

これを行うにはCHECK制約を使用する必要があるようですが、属性値の2番目の部分を強制して他のテーブルにあることを確認する方法がわかりません。

私はまだSQLを学んでいるので、thqの質問が正しく表現されていることを願っています。

4

1 に答える 1

1

これを行うにはCHECK制約を使用する必要があるようですが、属性値の2番目の部分を強制して他のテーブルにあることを確認する方法がわかりません。

他のテーブルを「調べる」ためには、CHECK 制約内で SELECT ステートメントを使用する必要があります。私の知る限り、ほとんどの SQL dbms ではそれができません。(それができない場合、標準 SQL はアサーションを使用します。まだアサーションをサポートしている SQL dbms があるかどうかはわかりません。)

代わりに、2 つの列を使用します。1 つはユーザーが指定する 4 文字用で、もう 1 つはブランチを表す最後の 4 文字用です。使用できます(使用する必要があります)

  • ユーザー指定の値を格納する列に対する CHECK 制約により、4 文字以上であることを保証します。
  • 列 branch.branch_id に対する CHECK 制約により、4 文字以上であることを保証します。
  • テーブル ブランチを参照する、branch_id の外部キー制約。これが更新と削除をカスケードするかどうかを考えてください。

外部キー制約によって保証される動作保証は重要です。新しいテーブルで branch_id に使用する値がブランチのテーブルに存在すること、および使用された branch_id が変更された場合、その変更も新しいテーブルに記録されることを保証します。(更新をカスケードする場合。) また、2 つの値を 1 つの列にまとめた場合、これらの保証は得られません。

最後の 4 文字は、ブランチ ID を使用するためにブランチ テーブルを参照します。

その方法でブランチ ID をコピーすることはできますが、参照することはできません。参照はデータベース設計の専門用語です。外部キー参照に関係しています。

于 2012-05-10T21:53:57.653 に答える