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

duda en la aplicación de una FK

Estas en el tema de duda en la aplicación de una FK en el foro de Bases de Datos General en Foros del Web. Saludos Tengo una duda... conceptual, con la aplicación de una FK. Tengo las siguientes tablas: region (cod_region, desc_region) estado (cod_region, cod_estado, desc_estado) municipio (cod_region, cod_estado, ...
  #1 (permalink)  
Antiguo 20/01/2010, 19:55
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
duda en la aplicación de una FK

Saludos

Tengo una duda... conceptual, con la aplicación de una FK.

Tengo las siguientes tablas:
region (cod_region, desc_region)
estado (cod_region, cod_estado, desc_estado)
municipio (cod_region, cod_estado, cod_municipio, desc_municipio)

Es una simple estructra de código político. En el caso de estado, fácil, cod_region es FK que viene de region. Pero, en caso de municipio, la FK cod_region, ¿viene de estado?¿de region?

Gracias
__________________
Gracias de todas todas
-----
Linux!
  #2 (permalink)  
Antiguo 20/01/2010, 20:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda en la aplicación de una FK

Creo que estás confundiendo el concepto. Cada uno de esos elementos (estado, región y municipio) tienen su propia PK. El tema es que algunos de ellos contienen también, como FK el código de otro, pero eso no quiere decir que "viene de", sino que "está relacionado", o "pertenece a".
Son ideas distintas.
No puedo decir con precisión cómo el la cadena de relaciones que usas porque eso depende de cada país, y dentro de cada país a cada unidad de división política que usen.
Para que lo entiendas, en el caso de mi ciudad (Córdoba, Argentina) sería País -> Provincia -> Departamento -> Ciudad. Pero si me desplazo a Buenos Aires, Sería País -> Provincia -> Partido -> Ciudad. Y la diferencia entre partido y departamento no es simplemente de nombre. Tienen estructuras diferentes (por caso, el nivel de división gubernativa más pequeño en Buenos Aires es el partido, pero en Córdoba es la ciudad ).

En tu caso, la relación se debe establecer por la cardinalidad. Si una región contiene uno o más estados, los estados llevan como FK el ID de la región. Si un estado contiene uno o más municipios, cada municipio contiene como FK el ID del Estado, pero no necesita específicamente el de región.

¿Se entiende la idea?

Aplica ese esquema a la estructura de la división política que se usa en tu país.
__________________
¿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 21/01/2010, 06:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: duda en la aplicación de una FK

Lo importante es que las tablas estén unidas y si lo hacen por un unico camino no le encontraría problema.

Para mi la estructura debe ser:
region (cod_region, desc_region)
estado (cod_region, cod_estado, desc_estado)
municipio (cod_estado, cod_municipio, desc_municipio)

Sobrando en la tabla municipio la llave con el código de la región. Con la relación entre las tablas municipio y estado se puede acceder mediante consultas SQL a la información de las 3 tablas. Sería innecesaria una relación con región en la tabla municipio si ya están conectadas entre si por la tabla estado.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 21/01/2010, 15:23
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: duda en la aplicación de una FK

La estructura en mi pais, según el ente rector en la materia, es:
region
estado
municipio
parroquia
centro poblado

El problema es que, según el ente rector, los municipios tienen una codificación (numerica de 2 caracteres) que se "reinicia" segun el estado, por ejemplo:
Estado Mérida -> codigo 3
Municipio Adriani -> codigo 1
Municipio Andres Bello -> codigo 2
...

Estado Táchira -> codigo 4
Municipio Parra -> codigo 1
Municipio Toro -> codigo 2

Lo mismo ocurre por debajo (parroquia, centro poblado), por lo que creo que sí se debe incluir el codigo...

"Viene de" fue sólo una forma de decir "pertenece a"
__________________
Gracias de todas todas
-----
Linux!
  #5 (permalink)  
Antiguo 21/01/2010, 15:28
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: duda en la aplicación de una FK

se reinicia?

haz contemplado la posibilidad de usar llaves primarias compuestas?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 22/01/2010, 08:46
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: duda en la aplicación de una FK

no se reinicia automáticamente, pero el organismo que puso la codificación, "reinicia" la codificación...

te refieres a que en:
municipio (cod_region, cod_estado, cod_municipio, desc_municipio)
utilice como llave primaria: cod_region y cod_estado (por ejemplo)? sí! así mismo lo tengo... pero en otro caso más abajo, por ejemplo :
parroquia (cod_region, cod_estado, cod_municipio, cod_parroquia, desc_parroquia)
tengo duda con la aplicación de la FK...

Comentarios!
__________________
Gracias de todas todas
-----
Linux!
  #7 (permalink)  
Antiguo 22/01/2010, 08:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda en la aplicación de una FK

No:

Region(cod_region, desc_region)
Estado(cod_estado, cod_region, desc_estado)
Municipio (cod_municipio, cod_estado, desc_municipio)
Parroquia (cod_parroquia, cod_municipio, desc_parroquia)

Si cada entidad tiene su propio código, lo único que hay que poner en cada uno es el ID de la entidad de jerarquía inmediatamente superior. Poner el resto es redundante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 23/01/2010, 13:53
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: duda en la aplicación de una FK

Disculpa, pero no entiendo...
tengo una region (06, los andes)
dos estados de esa region: (01, merida), (02, táchira)
Estado (01, 06, merida)
Estado (02, 06, tachira)
dos municipios del estado 01: (01, alberto adriani), (02, andres bello)
dos municipios del estado 02: (01, andres bello, michelena)
Municipio (01, 01, alberto adrini)
Municipio (02, 01, andres bello)
Municipio (01, 02, andres bello)*
Municipio (02, 02, michelena)

¿cómo puedo saber a qué región (si tuviera otra) pertenece el municipio marcado con asterisco?
Bajo hasta parroquia:
dos parroquias del municipio 01: (01, libertador), (02, paez)

upss, ¿de qué estado es esa parroquia? me explico? la numeración de los códigos de los municipios, empieza en 1 con cada estado, los de parroquia empieza en 1 con cada municipio...

Es posible que lo que me dicen este bien, pero yo, no lo entiendo, disculpas públicas...

Luz por favor
__________________
Gracias de todas todas
-----
Linux!
  #9 (permalink)  
Antiguo 23/01/2010, 14:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda en la aplicación de una FK

Para eso existen los JOIN:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3.           parrroquia P
  4.           INNER JOIN municipio m ON P.idmuni = M.idmuni
  5.           INNER JOIN estado E ON M.idestado = E.idestado
  6.           INNER JOIN region R ON E.idregion = R.idregion;
Cada ID es único, por lo que cada parroquia tiene la FK de un sólo municipio; este municipio tiene como FK la clave de un sólo estado, y este estado tiene como FK la clave de una sola región...

En definitiva, esto:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3.           municipio m
  4.           INNER JOIN estado E ON M.idestado = E.idestado
  5.           INNER JOIN region R ON E.idregion = R.idregion
  6. WHERE
  7.          M.idmuni = 1;
te devolvería solamente los datos correspondientes a ese municipio.

El hecho de que cada PK de cada tabla comience con 1 es irrelevante, porque estamos hablando de tablas distintas y PK distintas. ¿Lo entiendes? No es lo mismo hablar de la PK de PARROQUIA, que de la PK de ESTADO. Lo que es única es la relación entre ambos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 27/01/2010, 10:56
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: duda en la aplicación de una FK

@gnzsoloyo Casi me convences en una primera lectura...

Según lo que me dices de:
Municipio (cod_municipio, cod_estado, desc_municipio)
Parroquia (cod_parroquia, cod_municipio, desc_parroquia)

supongamos que tengo una parroquia:
Parroquia (01, 01, los palitos)

y tengo 2 municipios:
Municipio (01, 01, merida)
Municipio (01, 02, trujillo)

¿Cómo sabe a cuál municipio 01 pertenece la parroquia, sí existen 2 con el mismo código, pero de diferentes estados? Es un problema, claramente, de definición o asignación de la codificación, o de la normalización según esa codificación... ¿o yo sigo sin entender?
__________________
Gracias de todas todas
-----
Linux!
  #11 (permalink)  
Antiguo 27/01/2010, 11:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda en la aplicación de una FK

Cita:
¿Cómo sabe a cuál municipio 01
Tu problema es que estás escribiendo mal los códigos:
Cita:
Municipio (01, 01, merida)
Municipio (02, 01, trujillo)

Municipio (cod_municipio, cod_estado, desc_municipio)
Parroquia (cod_parroquia, cod_municipio, desc_parroquia)
El ID del municipio es, en este caso, incremental, por lo que no puede haber dos iguales. Lo que sí puede haber es dos ID del mismo Estado en diferentes municipios.
No te confundas: Las PK de cada tabla son únicas. Nunca se pueden repetir.

En tu ejemplo:
Cita:
Parroquia (01, 01, los palitos)
Municipio (01, 01, merida)
Posiblemente, como estás trabajando con valores tan pequeños aún, las cosas se confunden a simple vista. El tema es que no pierdas la perspetiva de saber qué valor corresponde a qué campo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 28/01/2010, 10:00
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: duda en la aplicación de una FK

El ID del municipio, en este caso, no es incremental, es un código asignado por un organismo (rector en la materia), por lo que sí se puede repetir, es más, no se puede, se repite! Se repite porque no pertenecen al mismo estado.

No, no estoy escribiendo mal los códigos, es así:
Municipio (cod_municipio, cod_estado, desc_municipio)
Parroquia (cod_parroquia, cod_municipio, desc_parroquia)

supongamos que tengo una parroquia:
Parroquia (01, 01, los palitos)

y tengo 2 municipios:
Municipio (01, 01, merida)
Municipio (01, 02, trujillo)

el municipio merida, con código 01 pertenece al estado 01
el municipio trujillo, con código 01 pertenece al estado 02
__________________
Gracias de todas todas
-----
Linux!
  #13 (permalink)  
Antiguo 28/01/2010, 10:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda en la aplicación de una FK

Esto está mal, si el primer campo es PK de Municipio:
Cita:
el municipio merida, con código 01 pertenece al estado 01
el municipio trujillo, con código 01 pertenece al estado 02
Una PK no debe repetirse. O el código es incorrecto en uno de los casos, o la PK está mal elegida. Tiene que ser única e irrepetible para cada municipio que exista en esa tabla. Si dos municipios tienen la misma clave, en primer lugar no los podrías ingresar porque la restricción de PK no lo permitiría, y en segundo lugar se generaría una gravísima inconsistencia de datos.

Debes rever el diseño de la tabla y elegir una clave diferente, porque esa no puede servir en ese caso como PK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:42.