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

Usar SET o ENUM, Que tan viable es???...

Estas en el tema de Usar SET o ENUM, Que tan viable es???... en el foro de Mysql en Foros del Web. Hola, a todos los foreroes, nuevamente molestando, quisiera hacerles una pregunta a criterio personal o de desarrollo. Estoy trabajando en una bd, para un censo, ...
  #1 (permalink)  
Antiguo 26/07/2007, 15:53
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 20 años
Puntos: 4
Usar SET o ENUM, Que tan viable es???...

Hola, a todos los foreroes, nuevamente molestando, quisiera hacerles una pregunta a criterio personal o de desarrollo. Estoy trabajando en una bd, para un censo, y he llegado a una pregunta en la cual puedo almacenar de una a mas respuestas, dependiendo del usuario, ejemplo:
Pregunta: Con que servicios cuentas en Casa?
Opciones:
1. Luz
2. Agua
3. Desague
4. Telefono
5. Cable
6. Otros

como se sabe, la persona puede marcar desde 0 opciones a todas. Y he aqui donde viene mi pregunta, en un desarrollo normal se tendria que crear los 6 campos para estas opciones, lo cual conllevaria a que estas opciones sean estaticas y por lo cual si mas adelante quisieramos agregar una opcion mas tendriamos que modificar la estructura de la tabla. ejemplo:
Agregamos la opcion Internet:

1. Luz
2. Agua
3. Desague
4. Telefono
5. Cable
6. Internet
7. Otros

Como se aprecia ahora tenemos 7 opciones, y lo hemos logrado agregando un atributo mas a nuestra tabla. Pero existe una solucion revisando los tipos de datos de MySQL, encontre que existen dos tipos de datos llamados ENUM, y SET, los cuales pueden guardar un rango de valores como si fuera uno, segun entendi. siendo asi veo yo, que creando un solo campo denominado servicios por ejemplo, puedo almacenar toda la lista anteriormente mencionada, e inclusive si la lista cambia todo lo podria almacenar en un mismo campo, claro segun lei maximo 64 valores. Siendo este una solucion viable aparentemente en teoria, viene el problema de la practica, al momento de programar (PHP), tendria que utilizar una funcion que me desglozara estos valores individualmente (explode), y asi poder mostrarlos individualmente en una interfaz y si quiero actualizarla, segun veo se tendria que hacer el mismo proceso a la inversa. La pregunta es::: que tan viable es hacer esto y que problemas puede ocasionar utilizar esta solucion, seguro que a alguien ya se le ha ocurrido hacer esto, y me gustaria que me de su opinion sobre este detalle. Bueno gente forera espero sus respuestas y sus consejos en esta mi encruzijada. nos vemos...
Me olvidaba tener en cuenta que al hacer esto n oexistiria relacion entre la tabla donde se encuentran los servicios, con la de las personas...

Última edición por Bellenger; 26/07/2007 a las 16:33 Razón: me falto...
  #2 (permalink)  
Antiguo 03/08/2007, 09:47
 
Fecha de Ingreso: junio-2005
Ubicación: Trujillo - Peru
Mensajes: 31
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: Usar SET o ENUM, Que tan viable es???...

en PostgreSQL hay un campo parecido tipo array, donde puedes almacenar los datos (a esto se denomina Post-relacional) .. alguna vez lo utilicé para guardar números de recibos en un sistema académico donde el alumno pagaba sus cuotas y aveces traían más de un recibo, porque pagaban por partes.

Si es factible hacer eso .. supongo que debe ser parecido en MySQL

Saludos
  #3 (permalink)  
Antiguo 03/08/2007, 13:25
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 20 años
Puntos: 4
Re: Usar SET o ENUM, Que tan viable es???...

Hola gracias por responder, si en MySQL el SET, y ENUM permiten guardar varos valores separados por com claro, pero no de forma de array, en fin, pero sengun teoria de normalizacion veo que no es factible por que no habria relacion en tablas, basicamente me gustaria orientacion ahi, si alguien lo ha hecho antes como lo hizo, entiendo que si deseo trabajar asi las tablas no deberian estar relacionadas, se que se dan estos casos, pero alguna manera por ahi ha de haber----
  #4 (permalink)  
Antiguo 04/08/2007, 10:47
 
Fecha de Ingreso: mayo-2007
Ubicación: España
Mensajes: 147
Antigüedad: 17 años, 6 meses
Puntos: 3
Re: Usar SET o ENUM, Que tan viable es???...

Si las opciones van a variar en el tiempo (tanto en la descripción como en el número) la mejor opción sería crear una tabla externa. Por ejemplo:

tabla users:
id (clave primaria)
name

tabla options:
id (clave primaria)
user_id
name

si quiero saber las opciones que ha marcado el usuario "101", por ejemplo, haría lo siguiente:
Código:
select
  name
from options
where user_id = 101
  #5 (permalink)  
Antiguo 14/08/2007, 08:02
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 21 años
Puntos: 2
Re: Usar SET o ENUM, Que tan viable es???...

Para tu caso los campos set o enum no te sirven.
Vas a tener que hacer una relación entre tres tablas, como te muestro en esta gráfica.



Tabla personas:
Los datos de la persona en cuestión.

Tabla servicios:
Los nombres de los servicios que se te ocurran.

Tabla personas_servicios:
Acá ponés el id de la persona encuestada y el id del servicio que tiene por cada servicio que tenga.

luego, con una consulta del tipo:
Código:
select s.nombre
from servicios as s, personas_servicios as ps
where ps.persona_id = 10 and ps.servicio_id = s.id;
Aclaración: 10 sería el id de la persona pepe, por ejemplo. y con esa consulta sabrías qué servicios tiene pepe.

Cualquier cosa preguntame!
Saludos.

Última edición por nachopro; 14/08/2007 a las 08:07
  #6 (permalink)  
Antiguo 04/04/2008, 22:27
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años
Puntos: 69
Re: Usar SET o ENUM, Que tan viable es???...

Mm yo también pensaba utilizar ete tipo de dato, solo que en realidad no se como insertar las opciones. pOR EJEMPLO:

CREATE TABLE Bike
(
ID SMALLINT UNSIGNED,
Model VARCHAR(40),
Color ENUM('1', '2', '3', '4'),
Options SET('rack', 'light', 'helmet', 'lock')
);

SI QUISIERA INSERTAR 'RACK Y 'LIGHT' COMO OPCIONES como sería el query? o me conviene mejor manejarlo por numeros y relacionarlas a otra tabla que contenga su id y su respectiva opción.??
  #7 (permalink)  
Antiguo 07/04/2008, 05:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Re: Usar SET o ENUM, Que tan viable es???...

Bellenger y Monimo,
la respuesta a vuestra pregunta, por lo que se refiere a MysQL, os la ha dado Nachopro. Eso será lo mejor. Pero vuestras demás dudas corresponden a PHP. Es decir, cómo se carga lo que queréis; pues, por ejemplo, con inputs de tipo radio de HTML y con la programación adecuada en PHP para hacer las consultas de inserción.
Imaginemos que tenéis varios inputs radio, uno para cada uno de los servicios, si se selecciona el de luz, el programa PHP cargará en la tabla intermedia que os ha puesto Nachopro los FK de cliente y de servicio de agua.
Y así para todos los servicios.
Si no se marca un servicio, no se insertará nada por lo que a ese servicio se refiere.
Pero esto debéis preguntarlo en los foros de HTML y PHP.
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 22:57.