【发布时间】:2021-07-16 13:46:54
【问题描述】:
我有一个包含员工、技能表和技能组表的数据库:
CREATE TABLE EMPLOYEE (
EmployeeID NUMBER (5, 0) NOT NULL,
*.....other fields*
CONSTRAINT EMPLOYEE_PK PRIMARY KEY (EmployeeID));
CREATE TABLE SKILL(
SkillID NUMBER (5, 0) NOT NULL,
Description VARCHAR2(30),
CONSTRAINT SKILL_PK PRIMARY KEY (SkillID),
CONSTRAINT SKILL_FK FOREIGN KEY (EmployeeID) REFERENCES EMPLOYEE(EmployeeID));
CREATE TABLE SKILLSET(
SkillSetID NUMBER (5,0) NOT NULL,
EmployeeID NUMBER (5,0) NOT NULL,
SkillID NUMBER (5,0) NOT NULL,
CONSTRAINT SKILLSET_PK PRIMARY KEY (SkillSetID)
CONSTRAINT SKILLSET_SKILL_FK FOREIGN KEY (SkillID) REFERENCES Skill(SkillID));
CONSTRAINT SKILLSET_EMP_FK FOREIGN KEY (EmployeeID) REFERENCES EMPLOYEE(EmployeeID));
我的员工可以拥有多种技能,这存储在技能表中。 当我尝试为多个员工分配技能表中的技能时,我收到 ORA-00001:违反唯一约束 (YSKILLSETID)。
这对我来说很有意义,我仍在寻找一种解决方案,让多名员工拥有多种技能。
但是,我的困惑在于,一名员工可以拥有多种技能,难道不应该受到唯一约束的约束吗?
INSERT INTO SKILLSET VALUES (125, 31150, 2513);
INSERT INTO SKILLSET VALUES (124, 31150, 2523);
INSERT INTO SKILLSET VALUES (122, 31150, 8493);
INSERT INTO SKILLSET VALUES (121, 31153, 2141);
INSERT INTO SKILLSET VALUES (120, 31154, 2521);
INSERT INTO SKILLSET VALUES (119, 31154, 2141);
INSERT INTO SKILLSET VALUES (118, 31150, 2521);
我的问题:
- 我可以做些什么来让许多员工掌握多种技能?
- 为什么这适用于一名拥有多种技能的员工?
【问题讨论】:
-
模型本身很奇怪:您有一个员工作为技能的属性,并尝试创建另一个表,其中包含一些表示相同关系的附加列。
EmployeeID应该从skill表中删除。您提供的语句不会返回此错误,因为没有重复的SkillSetID值 -
我已经编辑了技能表,这是一个错误,它不应该有员工 ID。
-
对 SKILLSET 的唯一唯一约束是
SKILLSET_PK PRIMARY KEY (SkillSetID)并且所有 SkillSetID 都是唯一的,所以我看不到你有这个错误。什么是 YSKILLSETID?
标签: sql oracle oracle-sqldeveloper