2011-03-13 36 views
1

有人能澄清这些在RDBMS术语中的含义吗?我总是感到困惑,我找不到一个体面的教程。尽量减少定义来,RDBMS条款中的“has_one”与“belongs_to”vs“has_many”

  • 链接表
  • 主键
  • 外键

或者,告诉我为什么这些定义不能被简化到一些简单的类似。不要用ORM术语来定义它们。

+0

这是我在寻找什么http://usernameguy.livejournal.com/5268.html – 2011-03-13 07:24:43

回答

3

编辑:ORM通常是一个数据库上很薄的单板。通常,类将映射到表,并将这些类的实例作为表中的行。名为'USERS'且名为USERNAME的varchar字段的表可能映射到名为User的类,并使用名为username的字符串属性。

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

当它映射到应用程序类时,主键是经常闭塞。无论如何,应用程序并不感兴趣。在上面的例子中,我们真正想要的是映射的Address类具有User类型的属性,即该地址的相应映射用户。同样,我们可能希望User类具有属于依赖它的Addresses集合的属性。

独立的表称为,在ORM中,父类和从属表映射到子类。我们在描述这些类时使用的术语是子类属于父类,这相当于说依赖表在其独立表作为指示对象的其中一个字段上具有外键约束。 父类,同等,的子类,这相当于说,indpendent表是在现场外键约束引用对象相关表

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

最终的结果是有时这两个类可能存在多对多的关系。这几乎总是通过第三张桌子来实现的。这种关系的一个例子是堆栈溢出问题,它可能有许多标签,每个标签都适用于很多问题。有些ORM的可能有一个可以属于其他没有关系是自反的一个概念,但大多数ORM的号召这种情况下“有属于许多

+0

这不是为我做的。我需要根据RDBMS术语而不是ORM术语来了解这一点。 – 2011-03-13 07:13:19