Database 数据库表按行重复数据
我想比较两个表,看看员工在工作角色所需的正确“能力”中是否具有足够高的“熟练程度(基本、中级、高级)”。每个工作角色都有10种能力,但我不认为一个表包含以下内容 栏目:Database 数据库表按行重复数据,database,database-design,many-to-many,relational-database,Database,Database Design,Many To Many,Relational Database,我想比较两个表,看看员工在工作角色所需的正确“能力”中是否具有足够高的“熟练程度(基本、中级、高级)”。每个工作角色都有10种能力,但我不认为一个表包含以下内容 栏目: jobroleID,competency1,proficiency1,competency2,proficiency10,proficiency10是正确的,但我下面的选择似乎也是错误的,因为它显示了10行重复列jobroleID 表1工作角色要求 jobroleID, JRCompetence, JRProficiencyLe
jobroleID
,competency1
,proficiency1
,competency2
,proficiency10
,proficiency10
是正确的,但我下面的选择似乎也是错误的,因为它显示了10行重复列jobroleID
表1工作角色要求
jobroleID, JRCompetence, JRProficiencyLevel
001 205 intermediate
001 207 basic
001 301 advanced
etc
002
表2员工当前能力
EmployeeID, EmployeeCompetence, EmployeeProficiencyLevel
E1234 205 intermediate
E1234 207 basic
E1234 555 basic
etc
我很感激你给我的建议。我认为你的基本设计很好。当您规范化数据库,使每个表仅包含有关实体的信息,并对多对多关系(如员工与能力/级别,以及工作与能力与熟练程度)建模时,重复行是一种自然结果。这种设计使得添加新需求变得很容易——您只需在job requirements表中添加新行 您的替代设计要求您在需要添加新技能时添加新列,并修改依赖于表的所有查询-显然这并不理想 然而,我会改变设计,以便将熟练程度存储在一个单独的表中,这将使顺序比较更容易(因此1=基本,2=中级,3=高级) 查找哪些员工具备特定工作所需技能的查询可以如下所示:
-- list emps who has can do job 001:
SELECT EmployeeID
FROM employee_current_capability ecc1
WHERE NOT EXISTS (
SELECT *
FROM job_role_requirements jrr
WHERE jrr.jobroleID = 001
AND NOT EXISTS (
SELECT *
FROM employee_current_capability ecc2
WHERE ecc1.EmployeeID = ecc2.EmployeeID
AND ecc2.EmployeeCompetence = jrr.JRCompetence
AND ecc2.EmployeeProficiencyLevel >= jrr.JRProficiencyLevel
)
)
GROUP BY ecc1.EmployeeID;
有关一些示例,请参见此。给出的速度和信息非常好!我真的很欣赏这段代码。谢谢,这很有帮助