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

Meter muchas variables en un solo campo

Estas en el tema de Meter muchas variables en un solo campo en el foro de Mysql en Foros del Web. Hola a todos, Mi duda es simple. Tengo un select multiple en un formulario. El caso es que cuando recibo la informacion del select paso ...
  #1 (permalink)  
Antiguo 22/04/2012, 05:25
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 16 años, 11 meses
Puntos: 19
Meter muchas variables en un solo campo

Hola a todos,

Mi duda es simple. Tengo un select multiple en un formulario. El caso es que cuando recibo la informacion del select paso por todo su array y creo una cadena tipo:

$categorias='1;2;3;4;5;';

Y simplemente la inserto en la columna "categorias".

¿Hago mal?. Luego simplemente usaria un like para consultar los productos de una determinada categoria.

Lo llevo haciendo mucho tiempo, y ahora me ha entrado la duda de si es una burrada.


¿Existe una forma igual de sencilla pero mas correcta?.
  #2 (permalink)  
Antiguo 22/04/2012, 07:44
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: Meter muchas variables en un solo campo

Cita:
Lo llevo haciendo mucho tiempo, y ahora me ha entrado la duda de si es una burrada.
En realidad, lamento decirtelo, es una burrada.
Pero no eres el único en preguntar sobre este asunto, ni tampoco en hacer de entrada semejante tontería. Tal vez eres el primero en preguntar si es correcto, antes de seguir adelante.

Mira, el tema es simple: Lo que estás haciendo es lo que se denomina "campo multivaluado" y están totalmente prohibidos en las bases de datos relacionales.
Usar ese tipo de campos implica que la persona no conoce los fundamentos del modelo entidad-relación, lo que en este campo (Bases de Datos), es una falencia extremadamente problemática.
Lo lamento, pero es así.
No quier explayarme demasiado, porque para explicar las razones de por qué no se admiten, requieriría hacerte una explicación muy larga para fundamentarla. Por ello te remito a que leas los fundamentos del modelo Entidad-Relación y Bases de Datos Relacionales en algún tutorial, o directamente en Wikipedia.

En lo esencial, la presencia de un campo que puede contener múltiples valores implica que tienes una relación de cardinalidad 1:N o N:N entre dos relaciones (tablas).
Si la relación es 1:N, entonces la segunda tabla debe contener como parte de su PK, la misma PK de la tabla origen.
Si la relación es N:N, entonces debe haber una tercera tabla que vincule cada registro de la primera tabla, con cada uno de los que está relacionado de la segunda tabla. Esta tercera tabla se suele mencionar como "tabla relacional", y su PK está formada por las PK de cada una de las tablas. Ese es el modo correcto de hacerlo, porque es el único admitido (los fundamentos aprenden al cursar la materia BB.DD.) por el paradigma relacional.

Si insistes en usar tu "solución" con un campo multivaluado, te advierto que tendrás enormes problemas de consistencia de datos, integridad referencial, sin contar con la optimización de consultas (en las que no te resultará útil usar LIKE por una serie de condiciones que son largas de ejemplificar), etc.
Como "solución", es habitual en los que se inician en esto, pero como te digo, lo único que te traerá serán dolores de cabeza.

Empieza por tratar de entender cómo se diseña una base. Luego veremos cómo se implementa lo que debes ingresar, dentro de un modelado correcto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/04/2012, 20:02
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 16 años, 11 meses
Puntos: 19
Respuesta: Meter muchas variables en un solo campo

Hola gnzsoloyo,

Jo!, me has metido el miedo en el cuerpo, :D. En alguna BB.DD. he usado una "tabla puente", creo que las llaman asi. No se si te refieres a ello con "tabla relacional". La verdad es que llevo muchos años haciendo bases de datos para mis cosillas y he usado mucho esta burrada del campo multivaluado. Jamas voy a volver ha usarlo lo prometo!.

...

He estado leyendo algun tutorial sobre "FOREIGN KEY" menudo bomba, me he quedado soprendido de lo increible que es. Acabo de estar haciendo pruebas creando una nueva base de datos relacionando dos simples tablas usando FOREIGN KEY y ha sido facil. Este punto comprendido.

...

Pero vamos a mi problema serio, que es tener N:N o M:M. Entonces lo que tengo que hacer es crear 3 tablas. Algo como:

Tabla categorias:
  • id[int PK]
  • nombre [varchar(200)]
Tabla relacional
  • categoria[int]
  • producto [int]
Tabla productos
  • id[int PK]
  • nombre [varchar(200)]
¿Asi la estructura estaria bien?. ¿El campo varchar es el adecuado para nombres no muy largos?.

...

Y por ultimo el contenido:

Tabla categorias:
  • 1 - Mujer
  • 2 - Hombre
  • 3 - Niño
Tabla relacional
  • 1 - 1
  • 1 - 2
  • 1 - 4
  • 2 - 3
  • 2 - 4
  • 3 - 4
Tabla productos
  • 1 - Pañuelo de mujer
  • 2 - Zapatilllas de mujer
  • 3 - Camisa de hombre
  • 4 - Cordones

¿Hago algo mal?, ¿en este caso tambien usarias FOREIGN KEY?.

Siento preguntar cosas tan garrafales, pero es que me acabas de quitar la venda de los ojos, o como se diga.

:D

Última edición por salbatore; 22/04/2012 a las 23:32

Etiquetas: meter, muchas, select, variables, campos
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 05:35.