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

¿Qué es mejor o peor? FK como PK

Estas en el tema de ¿Qué es mejor o peor? FK como PK en el foro de Bases de Datos General en Foros del Web. Tengo una discusión con un compañero de trabajo sobre unas relaciones entre tablas. Os lo explico con un ejemplo bastante sencillo. Tenemos una tabla que ...
  #1 (permalink)  
Antiguo 14/02/2013, 03:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Pregunta ¿Qué es mejor o peor? FK como PK

Tengo una discusión con un compañero de trabajo sobre unas relaciones entre tablas. Os lo explico con un ejemplo bastante sencillo. Tenemos una tabla que es un listado de vehículos y luego dos tablas que una tabla es de coches y otra de motos.

TABLA VEHICULO:

ID_VEHICULO (PK)
TIPO_VEHICULO
MARCA
MODELO
FECHA_ALTA

Y luego las tablas del detalle de cada vehículo (unos 60 campos cada tabla)

TABLA DETALLE COCHE:

ID_VEHICULO (PK,FK)
MARCA
MODELO
NUM_PUERTAS
MOTOR
CILINDRADA
.....

TABLA DETALLE MOTO:

ID_VEHICULO (PK,FK)
MARCA
MODELO
MOTOR
CILINDRADA
....

Mi compañero dice que en la tabla DETALLE MOTO y DETALLE COCHE debería haber una PK propia y luego además la FK del ID_VEHICULO. No lo veo mal pero yo creo que en este caso esa PK nueva no aporta nada, y que haciendo la FK como PK ya vadría.

¿Vosotros qué opináis?
  #2 (permalink)  
Antiguo 14/02/2013, 04:11
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: ¿Qué es mejor o peor? FK como PK

...yo creo que tu amigo esta mas acertado...por ejemplo, en la tabla DETALLE_MOTOS , deberías conocer el ID de cada moto, pero ademas, por si llegaras a necesitarlo, el ID_VEHICULO...ejemplo...supongamos que estas haciendo una consulta sobre la TABLA VEHICULO, y necesitas conocer la cilindrada de algunas motos al azar...por lo que escribes aquí, cilindrada no forma parte de TABLA VEHICULO, entonces deberías hacer la consulta contra TABLA DETALLE MOTO, y usando ID_VEHICULO seria mas facil y rapido...ya que solo chequeas las motos con mismo ID en ambas tablas y retornas la cilindrada...me explico? un saludo
  #3 (permalink)  
Antiguo 14/02/2013, 04:49
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: ¿Qué es mejor o peor? FK como PK

Cita:
Iniciado por ipraetoriux Ver Mensaje
...yo creo que tu amigo esta mas acertado...por ejemplo, en la tabla DETALLE_MOTOS , deberías conocer el ID de cada moto, pero ademas, por si llegaras a necesitarlo, el ID_VEHICULO...ejemplo...supongamos que estas haciendo una consulta sobre la TABLA VEHICULO, y necesitas conocer la cilindrada de algunas motos al azar...por lo que escribes aquí, cilindrada no forma parte de TABLA VEHICULO, entonces deberías hacer la consulta contra TABLA DETALLE MOTO, y usando ID_VEHICULO seria mas facil y rapido...ya que solo chequeas las motos con mismo ID en ambas tablas y retornas la cilindrada...me explico? un saludo
Igual he entendido mal tu ejemplo, pero... entonces me estás apoyando mi teoría, ¿no? Yo digo que en las tablas de DETALLE_MOTO y DETALLE_COCHE, no es necesaria una PK nueva, si no con usar la FK heredada de la tabla VEHICULO y haciéndola PK ya serviría. Eso es lo que dices tú, ¿no?
  #4 (permalink)  
Antiguo 14/02/2013, 10:58
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: ¿Qué es mejor o peor? FK como PK

Tu ejemplo es un modelo de herencia. En realidad tienes tres tablas:

Cita:
VEHICULO(
ID_VEHICULO (PK)
TIPO_VEHICULO
MARCA
MODELO
MOTOR
CILINDRADA
FECHA_ALTA
...)

COCHE(
ID_VEHICULO (PK,FK)
NUM_PUERTAS
...)

MOTO(
ID_VEHICULO (PK,FK)
...)
Esto es porque toda moto y todo auto son vehículos, tienen motores, los que tienen cilindrada, son de un modelo, una marca y tienen una fecha de alta.
Es decir que todos los atributos que puedan aparecer en todos los tipos de vehículos, deben estar sólo en la tabla padre y no en el resto.
EN las tablas hijas sólo deben aparecer en un caso los atributo propio de un auto (parabrisas, volante, pedales, asientos, puertas, etc), mientras que en la moto únicamente los propios (manubrio, etc.)
Ahora bien, este modelo que propones sólo apunta a una descripción de modelos genéricos, pero no se puede usar así nomás para la administración de datos de motos y autos vendidos, porque cada uno de los vehículos puede tener adicionales, extras y componentes no incluidos en el modelo genérico. En ese caso este modelo es sólo una parte de las relaciones.
En un modelado extenso, para registrar vehículos reales, el detalle de elementos del vehículo si tiene su propia PK, y en ese caso el IDVEHICULO es un atributo no clave de esa entidad (referencia el modelo del vehículo que se vende).

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/02/2013, 11:12
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: ¿Qué es mejor o peor? FK como PK

Creo que está totalmente comprendido gnzsoloyo.

Antes de tu respuesta, me di cuenta de lo que comentas. Veo que si tengo que hacer tablas que están relacionadas con las tablas COCHES o MOTOS, es mejor tener una PK en cada una de ellas para que luego las relaciones con otras tablas sean más lógicas o menos dificultosas.

Muchísimas gracias.

Etiquetas: fecha, modelo, relaciones, tabla
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




La zona horaria es GMT -6. Ahora son las 20:54.