Estoy escribiendo mi primera aplicación para Android y usaré la base de datos SQLite, así que intentaré limitar el tamaño tanto como sea posible, pero creo que la pregunta se aplica en general al diseño de la base de datos.
Estoy planeando almacenar registros que tendrán texto y la fecha de creación. La aplicación es una aplicación independiente, es decir, no se vinculará a Internet y solo un usuario la actualizará, por lo que no hay posibilidad de que haya más de una entrada con una fecha determinada.
¿Mi mesa todavía necesita una columna de ID? Si es así, ¿cuáles son las ventajas de usar la ID como un identificador de registro en lugar de la Fecha?
Respuestas:
En mi humilde opinión, lo mejor es evitar el uso de una columna de fecha como clave principal.
He trabajado en sistemas en los que se utiliza un campo de fecha como clave principal y escribir consultas para recuperar subconjuntos de datos es un poco pesado si está trabajando con campos de fecha.
Algunos otros puntos que puede considerar:
Puede pensar que un punto en el tiempo es único, pero eso depende de la granularidad de la columna de fecha. ¿Son minutos, segundos, milisegundos, etc.? ¿Puede estar absolutamente seguro de que nunca obtendrá una violación de clave principal?
Finalmente, si desea migrar la base de datos a otra plataforma, puede volver a encontrar problemas en los que la granularidad de los datos de fecha difiere entre las plataformas.
Por supuesto, tiene que equilibrar el ideal con lo que tiene que trabajar. Si el espacio es realmente una gran preocupación, usar la columna de fecha podría ser el menor de dos males. Esa es una decisión de diseño que tendrá que tomar.
Editar:
Debo señalar que de ninguna manera esto indica que es una mala decisión de diseño. Solo que podría haber problemas con los aspectos prácticos del RDBMS en cuestión.
fuente
No, no necesita estrictamente una columna de ID definida en su esquema si puede garantizar que nunca habrá una fecha duplicada.
PERO ...
... Dicho esto, también podrías usarlo de todos modos. El pequeño secreto aquí es que SQLite ya tiene una ID única de incremento automático para cada tabla llamada ROWID. Si declara una columna entera de incremento automático en su tabla como PK, SQLite no creará una nueva columna, simplemente alias esa columna ROWID preexistente.
http://www.sqlite.org/autoinc.html
Por lo tanto, no ahorrará espacio al no usar una columna de ID, ya que obtendrá una por tabla, lo quiera o no.
fuente
Utilice un campo de ID si se cumple alguna de las siguientes condiciones:
Lea esta pregunta: ¿Existe una fuente canónica que respalde a "todos los sustitutos"?
Editar:
Dado que, en mi opinión, parece que nada de lo anterior es cierto, no necesita usar un campo ID, pero puede usar uno si lo desea.
fuente
Tenga en cuenta que es posible que también desee cambiar el significado de la columna "fecha" de
created_at
aupdated_at
o cualquier otro cambio en ese sentido, que me parece ser el caso muy común.Agregar columna de identificación en algunos casos le dará más flexibilidad cuando cambie su diseño.
fuente