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

como poner mas de un valor en un campo

Estas en el tema de como poner mas de un valor en un campo en el foro de Bases de Datos General en Foros del Web. Hola!! Estoy utilizando MySQL y tengo una duda. Se puede poner mas de un valor en un mismo campo?? Mi BBDD tiene los siguiente campos: ...
  #1 (permalink)  
Antiguo 19/01/2009, 03:23
 
Fecha de Ingreso: noviembre-2008
Mensajes: 66
Antigüedad: 15 años, 5 meses
Puntos: 0
como poner mas de un valor en un campo

Hola!!

Estoy utilizando MySQL y tengo una duda. Se puede poner mas de un valor en un mismo campo??

Mi BBDD tiene los siguiente campos:
Nombre Apellido SID

Puede haber tuplas que tengan el mismo nombre y apellido y solo cambie el SID. Asiq para no tener que meter dos veces la msma tupla cambiando solo el sid, me gustaría saber como puedo hacer para meter mas de un valor en un mismo campo.

Espero que se haya entendido mi duda.

GRacias
  #2 (permalink)  
Antiguo 19/01/2009, 04:40
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, 5 meses
Puntos: 2658
Respuesta: como poner mas de un valor en un campo

Se entiende, pero estás planteando algo que no cumple con los principios basicos de una base de datos.
Una tupla es un conjunto de dominios relacionados. En ese contexto, el hecho de que haya valores repetitivos en uno o más campos, nada tiene que ver con la posibilidad de simplificar su ingreso. En el caso que tu mencionas, además, estás confundiendo el "campo" donde almacenas, con la entidad representada por la TABLA. El campo es un dato de un registro, y un registro es una instancia de esa entidad, una persona es una instancia de esa entidad representada en la tabla.
Si sigues ese razonamiento, entenderás que el nombre y apellido de una persona no es compartible, por más que sean iguales, simplemente porque estás hablando de personas distintas. El hecho que sus nombres sean iguales es irrelevante. La tupla debe representar sus datos como un todo.
Precisamente por esa razón, porque hay campos cuyos datos son repetitivos, es que cuando se comienza a estudiar bases de datos se hace hincapié en el concepto de atributos comunes, claves, multivaluados y claves primarias.
En cualquier caso, un campo multivaluado es una violación al modelo relacional, por lo que respondiendo tu pregunta inicial, no se puede poner un valor múltiple a un campo, porque su dominio debe ser específico.
Pero en el caso que preguntas lo más correcto es decirte que no te conviene jamás poner un sólo campo para nombre + apellido... porque el día de mañana vas a necesitarlos por separado y deberás ingresarlos manualmente de nuevo (si piensas que no, dime como harás para diferenciar a las personas con un nombre y dos apellidos de las de dos nombres y un apellido). Es impráctico.
Además, si el SID cambia, entonces ese es un campo que debe definirse como PRIMARY KEY, el resto son atributos comunes.
__________________
¿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 19/01/2009, 05:31
 
Fecha de Ingreso: noviembre-2008
Mensajes: 66
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: como poner mas de un valor en un campo

No se si no te he entendido o no me has entendido!!!

Lo que tengo es una BBDD con 3 campos:
-NOMBRE
-APELLIDO
-SID

El sid es diferente para cada persona. El caso es que puede haver dos personas con el mismo nombre y apellido, asiq sera la misma tupla per cambiara el sid. Ej:

MARIO GARCIA 3
MARIO GARCIA 5

Mi pregunta es que en vez de meter dos tuplas, aver si hay alguna manera de meter diferentes valores en un mismo campo, para los casos en los que el nombre y el apellido que se va a incluir ya esten en la BBDD. Asi, no tendria que meter dos veces los mimos datos, y en el campo de SID se meterian todos los sids de las distinas personas. en el ejemplo se me quedariala tupla asi:
Mario Garcia 3,5

Se me entiende ahora? ESto es posible hacerlo ??
  #4 (permalink)  
Antiguo 19/01/2009, 05:52
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, 5 meses
Puntos: 2658
Respuesta: como poner mas de un valor en un campo

1. No me has entendido: Lo que quieres hacer viola los principios conceptuales de una base de datos. No ya los de un lenguaje: Viola el paradigma de una base de datos.
2. Lo que quieres hacer no tiene sentido dentro del modelo relacional, porque precisamente si el SID es una clave candidata, solamente puede usarse en un campo PK. Es absurdo plantear un método que precisamente viole una de las principales reglas del modelo relacional, como es la unicidad de las claves.
3. Hacer lo pretendes, además solamente hará que las consultas de búsqueda se vuelvan ineficientes (los campos multivaluados no se pueden definir como índices).

Si aún así quieres hacer lo que piensas, entonces lo que quieres construir no es una base de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/01/2009, 08:38
 
Fecha de Ingreso: noviembre-2008
Mensajes: 66
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: como poner mas de un valor en un campo

Me estas diciendo que no se peuden hacer los campos multivaluados?? Se que una forma de hacerlos, y se que se hacen, es crear otra tabla con la PK de la anterior y el atributo multivaluado. Mi pregunta era si es necesario crear otra tabla, o hya alguna manera de hacerlo todo en la misma tabla, pudiendo darle mas de un valor.
  #6 (permalink)  
Antiguo 19/01/2009, 09:09
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, 5 meses
Puntos: 2658
Respuesta: como poner mas de un valor en un campo

1. Los campos multivaluados de los DER lógicos no existen en la realidad. Como bien lo notas, implican la creación de otra tabla.
2. Insisto en que lo que estás planteando es incorrecto desde el punto de vista del diseño de bases de datos relacionales, e incorrecto desde el punto de vista del modelo general de las bases de datos.
3. ¿Te has planteado cómo sería la consulta que pidiese un registro de un uusario según el esquema de lo que quieres hacer?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/01/2009, 11:23
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: como poner mas de un valor en un campo

Lo lógico, correcto y eficiente es hacer lo que dice gnzsoloyo, dos tablas. Una de ellas con el nombre, el apellido y un campo id (opcional) y otra tabla con un campo SID y otro que corresponda al id de la tabla anterior.

En cualquier caso, respondiendo estrictamente a tu pregunta, sí se puede hacer, pero además de ser una chapuza no es recomendable ni provechoso. La manera de proceder sería la siguiente:

El campo SID sería un VARCHAR cuyo tamaño dependería del número máximo de SID que puedan corresponder a cada registro, y su valor sería una cadena de los SID concatenados separados por comas (por ejemplo). Mediante código se extraería de ese campo los diferentes SID del registro.

Esto presenta varios problemas:
1 - El campo VARCHAR tiene que tener un límite de caracteres por lo tanto estás limitando el número de veces que se puede repetir un nombre-apellido .
2 - En los registros con un solo SID, estás malgastando espacio al haber definido el campo como VARCHAR de muchos caracteres y utilizar solo uno o dos.
3 - Necesitas codificar un script que extraiga del dato almacenado en el campo los diferentes SID que están concatenados y a la hora de almacenar, tendrás que construir la cadena de SID separados por comas.
4 - Para hacer un select por SID, tendrás que hacer un LIKE en el WHERE lo cual resulta menos eficiente que una búsqueda por un PK o un campo numérico.
5 - Si quieres eliminar un SID, en lugar de hacer un DELETE FROM que es lo que harías de la otra forma, tendrías que hacer un SELECT y un UPDATE para modificar el campo correspondiente.
6 - Etc.

En definitiva, no tiene sentido hacerlo a no ser que se trate de un caso raro, raro, raro, raro... Y si se da la situación de que hacer esto sea lo mejor me gustaría que me explicases la situación en la que se da esta circunstancia porque me resulta dificil de imaginar.

Un saludo
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 11:08.