2010-09-06 8 views
5

Chcę utworzyć obiekt dla lokalizacji o właściwościach: szerokość geograficzna & długość geograficzna. Następnie chcę ustawić relację od użytkownika do lokalizacji, od zdjęcia do lokalizacji itp. Czy powinienem to zrobić bez tworzenia odwrotnej relacji z lokalizacji do innych? W przeciwnym razie, jak bym to zrobił?W jaki sposób modelujesz lokalizację w danych podstawowych?

Dzięki!

Matt

Odpowiedz

0

Dobra, wiem, jak to zrobić teraz. Mogę utworzyć abstract NSManagedObject o nazwie LocatableObject. Następnie mogę to uczynić Parent z moich innych NSManagedObject s, takich jak User i Photo. Następnie mogę utworzyć relację object na Location, która wskazuje na LocatableObject i odwrotnie na LocatableObject będzie location i będzie wskazywać na Location.Teraz User i Photo będą miały po location do LocatableObject. Na razie jednak nie będę przechowywać lokalizacji zdjęć, więc używam tylko Location i User ma numer location i ma user.

0

Jest to rodzaj pytanie kontekstowej, że bez całego modelu danych może nie być możliwe, aby wymyślić najlepszy projekt.

Ale - szerokość i długość geograficzna są modelowane naturalnie jako podwójne. Nie powinny one być opcjonalne, ponieważ jednostka o nazwie "lokalizacja" nie ma sensu bez obu. Prawdopodobnie powinieneś także modelować krąg niepewności w metrach, nie możesz go teraz użyć, ale może być bardzo przydatny i będzie cię bardzo niewiele kosztować.

Myślę, że chcesz mieć odwrotną relację, ponieważ może być przydatne rozpoczęcie od lokalizacji i znalezienie zdjęć zrobionych w pewnej odległości od tego miejsca. Nie sądzę, że chcesz zrobić wiele zdjęć i lokalizacji: wiele relacji, ponieważ zapisywanie danych przez próbę ponownego użycia lokalizacji jest fałszywą ekonomią, sprawi, że twój kod będzie bardziej złożony i zaoszczędzi bardzo niewiele bajtów. zdjęcie: lokalizacja jest bardziej naturalna 1: 1, ale możesz skorzystać z dodania metody, takiej jak (NSArray*)locationsWithinMeters:(float)meters ofLocation:(Location*)thisLocation, aby przywrócić wszystkie lokalizacje "wystarczająco blisko" w niektórych lokalizacjach - bardzo dobrze dla znalezienia wszystkich zdjęć danego miejsca.

+0

Nie zgadzam się, że nie powinieneś używać relacji odwrotnej do wielu między lokalizacjami i zdjęciami. Nie ma to nic wspólnego z zapamiętywaniem pamięci lub pamięci. Modele powinny odzwierciedlać rzeczywistość, a relacje same w sobie są danymi. W takim przypadku wiele zdjęć może zostać zrobionych w tej samej lokalizacji, dlatego warto wybrać lokalizację i znaleźć wszystkie zrobione tam zdjęcia. Relacje w modelu powinny odzwierciedlać to rzeczywiste powiązanie jak najbliżej. – TechZen

+1

To rozsądny punkt widzenia, ale w jaki sposób decydujesz, które lokalizacje są "takie same"? Pomyśl o tym, aby zlokalizować punkt orientacyjny lub odtworzyć zdjęcie, a zobaczysz, że zaokrąglanie najlepiej pozostawić do konfigurowalnego zapytania. Lepiej może pozostać Lokalizacja jako dokładną jednostką 1: 1 ze zdjęciem i dodać jednostkę regionu o rozpiętości atrybutów (średnica w metrach) i środku, która może mieć wiele lokalizacji. –

1

W większości przypadków chcesz utworzyć relację odwrotną.

Relacje odwrotne ułatwiają utrzymanie integralności wykresu, a co ważniejsze, relacje odwrotne odzwierciedlają rzeczywiste relacje między obiektami, zdarzeniami lub warunkami symulowanymi przez model. Punkt wykresu obiektowego to nie tylko głupie przechowywanie bitów danych, ale także aktywne modelowanie relacji między różnymi częściami tych danych. W Core Data same relacje są aktywnymi danymi.

W rzeczywistości zdjęcia robione są w lokalizacjach i odwrotnie, niektóre lokalizacje mają zrobione w nich zdjęcia. Relacja odwrotna modeluje tę rzeczywistość i daje możliwość wyszukiwania zdjęć na podstawie ich lokalizacji.

0

Myślę, że używanie podstawowych danych do zarządzania zdjęciami oraz lat i lon miejsca, w którym zrobiono zdjęcie, jest w porządku. Ale używanie CD do zarządzania "lokalizacją" jest nieco dziwne. Myślę, że powód, dla którego zmagasz się z tym problemem, jest taki, że "lokalizacja" nie pasuje do tego modelu danych. Zgodnie z sugestią Adama, po prostu zamiatam zdjęcia i zdjęcia zrobione w pewnej odległości od miejsca. Dla instnace wszystkie zdjęcia w odległości 1 km od siebie tworzą lokalizację. prawdopodobnie będziesz mieć jakieś nakładania ...

powinieneś Sprawdź kod ADC próbką PhotoLocations

Powiązane problemy