2010-11-15 6 views
0

Je suis en train de mettre en place une application métier pour un ipad. Il parlera à une base de données de serveur Microsoft SQL.IPad App tirer et pousser des données relationnelles

Ma question est de savoir quel est le moyen le plus efficace d'extraire des données relationnelles sur la ligne. Un exemple est im montrant une liste de contact dans l'application. L'enregistrement de contact a un champ departmentID (qui est lié à la table department) et un champ ContactTypeID (qui est lié à la table ContactType). J'espère que lorsque l'utilisateur démarre l'application pour la première fois, je vais tirer le département et les données de la table de contact sur l'ipad. Que lorsque je tire les données de contact, je vais juste tirer les ID pour les champs et tirer leurs données connexes sur les données que j'ai tirées au démarrage. L'utilisateur doit pouvoir cliquer sur un enregistrement dans la liste et afficher la page des détails pour le contact sélectionné. Ceci est un exemple simple mais j'espère que cela fait mon point.

Quelqu'un at-il des conseils sur la meilleure approche pour cela? Je devrai à la fois tirer des données et pousser des données vers et depuis le serveur.

Merci à l'avance

Répondre

1

Une approche populaire est de convertir vos objets côté serveur à JSON, puis envoyer la chaîne JSON à l'appareil. Sur le périphérique, décoder JSON en valeurs NSDictionary/NSArray en utilisant un cadre JSON (je suggère JSONKit car c'est très simple et very fast). Une fois votre JSON décodé, vous pouvez utiliser this technique pour transformer vos objets NS * en objets CoreData et les enregistrer sur votre téléphone. En ce qui concerne la gestion des relations, vous pouvez utiliser une représentation imbriquée ou une représentation plate. Un exemple d'implémentation imbriquée serait:

{ 
    class: "Contact", 
    first_name: "John", 
    last_name: "Doe", 
    contact_type: { 
     class: "ContactType", 
     type: "some value" 
    }, 
    department: { 
     class: "Department", 
     name: "Department of Transportation" 
    } 
} 

Ceci est une approche préférée si vous avez une base de données simple, sans cycles de relation.

Vous pouvez également utiliser une représentation plate:

{ 
    class: "Contact", 
    id: 1, 
    first_name: "John", 
    last_name: "Doe", 
    contact_type_id: 15, 
    department_id: 34 
} 

{ 
    class: "ContactType", 
    id: 15, 
    type: "some value" 
} 

{ 
    class: "Department", 
    id: 34, 
    name: "Department of Transportation" 
} 

Ensuite, vous devez résoudre les relations manuellement à l'aide contact_type_id et department_id, sur l'appareil.

Il est préférable de tester ces deux approches et de déterminer celles qui fonctionnent le mieux dans votre cas particulier. Personnellement, je recommande l'approche imbriquée (si votre disposition DB le permet), car elle est beaucoup plus rapide et la résolution des relations est faite sur le serveur (où vous pouvez probablement vous le permettre), plutôt que sur l'appareil (où vous pouvez probablement t vous le permettre si vous avez une grande base de données).

+0

Salut Vladimir, Merci pour votre réponse. J'essaie vraiment de déterminer quelle est la meilleure approche pour que mes données soient aussi compactes que possible afin qu'elles soient rapides. Avez-vous essayé Microsofts nouvelle synchronisation framework 4 où ils prétendent parler avec un périphérique sur le fil? – MattyD

Questions connexes