Relacionamento entre tabela estatica e tabela de usuarios
05/07/2012 12:47
0
Pessoal,

Tenho uma tabela estatica com 30 registros, onde armazeno todas as permissões que um usuário pode chegar a ter.... porem gostaria de relaciona-la com o usuário de acordo com o exemplo abaixo:

Tabela de Permissões
id permissao
1 per1
2 per2
3 per3

Tabela de Usuarios
id nome permissoes
1 daniel per1;per2;per3
2 pedro per2;per3

ou

Tabela de Usuarios
id nome permissoes
1 daniel 1;2;3
2 pedro 2;3

Enfim, não é uma relaçõa simples hasMany, pois não quero criar mais uma tabela para relacionar o usuário com a chave de permissão, para por fim adquirir a permissão.

Meu medo é o seguinte... se eu armazenar a id da permissão separado por ';', como o GORM vai entender que isso é uma chave para a tabela de permissoes??

Sera que vale a pena guardar o nome das permissões, ou os ids? Ou sera que criar uma tabela intermediaria é a solucação?


Tags: relacionamento tabelas hasMany


0
Acho que a pergunta é:

Existe uma maneira de armazenar N chaves em um campo... invez de criar uma tabela intermediaria?
05/07/2012 12:48


1
Olá, Daniel.

Amigo, do ponto de vista das Formas Nomais isso não é legal, mas normalização de bancos é um conceito meio que "em decadência" atualmente ^^'

Acho que o GORM não vai "entender" esse seu relacionamento, mas o que pode é tentar criar um getter personalizado, mais ou menos assim:

class Usuario {
String nome
String permissoes

List getRegPermissoes() {
def lista = []
permissoes.split(';').each {
lista+=Permissao.get(it as Integer)
}
lista
}
}


Assim, cada vez que recuperar um registro de Usuario do banco, para recuperar as permissões dele, basta pegar seu "regPermissoes".
Exemplo:

Usuario u1 = Usuario.get(25)
List permissoesDele = u1.regPermissoes


Acredito que funcione.
Boa sorte


0
Mas José, eu vou usar o elasticsearch para procurar pelos caras com as permissões x, y e z por exemplo.... não sei, mas estou achando mais facil criar uma tabela intermediaria para o linking.

Porque, vamos supor que eu procure pelos usuarios com as permissoes x e y... de cara eu nao vou conseguir fazer isso com o sql... a nao ser que eu use o LIKE.

Acho que a tabela intermediaria é melhor nessa situação, qual sua opiniao?

05/07/2012 14:03


0
Amigo, soluções de busca textual IMO são para tabelas com MUITOS registros e em registros com MUITAS PALAVRAS.
Tabelas de permissões e usuários não vejo como grandes (a não ser que você esteja pensando em criar um "novo Facebook"). E seus campos possuem poucos caracteres.
Assim, penso melhor apenas deixar um cache bem configurado pra elas, sem necesidade de busca textual.

SÓ QUE tanto solução com busca textual como a tradicional ficam meio complicadas sem uma tabela intermediaria.

De fato, um "like" resolveria se não for usar busca textual. Afinal não penso que vai haver pesquisa nessa tabela o tempo todo, não concorda? E mesmo que ocorra, lembra que o cache do Hibernate/Gorm trabalha não com cache de registros mas sim de "consultas x valores" o que favorece mesmo consultas com "like".



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto