4

我知道这个问题属于数据库理论的非常早期的阶段,但是我已经几个月没有遇到过这样的问题了。如果有人有一个数据库,其中一些表作为“链”与外键关联在一起,并且他们想从具有一些“依赖”表的表中删除记录,会出现什么障碍?特别是,在具有表的数据库中:Person、Profile、Preference、Filter 存在关联作为Person.id外键 inProfileProfile.id外键 inPreferenceFilter.id外键 in Preference,因此所有关联enter code here都是OneToMany。是否可以通过简单的查询删除一个人:

Delete from Person p where p.id= 34;

如果不是,查询应该如何才能成功执行删除?如果应用程序中的数据库是由hibernate管理的,annotations我应该对每个实体的关联字段应用什么约束( ),以便能够用上面的简单查询执行删除?

4

2 回答 2

2

SQL 版本

在此处输入图像描述

看截图。您可以使用插入更新规范规则。因为它有删除和更新规则。您可以设置这些值中的任何一个。

可以通过引用主键或唯一键来创建外键约束。外键约束确保关联表中数据的关系完整性。外键值可能为 NULL,表示特定记录没有父记录。但是如果一个值存在,那么它必然在父表中有一个关联的值。在父表上应用更新或删除操作时,对子表中关联值的影响可能会有不同的要求。SQL Server 2005 和 2008 中有四个可用选项,如下所示:

No Action
Cascade
SET NULL
SET Default

使用这篇文章作为参考。

http://www.mssqltips.com/sqlservertip/2365/sql-server-foreign-key-update-and-delete-rules/

甲骨文版

您可以使用以下之一。

alter table sample1 add foreign key (col1) references sample (col2) on delete no action;

在删除限制上更改表 sample1 添加外键 (col1) 引用示例 (col2);

在删除级联时更改表 sample1 添加外键 (col1) 引用示例 (col2);

供参考。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm

于 2012-10-12T12:08:39.863 回答
0

答案是否定的,如果有外键约束,那么你必须先删除叶节点表数据

Preference那是首先从表中删除

然后从Profile and Filter

然后从中删除记录Person table

这是您在任何地方都可以应用的通用概念

于 2012-10-12T11:58:40.637 回答