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

ayuda en la base de datos

Estas en el tema de ayuda en la base de datos en el foro de Mysql en Foros del Web. algunas tablas de la base de datos Oficina id nombre 1 x 2 xx 3 xxx 4 Contabilidad 5 sistemas Usuario id nombre cont idoficina ...
  #1 (permalink)  
Antiguo 14/09/2010, 12:44
 
Fecha de Ingreso: julio-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
ayuda en la base de datos

algunas tablas de la base de datos
Oficina
id nombre
1 x
2 xx
3 xxx
4 Contabilidad
5 sistemas

Usuario
id nombre cont idoficina
1 Andres 1 5
2 Yilmer 1 1
3 Hailey 1 2
4 Daniela 1 2
5 Marcela 1 5


tipo documento
id nombre
1 permiso
2 gestion
3 jjj
4 rrr


necesito enlazar el usuario con el tipo de documento ejemplo que el usuario con id=1 pueda crear permisos, gestion o que el usuario con id=2 pueda solo aceder al tipo de documento jjj

gracias
exitos
  #2 (permalink)  
Antiguo 17/09/2010, 16:47
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: ayuda en la base de datos

Hijole... complicado está entender. Lo que necesito saber es bajo qué criterios quieres que se enlacen las dos tablas o, mejor dicho, bajo qué criterios quieres que se relacionen los registros entre ambas tablas; es que no entiendo ninguna lógica con tus 2 ejemplos
  #3 (permalink)  
Antiguo 18/09/2010, 17:18
 
Fecha de Ingreso: febrero-2010
Mensajes: 49
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda en la base de datos

Hasta donde entendi deberias crear un campo en usuario entero en donde guardaras algun ID tipo documento y enlazaras la tabla de uno a uno la tabla Usuario con Tipo de documento de manera que si en campo ID_doc (ejemplo) de Usuario hay un 1 y en la tabla Tipo_Documento el Id 1 = Permiso ese usuario solo podra acceder o modificar, lo que pretendas hacer, solo permisos.

Corrigeme si me equivoco. Salu2.
  #4 (permalink)  
Antiguo 20/09/2010, 08:40
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: ayuda en la base de datos

Ahora se me ocurre que para que enlaces esas dos tablas, deberías crear otra tabla con una columna que contenga el ID del usuario conjuntamente con otra columna que contenga un documento al que tenga permiso.
Pueden haber varios registros con misma ID de usuario pero siempre deben haber diferentes valores para la columna 2 del mismo usuario obviamente...
Luego debes consultar qué permisos tiene cada usuario, una consulta sencilla. Si fuese la tabla 'Permisos' fuese así con cierta información de ejemplo:

Creando una tabla llamada 'permisos' donde tenga las columnas descritas al principio de este mensaje te comparto algo interesante:

Esta consulta te provee el nombre del usuario, el código de la oficina a la que pertenece y el código del tipo de documento vinculado:
Código MySQL:
Ver original
  1. select u.nombre, u.idoficina, p.documento from permisos p left join usuario u on p.usuario=u.id;


Y si no quieres los códigos sino los nombres de los mismos:
Código MySQL:
Ver original
  1. select t2.usuario, t2.oficina, d.nombre 'documento' from documento d right join (select t1.nombre 'usuario', o.nombre 'oficina', t1.documento from oficina o right join (select u.nombre, u.idoficina, p.documento from permisos p left join usuario u on p.usuario=u.id) t1 on t1.idoficina=o.id) t2 on t2.documento=d.id;

La velocidad de consulta es óptima, probada con DESCRIBE. Espero que esto sea lo que buscas. Un saludo y Carpe Diem

Última edición por pancho2413; 20/09/2010 a las 11:47
  #5 (permalink)  
Antiguo 20/09/2010, 15:14
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: ayuda en la base de datos

Tengo otra solución más rápida que obtiene el mismo resultado que el mensaje que posteé anteriormente:

Código MySQL:
Ver original
  1. select uu.nombre 'usuario', oo.nombre 'oficina', dd.nombre 'documento'  from oficina oo, usuario uu, documento dd, permisos pp where oo.id=uu.idoficina and pp.documento=dd.id and uu.id=pp.usuario;

Es 6 veces más rápido y es más corto.

Además de ésta, otra diferencia es la seguridad en la información presentada. En el anterior, si un usuario es eliminado, se puede fácilmente verificar si existen permisos flotantes sin razón (aparecen null en información del usuario que adquirió permisos). En este último no. La utilidad del anterior va para áreas evaluativas como auditorías, mientras este último como consultivas nada más, como reportes gerenciales.

Última edición por pancho2413; 20/09/2010 a las 15:30

Etiquetas: Ninguno
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 12:07.