首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"n:m“和"1:n”在数据库设计中的意义

"n:m“和"1:n”在数据库设计中的意义
EN

Stack Overflow用户
提问于 2010-08-03 22:14:21
回答 9查看 194.9K关注 0票数 65

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

它与键或关系有关吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-08-03 22:17:29

m:n用于表示多对多关系(另一端的m对象与另一端的n相关),而1:n指的是一对多关系(另一端的1对象与另一端的n相关)。

票数 96
EN

Stack Overflow用户

发布于 2010-08-03 22:20: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之间的每个引用,都会在链接表中插入一行,其中包含相应行的is。

票数 56
EN

Stack Overflow用户

发布于 2010-08-03 22:30:37

n:m -->如果你既不知道n也不知道m,那就是简单的多对多,它由两个其他表之间的桥接表表示,例如

代码语言:javascript
运行
复制
   -- 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
)

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

代码语言:javascript
运行
复制
CREATE TABLE dbo.PhoneCalls_Tickets
(
   PhoneCallID INT NOT NULL,
   TicketID INT NOT NULL
)

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

有点像Product和Product Category,一个产品类别可以有多个产品

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3397349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档