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

Cómo puedo plantear esto del mejor modo?

Estas en el tema de Cómo puedo plantear esto del mejor modo? en el foro de Bases de Datos General en Foros del Web. Saludos! Ando dando vueltas a las bases de datos y tengo alguna duda. Imaginad que tengo estas entidades: USUARIOS { id_usuario , nombre, email} ARTICULOS ...
  #1 (permalink)  
Antiguo 01/08/2015, 13:02
Avatar de Jorgens  
Fecha de Ingreso: agosto-2005
Ubicación: Cartagena, Murcia, España
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 1
Cómo puedo plantear esto del mejor modo?

Saludos! Ando dando vueltas a las bases de datos y tengo alguna duda. Imaginad que tengo estas entidades:

USUARIOS {id_usuario, nombre, email}
ARTICULOS {id_articulo, id_usuario, titulo, contenido} (los usuarios escriben artículos)
DIRECCIONES {id_direccion, id_usuario, calle, ciudad, piso, puerta, escalera, codigo postal} (los usuarios tienen direcciones)
MENSAJES {id_mensaje, id_usuario, mensaje, dirigido_a, fecha} (los usuarios se escriben mensajes unos a otros)

Si quisiera dar permiso a algunos usuarios para que puedan editar algunos campos de algunas de esas tablas, por ejemplo, que los autores de sus artículos puedan editarlos, o cada usuario editar su dirección, o algún moderador editar ciertos mensajes o ciertos artículos.... podría plantear esta tabla PERMISOS que os pongo abajo? o se os ocurre otro modo?

PERMISOS {id_permiso, id_usuario, tabla, identificador} (varios usuarios pueden editar algunos campos de algunas de las entidades existentes)

De ese modo, podría hacer que el usuario id_usuario = 00000123 pudiera editar el campo de la tabla MENSAJES que tiene identificador id_mensaje = 0003455, y que pudiera editar también de la tabla DIRECCIONES el campo con id_direccion = 0341232, etc, etc, sin más que añadiendo estas tullas en esa entidad:

id_permiso id_usuario tabla identificador
000000001 00000123 MENSAJES 0003455
000000002 00000123 DIRECCIONES 0341232

Qué tal lo veis? Lo que me mosquea es meter nombre de entidades en esos campos. Funcionar funciona bien, pero a la hora de esbozar las entidades gráficamente y dibujar las líneas de relación queda un poco raro.

Un abrazo y muchas gracias por molestaros!!!! Buen verano
__________________
Nos leemos
Jorgens Nos leemos!http://www.comocreartuweb.com

Última edición por Jorgens; 01/08/2015 a las 13:32
  #2 (permalink)  
Antiguo 01/08/2015, 13:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo plantear esto del mejor modo?

para empezar esta mal normalizada la tabla de permisos, podrias mejor tener un catalogo con los nombres de tablas que vas a usar y en tu tabla permisos nada mas relacionar los id's, ahora esos permisos van a ser sobre tus tablas de la base de datos?? o solo sobre las entidades o paginas que quieres manejar???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 01/08/2015, 13:56
Avatar de Jorgens  
Fecha de Ingreso: agosto-2005
Ubicación: Cartagena, Murcia, España
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Cómo puedo plantear esto del mejor modo?

Hey, gracias Libras por contestar!

Por qué motivo está mal normalizada la tabla PERMISOS?

No estoy seguro de que crear otra entidad con los nombres de las tablas me sea útil. Algo así, dices?

TABLASMODIFICABLES
id_tablamodificable nombredelatabla
001 USUARIOS
002 ARTICULOS
003 DIRECCIONES
004 MENSAJES

La entidad PERMISOS me quedaría así:

id_permiso id_usuario id_tablamodificable identificador
000000001 00000123 004 0003455
000000002 00000123 003 0341232

No logro ver qué gano con esto. Así sí estaría normalizada? Te importa alumbrarme?

Tampoco entiendo tu pregunta con: "ahora esos permisos van a ser sobre tus tablas de la base de datos?? o solo sobre las entidades o paginas que quieres manejar???", discúlpame. Son permisos que algunos usuarios tendrán para modificar algunos valores. Por ejemplo, si un usuario visita su perfil, o un artículo o mensaje suyo, verá un botón de "MODIFICAR" si tiene ese permiso otorgado mediante esa tabla. Si no lo tiene (si no es administrador ni el mensaje o artículo o dirección es la suya) no le aparece ese botón. Quizás esto te ayuda a ayudarme?

Hey, muchas gracias por tu atención.
__________________
Nos leemos
Jorgens Nos leemos!http://www.comocreartuweb.com
  #4 (permalink)  
Antiguo 01/08/2015, 14:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo plantear esto del mejor modo?

se supone que una base de datos tiene que estar hasta 3 forma normal, la normalizacion no se como explicarla jejeje, pero aqui hay un link

http://cnx.org/contents/aad66c2e-2f9...e-de-normaliza

el punto es que tener valores repetidos en una tabla(por ejemplo hibas a repetir el nombre de la tabla por cada registro) no esta bien en su lugar es mejor tener esos valores en una tabla y relacionarlos por medio de un Id.

Mi segunda duda era que podrias manejar los permisos a nivel base de datos, pero no creo que cada uno de tus usuarios vaya a tener un login para la base de datos correcto???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 01/08/2015, 14:11
Avatar de Jorgens  
Fecha de Ingreso: agosto-2005
Ubicación: Cartagena, Murcia, España
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Cómo puedo plantear esto del mejor modo?

Si, he leido sobre normalización, pero no se cuál de las reglas dices que no cumple lo que expongo. Sabrías decirme? Tengo entendido que no puedo repetir tuplas (todos los valores de una línea), pero no es el caso. El valor de la tabla se repite en algunos registros, si, pero va variando claro. Además, ahora en lugar de repetir los nombres de las tablas, repetiría sus identificadores, je je je, de modo que no hemos arreglao mucho, je je je, verdad?

Respecto a la segunda duda, no, los usuarios no es que tengan un permiso con login a la tabla no. Un usuario se logea en el sistema y simplemente le aparece un botón que le permite modificar ciertos datos, los que tiene con permiso según esta tabla que propongo.

Gracias again!
__________________
Nos leemos
Jorgens Nos leemos!http://www.comocreartuweb.com
  #6 (permalink)  
Antiguo 01/08/2015, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo plantear esto del mejor modo?

Cita:
Iniciado por Jorgens Ver Mensaje
Si, he leido sobre normalización, pero no se cuál de las reglas dices que no cumple lo que expongo. Sabrías decirme? Tengo entendido que no puedo repetir tuplas (todos los valores de una línea), pero no es el caso. El valor de la tabla se repite en algunos registros, si, pero va variando claro. Además, ahora en lugar de repetir los nombres de las tablas, repetiría sus identificadores, je je je, de modo que no hemos arreglao mucho, je je je, verdad?
Como que no lo hemos arreglado mucho?? Para un motor de bases de datos es mas facil encontrar las relaciones usando identificadores numericos que estar usando indentificadores de tipo "String" y si los datos se repiten pero es mas facil para el manejador encontrar el valor que corresponde a la tabla, ademas el almacenamiento en la tabla es mucho menor porque en lugar de almacenar 1000 veces la palabra 'Permisos' ahora nada mas la almacenas 1 vez y haces referencia a ella con un id, se entiende??? Si mal no recuerdo no cumple con la 2 regla de normalizacion ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 01/08/2015, 14:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo plantear esto del mejor modo?

Lo mismo aplica para la tabla direcciones, tener un catalogo con las calles y con las ciudades
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 01/08/2015, 14:36
Avatar de Jorgens  
Fecha de Ingreso: agosto-2005
Ubicación: Cartagena, Murcia, España
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Cómo puedo plantear esto del mejor modo?

Te refieres a crear una tabla donde colocar todas las calles y otra donde colocar todas las ciudades, con el fin de luego solo tener que poner el id_calle y el id_ciudad en la tabla DIRECCIONES? Guau..... igual es excesivo esto, no? Si sigo así voy a tener más tablas que un aserradero, no?? Me sorprende un poco, pero leeré más, me he debido perder algún manual, je je je. Gracias Libras!
__________________
Nos leemos
Jorgens Nos leemos!http://www.comocreartuweb.com
  #9 (permalink)  
Antiguo 01/08/2015, 14:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo plantear esto del mejor modo?

El que tengas muchas tablas no quiere decir que tu modelo este mal, no hay una limitante en ningun manual sobre el numero de tablas, ahora tu pediste una opinion para plantearlo de mejor modo y te la estoy dando desde el punto de vista de un Administrador de bases de datos ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 01/08/2015, 14:45
Avatar de Jorgens  
Fecha de Ingreso: agosto-2005
Ubicación: Cartagena, Murcia, España
Mensajes: 30
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Cómo puedo plantear esto del mejor modo?

Y te lo agradezco de verás Libras. Voy a replanteármelo de ese modo a ver.

Gracias, un abrazo!!!
__________________
Nos leemos
Jorgens Nos leemos!http://www.comocreartuweb.com
  #11 (permalink)  
Antiguo 06/08/2015, 14:11
 
Fecha de Ingreso: octubre-2007
Ubicación: VEVLN
Mensajes: 223
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Cómo puedo plantear esto del mejor modo?

has una tabla de roles y en ellas colocas los id de las tablas y el id de rol que puede usarla, luego asignas a a cada usuario un id de rol

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:39.