Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Tipo relación de 0 a muchos en Accesss (https://www.clubdelphi.com/foros/showthread.php?t=48269)

jlrbotella 20-09-2007 08:42:56

Tipo relación de 0 a muchos en Accesss
 
Hola:

Estoy intentando crear una relación de 0 a muchos en access, pero no me funciona correctamente. La relación es de 1 a muchos, pero el campo de la clave ajena la permito a nulo, pero access no lo entiende.

Aqui teneís el ejemplo:

tabla colores
(
codigo integer, (clave primaria)
descripcion char(50)
);

tabla casas
(
codigo integer (clave primaria),
propietario char(20),
color integer, (clave ajena a colores.codigo), puede llevar nulos
);

He creado una relación en la ventana de relaciones de casas.color a la tabla colores.codigo. Exijo integredad referencial, pero me obliga a tener un valor en el campo color de la tabla casas.

¿Cómo lo puedo solucionar, exigiendo integredad referencial?

Gracias

Neftali [Germán.Estévez] 20-09-2007 09:50:21

No debería obligarte.
¿Cómo has definido la JOIN cuando das de alta la relación?

Otra cosa, ten en cuenta que debes dejar el campo vacío, no con cero como lo deja Access por defecto.

poliburro 20-09-2007 15:32:15

Cita:

Empezado por jlrbotella (Mensaje 232449)
Hola:

Estoy intentando crear una relación de 0 a muchos en access, pero no me funciona correctamente. La relación es de 1 a muchos, pero el campo de la clave ajena la permito a nulo, pero access no lo entiende.


Gracias

No es que no lo entienda, sucede que lo que estás planteando viola las reglas de integridad referencial. si deseas ingresar registros en casas, cuyo color no exista en el maestro de colores, pues simplemente no uses Integridad.

Ahora bien. si verdaderamente deseas usar integridad referencial entonces debes hacer lo siguiente.

En el maestro de colores debes dar de alta un valor que identifique a los "Indeterminados", posteriormente en la tabla de casas, en la clave de color, pones como valor por default el valor del color "Indeterminado". Y listo, ya tendras una verdadera regla de integridad referencial.

Suerte.

Neftali [Germán.Estévez] 20-09-2007 16:28:17

Cita:

Empezado por poliburro (Mensaje 232501)
...sucede que lo que estás planteando viola las reglas de integridad referencial. si deseas ingresar registros en casas, cuyo color no exista en el maestro de colores, pues simplemente no uses Integridad.

Yo creo que eso es equivocado.
A mi entender la integridad referencial contempla los nulos. De ahí que existan las relaciones 1->N y las 0->N

La Integridad referencial dice que si pones un valor, este debe existir en la tabla de referencia, pero no quiere decir que tengas que ponerlo obligatoriamente. También puedes dejarlo vacío (con lo que no violas la integridad).
Lo que tú planteas, es lo que se llama utilización de "registros fantasma" y creo que no está dentro de las reglas de integridad.

Gabo 20-09-2007 16:35:10

Otra opción es crear una tabla que relacione las casas con sus colores...

Código:

tabla casas_colores
(
codigo_casa integer,
codigo_color integer,
);

Esto te permite todo el juego que quieras:

- No seleccionar el color de una casa.
- Seleccionar más de un color para una casa.
- Seleccionar un sólo color para la casa... aunque, ésto último, lo tienes que controlar por programación.

No obstante, creo que la solución de poliburro será la más acertada si sólo será un color a elegir o ninguno.

poliburro 20-09-2007 16:37:14

pues me parece un poco sobrado iniciar un debate usando como fundamento el "Yo creo", "Yo pienso".

por que no mejor referirse a la documentación existente.

Neftali [Germán.Estévez] 21-09-2007 15:57:56

Cita:

Empezado por poliburro (Mensaje 232522)
...me parece un poco sobrado iniciar un debate usando como fundamento el "Yo creo", "Yo pienso".

Pues no era mi intención; Era simplemente que lo creo (o lo pienso) así, aunque tampoco es que lo pueda asegurar 100%.

Conozco algunas BD relacionales y todas ellas permiten las relaciones 0->n, por lo tanto, se me hace estraño que una BD relacional posea una relación que contradice la integridad referencial.


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

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