首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这种外键是可能的?

问为什么这种外键是可能的?
EN

Stack Overflow用户
提问于 2009-02-06 07:35:33
回答 4查看 887关注 0票数 0

为什么SQL标准会接受这一点?好处是什么?

如果有这些桌子:

代码语言:javascript
复制
create table prova_a (a number, b number);
alter table prova_a add primary key (a,b);
create table prova_b (a number, b number);
alter table prova_b add foreign key (a,b) references prova_a(a,b) ;
insert into prova_a  values (1,2);

您可以在没有错误的情况下插入它:

代码语言:javascript
复制
insert into prova_b  values (123,null);
insert into prova_b  values (null,123);

Note1:这来自于回答。

Note2:这是可以避免的,在两列上设置null。

备注:我不是在问回避,我感兴趣的是哪些是好处。

参考文献:

  • Oracle文档:关系模型允许外键的值匹配引用的主键或唯一键值,或者为null。如果组合外键的任何列为空,则键的非空部分不必匹配父键的任何相应部分。
  • Server文档:外键约束可以包含空值;但是,如果复合外键约束的任何列都包含空值,则跳过构成外键约束的所有值的验证。
EN

回答 4

Stack Overflow用户

发布于 2009-02-06 07:42:42

我知道有些DBMS在涉及带有外键约束的外键时根本不强制引用完整性。我想到了SQLite。这是关于这里的。

其他DBMS是不同的,我知道如果您尝试这样的东西,会抱怨。

SQLite有它的用途,但它不适合在高并发情况下使用。如果您在不同的DBMS中看到这种行为,请查看他们的文档,看看他们是否做了类似的事情。然而,大多数人都应该加强廉正。

票数 4
EN

Stack Overflow用户

发布于 2009-02-06 08:39:39

至少,您的DEV使用一个相当标准的关系数据库管理系统工作,即使您正在使用类似于SQLite (这是一个优秀的数据库-它运行在您的Ipod!)的产品系统!它会清除所有这些错误--就像林特一样。如果您使用运行您的代码,您可以免费下载它,您将得到许多错误,例如.

代码语言:javascript
复制
Msg 8111, Level 16, State 1, Line 2
Cannot define PRIMARY KEY constraint on nullable column in table 'prova_a'.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.
票数 2
EN

Stack Overflow用户

发布于 2009-02-06 07:49:05

SQL标准不接受这一点;您已经找到了一个不强制引用完整性的DBMS。如果您是智能的,现在卸载它。最低限度,不要将其用于生产目的。

早期的SQL标准(SQL86)没有引用完整性,SQL89级别2修正了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/519456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档