0

の高度なEAVエンティティ属性値データベーステーブルは、カスタムオブジェクトのプロパティを柔軟に保存する方法です。副属性が値の

私のプロジェクトでは、オブジェクトの固定値を格納するだけでなく、時間とともに変化する値を格納する必要があります。成長している人物の長さと同様に

  • エンティティ:ピーター
  • 属性:長さ
  • 値:2010年1月1日で160センチメートル、2011年1月1日
で170センチメートル

"time"という別の列を追加することで解決しやすくなります。

しかし、アイデアは、例えば次のようにも、よりスケーラブルになることです。

  • エンティティ:0時20分で、XYでピーター(100200)、:ビデオ
  • 属性:タグ
  • 値XY(200,300)at 0:30

ここで値は時間だけでなく、余分なサブ属性としても調整されます。私はそのような副属性を扱うことができるようにしたい。

質問は次のとおりです。このための最終的なスケーリング可能なデフォルトモデルはありますか? (だから私はホイールを再発明する必要はありません)

または私はちょうど値のエンティティの周りのラッパーエンティティを使用する必要がありますか?

答えて

0

あなたは時間と座標がに適用されているようですが、すべてあなたのeav属性のに適用されます。

この場合、完璧な解決策は、timecoordinates(またはxとyを別々に)をeavテーブルに追加することです。

潜在的に無制限の数の属性がある場合、eavを持つすべての理由があります。しかし、superの属性が他のすべての属性に適用される場合、そのeavテーブルを展開しない理由はありません。

結果はあなたが特定のエンティティに関連して、グラフまたは任意にプロットでき座標のセットになります

SELECT `coordinates` FROM `my_table` WHERE `entity_id` = 25 ORDER BY `time` ASC 

id | entity_id | attribute | value | time | coordinates 
1 | 25  | tag  | funny | 12/12/12 | 200,300 
1 | 25  | tag  | funny | 12/13/12 | 0,1 

あなたは、このようなクエリを行うことができます。

それとも、行うことができます:あなたにこの

ENTITY_IDのような結果を与えるだろう

SELECT `entity_id`, GROUP_CONCAT(CONCAT(`time`,'|',`coordinates`) ORDER BY `time` ASC SEPARATOR '~') as `time_coords` FROM `my_table` WHERE `entity_id` BETWEEN 25 AND 50 ORDER BY `entity_id` 

| time_coords 25 | 12/12/12 | 200,300〜12/13/12 | 0,1 26 | 12/12/12 | 150,99〜12/29/12 | 151,180〜12/30/12 | 60,60

PHPを使用して、結果をentity_idで解析できます。

など。 (クエリ結果を取得した後)

while($row = mysql_fetch_row($result)) { 
    $id = $row[0]; 
    $time_coords = explode('~',$row[1]); 
    foreach($time_coords as $time_coord) { 
    $temp = explode('|',$time_coord); 
    $time = $time_coord[0]; 
    $coord = $time_coord[1]; 
    // do stuff with $id, and each $time+$coord for that id 
    } 
}