2

私はSQLを学んでいて、次のようなテーブルがいくつかあります。

Person (id*, name)
Customer(id*, is_active, ...)
Employee(id*, department_id, ...)

(*は主キーを示し、顧客と従業員の場合はPKとFKの両方でPersonに戻ります)

CustomerとEmployeeはどちらもPersonのタイプであり、レコードをPersonに挿入するときに、レコードをCustomerまたはEmployeeのどちらかに挿入する必要がありますが、両方に挿入する必要はありません。この例の範囲内で、個人が従業員と顧客の両方になることはできません。

この制約を適用するには、トリガーが役立つと言われています。誰かがこの簡単な例でトリガーの使用法を説明できますか?

4

3 に答える 3

3

INSTEAD OF トリガーを使用できます。あなたの質問は、この MSDN の記事(Designing INSTEAD OF Triggers)で完全にカバーされています。

.

于 2012-09-11T07:29:40.110 に答える
2

DBMS がサポートするものやその他の要因に応じて、次のいずれかを実行できます。

  • 正しい動作を保証するために実装されているストアド プロシージャを介して挿入します。
  • または、ビューでトリガー (特定のサブタイプを持つスーパータイプを結合する) を使用して、ビューを「更新可能」にしてから、ビューに挿入します。
  • または、ここで説明されているように、純粋に宣言的な手段でサブタイプの排他性と存在の両方を確保します。
  • または、ここで説明したように、「すべてのクラスを別々のテーブルに」とは異なる継承の実装戦略を使用します
于 2012-09-11T09:02:07.883 に答える
1

個人が顧客または従業員であることを確認したい場合は、たとえば「タイプ」という名前の列を個人テーブルに作成し、値「顧客」と「従業員」、または「1」と「2」を設定できます。 "。次に、上記のコメントで提案されているように、関連情報を Customer または Employee テーブルに挿入します。

于 2012-09-11T06:40:15.227 に答える