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

[Newbie] Index List

Estas en el tema de [Newbie] Index List en el foro de Mysql en Foros del Web. Buenas, aca tengo un problema en el diseño de la base de datos, y quisiera saber como lo resolveria gente que sabe. Tengo 2 tablas, ...
  #1 (permalink)  
Antiguo 30/10/2008, 11:45
 
Fecha de Ingreso: febrero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
[Newbie] Index List

Buenas, aca tengo un problema en el diseño de la base de datos, y quisiera saber como lo resolveria gente que sabe.

Tengo 2 tablas, que son las siguientes:

Código:
mysql> SELECT * FROM projects;
+----+-----------+--------------------------+---------+
| id | name      | description              | members |
+----+-----------+--------------------------+---------+
|  1 | Project 1 | Descripcion Proyecto Uno | 2,3     |
+----+-----------+--------------------------+---------+
1 row in set (0.00 sec)
Código:
mysql> SELECT * FROM members;
+----+------+---------------------+-------+------------+
| id | nick | name                | group | joined     |
+----+------+---------------------+-------+------------+
|  1 | NULL | Ariel Stuart       |     0 | 2007-02-23 |
|  2 | NULL | Henry Martin |     0 | NULL       |
|  3 | NULL | Eleonora Casano    |     0 | NULL       |
|  4 | NULL | Macaya Marquez        |     0 | NULL       |
|  5 | NULL | Ariel Sanchez       |     0 | NULL       |
+----+------+---------------------+-------+------------+
5 rows in set (0.00 sec)
Como ven, el campo 'members' de la primer tabla es un listado de los 'id' de toda la gente que integra ese proyecto. Por ahora estoy usando un VARCHAR para almacenarlos, y dentro de PHP parseo esa lista delimitada por comas (',') y hago las llamadas correspondientes a la otra tabla.

Mi pregunta es, ¿Hay una forma mas efectiva de hacerlo? Algun tipo de datos, alguna funcion, alguna instruccion.. algo. Se que lo que estoy haciendo no esta del todo bien, aunque funciona, por eso les pregunto.

Saludos!

Última edición por Veehmot; 02/06/2009 a las 17:46
  #2 (permalink)  
Antiguo 30/10/2008, 11:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: [Newbie] Index List

Usa la normalización y haz una estructura relacional eficiente. Algo parecido a esto...

tabla Proyectos
IdProyecto INT PK auto_increment
NombreProyecto


tabla Miembros
IdMiembro INT PK auto_increment
nombremiembro


tabla MiembrosProyectos
IdMiembrosProyecto INT PK auto_increment
IdMiembro FK INT (y lo indexo)
IdProyecto FK INT (y lo indexo)

Naturalmente, todo esto es así en tablas MyISAM. Para tablas INNODB deberás usar la sintaxis adecuada para establecer las relaciones entre las PK y FK

Última edición por jurena; 30/10/2008 a las 12:06
  #3 (permalink)  
Antiguo 30/10/2008, 12:17
 
Fecha de Ingreso: febrero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: [Newbie] Index List

Cita:
Iniciado por jurena Ver Mensaje
Usa la normalización y haz una estructura relacional eficiente. Algo parecido a esto...

tabla Proyectos
IdProyecto INT PK auto_increment
NombreProyecto


tabla Miembros
IdMiembro INT PK auto_increment
nombremiembro


tabla MiembrosProyectos
IdMiembrosProyecto INT PK auto_increment
IdMiembro FK INT (y lo indexo)
IdProyecto FK INT (y lo indexo)

Naturalmente, todo esto es así en tablas MyISAM. Para tablas INNODB deberás usar la sintaxis adecuada para establecer las relaciones entre las PK y FK
Entendi perfectamente, lo que me decis es crear una tercera tabla que contenga las relaciones.
Ahora bien, si ademas de una lista de miembros, tendria una lista de otras tablas? Me quedaria quedando muchisimas tablas conteniendo las relaciones entre otras tablas... ¿Este sistema es el que se usa en grandes base de datos?
  #4 (permalink)  
Antiguo 30/10/2008, 12:55
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: [Newbie] Index List

Hola Veehmot

Ese tipo de relaciones se llaman "muchos a muchos", ahora no todas tus tablas tiene que ser así, eso depende lo que deseas conseguir y como se relacionan unos con otros.
Por eso es recomendable realizar antes una normalización de tus datos para que tengas un modelo y definir dichos aspectos.

Aqui te dejo un link
http://www.mysql-hispano.org/page.php?id=16

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #5 (permalink)  
Antiguo 30/10/2008, 12:57
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: [Newbie] Index List

Ese el el modo de DISEÑAR bases de datos.
Una base de datos puede contener centenares de tablas, y dado el caso un sistema de administración puede estar compuesto de decenas de bases de datos (o tablespaces según el DBMS usado) que se integran y relacionan un un sólo conjunto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 31/10/2008, 06:18
 
Fecha de Ingreso: febrero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: [Newbie] Index List

Muchas gracias! Voy a revisar el link y luego comento mis dudas.
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 00:05.