Sql server 数据库连接与在单个表中保留列

Sql server 数据库连接与在单个表中保留列,sql-server,database,Sql Server,Database,我有两张桌子。一个是员工,另一个是角色。Employee表包含EmployeeId和EmployeeName。类似地,Role表将包含RoleId和RoleName列。员工将属于几个不同角色之一 我对数据库设计还不熟悉,在判断是否最好在Employee表中有一个RoleId列,或者创建另一个名为EmployeeRoleMapping的表,该表将包含指示此员工映射到此角色的行时,遇到了问题。这两种方法的优缺点是什么?最重要的是,您必须确定应用程序中员工和角色之间的关系 在我看来,一个员工可能有一个

我有两张桌子。一个是
员工
,另一个是
角色
Employee
表包含
EmployeeId
EmployeeName
。类似地,
Role
表将包含
RoleId
RoleName
列。员工将属于几个不同角色之一


我对数据库设计还不熟悉,在判断是否最好在
Employee
表中有一个
RoleId
列,或者创建另一个名为
EmployeeRoleMapping
的表,该表将包含指示此员工映射到此角色的行时,遇到了问题。这两种方法的优缺点是什么?

最重要的是,您必须确定应用程序中员工和角色之间的关系


在我看来,一个员工可能有一个或多个角色,反之亦然,一个角色可能属于一个或多个员工。因此,我们必须创建一个名为
EmployeeRoles
的新表,该表具有employeed\u id和Role\u id。

连接表方法是规范的,并且可能是本网站上大多数人推荐的方法。如果要在employee表中存储角色信息,请注意可能会复制某些信息,例如员工姓名。@TimBiegeleisen,您的意思是因为两个或多个员工同名而导致数据重复吗?但即使没有RoleId列,情况也会如此吗?如果某个员工在任何给定点都绑定到单个角色,这会是一个问题吗?不,这个问题会随着连接表方法而消失,因为在连接表方法中,员工和角色之间的关系由两个ID表示。员工的元数据(姓名等)在单独的表中只存储一次。@TimBiegeleisen您似乎做出了一个相当重要的假设。OP写道“一名员工将属于几个不同角色中的一个”。在我看来,这是一种1:1的关系。通常,只需将RoleID添加到Employee表中即可实现这一点。只有当关系为1:M时才需要映射表,但最好用OP.@SMor澄清这一点,但一个角色可能属于多个不同的员工。这还会被认为是一对一的关系吗?我不太确定这就是我问的原因。OP已经将其连接表命名为
EmployeeRoleMapping
。重读问题。