Tenho algumas tabelas que vou criar para site, literatura, vídeo e imagem. Existe uma boa razão para não usar o nome do arquivo como chave primária.
Por exemplo...
"someimage.png" como o PK para a imagem da tabela.
A única desvantagem em que consigo pensar é se eu tivesse nomeado someimage.png em vários diretórios e cada diretório someimage.png não fosse a mesma imagem. Isso parece um design ruim e não há nenhuma razão para que eu faça isso de qualquer maneira.
Pensamentos?
Em geral, os PKs substitutos são preferíveis em comparação aos naturais. Normalmente, as colunas de chave primária nunca são atualizadas; no seu caso, renomear o arquivo exigirá a atualização da chave primária, o que, por sua vez, pode causar atualizações em cascata. Além disso, ter uma chave primária longa nunca é uma boa ideia do ponto de vista de armazenamento e desempenho.
Dependendo do RDMS que você usa, a chave primária também pode definir como as linhas são armazenadas (a ordem física), portanto, mesmo a inserção causará muito mais divisões de página e alto nível de fragmentação.
Resumo .Eu recomendo fortemente não usar nomes de arquivos como chaves primárias. Se eles tiverem que ser exclusivos, você sempre terá a opção de criar uma restrição exclusiva.
A PRIMARY KEY, ou qualquer índice nesse sentido, seria acessado muito mais rapidamente se o comprimento da PRIMARY KEY fosse menor. É mais fácil colocar um inteiro de 4 bytes como um identificador exclusivo para um nome de imagem de caminho completo do que o nome de arquivo de caminho completo (de vários e ridículos comprimentos).
Pense no Clustered Index, onde residiria a PRIMARY KEY. Os dados da linha ocuparão um índice agrupado. No MySQL, a Chave agrupada seria acoplada a outras colunas em um índice não exclusivo. Um tipo de dados menor (4 bytes) não faria mais sentido? Caso contrário, os índices podem explodir a uma taxa de O(n log n).
Para criar um número exclusivo para cada imagem, você precisa de uma tabela semelhante a esta:
Este projeto
A partir daqui, apenas INSERT e recupere o image_id criado da seguinte maneira:
Fazer dessa maneira pode perder alguns números de image_id ao longo do caminho. Você pode querer fazer isso:
SE @image_is_there É 0, então
Acho que sua melhor opção é criar uma chave substituta (numeração automática) (image_id) e usá-la como sua CHAVE PRIMÁRIA. Claro que o como depende do seu DBMS. O MSSQL e o MySQL permitem que você designe números automáticos, mas nem todos os DBMSs o fazem.