数据库设计在嵌套的父子情境中删除父项及其子项

时间:2012-12-04 18:00:08

标签: c# sql database oracle parent-child

在Oracle中,我有一个名为Category的表,由三列组成:
 ID =系统生成的唯一密钥,
 Catgeory_name = 300 char, 和parent_id =哪个可以是-1,这意味着没有此类别的父级,或者它可以是前面描述的父级ID列中的值。

问题是当我删除一个父类别时,我也需要自动删除所有孩子。我的问题是:SQL是否提供了自动执行此操作的任何方法,或者我应该在我的上层语言(C#)中处理它。

例如,如果两个表之间存在外键情况,我知道SQL提供ON DELETE CASCADE来删除依赖记录以及对原始记录的删除请求时的父记录。

但是,我不知道SQL会以什么方式自动处理上述情况,这意味着当在上表中删除父项时,所有子项也会被删除。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果parent_id设置为NULL,如果没有父级,则可以在category上定义引用category

SQL> create table category (
  2    id number primary key,
  3    category_name varchar2(300),
  4    parent_id number references category( id )
  5  );

Table created.

然后,您可以声明该外键约束,以便在删除父行时自动删除子项。

如果你真的想使用-1的魔术值来表示缺少父级而不是使用正确的NULL,你可以使用{在category表中插入一行{ {1}}为-1然后创建外键约束。但这比使用id要优雅得多。