Pergunta

Então, você está escrevendo uma aplicação web e tem diversas áreas do site onde o usuário pode fazer upload de arquivos.Meu método básico de trabalho para isso é armazenar o arquivo real no servidor e ter uma tabela de banco de dados que conecte o nome do arquivo armazenado ao registro ao qual ele se refere.

Minha pergunta é esta:Deveria haver uma tabela diferente para cada “tipo” de arquivo?Além disso, os arquivos devem ser armazenados em locais relacionados ao contexto no servidor ou todos juntos?

Alguns exemplos:fotos de perfil de usuário, currículos de candidatura a empregos, documentos relacionados em páginas CMS, etc.

Foi útil?

Solução

No seu exemplo, há um argumento para duas tabelas, pois você possui arquivos que podem ser associados a duas coisas diferentes.

  • CVs, fotos estão associadas a um usuário.
  • anexos estão associados a uma página CMS.

Se você colocá-los em uma tabela (e quiser permitir que os usuários tenham mais de uma foto ou currículo), você precisará de duas tabelas de links para associar arquivos-> usuários e arquivos-> cms_pages.Provavelmente isto implica uma relação HABTM, que não é correta e permite dados inconsistentes.

A abordagem de duas tabelas é um pouco mais limpa e só permite que os arquivos sejam associados ao tipo correto de entidade com um relacionamento simples de pertencer.

Mas não acho que exista uma resposta "certa" para essa pergunta, a menos que você precise armazenar diferentes tipos de metadados para diferentes tipos de arquivos.

Certifique-se também de armazenar ou calcular o tipo MIME de cada arquivo para que ele possa ser enviado corretamente ao navegador, com os cabeçalhos HTTP corretos.

Outras dicas

Pelo que você disse, eu apenas armazenaria arquivos com nomes de arquivos aleatórios (UUID ou outros) em um só lugar.Eu teria então uma tabela de 'anexos' ou algo que contenha referências a todos os seus arquivos externos.Esta tabela também conteria os metadados desse arquivo, então que tipo de arquivo é (foto, currículo, etc.) e assim por diante.

Pode haver limites rígidos para o número de arquivos em um diretório, dependendo de qual FS você está usando.

Pode haver vários motivos para armazenar arquivos diferentes em locais diferentes.

Primeiramente, uma restrição no número de arquivos em um diretório pode ser considerada.

Em segundo lugar, a segurança pode ser um problema - se alguns forem visíveis publicamente (como fotos de perfil, por exemplo), mas outros não (como currículos), seria mais fácil gerenciá-los, colocando-os em diretórios diferentes.

Em terceiro lugar, tarefas administrativas simples podem ser mais fáceis se os arquivos forem divididos, navegando em um explorador de arquivos, por exemplo, ou gerenciando backups, ou modificando o aplicativo para dividir o armazenamento de arquivos em vários locais.

Há também o problema de conflitos de nome de arquivo, mas se você renomear tudo para corresponder ao campo de identificação do banco de dados (por exemplo), isso não seria um problema.

Mas no final das contas provavelmente depende dos volumes e da sua preferência.

Uma tabela diferente para cada tipo de arquivo só se tornará relevante se você armazenar outros metadados (e, portanto, colunas adicionais) para cada tipo de arquivo.Se suas tabelas para cada tipo de arquivo contiverem apenas as mesmas colunas (por exemplo, nome do arquivo, tipo de arquivo, data de upload, etc.), faria sentido tê-las todas em uma tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top