如何在数据库中实现ONE-TO-MANY

时间:2010-08-31 09:37:16

标签: database-design foreign-keys rdbms

我想在我的应用程序中实现一对多概念。 这是场景:我有两个表

(ⅰ)。人(ID,NAME,AGE,DEPT)
(ii)中。人员责任(ID,RESP'S)

一个人可能有多个责任。我该如何在这里实现 1-n关系? 实际上,我不明白这个的正确概念。

任何建议或链接以理解此概念将不胜感激。

3 个答案:

答案 0 :(得分:20)

这种一对多的关系可以用简单的英语来解释......

一个人有一项或多项责任,

每项责任仅属于一个人。

现在,根据您使用的rdbms,您可以将其实现为外键关系。

首先,您需要向RESPS添加一个指向人员表的列。

让我们调用这个新列PERSON_ID。

现在我们可以声明关系,代码可能看起来像这样;

ALTER TABLE [Responsibilities] ADD CONSTRAINT FOREIGN KEY (PERSON_ID) 
REFERENCES [Person] (ID)

这种外键约束声明意味着从现在开始,如果不指定拥有该责任的人,则无法添加责任。

但是你仍然可以添加一个没有责任的人(因为人员表上没有任何限制)。

请注意,这是所有类型的学术,因为在现实生活中责任是共享的。

换句话说,一个人可能有一项或多项责任,但每项责任可能属于一个或多个人。

这被称为多对多关系,并且是一个众所周知的数据库设计问题,有一个定义明确的解决方案 - 我现在不会讨论这个问题,因为它与你的问题相关。

答案 1 :(得分:0)

你最终会得到一张由两列组成的表格(仅限职责):

PersonId,Responsibility

所以你可能会有像

这样的东西

1000,TakeCareOfGraden
1000,TakeCareOfServerRoom

这意味着PersonId = 1000的人对两者负责。

这里的关键是一个包含两个字段的复合键(因为它们都不是唯一的)。

答案 2 :(得分:0)

我只想说one-to-many的后向关系是many-to-one(这是一个外键)。因此,要实现one-to-many,您必须在相关表上使用外键。