Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/12/2013, 08:30
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Calve foránea igual a clave primaria

Cita:
Iniciado por kabe_jrr Ver Mensaje
Hola amigos:

Me gustaría saber si tiene sentido que en una tabla se pongan claves foráneas que están incluidas en la primaria. Es decir, algo como esto:

Código:
CREATE TABLE Pedido ( 
idPedido INT(4) NOT NULL AUTO_INCREMENT, 
idCliente INT(4) NOT NULL, 
cifRestaurante VARCHAR(9) NOT NULL, 
primer_plato VARCHAR(50), 
segundo_plato VARCHAR(50), 
postre VARCHAR(50), 
precio FLOAT(3,2),
PRIMARY KEY (idPedido, idCliente, cifRestaurante),
FOREIGN KEY(idCliente) REFERENCES Cliente(idCliente)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(cifRestaurante) REFERENCES Restaurante(cif)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
Donde los campos "idCliente" y "cifRestaurante" que están en PRIMARY KEY, a su vez estén como FOREIGN KEY (referenciando a otras tablas de la base de datos.

¿Tiene sentido? Muchísimas gracias de antemano!!
Tienen perfecto sentido si es una relación entre dos o más entidades, donde existe una dependencia funcional. En tu caso habría que ver el modelo un poco más compelto para saber si está bien diseñao pero la base es correcta.
Un mismo restaurante y un cliente pueden tener N pedidos, cada uno de los cuales tiene su discriminante, que es el ID pedido.
Lo que no podrá existir es que se repita el mismo IDPEDIDO para el mismo cliente y restaurante.
Personalmente le veo el defecto de que podrías usar el mismo IDpedido paras más de una dupla de Cliente+Restaurante, por lo que me da la impresión que podría existir un error de diseño. Pero sin ver el conjunto completo y saber cuáles son las reglas de negocio aplicables a los pedidos, no se puede decir mucho má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)