Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Claves Foraneas

Estas en el tema de Claves Foraneas en el foro de Oracle en Foros del Web. Buenas a todos, la consulta es que al crear una tabla y querer ponerle una clave Foranea me da el siguiente error y creo que ...
  #1 (permalink)  
Antiguo 03/04/2014, 05:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 16 años, 1 mes
Puntos: 0
Claves Foraneas

Buenas a todos, la consulta es que al crear una tabla y querer ponerle una clave Foranea me da el siguiente error y creo que esta bien creada. Dejo los codigos por si alguien me pudiese ayudar. Gracias de antemano. Un saludo.

Código SQL:
Ver original
  1. CREATE TABLE contrato (
  2. ncon NUMBER,
  3. nlote NUMBER,
  4. codcli NUMBER,
  5. pta NUMBER,
  6. pre NUMBER,
  7. pren NUMBER,
  8. fer DATE,
  9. fev DATE,
  10. gram NUMBER,
  11. PRIMARY KEY (ncon,nlote,codcli)
  12. );

Segunda tabla la cual tiene que estar enlazada con esta con el nlote.
Código SQL:
Ver original
  1. CREATE TABLE abonos (
  2. nab NUMBER NOT NULL,
  3. nlote NUMBER NOT NULL,
  4. fecha DATE,
  5. cantidad NUMBER,
  6. PRIMARY KEY (nlote)
  7. );

Ahora creo la clave
Código SQL:
Ver original
  1. ALTER TABLE abonos ADD CONSTRAINT enlace_contrato FOREIGN KEY (nlote) REFERENCES contrato(nlote);

Última edición por gnzsoloyo; 03/04/2014 a las 06:05
  #2 (permalink)  
Antiguo 03/04/2014, 06:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves Foraneas

Cita:
uenas a todos, la consulta es que al crear una tabla y querer ponerle una clave Foranea me da el siguiente error y creo que esta bien creada.
No. Esta mal creada...

Vamos a la definición usual para que veas el error:
Una FK es un campo o conjunto de campos que referencia a la clave primaria de otra tabla.
En el caso de PK compuestas (más de un campo), la FK debe tener la misma cantidad de campos, del mismo tipo y en el mismo orden que la PK.
¿Se entiende la idea?

Tu PK en la tabla contrato tiene tres (3) campos, por lo cual tu FK debe también tener tres campos, y no los estás indicando.
Ahora bien, tengo la seria sospecha de que lo que te sucede es que has definido mal la PK de la tabla "contrato".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/04/2014, 07:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Claves Foraneas

Ah pues no sabia eso de que tenia que tener el mismo numero de campos, pense que simplemente con indicarlos como primary key ya se podian usar para enlazarlos con otros campos. Perdona mi ignorancia, estoy empezando con Oracle . Muchisimas gracias, voy a probar con lo que me indicas. Gracias.
  #4 (permalink)  
Antiguo 03/04/2014, 07:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves Foraneas

No problem.
Lo que si te aclaro es que no es un tema de Oracle. Es de fundamentos del modelo E-R, y aplica a todos los DBMS. Ninguno te dejará crear FK en esas condiciones, y además como te dije, a mi entender la PK está mal planteada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/04/2014, 08:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Claves Foraneas

Como seria entonces la PK? Gracias
  #6 (permalink)  
Antiguo 03/04/2014, 08:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves Foraneas

Desde la optica del modelo ER, una PK es un atributo o conjunto de atributos mínimo (la menor cantidad de ellos) que identifica una única instancia de una entidad. En ese sentido, la PK sólo se compone de atributos de la entidad, entendiendo por tales a aquellso elementos que sólo son parte de la misma.
Por ejemplo, en el caso de una entidad persona serían aquellos que la hacen unica (nombre, apellido, fecha y lugar de nacimiento, etc), pero por convención, se suele usar para tal la modealidad de inscripción el registro de personas de cada país.
Ahora bien, ¿qué conjunto de datos mínimo identifica un contrato? Eso es algo que debes definir tu. También como propuesta, si en tu universo de contratos, los mismos se numeran, y cada número es único, es eviodente que el numero del contrato es una clave candidata.

En el modelo físico o de tablas, una PK es un campo o conjunto de campos que identifica unívocamente un registro en una tabla. Esto puede parecer lo mismo que en el modelo relacional, pero no es necesariamente cierto.
¿Por qué?
Porque a nivel físico, una misma entidad puede tener que descomponerse en más de una tabla, de acuerdo a su normalziación o requisitos del sistema, lo que implciará una construcción de PK diferente a la esperada.
¿Se entiende?

En tu caso, si el contrato se numera, y ese numero es único, entonces esa es la PK.
Pero.. si el contrato está vinculado a más de una persona como contratante, y más de ua como contratado (no tengo ni idea de qué contratos estamos hablando), entonces habrá al menos cuatro tablas: Contrato, Contrato_contratante, Contrato_contratado y Persona. Cada una de estas tendrá PK, pero sólo Contrato y Persona tendran claves primarias simples, mientras que las otras serán compuestas.

En resumen: Necesitaríamos entender mejor qué se contratqa, qué es un abono, y qué personas particpàn, para hacer un modelo realista y correcto.
En cualquier caso, los principios son los mismos, y te conviene repasar los fundamentos del tema del modelo ER.

Lo que seguro no tiene sentido es que generes una tabla Contrato, con una clave compuesta donde el numero del mismo es parte de la clave, porque de ese modo el mismo numero de contrato puede vincularse a diferentes lotes y clientes, sin que por ello deje de ser una clave únbica. Además, como pdrás imaginar, eso traería inconsistencias de datos en la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: claves, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:27.