Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm &引用;有“你一个”;vs";属于;vs";“你有很多”;在关系数据库方面_Orm_Terminology_Rdbms - Fatal编程技术网

Orm &引用;有“你一个”;vs";属于;vs";“你有很多”;在关系数据库方面

Orm &引用;有“你一个”;vs";属于;vs";“你有很多”;在关系数据库方面,orm,terminology,rdbms,Orm,Terminology,Rdbms,有人能澄清一下这些在RDBMS术语中的含义吗。我总是把这些弄糊涂,我找不到一个像样的教程。尝试将定义简化为 链接表 主键 外键 或者,告诉我为什么这些定义不能简化成这样简单的东西。不要用ORM术语定义它们。编辑:ORM通常是数据库上的一层薄薄的外衣。通常,类映射到表,这些类的实例作为表中的行。名为'USERS'的表和名为USERNAME的varchar字段可能映射到名为User的类,该类的字符串属性名为USERNAME 当映射数据库中的两个表通过外键约束关联时,事情会变得更有趣。'USERS

有人能澄清一下这些在RDBMS术语中的含义吗。我总是把这些弄糊涂,我找不到一个像样的教程。尝试将定义简化为

  • 链接表
  • 主键
  • 外键

或者,告诉我为什么这些定义不能简化成这样简单的东西。不要用ORM术语定义它们。

编辑:ORM通常是数据库上的一层薄薄的外衣。通常,类映射到表,这些类的实例作为表中的行。名为
'USERS'
的表和名为
USERNAME
的varchar字段可能映射到名为
User
的类,该类的字符串属性名为
USERNAME

当映射数据库中的两个表通过外键约束关联时,事情会变得更有趣。
'USERS'
表可能有一个名为
'ID'
的主键,第二个表,例如,
'ADDRESSES'
可能包含一个名为
'USER\u ID'
的字段,该字段被限制为
'USERS.'ID'
。在这种情况下,用户是独立的,地址是依赖的。users表中的行可以接受任何值,但addresses表中的行必须在users表中具有相应的行,否则不满足外键约束

当这映射到应用程序类时,主键通常会被遮挡。无论如何,应用程序感兴趣的不是ID。在上面的示例中,我们真正希望映射的
地址
类具有类型为
User
的属性,即地址对应的映射用户。类似地,我们可能希望
User
类具有一个属性,该属性是依赖于它的
地址的集合

在ORM中,独立表被调用为父类,依赖表被映射到子类。我们在描述这些类时使用的术语是子类属于父类,这相当于说依赖表在其一个字段上有一个外键约束,独立表作为引用。 相比之下,父类具有子类,这相当于说独立表是依赖表中字段的外键约束中的引用

假设类别A属于类别B,这样的关系可能是一对一的对应关系,其中每个A可以恰好属于一个B,每个B可以正好有一个A。然而,这是最不常见的情况。大多数情况下是一对多,其中每个A恰好属于一个B,但每个B可能有零个、一个或多个A。这种关系称为一对多。例如,一个用户可以有多个电子邮件地址


最后一个转折点是,有时这两个类可能处于多对多关系中。这几乎总是通过第三个表来实现的。这种关系的一个例子是堆栈溢出问题,它可能有许多标记,每个标记应用于许多问题。一些ORM可能有一个概念,即一个可以属于另一个,而不需要关系是自反的,但大多数ORM称这种情况“已经并且属于许多”

我使用
:Has_one
仅用于“foreign”表中定义的一对一关系。这里有一个简单的指南:

这不是为我做的。我需要从RDBMS的角度而不是ORM的角度来了解这一点。这正是我想要的