Core Data - Meilleure manière de gérer un "favori"?

Bonjour,

J’améliore ma cave à vins…
Le tout est sous Core Data + iCloud.

J’ai une entité Bouteille, et une entité Etiquette.
Une étiquette est liée à une seule bouteille, mais une bouteille peut avoir plusieurs étiquettes (l’étiquette de devant et celle de derrière, voire toute autre image en lien avec la bouteille).

Je voudrais gérer la notion d’étiquette « favorite », c’est-à-dire celle qui se retrouve dans les vues de la bouteille qui n’affichent qu’une seule image.

Je vois plusieurs possibilités, chacune avec ses avantages et inconvénients:
1- gérer dans l’entité Bouteille l’étiquette favorite (via un UUID ou un URL)
2- déclarer une entité supplémentaire EtiquetteFavorite qui comporte un lien vers Bouteille et un lien vers Etiquette
3- gérer un attribut « preferred » dans l’entité Etiquette

Les inconvénients que je vois sont les suivants:
1- gestion manuelle du lien avec le risque d’incohérence à un moment donné; chaque mise à jour du statut « favori » d’une étiquette nécessite la mise à jour de la Bouteille
2- sans doute la solution la plus propre, mais un peu usine à gaz ?
3- gestion manuelle avec le risque d’incohérence à un moment donné; chaque mise à jour du statut « favori » d’une étiquette nécessite la mise à jour de toutes les étiquettes liées à la bouteille pour s’assurer qu’il n’y a qu’une étiquette déclarée favorite

Un avis ?
Merci par avance,
Nicolas

+1 je suis curieux de la réponse, me posant souvent la question des avantages/inconvénients de ce genre de solutions (Core Data, JSON, SQL…)

Je pense que dans ce cas là le choix 1 serait celui que je prendrais car c’est une relation de type 0-1 :

  • soit aucun favoris
  • soit 1 etiquette favorite
  • il ne peut pas y avoir plusieurs étiquettes favorites pour une bouteille

Tes choix 2 et 3 permettent d’avoir plusieurs étiquettes favorites pour une seule bouteille ce qui me paraît erroné vu ton énoncé

Merci pour ta réponse, Maxime.
Je vais partir sur cette solution, qui est simple à mettre en œuvre.
Nicolas

1 « J'aime »