Como estou escrevendo meu primeiro aplicativo para Android e utilizarei o banco de dados SQLite, tentarei limitar o tamanho o máximo possível, mas acho que a pergunta se aplica em geral ao design do banco de dados.
Estou planejando armazenar registros que terão texto e a data de criação. O aplicativo é um aplicativo independente, ou seja, não será vinculado à Internet e apenas um usuário o atualizará; portanto, não há chance de que haja mais de uma entrada em uma determinada data.
Minha tabela ainda precisa de uma coluna de ID? Em caso afirmativo, quais são as vantagens de usar o ID como um identificador de registro em oposição à Data?
Respostas:
IMHO, é melhor evitar a utilização de uma coluna de data como chave primária.
Trabalhei em sistemas nos quais um campo de data é usado como chave primária e escrever consultas para recuperar subconjuntos de dados é um pouco difícil, se você estiver trabalhando com campos de data.
Alguns outros pontos que você pode querer considerar:
Você pode pensar que um ponto no tempo é único, mas isso depende da granularidade da coluna de data. Minutos, segundos, milissegundos, etc. Você pode ter certeza absoluta de que nunca obterá uma violação da chave primária?
Finalmente, se você desejar migrar o banco de dados para outra plataforma, poderá encontrar novamente problemas em que a granularidade dos dados da data difere entre as plataformas.
É claro que você precisa equilibrar o ideal com o que precisa trabalhar. Se o espaço é realmente uma preocupação, usar a coluna de data pode ser o menor dos dois males. Essa é uma decisão de design que você terá que tomar.
Editar:
Devo salientar que de forma alguma isso indica que é uma má decisão de projeto. Só que pode haver problemas com os aspectos práticos do RDBMS em questão.
fonte
Não, você não precisa estritamente de uma coluna de ID definida em seu esquema se puder garantir que nunca haverá uma data duplicada.
MAS ...
... Dito isto, você também pode usá-lo de qualquer maneira. O pequeno segredo aqui é que o SQLite já possui um ID exclusivo de incremento automático para cada tabela chamada ROWID. Se você declarar uma coluna inteira de incremento automático em sua tabela como PK, o SQLite não criará uma nova coluna - simplesmente aliasará a coluna ROWID preexistente.
http://www.sqlite.org/autoinc.html
Portanto, você não estará economizando espaço ao não usar uma coluna de ID, pois está recebendo uma por tabela, queira ou não!
fonte
Use um campo de ID se alguma das seguintes situações for verdadeira:
Leia esta pergunta: Existe uma fonte canônica apoiando “todos os substitutos”?
Editar:
Como, na minha opinião, parece que nenhuma das opções acima é verdadeira, você não precisa usar o campo ID, mas pode usar um, se quiser.
fonte
Lembre-se de que você também pode alterar o significado da coluna "data" de
created_at
paraupdated_at
ou qualquer outra alteração nessas linhas, o que considero um caso muito comum.A adição da coluna id em alguns casos fornecerá mais flexibilidade quando o design for alterado.
fonte