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

Posted

技术标签:

【中文标题】数据库设计中“n:m”和“1:n”的含义【英文标题】:Meaning of "n:m" and "1:n" in database design 【发布时间】:2011-03-24 18:21:28 【问题描述】:

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

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

【问题讨论】:

en.wikipedia.org/wiki/Database_model 【参考方案1】:

m:n 用于表示多对多关系(另一侧的m 对象与另一侧的n 相关)而1:n 表示一对多关系(@另一边的 987654326@ 对象与另一边的 n 相关)。

【讨论】:

啊,好吧,所以“m”和“n”被视为我看到的变量:D,我认为“m”代表“many”,因此“n”混淆了代表什么(不能代表“无”,我的意思是)。无论如何谢谢:D 仅供参考,由于没有人提到它,因此这种关系的 Comp Sci 术语称为“基数”,请参阅en.wikipedia.org/wiki/Cardinality_%28data_modeling%29 了解详细信息。【参考方案2】:

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。

【讨论】:

“链接表”也称为“连接表” "None at all" -> 那不是 0/1:n 关系吗?(罕见)我对 1:n 的理解是它必须有一个。比如“一个城市必须在一个国家,但国家可以有n个城市”,“一个公司可以有n个员工,但一个员工必须为一个公司工作”,... 这就是让我发疯的原因。链接表,连接表。但是你加入表。你也有元组、行、属性。我的意思是这就像数据库设计从未完全指定,并允许多个单词。还有一些词是非常过时的,会引起混乱。像域完整性。为什么它不是属性完整性。或列完整性。域这个词是如此模糊,并用于其他领域。所有这些基本上都意味着输入验证,这是网络安全中的一个术语。啊哈【参考方案3】:

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
)

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

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

一对多 (1:n) 只是一个以列作为主键的表和另一个以该列作为外键关系的表

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

【讨论】:

【参考方案4】:

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

C Employee*,Company
B Book*,Author*

在每种情况下,* 表示关键属性。 Book,Author 是一个复合键。

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

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

实体关系图中关系线上的字母“N”是什么意思? 任意数字

M:N

M - ordinality - 描述最小值(序数与强制)

N - 基数 - 描述最小混合

1:N (n=0,1,2,3...) 一对零或更多

M:N (m and n=0,1,2,3...) 零或多到零或多(多对多)

1:1一对一

在此处了解更多信息: https://www.smartdraw.com/entity-relationship-diagram/

【讨论】:

这个答案的好处是它明确指出“1:n”中的“n”实际上可以为0或更高。调用 n "many" 使得 0 和 1 也可以包含在内变得不那么明显了。【参考方案7】:

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

【讨论】:

【参考方案8】:

m:n 指多对多关系 其中 1:n 表示一对多关系 例如 员工(ID,姓名,技能) 技能组(id、技能名称、资格)

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

【讨论】:

【参考方案9】:

假设您有一个 Book 模型和一个 Page 模型,

1:N means:
One book can have **many** pages. One page can only be in **one** book.


N:N means:
One book can have **many** pages. And one page can be in **many** books.

【讨论】:

以上是关于数据库设计中“n:m”和“1:n”的含义的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析 实验六 回溯法

1008 数组元素循环右移问题

PAT乙级-1008 数组元素循环右移问题

算法设计与分析 1.1 Joyvan的矩阵

Python中[ : n][m : ][-n][:-n][::-n][m::-n]和[m:]的含义

Button的设计原则