【发布时间】:2012-09-11 06:30:32
【问题描述】:
我正在学习 SQL,并且有一些类似于以下的表:
Person (id*, name)
Customer(id*, is_active, ...)
Employee(id*, department_id, ...)
(* 表示主键,在 Customer 和 Employee 的情况下,主键是返回到 Person 的 PK 和 FK)
Customer 和 Employee 都是 Person 类型,我想确保在将一条记录插入 Person 时,一条记录也必须插入 Customer 或 Employee 中的任何一个,但不能同时插入两者。在本示例的限制范围内,Person 不能既是员工又是客户。
有人告诉我,触发器对于强制执行此约束很有用。有人可以用这个简单的例子解释一下触发器的用法吗?
【问题讨论】:
-
您不必使用触发器。您可以制作一个插入 2 行的程序。
-
您使用的是哪个 DBMS?甲骨文? PostgreSQL?
-
您确定触发器是您想要的方式吗?根据您在此处的设计,触发器可能没有正确填充您要填充的两个表中的任何一个所需的所有信息。您可能希望在应用程序代码中将插入作为事务的一部分处理
-
DBMS 是 PostgreSQL。我只是担心我需要执行上述规则,并理解触发器可能是执行此操作的最佳方式。我想作为事务的一部分做所有事情也可以确保这一点,但它假设操作员在插入/更新/删除行时会这样做
标签: sql database-design triggers