我想在我的应用程序中实现一对多概念。 这是场景:我有两个表
(ⅰ)。人(ID,NAME,AGE,DEPT)
的(ii)中。人员责任(ID,RESP'S)
一个人可能有多个责任。我该如何在这里实现 1-n关系? 实际上,我不明白这个的正确概念。
任何建议或链接以理解此概念将不胜感激。
答案 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
,您必须在相关表上使用外键。