2013-09-22 1 views
6

JAVA/MySQLスタックに接続するAngular JS JSONクライアントがあります。 MySQLはRDBMSなので、私のすべてのデータは正規化されています(最初の3つの形式)。JAVA/RDBMSスタックでJSONクライアントを使用するときの正規化とデノーマライゼーション

私の質問は、次の例で説明することができます。

私はExampleオブジェクトと、サーバーによって返されたUserオブジェクトを持っています。

Example - [{ 
userId:1, 
... 
... 
.. 
}, 
{ 
userId:2, 
...}, 
{ 
userId:3, 
...}]; 

User - [ 
{ 
userId - 1, 
firstName - "John", 
lastName - "Doe", 
.. 
}, 
{ 
userId - 2, 
firstName - "Jane", 
lastName - "Doe", 
.. 
}, {...}... 
] 

私は「例のexample_entry」角度を用いて、実施例のコレクションを見て、例のコレクション要素を表示すると、私は唯一のuserIdが容易に入手できます。しかし、firstNameとlastNameを表示したい場合、別の "User"コレクションにあるので、私はそれを行うことができません。 私は、UserコレクションからfirstName、lastNameを取得し、Exampleコレクションオブジェクトと結びつけるヘルパーAngularコントローラ/サービスメソッドを記述する必要があります。

この問題を回避するために、私はJavaのOjbectsのをデ正規化し、このようにJSONを使用する準備ができて送信することができます。..

Example - [{ 
userId:1, 
firstName - "John", 
lastName - "Doe", 
... 
... 
.. 
}, 
{ 
userId - 2, 
firstName - "Jane", 
lastName - "Doe", 
...}, 
{ 
userId:3, 
...}]; 

しかし、これは悪い/ひどい/良いのですか?これで、私のJava Domain ObjectsはfirstNameとLastNameをExample ObjectとUser Objectに複製しているので、どちらのルートが良いかアドバイスしますか?

De-Normalize and have ready to use JSON 
Keep Data Normalized to avoid duplication and write converter methods on the Client as needed 

答えて

2

これが私の取り組みです。 \ listingデータを表示する場合、私はDomain model \ classesについて心配していません。私の場合、返されるデータはUI表示の要件にできるだけ一致する必要があります。ここでの目的は、ユーザーにデータを表示することであり、そのような画面では意思決定があまり行われません。

しかし、データを変更する必要がある場合、更新する必要があるかどうかを気にする必要があります。データの一貫性を維持することが優先され、逆正規化はそのような場合には適切ではない可能性があります。

+0

バックエンドJavaクラスをそのままにして、サーバー側JSONを非正規化JSONに変換するヘルパーメソッドを作成する必要がありますか?ありがとう。 – user6123723

+0

データのリスティングの場合は、DBに必要なフィールドを含むビューを作成し、アプリケーションコードを通じて照会します。変換は必要ありません。エンティティの更新\データの更新シナリオでは、bakendで非正規化を行うのではなく、正しいデータエンティティを送信します – Chandermani

+0

しかし、非正規化で非効率なdbストレージを作成しませんか? fNameまたはlNameが変更された場合は、複数の場所で更新する必要があります。また、現在使用されているストレージスペースも増えています。これらの問題はありませんか? – user6123723

4

データをUIレイヤに送信するときに、データを非正規化する必要があります。

データがデータベースにある場合、これは正規化されたデータにとって最適な場所です。 正規化を抽象化し、ビューに対して照会するビューを使用します。このビューでは、テーブルを結合してデータベースから非正規化データを取得できます。

あなたは透明でシンプルな表示をしたいと思っています - それは角度が最も輝く時です。非常に大量のデータを画面に表示したり、大量のデータをネット経由で送信したりしない限り、データベースから直接非正規化されたレコードを送信するだけで、はるかに良い結果を得られます。 DBは、ジョインやその他のデータクエリ関数を実行するのに最適です - それのために構築されています。 Javascript ですが、それを最も有効に使用するわけではありません。

関連する問題