为什么SQL标准会接受这一点?好处是什么?
如果有这些桌子:
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);您可以在没有错误的情况下插入它:
insert into prova_b values (123,null);
insert into prova_b values (null,123);Note1:这来自于回答。
Note2:这是可以避免的,在两列上设置null。
备注:我不是在问回避,我感兴趣的是哪些是好处。
参考文献:
发布于 2009-02-06 07:42:42
我知道有些DBMS在涉及带有外键约束的外键时根本不强制引用完整性。我想到了SQLite。这是关于这里的。
其他DBMS是不同的,我知道如果您尝试这样的东西,会抱怨。
SQLite有它的用途,但它不适合在高并发情况下使用。如果您在不同的DBMS中看到这种行为,请查看他们的文档,看看他们是否做了类似的事情。然而,大多数人都应该加强廉正。
发布于 2009-02-06 08:39:39
至少,您的DEV使用一个相当标准的关系数据库管理系统工作,即使您正在使用类似于SQLite (这是一个优秀的数据库-它运行在您的Ipod!)的产品系统!它会清除所有这些错误--就像林特一样。如果您使用运行您的代码,您可以免费下载它,您将得到许多错误,例如.
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.发布于 2009-02-06 07:49:05
SQL标准不接受这一点;您已经找到了一个不强制引用完整性的DBMS。如果您是智能的,现在卸载它。最低限度,不要将其用于生产目的。
早期的SQL标准(SQL86)没有引用完整性,SQL89级别2修正了这一点。
https://stackoverflow.com/questions/519456
复制相似问题