entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Android - Uso atributo "_id" en cada tabla de la base de datos

Siguiendo la documentación oficial https://developer.android.com/reference/android/widget/CursorAdapter.html, si queremos que la clase CursorAdapter funcione correctamente debemos de añadir el atributo _id a cada tabla de nuestra base de datos. Este atributo debe de ser Primary key y Autoincrement.

Esto, desdibuja un poco el esquema inicial de una base de datos relacional. Mi duda es la siguiente. Si mi mi base de datos inicialmente era de este modo:

  • PRODUCTOS-
    id_producto (Primary key`autoincrement)
    nombre
    precio

  • CLIENTES --
    id_cliente (Primary key`autoincrement)
    nombre
    apellido
    id_producto_comprado (Foreing key de id_producto de la tabla PRODUCTOS)

¿Ahora debería de quedar así?

  • PRODUCTOS-
    _id ()(Primary key`autoincrement)
    nombre
    precio

  • CLIENTES -
    _id (Primary key`autoincrement)
    nombre
    apellido
    id_producto_comprado (Foreing key de _id de la tabla PRODUCTOS)

esto es correcto? de este modo al realizar DELETE o UPDATES estaríamos manejando el _id que lo necesita Android para su funcionamiento.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @egoitz_gonzalez,

Por una parte bastaría con cambiar los nombres de los campos id_producto y id_cliente para que se llamen solante _id, por el requisito de CursorAdapter... después de todo, un campo llamado id en una tabla de Clientes, será sin dudas el ID del Cliente (lo criticable de la \convención es el guion bajo delante)

Por otra parte, es altamente probable que estés normlizando mal, ya que según tu esquema de datos, cada Cliente podrá tener comprado solo un Producto... sin conocer el problema no te lo puedo afirmar, pero a priori suena raro.

Saludos cordiales!

2votos

egoitz_gonzalez comentado

Efectivamente la normalización no es del todo correcta. Debería de haber una tercera tabla para realizar la relación de muchos a muchos correctamente. Pero por no hacer el post mas largo puse solo dos tablas.

La duda era si usar bastaba con tener sólo _id como 'Primary key`autoincrement o debería de tener algo más. Deduzco que este _id lo puedo manipular normalmente a la hora de eliminar registro. El sistema android no se vería afectado por ello verdad?

2votos

Leonardo-Tadei comentado

Hola @egoitz_gonzalez,

con que la clave primara se llama _id es suficiente.

Luego, el campo se puede manejar como cualquier otro: solo hay que tener en cuenta que si es autoincremental, no hará falta asignarle un valor en los INSERT, y en general no es buena idea cambiarle el valor al _id, porque se asume que se maneja automáticamente (como cualquir campo clave primaria y autoincremental: esto no tiene que ver con Android)

Salduos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta