所以我在我的任务中有以下问题,我已经坚持了一段时间了:
当员工S被删除时
我。将Employee和Department中的FK设置为null
II。删除Works_On和Dependent
中引用的行我一直在想我应该使用CASE语句,但我不确定如何构建SQL。我正在使用Postgresql。
以下链接是我的数据库结构的屏幕截图: http://puu.sh/rMLjp/886c6e8a5b.png
答案 0 :(得分:0)
您是否阅读过PostgreSQL manual on FOREIGN KEY constraints?
限制和级联删除是两种最常见的选项。 RESTRICT可防止删除引用的行。 NO ACTION表示如果在检查约束时仍存在任何引用行,则会引发错误;如果您未指定任何内容,则这是默认行为。 (这两个选项之间的本质区别在于NO ACTION允许将检查延迟到事务的后期,而RESTRICT则不会。)CASCADE指定当删除引用的行时,应自动删除引用它的行同样。
还有另外两个选项:SET NULL和SET DEFAULT。当删除引用的行时,这些引用将引用行中的引用列分别设置为空或其默认值。
示例:
CREATE TABLE works_on (
essn ... REFERENCES employee(ssn) ON DELETE SET NULL,
pno ...,
hours ...
);
我无法从屏幕截图中猜测列的数据类型。但是手册的摘录和链接以及部分代码示例应该为您提供您需要了解的内容。