2010-09-06 1 views
5

Je veux faire une entité pour l'emplacement avec les propriétés: latitude & longitude. Ensuite, je veux définir une relation de l'utilisateur à l'emplacement, de la photo à l'emplacement, etc. Dois-je le faire sans créer une relation inverse de Location aux autres? Sinon, comment le ferais-je comme ça?Comment modéliseriez-vous l'emplacement dans les données de base?

Merci!

Matt

Répondre

0

D'accord, je sais comment faire maintenant. Je peux créer un abstract NSManagedObject appelé LocatableObject. Ensuite, je peux faire ce Parent de mes autres NSManagedObject s, comme User et Photo. Ensuite, je peux faire une relation object sur Location qui pointe vers LocatableObject et l'inverse sur LocatableObject serait location et pointerait sur Location.Maintenant, User et Photo auront chacun un location à LocatableObject. Pour l'instant, cependant, je ne vais pas stocker l'emplacement des photos, donc je suis en train d'utiliser Location et User a location et Location a user.

0

Ce genre est une question contextuelle, dans ce sans l'ensemble du modèle de données, il peut ne pas être possible de trouver la meilleure conception. Mais - la latitude et la longitude sont modélisées naturellement en tant que doubles. Ils ne devraient probablement pas être optionnels car une entité nommée "location" n'a aucun sens sans les deux. Vous devriez probablement aussi modéliser le cercle d'incertitude en mètres, vous ne pouvez pas l'utiliser maintenant mais cela pourrait être très utile et cela vous coûtera très peu. Je pense que vous voulez avoir une relation inverse, car il pourrait être utile de commencer par l'emplacement et de trouver des photos prises à une certaine distance de cet endroit. Je ne pense pas que vous vouliez faire de la photo et de l'emplacement un grand nombre de relations puisque la sauvegarde des données en essayant de réutiliser des emplacements est une fausse économie, cela rendra votre code beaucoup plus complexe et économisera très peu d'octets. photo: l'emplacement est plus naturel 1: 1 mais vous pourriez bénéficier d'ajouter une méthode comme (NSArray*)locationsWithinMeters:(float)meters ofLocation:(Location*)thisLocation pour retourner tous les emplacements "assez proche" à un endroit - très bon pour trouver toutes les photos d'un endroit.

+0

Je ne suis pas d'accord sur le fait que vous ne devriez pas utiliser une relation inverse à plusieurs entre les emplacements et les photos. Cela n'a rien à voir avec l'économie de mémoire ou de stockage. Les modèles doivent refléter la réalité et les relations sont elles-mêmes des données. Dans ce cas, de nombreuses photos peuvent être prises au même endroit et vous pouvez choisir un emplacement et trouver toutes les photos prises ici. Les relations dans le modèle devraient refléter ce lien réel le plus près possible. – TechZen

+1

C'est un point de vue raisonnable, mais alors comment décidez-vous quels emplacements sont "identiques"? Pensez-y avec le but de localiser un point de repère ou de recréer une photographie et vous verrez que tout arrondi est mieux laissé à une requête configurable. Mieux vaut peut-être conserver la localisation en tant qu'entité exacte 1: 1 avec Photo et ajouter une entité Région avec un attribut span (diamètre en mètres) et un centre, ce qui peut avoir plusieurs emplacements. –

1

Dans la plupart des cas, vous souhaitez créer une relation inverse.

Les relations inverses facilitent l'intégrité du graphe principal et, plus important encore, les relations inverses reflètent les relations réelles entre les objets, les événements ou les conditions que le modèle simule. Le point d'un graphe d'objets n'est pas simplement le stockage idiot de bits de données mais également la modélisation active des relations entre différentes parties de ces données. Dans les données de base, les relations elles-mêmes sont des données actives.

Dans le monde réel, les photos sont prises dans des emplacements et inversement, certains emplacements contiennent des photos. Une relation inverse modéliserait cette réalité et vous donnerait la possibilité de rechercher des photos en fonction de leur emplacement.

0

Je pense que l'utilisation de données de base pour gérer les photos et la lat et lon de l'endroit où la photo a été prise est très bien. Mais en quelque sorte en utilisant un CD pour gérer le "lieu" est un peu étrange. Je pense que la raison pour laquelle vous vous battez avec ceci est que "l'emplacement" ne correspond pas vraiment à ce modèle de données. Comme Adam suggère, je voudrais juste balayer les photos et les photos qui sont prises à une certaine distance et former un emplacement. Par exemple, toutes les photos situées à moins de 1 km l'une de l'autre forment un emplacement. vous aurez probablement un certain chevauchement ...

vous devriez vérifier l'exemple de code ADC PhotoLocations

Questions connexes