我要创建使用所提供的数据DDL脚本: 如果我有包含相同值的行,我应该如何链接主键和外键?
你可以做如下假设:
- 每个项目都有一个经理
- 许多员工被分配到每个项目。属性小时数表示每个员工在相应项目上工作的小时数,属性评级是该员工在此项目中的工作评分。
- 预算和起始日期指的是预算,启动该项目的日期
- Emp_Manager是员工的经理,并且可以从项目经理
我已经转变到这些3NF不同:
a. Employee_T(Emp_Id, Emp_Salary, Emp_dept)
b. Project_T(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
c. EmployeeLine_T(Emp_Id, Proj_Name, Hours, Rating)
d. EmpMgr_T(Emp_Dept, Emp_Manager)
这是我创建的DDL:
BEGIN
--Bye Tables!
FOR i IN (SELECT ut.table_name
FROM USER_TABLES ut) LOOP
EXECUTE IMMEDIATE 'drop table '|| i.table_name ||' CASCADE CONSTRAINTS ';
END LOOP;
END;
CREATE TABLE PROJECT_T
(
Proj_Name VARCHAR2(25) NOT NULL,
Proj_Mgr VARCHAR2(25),
Proj_Budget NUMBER NOT NULL,
Start_Date DATE NOT NULL,
CONSTRAINT Proj_Name_PK
PRIMARY KEY (Proj_Name)
);
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Jupiter','Smith',100000,'15-JAN-2015');
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Jupiter','Smith',100000,'15-JAN-2015');
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Jupiter','Smith',100000,'15-JAN-2015');
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Maxima','Lee',200000,'1-MAR-2014');
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Maxima','Lee',200000,'1-MAR-2014');
INSERT INTO PROJECT_T
(Proj_Name, Proj_Mgr, Proj_Budget, Start_Date)
VALUES ('Maxima','Lee',200000,'1-MAR-2014');
CREATE TABLE MANAGERS_T
(
Emp_Dept NUMBER NOT NULL,
Emp_Manager VARCHAR2(25) NOT NULL,
CONSTRAINT Emp_Dept_PK
PRIMARY KEY (Emp_Dept)
);
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (10,'Levine');
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (12,'Jones');
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (10,'Levine');
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (10,'Levine');
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (10,'Levine');
INSERT INTO MANAGERS_T
(Emp_Dept, Emp_Manager)
VALUES (15,'Jones');
CREATE TABLE EMPLOYEE_T
(
Emp_Id VARCHAR2(4) NOT NULL,
Emp_Salary NUMBER,
Emp_Dept NUMBER NOT NULL,
CONSTRAINT Emp_Id_PK
PRIMARY KEY (Emp_Id),
CONSTRAINT Emp_Dept_FK
FOREIGN KEY (Emp_Dept) REFERENCES MANAGERS_T(Emp_Dept)
);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E101',60000,10);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E105',55000,12);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E110',43000,10);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E101',60000,10);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E110',43000,10);
INSERT INTO EMPLOYEE_T
(Emp_Id,Emp_Salary,Emp_Dept)
VALUES ('E120',45000,10);
CREATE TABLE EMPLOYEELINE_T
(
Emp_Id VARCHAR(4) NOT NULL,
Proj_Name VARCHAR2(25) NOT NULL,
Hours NUMBER,
Rating NUMBER,
CONSTRAINT EmpID_ProjName_PK
PRIMARY KEY(Emp_Id,Proj_Name),
CONSTRAINT Proj_Name_FK
FOREIGN KEY (Proj_Name) REFERENCES PROJECT_T(Proj_Name),
CONSTRAINT Emp_Id_FK
FOREIGN KEY (Emp_Id) REFERENCES EMPLOYEE_T(Emp_Id)
);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E101','Jupiter',25,9);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E105','Jupiter',40,0);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E110','Jupiter',10,8);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E101','Maxima',15,0);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E110','Maxima',30,0);
INSERT INTO EMPLOYEELINE_T
(Emp_Id, Proj_Name, Hours, Rating)
VALUES ('E120','Maxima',15,0);
这是我的表应该如何与他们的主键和外键。当我创建表格时,它们运行良好。问题是我开始向它们中插入值。
我得到像唯一约束违反的错误,因为有重复的值。我会怎么做呢?
如果你想在更多的行中的DDL表中插入PROJ_NAME你应该创建主要用于至少几个字段 – Frank
的我不明白你是什么意思? @Frank – pyuntae
研究NORMALIZATION ::该练习要求您删除重复内容,而不是将图像中的数据复制到许多表格中。例如“木星”应该在项目表中出现一次 –