Ver Mensaje Individual
  #7 (permalink)  
Antiguo 01/12/2011, 13:52
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: duda con consulta mysql

Cita:
Iniciado por Rasec101 Ver Mensaje
Gracias gnzsoloyo si la verdad lo que no queria era duplicar demaciados registros en la base de datos ya que un articulo puede estar relacionado a 20 categorias distintas lo que implica duplicar el registro por las 20 categotegorias
Hola Rasec101:

Independientemente de que un articulo pueda tener 1, 20 o 200 entradas en una tabla, siempre será mejor manejar el modelo que atinadamente te propone gnzsoloyo contra lo que intentas hacer... razones son muchas, pero aquí hay algunas:

1. Uso de índices: en un campo multivaluado no puedes definir índices, por lo tanto no puedes tener una integridad referencial completa, las consultas serían mucho más lentas y las consultas más complejas.

2. Ahorro de espacio. tal vez pienses que es mejor tener 1 registro que 20, pero el desperdicio de memoria es enorme. Para comenzar, con el modelo que planteas deberás asegurarte que la longitud del campo sea lo suficientemente grande como para soportar todos los posible valores, lo más usual sería declarar de tipo varchar con una longitud enorme, pero veamos este caso:

IdArticulo | categoria | titulo | parrafo
1 | 1 | XXXX | XXXXX
2 | 1-2 | XXXX | XXXXX
3 | 1-2-3-4-5-6-7-8-10-11-12-13-14-15-16-17-18-19-20 |XXXX | XXXXX

para este caso tu campo "CATEGORIA" debería tener al menos una longitud de 48 caracteres, para poder soportar la cadena del registro 3, sin embargo, HAY UN DESPERDICIO de 47 caracteres en el registro 1 y de 45 caracteres en el registro 2.
multiplica esto por cada registro. Con el otro modelo NO EXISTE DESPERDICIO DE MEMORIA, y tus relaciones PODRÍAN CRECER SIN LÍMITE, es decir, da lo mismo que tengas 1 relación, 20 o infinito.

3. Manejo de operaciones de (Altas, Bajas, Cambios). Estas operaciones se manejarían de forma "natural", es decir, para altas utilizas INSERT, para bajas DELETE y para modificaciones UPDATE. Con tu modelo por ejemplo una alta podrías manejarla con un INSERT si es que no existe un registro para esa categoría o un UPDATE, deberás verificar que la categoría exista y concatenar el registro que quieres agregar al campo. Lo mismo sucede para las eliminaciones, podrías hacerla con un DELETE la referencia está sola o con un UPDATE (recortando sólo la parte que quieres eliminar).

Podría seguir ennumerando casos, pero creo que es más que evidente por qué no es conveniente que manejes el modelo que propines al principio,

Saludos
Leo.