Off-topic: Duvida de banco

7 respostas
H

Duvida besta de banco de dados, porem pertinente:

Eu tenho o seguinte domínio de problema: varios usuarios q acessam diversos modulos do sistema (grafica, faturamento, periodicos,etc) e tem niveis de acesso (administrador, usuarios normal, gestor). Como se fosse uma relação N-N entre essas 3 tabelas. No banco ta assim:

Eu nao vejo nenhum problema nisto, mas queria saber se isto acontece c frequencia e se eh 1 boa pratica de banco?

7 Respostas

Janio.Barros

Pelo que entendi do seu problema, um usuário tem vários módulos com um nivel de acesso a cada modulo, seria mais simples criar uma atributo nivel de acesso na tabela usuarios_itens_modulos ao inves de uma tabela, e também uma PK simples e não um primary key composta como vc está fazendo, pelo menos é assim q eu faria.

Não sei de fui claro, mas qq coisa fala ai.

Janio.

H

Janio Barros, 1 usuario pode ter n niveis, ele pode ser usuario e gestor ao msm tempo, n eh obrigado ele ter 1 so nivel n.

info_god mas axo q n ficaria legal p meu dominio de problema, pq, como eu disse, 1 modulo por ter nivel de acesso de usuario normal, gestor ou administrador, depende do usuario cadastrado, entao axo q 1 tabela p nivel eh necessario, definir nivel em modulos faria com q fosse necessario linhas semelhantes q mudariam apenas o id de acesso, o q n axo uma boa pratica.

vcs ja viram algum exemplo como colokei aki, c 1 pk formada de 3 fk? tipo um relacionamento n-n entre 3 tabelas? keria saber se tem algum problema se eh 1 pratica feia isto?

Mauricio_Linhares

Nunca tinha visto isso na minha vida, mas até que não parece muito bizarro não. Mas eu acho melhor você transformar essa terceira tabela em uma entidade mesmo do sistema, que agregue as três informações, fica mais fácil até mesmo de visualizar o lugar dela no sistema.

H

mauricio, como seria fazer isso +ou-? seria tirar 1 tabela, p ficar n-n so entre duas tabelas? n entendi a solucao, mas vlw

Mauricio_Linhares

A idéá é mudar um pouco a maneira que você modelou a coisa, não só no nível do banco de dados, mas no conceitual mesmo.

Você poderia criar um objeto, algo como um perfil, que guardasse as informações de acesso que o usuário tem pra cada aplicação. Então, cada usuário poderia ter um Perfil que teria vários pares de nível de acesso e aplicação.

No fim vai dar praticamente no mesmo no banco de dados, mas expressar as coisas de uma forma mais simples vai facilitar a maneira que você pensa sobre o seu problema, tente deixar os “dados” e a modelagem do banco de lado e penxar mais no problema que você está querendo resolver.

H

ok, vlws…
mas assim n teria problema em deixar o banco deste modo tb n ne? ta funcionando e resolvendo o problema…

I

Definir nivel de acesso aos modulos é o mais interessante… Cada modulo tem seu nivel (indice unico), existiria uma tabela USUARIO_ACESSO com os atributos
id_usuario , id_modulo. Fazendo assim, vc só iria percorrer uma só tabela pra saber quais niveis do sistema o usuario tem.

Exemplo:

id_usuario , id_modulo
     1         ,       1
     1         ,       2
     2         ,       3

Ficaria até mais facil de dar manutenção futura =).

Criado 31 de agosto de 2006
Ultima resposta 31 de ago. de 2006
Respostas 7
Participantes 4