Olá,
Estou desenvolvendo um sistema web onde esse terá vários usuários e cada usuário armazenará seus documentos.
Esses documentos podem ser em qualquer formato desde .doc até exe.
A aplicação terá duas tabelas uma pra usuários e a outra para documentos.
As tecnologias utilizadas serão eclipse, primefaces, glassfish, jsf, spring security e mysql. Até aqui tudo bem.
A questão é que o cliente me pediu que cada usuário tenha o seu próprio repositório de dados, ou seja,
o usuário 1 não poderá ver os documentos do usuário 2 e assim por diante.
A solução seria criar uma tabela documento para cada usuário, mas a medida que esse sistema cresce
chegaremos a um momento que isso fica inviável. Se o sistema ter 300 usuários teremos 300 tabelas documentos.
Alguém que tem mais experiência poderia me dar uma solução pra esse caso?
Desde já agradeço a colaboração
Quando o usuário fizer o seu cadastro, vc vai criar um diretório para ele no sistema de arquivos do servidor. Vc pode ter um diretório fixo, onde todos os diretórios dos usuários serão criados e então nomear o diretório de cada usuário com o nome de usuário dele ou então o atributo identificador da tabela de usuários. Enfim, fica a seu critério.
Todo upload do usuário vai ser armazenado no diretório dele, sendo assim, vc novamente precisa do caminho do diretório “pai” do repositório para achar o diretório do usuário. No banco, vc só vai armazenar o caminho para obter esse arquivo, ou então somente o nome do arquivo, pois o restante do caminho (diretório pai + diretório do usuário) vc consegue obter facilmente, pois mais uma vez, o diretório pai é fixo e o diretório do usuário é nomeado usando o critério que você decidiu (falei isso no primeiro parágrafo). Para o download, vc vai criar algo, um Servlet por exemplo, que vai pegar o arquivo (usando o nome do arquivo que está no banco + o caminho) e fazer o download.
[]'s
Provavelmente na sua tabela documentos vai ter uma chave estrangeira vinda da tabela usuários.
Então, na hora de listar os documentos para um determinado usuário, porque você não usa essa chave para filtrar os resultados e mostrar só os documentos pertencentes aquele usuário.