在sql数据库中插入一对多关系

在sql数据库中插入一对多关系,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,伙计们,如果有人能帮我,我会非常感激的。我在将记录插入一对多关系数据库时遇到问题。场景如下,我有一个技师表(techid,name,姓氏)和一个技能表(skillid,skillDesc,techid)。技能表有一个techID外键 我如何创建sql语句/过程来插入一名具有分配给该技师的多种技能的技师 你需要三张桌子:技术员、技能和技术员技能。使用两个表,您不能将多个技能分配给单个技师。(如果TechID和SkillID是主键) 我认为您应该有三个表:技师(techid、姓名、姓氏)、技能(sk

伙计们,如果有人能帮我,我会非常感激的。我在将记录插入一对多关系数据库时遇到问题。场景如下,我有一个技师表(techid,name,姓氏)和一个技能表(skillid,skillDesc,techid)。技能表有一个techID外键


我如何创建sql语句/过程来插入一名具有分配给该技师的多种技能的技师

你需要三张桌子:技术员、技能和技术员技能。使用两个表,您不能将多个技能分配给单个技师。(如果TechID和SkillID是主键)


我认为您应该有三个表:技师(techid、姓名、姓氏)、技能(skillid、skillDesc)和能力(skillid、techid)。如果您只有两个表,那么每个技能到技师的映射都必须包含一份skillDesc的副本,这是冗余信息。相反,您希望创建表来定义技师对象和技能对象,并创建第三个表来捕获它们之间的关系

首先执行此查询:

insert into technician values (my_id, my_name, my_surname)
然后在技能上循环(伪代码):


到目前为止,您有什么?techid在技师身份(auot inc.)栏中吗?您是否面临特定的问题?书面问题看起来很笼统。sql server中insert的MS文档是,您必须先将insert插入技师表,然后再插入技能表。您可能能够执行时髦的多表插入,但这可能太过花哨了。在我看来,这个问题是:如何将多个技能传递给一个技术人员,再传递给一个存储过程。我不知道我自己,但我也想知道为什么不一个一个地做。插入技术人员,然后逐个插入技能表。这对于多对多是必需的。一对多不需要。从组织上来说,这是一种方法,因为你可以引用一项技能,而不必每次都输入相同的描述。另外,不要忘记约束。为什么要在TechSkillId表中包含第三列
TechSkillId
?只需让表格包含
TechID
SkillId
。这两个字段将是桌子上的自然键。谢谢你的帖子,但它认为我的问题相当模糊。我遇到的问题是,当“用户”添加一名技术人员时,他可以将多个技能分配给该技术人员。如果按下“插入技师”。然后,程序应调用“插入到”程序,该程序将插入具有分配给技师的所有技能的技师。然而,我面临的问题是实际将技术人员和技能同时插入数据库,如果发生错误,事务将回滚。@MarcelPalm您必须发布代码,以便我们现在可以帮助您,我可以插入一名技术人员,该技术人员具有多个分配给技术人员的技能,但是,如果由于某种原因发生错误,则只能部分完成传输。因此,我面临的问题是编写一个存储过程,该过程将插入技术人员,获取技术人员ID(使用max),然后插入分配给技术人员的技能,如果出现问题,则事务应回滚,不应插入任何内容。
insert into technician values (my_id, my_name, my_surname)
for skill in skills:
    insert into Ability values(skill, my_id)