我正在学习SQL,并具有一些类似于以下内容的表:

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

(*表示主键,对于客户和雇员,它既是PK又是返回给Person的FK)

客户和员工都是人员的类型,我想确保在将记录插入到人员中时,也必须将记录插入客户或员工,但不能同时插入两者。在此示例的范围内,人员不能同时是雇员和客户。

有人告诉我,触发器将有助于强制执行此约束。有人可以用这个简单的例子解释一下触发器的用法吗?

最佳答案

根据您的DBMS支持的内容和其他因素,您可以:

  • 通过为确保正确行为而实施的存储过程进行插入。
  • 或在 View 上使用触发器(使JOIN成为具有特定子类型的 super class 型),以使 View “可更新”,然后插入 View 中。
  • 或通过纯声明性方式确保排他性和亚型的存在,如here所述。
  • 或使用不同于“单独表中的所有类”的继承实现策略,如here所述。
  • 10-04 21:57
    查看更多