在数据库设计中,n:m和1:n是什么意思?
它与键或关系有关吗?
发布于 2010-08-03 22:17:29
m:n
用于表示多对多关系(另一端的m
对象与另一端的n
相关),而1:n
指的是一对多关系(另一端的1
对象与另一端的n
相关)。
发布于 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。
发布于 2010-08-03 22:30:37
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)只是一个表,它将列作为主键,而另一个表将该列作为外键关系
有点像Product和Product Category,一个产品类别可以有多个产品
https://stackoverflow.com/questions/3397349
复制相似问题