Database design 为什么不';t数据库系统直接支持1:M和1:1关系?

Database design 为什么不';t数据库系统直接支持1:M和1:1关系?,database-design,relational-database,data-modeling,Database Design,Relational Database,Data Modeling,我正在浏览关系数据库,有人提到只有物理数据模式 1:C(0或1)和1:MC(>=1) 在所有关系数据库中都支持。它不支持两者 1:M和1:1 直接关系。我不明白为什么它不支持。如果您能提供任何帮助,我们将不胜感激。我相信您是在询问有关强制参与引用完整性的问题。原则上,RDBMS可以支持引用完整性约束,这些约束在约束的“两侧”都是强制性的,有些确实允许这样做 使用教程D语法: CONSTRAINT non_empty_order (ORD{ordnum} = ORDITEM{ordnum});

我正在浏览关系数据库,有人提到只有物理数据模式

1:C(0或1)和1:MC(>=1)

在所有关系数据库中都支持。它不支持两者

1:M和1:1


直接关系。我不明白为什么它不支持。如果您能提供任何帮助,我们将不胜感激。

我相信您是在询问有关强制参与引用完整性的问题。原则上,RDBMS可以支持引用完整性约束,这些约束在约束的“两侧”都是强制性的,有些确实允许这样做

使用教程D语法:

CONSTRAINT non_empty_order (ORD{ordnum} = ORDITEM{ordnum});
此完整性约束要求每个订单必须在ORDITEM表中至少有一行,在ORD表中至少有一行。因此,两个表都必须存在任何给定的ordnum

在SQL DBMS中,等效的完整性约束为:

CREATE ASSERTION non_empty_order CHECK
(NOT EXISTS (SELECT ordnum FROM ORD EXCEPT SELECT ordnum FROM ORDITEM) AND
 NOT EXISTS (SELECT ordnum FROM ORDITEM EXCEPT SELECT ordnum FROM ORD));
不幸的是,大多数SQL DBMS不支持断言。即使是这样,SQL也有另一个限制,妨碍了使用这些约束。大多数SQL DBMS通常不允许您同时更新多个表(称为多重分配的功能),因此当多个表以这种方式受到约束时,如果不在更新期间禁用约束,通常无法更新它们

由于这些限制,大多数SQL数据库设计人员将坚持使用SQL的外键约束语法进行引用约束。在SQL中,外键约束不需要在引用端强制参与:

ALTER TABLE ORDITEM ADD CONSTRAINT fk_order FOREIGN KEY (ordnum) REFERENCES ORD (ordnum);
此约束要求ORDITEM中的每个ordnum必须具有相应的顺序,但它不会阻止创建空顺序(表示ORD中有ordnum,但ORDITEM中没有相应的ordnum)


在过去20年左右的时间里,SQL DBMS对完整性约束的支持没有多大改善。它的局限性已成为许多数据库设计师的第二天性,他们习惯于忽略不适合SQL模型的业务规则。更复杂的规则往往在应用程序、规则引擎或数据库过程中实现,因此DBMS供应商没有太多理由改进引擎级对引用完整性的支持。

请确定并引用您的源代码。有许多不同的设计方法。关系数据库或ERM设计通过具有n个属性/列的关系/表来表示n元关系/关系/关联。FKs(外键)&关系中实体的参与被不理解关系模型或ERM的方法/工具/表示错误地称为“关系”。(您可以在“物理”方面找到类似的混淆。)一些SQL系统允许将约束检查延迟到提交时。这绕过了一些限制。