Database 避免方向无关的反身多对多关系中的重复

Database 避免方向无关的反身多对多关系中的重复,database,relational-database,Database,Relational Database,给定一个表用户用户id和一个表用户相关的related\u user1、related\u user2,其中只有两个用户之间存在的关系是相关的,因此,如果user\u related中存在一行1、2,则行2、1将是冗余的: 以一种理论的、非实践的方式思考:是否有可能以一种不需要约束或检查的方式实现这种关系?在某种程度上,当已存在具有交换ID的关系时,试图在两个用户之间插入关系会违反数据完整性 务实:实现和查询上述关系的最佳方式是什么 简单。但首先,要澄清你的一些误解 以一种理论的、非实践的方式思

给定一个表用户用户id和一个表用户相关的related\u user1、related\u user2,其中只有两个用户之间存在的关系是相关的,因此,如果user\u related中存在一行1、2,则行2、1将是冗余的:

以一种理论的、非实践的方式思考:是否有可能以一种不需要约束或检查的方式实现这种关系?在某种程度上,当已存在具有交换ID的关系时,试图在两个用户之间插入关系会违反数据完整性

务实:实现和查询上述关系的最佳方式是什么


简单。但首先,要澄清你的一些误解

以一种理论的、非实践的方式思考:是否有可能以一种不需要约束或检查的方式实现这种关系

理论只有当它有一个不允许实践的实际应用理论,或者理论脱离实践,将是无效的,将是猪粪时,理论才有价值。通常被称为幻想。 关系数据库的理论是E F Codd博士的关系模型 注意,有相当多的冒充者,他们对什么是关系模型有着奇怪而奇妙的想法,因此可以准确地说,他们有自己的关系理论和关系模型版本。也许最好称之为反关系。 这一理论有其局限性。唯一性是一种约束形式。检查是一种约束形式。如果没有必要的约束,理论将是猪粪。 反关系理论对数据库所需内容的理解非常有限,因此约束要少得多。 数据完整性

数据完整性无疑是关系模型理论的一部分。数据完整性是目标,它预示着对各种约束的需求。没有约束,您就无法保证数据的完整性

在某种程度上,当已存在具有交换ID的关系时,试图在两个用户之间插入关系会违反数据完整性

该理论提供了这样一个约束,当然使用了一个约束

务实:实现和查询上述关系的最佳方式是什么

确切地说,这不是一种关系,而是对关系的约束

在DDL级别,您需要一个调用函数的检查约束。几十年来,这一直是关系模型的数据子语言SQL的一个普通特性。功能代码为:

... IF NOT EXISTS ( SELECT 1 FROM user_related WHERE related_user1 = @related_user2 AND related_user2 = @related_user1 ) ... 小心,在免费软件中;蒸发器皿;noware类别,它们使用术语SQL,而不具有SQL的特性。他们使用这个词是骗人的。有的没有约束,;有些没有检查或更糟,允许关键字,但不执行检查;有些没有功能;或可通过检查调用的函数。 如果您需要SQL兼容的代码示例,请询问

关系数据库 用户用户id

这不会为您提供唯一的用户行数据。这将为您提供用户文件中的唯一记录,而不是唯一用户。关系模型是合乎逻辑的,它要求密钥由数据组成,而不是1960年代由理论家推广的记录归档系统,该系统使用物理记录,而不是逻辑行

对于关系数据库,您需要形成用户的数据的唯一性,如user\u name;社会保障号;name_last、name_first、initial等,然后您可以删除记录id user_id,因为它是冗余的,没有任何用途


从每个文件中都有一个ID开始,这将保证您有一个反关系的1960年代的记录归档系统。诚然,这是理论家提倡的。

Re“这不是关系,而是约束”:问题对关系的使用始终是关系/关联的关系意义上的,如表所示。他们不使用它来引用约束。他们的措辞也与关系概念一致,即一个或多个这样的关系可能存在约束。@philipxy 1谢谢,但我不需要解释OP对术语的使用。他用口语说话,这是很常见的。这不是重复使用关系术语,也不是您已经建立的反关系术语。2所使用的术语不正确,降低了他的理解力,我正在纠正它,以改进它。3我没有说你所引用的内容,引用的内容和含义是错误的。确切地说,这不是一种关系,而是对一种关系的约束。因此,尽管这些术语超出了问题的范围,但它仍然是一种关系。