Oracle - crear tabla

 
Vista:
sin imagen de perfil
Val: 5
Ha disminuido su posición en 4 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

crear tabla

Publicado por rodic (3 intervenciones) el 16/12/2018 19:29:24
Hola a todos, me podéis indicar porque me da el error "Column check constraint cannot reference other columns" con el siguiente código?


1
2
3
4
5
6
7
8
9
10
CREATE TABLE Cursos
(Codigo_Curso varchar(20) NOT NULL,
Nombre_Curso varchar(20) UNIQUE,
	CONSTRAINT pk_Cursos PRIMARY KEY (Codigo_Curso),
Nombre_Profesor varchar(20) UNIQUE,
CONSTRAINT fk_Nombre_Profesor FOREIGN KEY (Nombre_Profesor) REFERENCES Profesores (Nombre_Profesor),
Max_Alumnos number(2),
Fecha_Inicio date,
Fecha_Final date CHECK (Fecha_Inicio<Fecha_Final),
Horas number(4));
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

crear tabla

Publicado por Rafael (328 intervenciones) el 18/12/2018 09:43:51
Hola:

El mensaje es muy claro
Column check constraint cannot reference other columns

El CHECK NO puede hacer referencia a otras columnas....
Es decir que esto:
1
Fecha_Final date CHECK (Fecha_Inicio<Fecha_Final),
No puede ser.... NO puedes hacer el check de una columna en referencia de otra

Supongo que estas estudiando, y es tu primer vez diseñando bases de datos aqui un par de temas que te pueden servir:

1. La logica del NEGOCIO (aplicacion) no deberia ser definida en la Base de Datos, es decir esta validacion de que la fecha de inicio sea menor a la fecha termino deberia estar en tu front end no aqui, ademas mas detalles ambos campos por defecto estan a NULO, no le has dicho que no lo sean, por lo que podria NO cumplirse dicha regla, seguramente dicha regla solo se cumple cuando vas a asignar un valor a fecha de termino, insisto que esta validacion deberia estar en tu aplicación.

2. Aunque ORACLE lo permita, estas usando como llave primaria de PROFESORES el Nombre_Profesor que es un VARCHAR, cuando tengas miles o millones de registros (obviamente quizas para esta tarea nunca los tengas, pero para ir corrigiendo), el igualar caracteres le cuesta 2 veces mas trabajo que igualar numeros, para eso le asignas un CODIGO o CLAVE.

3. Has declarado el Nombre_profesor en los cursos como UNIQUE, es decir que un profesor solo podra estar asignado a UNO y solo UN Curso, esto es realmente lo que quieres???

4. UNa buena costumbre es, declarar primero todas las columnas (campos), luego todos los constrainsts y/o indices... no irlos mezclando del modo en que lo haces... esto por efectos de lectura y por efectos logicos asi garantizas tener las columnas antes que los constraints e indices.

5. Por ultimo, el largo de los campos, te lo dejo a pensar pones el nombre del profesor como varchar(20)....
Si solo vas a guardar el nombre "Jorge", "Pedro", "Luis", etc, pues muy seguramente te sirva aun si se llamara "Francisco Javier" (16 posiciones)...
Pero obviamente si tienes dos profesores con el mismo nombre, "Francisco Javier Gómez Perez" y "Francisco Javier Gómez López" ... luego entonces hay que pensarselo no crees?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar