数据库devise中“n:m”和“1:n”的含义

在数据库devise中, n:m1:n是什么意思?

这与钥匙或关系有什么关系?

m:n用来表示一个多对多的关系(另一边的m对象与另一边的n相关),而1:n指的是一对多的关系(另一边的1对象与另一方面)。

1:n表示“一对多”; 您有两个表,并且表A的每一行都可以被表B中的任意数量的行引用,但是表B中的每一行只能引用表A中的一行(或根本没有)。

n:m(或n:n)表示“多对多”; 表A中的每一行都可以引用表B中的许多行,而表B中的每一行都可以引用表A中的许多行。

1:n关系通常使用简单的外键进行build模 – 表A中的一列引用表B中的类似列,通常是主键。 由于主键唯一地标识了一行,因此该行可以被表A中的许多行引用,但是表A中的每行只能引用表B中的一行。

一个正确的关系不能这样做, 一个常见的解决scheme是使用包含两个外键列的链接表,每个链表对应一个链接表。 对于表A和表B之间的每个引用,将一行插入到链接表中,其中包含相应行的ID。

n:m – >如果你不知道n和m,它只是多对多的,它是由另外两个表之间的桥表来表示的

  -- This table will hold our phone calls. CREATE TABLE dbo.PhoneCalls ( ID INT IDENTITY(1, 1) NOT NULL, CallTime DATETIME NOT NULL DEFAULT GETDATE(), CallerPhoneNumber CHAR(10) NOT NULL ) -- This table will hold our "tickets" (or cases). CREATE TABLE dbo.Tickets ( ID INT IDENTITY(1, 1) NOT NULL, CreatedTime DATETIME NOT NULL DEFAULT GETDATE(), Subject VARCHAR(250) NOT NULL, Notes VARCHAR(8000) NOT NULL, Completed BIT NOT NULL DEFAULT 0 ) 

这是实现2个表之间映射的桥接表

 CREATE TABLE dbo.PhoneCalls_Tickets ( PhoneCallID INT NOT NULL, TicketID INT NOT NULL ) 

一对多(1:n)只是一个表,它有一个列作为主键,另一个表有这个列作为外键关系

类似于产品和产品类别,其中一个产品类别可以有许多产品

在关系数据库中,所有types的关系都以相同的方式表示:关系。 每个关系的候选关键字(以及可能的其他约束条件)决定了表示什么样的关系。 1:n和m:n是两种二元关系:

 C {Employee*,Company} B {Book*,Author*} 

在每种情况下*都指定关键属性。 {书,作者}是一个复合键。

C是一个关系,每个员工只为一家公司工作,但每个公司可能有很多员工(1:n):B是一个关系,一本书可以有很多作者,一个作者可以写很多书(m:n):

请注意,关键约束条件确保每个员工只能与一个公司关联,而书籍和作者的任何组合都是允许的。

其他types的关系也是可能的:n-ary(有两个以上的组件); 固定基数(m:n,其中m和n是固定的常数或范围); 定向; 等等。 威廉·肯特(William Kent)在其着作“数据与现实”(Data and Reality)一书中指出至less有432种 – 这只是二元关系。 在实践中,二元关系1:n和m:n是非常普遍的,通常在devise和理解数据模型时特别重要。

以示例来解释这两个概念,假设你有一个书店的订单input系统。 订单到项目的映射是多对多(n:m),因为每个订单可以有多个项目,每个项目可以按多个订单sorting。 另一方面,客户和订单之间的查询是一对多(1:n),因为客户可以放置一个以上的订单,但订单永远不会超过一个客户。

多对多(n:m)一对多(1:n)

m:n指的是多对多的关系,如1:n表示一对多关系。例如employee(id,name,skillset)skillset(id,skillname,qualifications)

在这种情况下,一个员工可以拥有许多技能,而忽略其他情况下可以说他们是1:N的关系