Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   problema al crear clave foranea (https://www.clubdelphi.com/foros/showthread.php?t=57467)

anubis 16-06-2008 17:47:01

problema al crear clave foranea
 
Buenas, aqui estoy de nuevo, molestando un poco. Estoy enredando un poco mas con el firebird gracias a vosotros ;).
Problema para crear una tabla no tengo, pero quiero al crear una tabla nueva meterle clave foranea porque, tal y como estoy viendo, funciona igual que la primary key, es decir, se puede buscar todos los registros que cumplan la condicion.
Imagino que esto se puede hacer con un query que filtre, pero supongo que la foreign key valdra para algo a la hora de no tener que recorrer todo la tabla buscando.
Corregidme si me equivoco.
Estuve dando vueltas por el foro buscando el tema de foranea pero lo que he visto no me ha aclarado las ideas.

gracias por la comprension ;)

editado:
Estoy haciendo esto pero no me agarra
Código Delphi [-]
alter table historial,
add constraint nucliente,
foreign key(ncliente);
nucliente es el nombre que le estoy dando al index y ncliente es un campo de la tabla historial que quiero usar como foraneo.

RolphyReyes 16-06-2008 18:08:17

Saludos.

A manera de consejo busca referencia sobre la normalización de BD para que entiendas mejor el concepto de clave foránea.

La clave foránea consiste básicamente en mantener una integridad de los datos.

Un ejemplo:

Código SQL [-]
CREATE TABLE TIPO_CLIENTE(
TIPO_ID INTEGER NOT NULL,
DESCRIPCION VARCHAR(50)
);

Digamos que TIPO_ID es clave primaria de la tabla TIPO_CLIENTE.

Código SQL [-]
CREATE TABLE CLIENTE(
CLIENTE_ID INTEGER NOT NULL,
TIPO_ID INTEGER NOT NULL,
NOMBRE VARCHAR(50)
);

Digamos que CLIENTE_ID es tu clave primaria de CLIENTE, si te fijas ahora tengo el campo TIPO_CLIENTE y es NOT NULL (condición para ser clave foránea) igual como esta en la tabla TIPO_CLIENTE. Ahora sí puedes definir la clave foránea en la tabla CLIENTE utilizando el campo TIPO_ID de la misma con la tabla TIPO_CLIENTE en su campo TIPO_ID (que es clave primaria, otro requisito).

Con esto estas poniendo una restricción de que los valores del campo TIPO_ID en la tabla CLIENTE deben de existir primero en la tabla TIPO_CLIENTE.

Espero haberte ayudado.

Hasta luego.

peccatum 28-06-2008 06:39:25

Hola

Estoy teniendo un grave problema al no poder definir la clave foranea de una tabla. Ésta tiene dos campos que conforman un índice y apuntan a otra tabla que tiene los mismos dos campos de clave primaria....

He tenido en cuenta todo lo aquí explicado pero me encuentro con el siguiente error:

http://img410.imageshack.us/img410/130/ibnh6.jpg


ayuda por favor?

peccatum 28-06-2008 16:18:44

ya lo solucione hice lo siguiente:

creé una nueva tabla con los mismos campos, y ahi no hubo problema en la creación de la clave foránea, me queda la duda de porp qué antes no funcionaba.... :confused: siempre me pasan cosas como estas :mad:

peccatum 28-06-2008 16:24:49

ah, cabe destacar que tanto en la antigua como en la nueva tabla no había registros.... en la tabla "apuntada" si los había... no es que había registros que no coincidan.... en fin


La franja horaria es GMT +2. Ahora son las 18:10:43.

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