数据库设计中"n:m"和"1:n"的含义

Abd*_*han 56 mysql database foreign-keys relationship

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

它与键或关系有什么关系吗?

Mat*_*nen 79

m:n用于表示多对多关系(m另一方面的对象与另一方相关n),同时1:n指的是一对多关系(1另一方面的对象与另一方相关n).

  • 仅供参考,因为没有人提及它,这种关系的Comp Sci术语称为"基数",请参阅http://en.wikipedia.org/wiki/Cardinality_%28data_modeling%29了解详情. (12认同)
  • 好吧,所以"m"和"n"被视为我看到的变量:D,我认为"m"代表"很多",因此"n"使得"n"代表什么是混淆(可以' t代表"无"我的意思是).无论如何,谢谢:D (7认同)

tda*_*ers 49

1:n表示"一对多"; 你有两个表,表A的每一行可以由表B中的任意数量的行引用,但表B中的每一行只能引用表A中的一行(或者根本不引用).

n:m(或n:n)表示'多对多'; 表A中的每一行可以引用表B中的许多行,表B中的每一行可以引用表A中的许多行.

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

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


Ash*_*Ash 7

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
)
Run Code Online (Sandbox Code Playgroud)

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

CREATE TABLE dbo.PhoneCalls_Tickets
(
   PhoneCallID INT NOT NULL,
   TicketID INT NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

一对多(1:n)只是一个表,其中一列作为主键,另一个表将此列作为外键关系

有点像产品和产品类别,其中一个产品类别可以有许多产品


nvo*_*gel 6

在关系数据库中,所有类型的关系都以相同的方式表示:关系。每个关系的候选键(以及可能的其他约束)确定所表示的关系类型。1:n 和 m:n 是两种二元关系:

C {Employee*,Company}
B {Book*,Author*}
Run Code Online (Sandbox Code Playgroud)

在每种情况下,* 指定关键属性。{Book,Author} 是一个复合键。

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

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

其他类型的关系也是可能的: n 元关系(具有两个以上的组成部分);固定基数(m:n,其中 m 和 n 是固定常数或范围);定向;等等。William Kent 在他的《数据与现实》一书中确定了至少 432 种关系 - 这还只是二元关系。在实践中,二元关系 1:n 和 m:n 非常常见,并且通常在设计和理解数据模型时被认为特别重要。


Pau*_*lin 5

为了通过示例解释这两个概念,假设您有一个书店的订单输入系统。订单到商品的映射是多对多 (n:m),因为每个订单可以有多个商品,并且每个商品可以由多个订单订购。另一方面,客户和订单之间的查找是一对多 (1:n),因为客户可以下多个订单,但订单绝不会针对多个客户。