Primary Key Unique Constraint 混淆/解决办法
Primary Key Unique Constraint confusion / solution
我有一个包含员工、技能 table 和技能集 table 的数据库:
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));
我的员工可以拥有多种技能,这存储在技能集 table 中。
我收到 ORA-00001:当我尝试从技能 table.
中为多个员工分配一项技能时,违反了唯一约束 (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);
screenshot of test
我的问题:
- 如何让许多员工连接到多种技能?
- 为什么这对一个拥有多种技能的员工有效?
我认为清楚地表述问题域会有所帮助。我认为:
系统有很多员工。
系统有很多技能。
一个员工可能拥有零个或多个技能。
一项技能属于零个或多个员工。
如果是这样,您将得到以下表格:
Employee
----
ID (pk)
...
Skill
----
ID (pk)
Description
...
Employee_skill
--------------
employee_id (fk)
skill_id (fk)
....
我有一个包含员工、技能 table 和技能集 table 的数据库:
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));
我的员工可以拥有多种技能,这存储在技能集 table 中。 我收到 ORA-00001:当我尝试从技能 table.
中为多个员工分配一项技能时,违反了唯一约束 (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);
screenshot of test
我的问题:
- 如何让许多员工连接到多种技能?
- 为什么这对一个拥有多种技能的员工有效?
我认为清楚地表述问题域会有所帮助。我认为:
系统有很多员工。 系统有很多技能。 一个员工可能拥有零个或多个技能。 一项技能属于零个或多个员工。
如果是这样,您将得到以下表格:
Employee
----
ID (pk)
...
Skill
----
ID (pk)
Description
...
Employee_skill
--------------
employee_id (fk)
skill_id (fk)
....