2010-09-01 8 views
0

J'ai besoin de stocker un vecteur d'un nombre inconnu d'objets dans une base de données sqlite android. Pour l'essentiel, la configuration est la suivante: Je développe une application de gestion des tâches, dans laquelle l'utilisateur peut ajouter autant de notes qu'il le souhaite à ses tâches. Ma configuration actuelle utilise une base de données, avec une ligne par tâche. Cela pose un problème lorsque j'ai besoin d'associer plusieurs notes et leurs informations associées à une tâche. Je peux voir deux approches: essayer de stocker un tableau de notes ou un vecteur ou quelque chose comme un BLOB dans la rangée de la tâche, ou avoir une autre base de notes dans laquelle chaque ligne contient une note et son info, ainsi que l'ID de la tâche la note appartient à. Cela semble un peu plus facile à mettre en œuvre, car tout ce que je devrais faire pour récupérer les données serait d'obtenir un curseur de toutes les notes correspondant à un identifiant particulier, puis itérer à travers cela pour les afficher à l'utilisateur. Cependant, il semble peu efficace d'avoir une toute nouvelle base de données uniquement pour les notes, et cela rend également la synchronisation et la suppression des notes un peu plus difficiles.stocker et récupérer Vector dans Android base de données sqlite

Qu'en pensez-vous? Cela vaut-il la peine d'avoir une base de données de notes séparée? Dois-je utiliser un BLOB ou opter pour la base de données séparée? Si un BLOB, existe-t-il de bons tutoriels pour stocker et récupérer des objets en tant que BLOB?

Répondre

1

Il semble que vous ayez besoin d'une autre table dans votre base de données (pas une autre base de données). Vous avez déjà une table pour les tâches. Maintenant, faites-en un pour Notes. Faites d'une colonne une clé étrangère dans la table Tâches. C'est-à-dire que Notes.Task_ID contiendrait l'ID de la tâche pour laquelle la note est destinée. Ensuite, lorsque vous souhaitez obtenir toutes les notes pour une tâche, interrogez la table Notes.

+0

C'est en fait ce que j'ai fini par faire. Merci! – QRohlf

1

Je pense que la réponse à cette question réside vraiment dans la façon dont vous allez mettre à jour les choses si elles changent. Pour l'instant, la route BLOB semble probablement être une très bonne idée, mais que se passe-t-il si vous voulez ajouter de nouvelles fonctionnalités et que vous voulez stocker de nouvelles propriétés de notes (pensez à des choses comme les favoris ou l'importance). Que devez-vous faire pour mettre à jour l'objet notes pour ajouter ce nouveau champ? Si c'est juste une table de base de données, il est assez facile de changer la disposition de la table et même d'ajouter une valeur par défaut. Si c'est un BLOB, vous devrez passer chaque entrée, désérialiser l'objet BLOB, le corriger et re-sérialiser. Cela pourrait être difficile.

Aussi, et ce n'est probablement pas aussi important pour une petite application utilisant une base de données intégrée, mais il est plus facile de modifier la base de données en dehors de l'application si l'objet n'est pas un BLOB. Sans oublier les requêtes que vous pourrez écrire avec la table séparée. Par exemple, comment quelqu'un peut-il calculer le nombre de notes attachées à une tâche? Si elle est séparée dans la base de données, c'est une requête simple.

Juste mes deux cents.

Questions connexes