0

私は現在、iPad用のビジネスアプリをまとめています。Microsoft SQL サーバー データベースと通信します。

私の質問は、リレーショナル データを回線経由でプルする最も効率的な方法は何かということです。一例として、アプリで連絡先リストを表示しています。連絡先レコードには、departmentID フィールド (部門テーブルに関連する) と ContactTypeID フィールド (ContactType テーブルに関連する) があります。ユーザーが最初にアプリを起動したときに、部門と連絡先のテーブル データを iPad にプルすることを期待しています。連絡先リストのデータを取得するときよりも、フィールドの ID を取得して、起動時に取得したデータから関連データを取得します。ユーザーはリスト内のレコードをクリックして、選択した連絡先の詳細ページを表示できる必要があります。これは簡単な例ですが、うまくいけば私の主張を理解できます。

これに対する最善のアプローチについてアドバイスを受けた人はいますか? サーバーとの間でデータのプルとプッシュの両方が必要になります。

前もって感謝します

4

1 に答える 1

1

一般的なアプローチは、サーバー側のオブジェクトを JSON に変換してから、JSON 文字列をデバイスに送信することです。デバイスで、JSON フレームワークを使用して JSON を NSDictionary/NSArray 値にデコードします (非常にシンプルで非常に高速なJSONKitをお勧めします)。

デコードされた JSON を取得したら、(恥知らずなプラグ警告)この手法を使用して、NS* オブジェクトを CoreData オブジェクトに変換し、携帯電話に保存できます。

リレーションシップの維持に関しては、ネストされた表現またはフラットな表現のいずれかを使用できます。ネストされた実装の例は次のとおりです。

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

これは、リレーションシップ サイクルのない単純なデータベースの場合に推奨される方法です。

または、フラットな表現を使用できます。

{
    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"
}

次に、デバイスで contact_type_id と department_id を使用して手動で関係を解決する必要があります。

これらの両方のアプローチをテストして、特定のケースでどちらがうまく機能するかを確認することをお勧めします。個人的には、ネストされたアプローチをお勧めします (DB レイアウトで許可されている場合)。これは、はるかに高速であり、リレーションシップの解決がデバイス (おそらくできる場所) ではなくサーバー (おそらく余裕がある場所) で行われるためです。大規模なデータベースがある場合は余裕がありません)。

于 2010-11-15T09:10:42.917 に答える