primary - Oracle SQL: recibe el error "no coincide con la clave única o primaria" y no sabe por qué
primary foreign key oracle (3)
Recibo este error al intentar crear una tabla y no sé por qué: [2016-07-05 14:08:02] [42000][2270] ORA-02270: no matching unique or primary key for this column-list
Esta pregunta me parece diferente (a mí) de una pregunta similar , porque en esa pregunta el OP hace referencia a una tabla con un PK compuesto, mientras que yo no.
Y aunque esta otra pregunta tiene el mismo código de error, es porque el OP hace referencia incorrectamente a la clave principal, lo que no creo que haya hecho.
¿Puede alguien más con experiencia en SQL educarme?
(Un par de cosas a tener en cuenta: 1) Sé que los nombres de la tabla / columna tienen pequeños errores / desviaciones de la convención, pero esto es para la tarea, y el docente exige que tenga las tablas y filas declaradas exactamente a su manera, incluso si no es -convencional. 2) Sí, eso es una tontería; pero no, no puedo cambiarlo o me marcan abajo).
CREATE TABLE Student_Course
(
Stu_ID NUMBER(5) NOT NULL,
Course_ID VARCHAR2(8) NOT NULL,
Section# NUMBER(3),
CONSTRAINT pk_stu_crse PRIMARY KEY (Stu_ID, Course_ID),
CONSTRAINT fk_course_id FOREIGN KEY (Course_ID) REFERENCES course(Course_ID),
CONSTRAINT fk_stu_id FOREIGN KEY (Stu_ID) REFERENCES student(Stu_ID),
CONSTRAINT fk_section FOREIGN KEY (Section#) REFERENCES course(Section#)
)
Solo hay dos tablas pequeñas con referencias, que son:
CREATE TABLE student
(
Stu_ID NUMBER(5) PRIMARY KEY ,
Lname VARCHAR2(20),
Fname VARCHAR2(20),
Mi CHAR(1),
Sex CHAR(1),
Major VARCHAR2(15),
Home_State CHAR(2)
);
CREATE TABLE course
(
Course_ID VARCHAR2(8) PRIMARY KEY ,
Section# NUMBER(3),
C_Name VARCHAR2(30),
C_Description VARCHAR2(30)
);
Gracias a las buenas respuestas, estoy publicando mi código que corregí en función de la ayuda aquí. Espero que mis correcciones ayuden a otros en el futuro.
CREATE TABLE student
(
Stu_ID NUMBER(5) PRIMARY KEY ,
Lname VARCHAR2(20),
Fname VARCHAR2(20),
Mi CHAR(1),
Sex CHAR(1),
Major VARCHAR2(15),
Home_State CHAR(2)
);
CREATE TABLE course
(
Course_ID VARCHAR2(8) ,
Section# NUMBER(3) ,
C_Name VARCHAR2(30),
C_Description VARCHAR2(30),
CONSTRAINT pk_course PRIMARY KEY (Course_ID, Section#)
);
CREATE TABLE Student_Course
(
Stu_ID NUMBER(5) ,
Course_ID VARCHAR2(8) ,
Section# NUMBER(3) ,
CONSTRAINT pk_stu_crse PRIMARY KEY (Stu_ID, Course_ID, Section#),
CONSTRAINT fk_stu FOREIGN KEY (Stu_ID) REFERENCES student(Stu_ID),
CONSTRAINT fk_course_id FOREIGN KEY (Course_ID, Section#) REFERENCES course(Course_ID, Section#)
);
Una clave externa es una referencia a una clave primaria en otra tabla.
La última restricción CONSTRAINT fk_section FOREIGN KEY (Section#) REFERENCES course(Section#)
no funcionará - La Section#
no es una clave principal en esa tabla
Section#
debe ser al menos ÚNICA en la tabla de cursos.
Si desea utilizar Section#
como referencia para una clave externa, debe ser UNIQUE o una PRIMARY KEY