Foros del Web » Programando para Internet » PHP »

Modelado de clases y Bases de datos relacionales

Estas en el tema de Modelado de clases y Bases de datos relacionales en el foro de PHP en Foros del Web. Hola, Tengo un problema de diseño, no sé exactamente cuál sería la forma más correcta de hacerlo. Estoy programando bajo Zend Framework. Resumidamente tengo las ...
  #1 (permalink)  
Antiguo 17/06/2013, 15:36
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Modelado de clases y Bases de datos relacionales

Hola,

Tengo un problema de diseño, no sé exactamente cuál sería la forma más correcta de hacerlo.

Estoy programando bajo Zend Framework.

Resumidamente tengo las siguientes tablas:

cliente (id, nombre, apellido)
reserva (id, precio, id_cliente)
Código PHP:
clase MyMapper {
 
// ...
}

clase Cliente extends MyMapper {
 private 
$_id;
 private 
$_nombre;
 private 
$_apellido;

 public static function 
getById($id){
  
//
 
}
}

clase Reserva extends MyMapper{
 private 
$_id;
 private 
$_id_cliente;
 private 
$_precio;

 public function 
getNombreCliente(){
  
$cliente Cliente::getById($this->_id_cliente);
  return 
$cliente->nombre;
}

Mi pregunta es... ¿es correcto (o lo más correcto) poner la función getNombreCliente() dentro de la clase "Reserva"?

¿Es correcto añadir una propiedad llamada "$_nombre_cliente", por ejemplo, dentro de la clase "Reserva"?

Mi duda es si la clase Reserva debe tener tantas y las mismas propiedades que la tabla Reservas o si esto, desde un punto de vista de la buena programación, no es necesario.

Espero haberme explicado.
Saludos y gracias.
  #2 (permalink)  
Antiguo 17/06/2013, 17:52
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Modelado de clases y Bases de datos relacionales

La mejor practica para llevar a cabo este modelado es que todo lo que pertenece al cliente, va con el cliente, todo lo que pertenece a la reserva, a la reserva, ahora, ponte a pensar en la relación, un cliente puede tener muchas reservas, y una reserva esta destinada a un unico cliente, recuerda tambien que un cliente puede o no tener una reserva.

Puedes extender la Reserva a Cliente en lugar de a MyMapper, asi cuando declares un objeto de la clase Reserva, esta podra utilizar las funciones del cliente.

No tengo mucho conocimiento como se maneja el Framework Zend pero a mi experiencia con clases es lo que puedo recomendar.
  #3 (permalink)  
Antiguo 17/06/2013, 20:52
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Modelado de clases y Bases de datos relacionales

Yo modelaria todo (graficamente) primero por ejemplo con MySqlWorkbench que es excelente y gratis

Luego usaria el modelo.... intentar modelar al voleo parece ser la moda ahora con como estan usando el patron ActiveRecord y la verdad no lo comparto.

Me quedo con modelar primero: "primero pienso, luego existo"
__________________
Salu2!
  #4 (permalink)  
Antiguo 18/06/2013, 07:12
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Modelado de clases y Bases de datos relacionales

Cita:
Iniciado por alvidales Ver Mensaje
La mejor practica para llevar a cabo este modelado es que todo lo que pertenece al cliente, va con el cliente, todo lo que pertenece a la reserva, a la reserva, ahora, ponte a pensar en la relación, un cliente puede tener muchas reservas, y una reserva esta destinada a un unico cliente, recuerda tambien que un cliente puede o no tener una reserva.

Puedes extender la Reserva a Cliente en lugar de a MyMapper, asi cuando declares un objeto de la clase Reserva, esta podra utilizar las funciones del cliente.

No tengo mucho conocimiento como se maneja el Framework Zend pero a mi experiencia con clases es lo que puedo recomendar.
MyMapper por cuestiones de diseño lo tengo que extender sí o sí.... Extender Reserva a Cliente no me termina de convencer.

Cita:
Iniciado por Italico76 Ver Mensaje
Yo modelaria todo (graficamente) primero por ejemplo con MySqlWorkbench que es excelente y gratis

Luego usaria el modelo.... intentar modelar al voleo parece ser la moda ahora con como estan usando el patron ActiveRecord y la verdad no lo comparto.

Me quedo con modelar primero: "primero pienso, luego existo"
El diseño de la base de datos está perfectamente modelado, fue lo primero. El problema es el diseño de los Modelos en PHP y las relaciones entre las tablas de la base de datos. No es un problema de que no sepa hacerlo sino que desde el punto de vista conceptual me gustaría hacerlo bien. En Zend suelen aplicar el patrón ActiveRecord pero a mi no termina de gustar.

Yo querría leer el nombre del cliente de una reserva de una manera elegante: $booking->getCustomerName(); teniendo en cuenta que en la tabla Reservas sólo tendré el id del cliente y que su nombre estará en la tabla Cliente.

Saludos.

Etiquetas: bases, clases, modelado, 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 18:17.