2

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

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

(* 表示主键,在 Customer 和 Employee 的情况下,它既是返回 Person 的 PK 又是 FK)

Customer 和 Employee 都是 Person 类型,我想确保在将记录插入 Person 时,还必须将记录插入 Customer 或 Employee 中,但不能同时插入两者。在此示例的限制范围内,Person 不能既是员工又是客户。

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

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

例如,如果您想确定一个人是客户还是员工,您可以在 Person 表中创建一个名为“Type”的列,它的值可以是“Customer”和“Employee”或“1”和“2” ”。然后按照上面评论的建议,将相关信息插入到 Customer 或 Employee 表中。

于 2012-09-11T06:40:15.227 回答