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

Análisis de modelo de datos

Estas en el tema de Análisis de modelo de datos en el foro de Mysql en Foros del Web. Buenos Días developers, Estoy realizando un aplicativo Saas tipo Podio ( http://podio.com ) y ando un poco encajonado en el modelo de datos. No tengo ...
  #1 (permalink)  
Antiguo 19/09/2014, 05:15
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Análisis de modelo de datos

Buenos Días developers,

Estoy realizando un aplicativo Saas tipo Podio (http://podio.com) y ando un poco encajonado en el modelo de datos.

No tengo muchos conocimientos respecto a el modelo E/R y quisiera que lo echaseis un vistazo para decidme si esta correcto.



El fin del aplicativo es el siguiente:
  1. Cualquier usuario puede dar de alta varias organizaciones.
  2. Las organizaciones están divididas en varios espacios de trabajo
  3. Los usuarios se unen o se les invita a los espacios de trabajo.
  4. Los usuarios tienen asignado un grupo u otro dependiendo del espacio de trabajo en el que estén trabajando.
  5. Cada grupo tiene una serie de roles/permisos.

Intento buscar la query perfecta para unir todos los datos relacionados con un usuario, pero con mis capacidades en sql me es imposible hacerlo de una vez sin hacer una barbaridad.
  #2 (permalink)  
Antiguo 19/09/2014, 05:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Analisis de modelo de datos

Cita:
unir todos los datos relacionados con un usuario
TODOS los datos de este modelo estan relacionados con los usuarios excepto la tabla campos que no esta relacionada con nada.

SELECT * FROM usuarios u <opcion> JOIN tablaX tX ON u.campocomun=tX.campocomun
<opcion> JOIN tablaY tY ON u.campocomun=tY.campocomun
....

opcion ---> sintaxis de join

En la clausula ON puedes declarar relaciones entre usuarios y cualquier otra tabla y entre cualquier otra tabla entre si....

Ahora bien es mucho mejor cargar los datos que necesites cada vez y no trabajar con un conjunto de tados exahustivo que no vayas a usar completo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 19/09/2014, 07:59
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Analisis de modelo de datos

Cita:
Iniciado por quimfv Ver Mensaje
TODOS los datos de este modelo estan relacionados con los usuarios excepto la tabla campos que no esta relacionada con nada.

SELECT * FROM usuarios u <opcion> JOIN tablaX tX ON u.campocomun=tX.campocomun
<opcion> JOIN tablaY tY ON u.campocomun=tY.campocomun
....

opcion ---> sintaxis de join

En la clausula ON puedes declarar relaciones entre usuarios y cualquier otra tabla y entre cualquier otra tabla entre si....

Ahora bien es mucho mejor cargar los datos que necesites cada vez y no trabajar con un conjunto de tados exahustivo que no vayas a usar completo.
Gracias por tu respuesta quimfv,

Código SQL:
Ver original
  1. SELECT usuarios.UsuarioId,
  2.        UsuarioNombre,
  3.        UsuarioFechaRegistro,
  4.        UsuarioIp,
  5.        UsuarioCorreo,
  6.        UsuarioEstado,
  7.        UsuarioNotificacion,
  8.        UsuarioCorreo,
  9.        GROUP_CONCAT(CONCAT(usuarios_espacios.EspacioId, ':', usuarios_espacios.GrupoId)) AS UEspacios,
  10.        GROUP_CONCAT(CONCAT(espacios.EspacioId, ':', espacios.OrganizacionId, ':', espacios.EspacioNombre, ':', espacios.EspacioEstado)) AS IEspacios,
  11.        GROUP_CONCAT(CONCAT(organizaciones.OrganizacionId, ':', organizaciones.OrganizacionNombre, ':', organizaciones.OrganizacionDB)) AS IOrganizaciones
  12. FROM (`usuarios`)
  13. LEFT JOIN `usuarios_espacios` ON `usuarios_espacios`.`UsuarioId` = `usuarios`.`UsuarioId`
  14. LEFT JOIN `espacios` ON `espacios`.`EspacioId` = `usuarios_espacios`.`EspacioId`
  15. LEFT JOIN `organizaciones` ON `organizaciones`.`OrganizacionId` = `espacios`.`OrganizacionId`
  16. WHERE `usuarios`.`UsuarioId` = 1
  17. GROUP BY `UsuarioId`

Esta query me saca casi todo y hasta ahora lo necesario:

Código HTML:
array(1) {
  [0]=>
  object(stdClass)#20 (10) {
    ["UsuarioId"]=>
    string(1) "1"
    ["UsuarioNombre"]=>
    string(13) "Nombre de ejemplo"
    ["UsuarioFechaRegistro"]=>
    string(19) "2014-09-04 00:00:00"
    ["UsuarioIp"]=>
    NULL
    ["UsuarioCorreo"]=>
    string(25) "[email protected]"
    ["UsuarioEstado"]=>
    string(1) "0"
    ["UsuarioNotificacion"]=>
    string(1) "0"
    ["UEspacios"]=>
    string(7) "1:1,2:1"
    ["IEspacios"]=>
    string(48) "1:1:Área Comercial:0,2:1:Área de Producción:0"
    ["IOrganizaciones"]=>
    string(55) "1:Ejemplo S.L:839979925874,1:Ejemplo S.L:839979925874"
  }
}
En otros desarrollos ya me ha ocurrido que cuando concatenas valores en una columna y hay muchos resultados a mostrar, ocurre que una columna no puede almacenar tantos datos y pega error.

En el caso de UEspacios, IEspacios e IOrganizaciones esto podria ocurrir. ¿Que otra manera podría haber para que esto no ocurriese? Si una persona se une a muchisimos espacios, o crea multitud de organizaciones habra un momento en el que los datos no quepan en la columna concatenada.

Se que hay un metodo para extender el tamaño de datos que puede almacenar una columna, pero no veo que sea la mejor opción.

Etiquetas: analisis, modelo, sql
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 03:16.