Bases de Datos - Crear clave candidata para relacionar...

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 12 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Crear clave candidata para relacionar...

Publicado por Angel (2 intervenciones) el 21/11/2018 19:56:45
Hola a todos y muchas gracias desde ya. Tengo una tabla dónde la clave principal queda conformada por 4 campos (todos del mismo tipo Número). Es recomendable crear un campo "Índice ünico", concatenando los valores de los 4 campos que conforman la clave principal, para luego utilizar este cámpo con cómo claves forenea de otras tablas y así no sumar los 4 campos también a las demás tablas?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 52
Bronce
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Crear clave candidata para relacionar...

Publicado por Isaias (26 intervenciones) el 17/12/2018 20:23:28
No comentas en que motor de base de datos lo vas a implementar, pero te comento que todas las llaves primarias (primary key) se convierten en LLAVES FORÁNEAS (foreing key).

Las llaves primarias pueden estar conformadas e un solo campo o bien, como en tu caso, 4 columnas y su indice debe ser UNICO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pancho
Val: 107
Bronce
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Crear clave candidata para relacionar...

Publicado por Pancho (33 intervenciones) el 18/12/2018 20:44:04
Hola

Lo puedes hacer, pero no es lo procedente por varias razones:

1) Si la relacion es de tipo UPDATE CASCADE tienes que actualizar los valores de la columna que hara de clave candidata.
2) Tienes que elaborar triggers para el caso de realizar INSERT, UPDATE para que te mantenga los valores de dichas columnas .
3) Si la relacion es de tipo DELETE CASCADE hay que poner cuidado y eliminar el registro en la tabla hija, de nuevo con un trigger se
solventa esto.
4) Si la relacion es de tipo DELETE entonces hay que poner en NULL el valor de la columna clave candidata, en otras palabras dejar huerfano al registro de la tabla hija y como iempre usar trigger para esto.
5) Pruebas, realizas las pruebas correspondientes en cada caso para que no te lleves sorpresas.

Mi consejo, el motor BD se encarga de estas cosas muy eficientemente.

Si lo que quieres es ahorrar columnas en la tabla hija convierte la entidad padre debil en una entidad padre fuerte, es decir que tenga una ID unica y esa clave sera la foranea de la tabla hija

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha aumentado su posición en 12 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Crear clave candidata para relacionar...

Publicado por Angel (2 intervenciones) el 19/12/2018 00:30:43
Hola Pancho... gracias por entenderme. Tu explicación es excelente. Todo eso que dices es tal cuál. El tema es que como diseñador respondo a requerimientos de los programadores y no llego a entender por qué todo eso que tu dices lo hacen ellos mediente código. Soy nuevo y mucho no puedo objetar pero quería estar seguro que mi opinión no estaba erradda y logre ver que no por tu comentario y el de Isaías. Debo decir a favor de ellos que las consultas se ejecutan mucho más rápido (lo que les hizo creer tener razón), pero bajo la teoría pura de bases de datos me hace mucho ruido!! Muchas gracias otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pancho
Val: 107
Bronce
Ha mantenido su posición en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Crear clave candidata para relacionar...

Publicado por Pancho (33 intervenciones) el 19/12/2018 20:26:56
Hola

El rendimiento nada tiene que ver con la relacion, es un problema en la manera como se realizara la consulta, para acelerar hace falta un indice, pero este indice debe estar bien diseñado

Te recomiendo este enlace para mas informacion:

https://use-the-index-luke.com/es

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar