Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-08-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Uso de Foreign Key en FB 2.5

Haciendo unas pruebas en una base de datos definida en FB 2.5 creo que me he dado cuenta que debo tener un error de concepto. Dos de las tablas de esta base de datos están definidas así:
Código:
CREATE TABLE PERSONA (
  APELLIDOS VARCHAR(40) NOT NULL,
  NOMBRE VARCHAR(15) NOT NULL,
  REGISTRO INTEGER NOT NULL,
  CODPRV SMALLINT NOT NULL,
  NIF VARCHAR(9),
  SEXO SMALLINT,
  F_NACIM DATE,
  DOMICILIO VARCHAR(50),
  CPOSTAL VARCHAR(5),
  MUNICIPIO INTEGER,
  PROVINCIA SMALLINT,
  PROFESION INTEGER,
  C_ELECTRONICO VARCHAR(60),
  TELEFONO_1 VARCHAR(9),
  TELEFONO_2 VARCHAR(9),
  TELEFONO_3 VARCHAR(9),
  SITUACION SMALLINT,
  CORREO SMALLINT,
  LO1599 SMALLINT,
  F_ALTA DATE,
  N_AFILIADO INTEGER,
  AFILIACION SMALLINT,
  JUNTA SMALLINT,
  REFERENCIA VARCHAR(12),
  PERPAGO SMALLINT,
  FORPAGO SMALLINT,
  CUOTA DECIMAL(9, 2),
  IBAN VARCHAR(4),
  CUENTA VARCHAR(30),
  BIC VARCHAR(11),
  OBSERVACIONES BLOB SUB_TYPE 1);

ALTER TABLE PERSONA ADD CONSTRAINT PK_PERSONA PRIMARY KEY (APELLIDOS,NOMBRE,REGISTRO,CODPRV);
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODAFIPER FOREIGN KEY (CODPRV,AFILIACION) REFERENCES AFILIACION(CODPRV,CODIGO) ON DELETE SET NULL;
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODJUNPER FOREIGN KEY (CODPRV,JUNTA) REFERENCES JUNTA(CODPRV,CODIGO) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODMUNPER FOREIGN KEY (CODPRV,MUNICIPIO) REFERENCES POBLACION(CODPRV,CODIGO) ON DELETE SET NULL;
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODPROPER FOREIGN KEY (CODPRV,PROFESION) REFERENCES PROFESION(CODPRV,CODIGO) ON DELETE SET NULL;
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODPRVPER FOREIGN KEY (PROVINCIA) REFERENCES PROVINCIA(CODIGO) ON DELETE SET NULL;

CREATE INDEX AFIPER ON PERSONA(CODPRV,AFILIACION);
CREATE INDEX APENOMPER ON PERSONA(CODPRV,APELLIDOS,NOMBRE);
CREATE INDEX CTAPER ON PERSONA(CODPRV,IBAN,CUENTA);
CREATE INDEX JUNPER ON PERSONA(CODPRV,JUNTA);
CREATE INDEX MUNPER ON PERSONA(CODPRV,MUNICIPIO);
CREATE UNIQUE INDEX NUMREG ON PERSONA(CODPRV,REGISTRO);
CREATE INDEX PROPER ON PERSONA(CODPRV,PROFESION);
Código:
CREATE TABLE JUNTA (
  CODPRV SMALLINT NOT NULL,
  CODIGO SMALLINT NOT NULL,
  NOMBRE VARCHAR(30) NOT NULL,
  ZONA SMALLINT,
  PARTIDO SMALLINT);

ALTER TABLE JUNTA ADD CONSTRAINT PK_JUNTA PRIMARY KEY (CODPRV,CODIGO);
ALTER TABLE JUNTA ADD CONSTRAINT FK_CODPARJUN FOREIGN KEY (CODPRV,PARTIDO) REFERENCES PARTIDO(CODPRV,CODIGO) ON DELETE SET NULL;
ALTER TABLE JUNTA ADD CONSTRAINT FK_CODZONJUN FOREIGN KEY (CODPRV,ZONA) REFERENCES ZONA(CODPRV,CODIGO) ON DELETE SET NULL;

CREATE INDEX NOMJUN ON JUNTA(CODPRV,NOMBRE);
Yo tenía la idea que con la definición
Código:
ALTER TABLE PERSONA ADD CONSTRAINT FK_CODJUNPER 
FOREIGN KEY (CODPRV,JUNTA) REFERENCES JUNTA(CODPRV,CODIGO) 
ON DELETE SET NULL ON UPDATE CASCADE;
al modificar el campo código en la tabla JUNTA se actualizaba el equivalente en la tabla PERSONA. ¿Estoy equivocado?

Si no estoy equivocado teóricamente si borro un campo de la tabla JUNTA debería ponerse a NULL el equivalente en la tabla PERSONA; sin embargo si trato de eliminar un registro de la tabla JUNTA me da un error:
Cita:
The insert failed because a column definition includes validation constraints.Validation error for column "PERSONA"."CODPRV", value "*** null ***".
Y no acabo de enteder el mensaje de error que me arroja. Entiendo que es porque el campo CODPRV trata de ponerse a nulo y es parte de la clave primaria; tendría que modificarse SÓLO el campo JUNTA de la tabla PERSONA ¿Cómo puedo hacerlo?
Responder Con Cita
  #2  
Antiguo 06-08-2015
jgutti jgutti is offline
Miembro
 
Registrado: may 2003
Posts: 189
Poder: 21
jgutti Va por buen camino
para eliminar registro de la tabla JUNTA no debe existir ningun registro equivalente en tabla PERSONA(para mantener la integridad de la información).
ademas todo codigo que corresponda a junta en tabla PERSONA, obligatoriamente debe existir en tabla JUNTA.
"Si no estoy equivocado teóricamente si borro un campo de la tabla JUNTA debería ponerse a NULL el equivalente en la tabla PERSONA; sin embargo si trato de eliminar un registro de la tabla JUNTA me da un error:"
Responder Con Cita
  #3  
Antiguo 06-08-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
..
Creo que estás confundido en cómo funciona una base de datos relacional, si se quiere.
Has hecho varias preguntas, todas relacionadas entre sí, creo que deberías dar una leída a un tutorial SQL para aclararte las ideas.
Responder Con Cita
  #4  
Antiguo 06-08-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Validation error for column "PERSONA"."CODPRV", value "*** null ***".
CODPRV SMALLINT NOT NULL
El error es de validación. Se está intentando poner persona.codprv a NULL, cuando está definido en la tabla como NOT NULL.
Así que lo fácil es quitar el NOT NULL de la tabla persona.

Eso sí, te toca estudiar un poco, bueno... como a todos nosotros, que nunca dejamos de estudiar jeje.

Saludos!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema Foreign key franfl Firebird e Interbase 2 27-05-2008 19:38:03
problema foreign key sargento elias Conexión con bases de datos 4 21-04-2008 22:51:05
foreign key clanmilano Conexión con bases de datos 4 03-11-2005 03:21:19
Foreign key fjardelphi Firebird e Interbase 2 20-12-2004 16:05:39
uso de FOREIGN KEY jzginez Firebird e Interbase 2 22-04-2004 23:20:25


La franja horaria es GMT +2. Ahora son las 07:55:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi