2011-07-25 8 views
4

Java Shapeを扱うアプリケーションを実装しています。すべてのユーザーがログインし、MySqlデータベースからインベントリを取得します。形はコンストラクターと振る舞いが異なります。形状をデータベースに保存するにはどうすればいいですか

だから、どのような形状を保存するための最良の方法は?ここにいくつかの私の考えがあります:

  • 形状をシリアライズし、Blobとして保存します。しかし、私はShapeクラスを変更しなければならない場合は、DBとクエリのパフォーマンスの大きなサイズの変更で、バージョン管理の問題があるでしょう
  • 幅と高さのような共通のフィールドとテーブルを作るシェイプテーブルを参照する各シェイプ。それはあなたが何を思い

...

  • が可能なすべてのフィールドでシェイプテーブルを作成し、単にフィールドを必要としない形状のためにnullを入れて...テーブルの多くにつながる可能性?

  • 答えて

    0

    私は管理し、拡張が容易なので、2番目のソリューションを選択しました。直列化されたモデルの構造が変更された場合(例:属性を追加する場合)、モデルバージョンを管理する必要があるため、直列化オプションは実用的ではありません。 3番目の選択肢は、データベースを構築する正しい方法ではありません。

    1

    いくつかの簡単なアイデア:

    • あなたはポリゴンを定義する頂点のリストを格納することができます。
    • ポリゴンのエッジを定義するベクトルのリストを格納できます。主キーを持つ形状の

      • マスターテーブル、「shapeID」
      • ベクタテーブル、vectorIDを特定する主キーを持つ、外国と呼ばれるアイデンティティ:彼らはデータベースに格納することができる方法

      適切なShapeID、原点(x、y、z座標)、方向(x、y、z)、および長さのキー。

    他のテーブルを持つ図形に他のメタデータを割り当てることができます。他の表は、外部キーによって図形IDも参照します。

    1

    実際には、データベースに継承階層を格納する "最良の"方法はありません。ほとんどのデータベースコースで教えられる3つのモデルがあります:ヌルを持つシングルテーブル、サブクラスごとのテーブル、コンクリートクラスごとのテーブル。 this blog postに詳しい説明があります。単にデータベース内の図形の属性をマップする場合は、どちらを選択しても構いません。

    MySqlには、幾何学図形を格納するように特別に設計されたGeometry typeが用意されています。

    1

    私が投票したい:

    • を可能なすべてのフィールドを持つ形状テーブルを作成します。

      • 幅と高さ
      • ベースと高さ
      • 半径 のように...
      • 形状タイプ(例:0 =円、1 =正方形、3 =三角形、...)
    • 一つのテーブル、すべての可能な形状、1つの形状インスタンス/行

    私見...

    Q:あなたが持っているかもしれませんどのように多くの異なる形状と思いますか?各図形にはいくつの列があると思いますか?

    PS: 「ポリゴン」(任意のポイント数で構成)は、2つの別々のテーブルを使用する場合があります。しかし、ほとんどの図形(円、楕円、四角形、長方形など)は、4つまたは5つの列/インスタンス以上を必要とすべきではなく、1つのテーブルに簡単に収まる必要があります。

    2

    技術的には答えはありませんが、ここでの問題はSQLですか?私は、CouchDBのようなドキュメントストレージシステムがこのシナリオのためにはるかに効果的なソリューションかもしれないと考えています。

    私はこのような何か考えている:

    { 
        "_id": "whatever", 
        "_rev": "whatever", 
        "boundingBox": [ 
         [0 0], 
         [2 2] 
        ], 
        "size": [2 2], 
        "circle": { 
         "center": [1 1], 
         "radius": 1 
        } 
    

    }

    "circle"スタンザは、形状に応じて名前と詳細を変更します。長方形は角(似ている"boundingBox")を持っていた、楕円体が持っていた...楕円体を定義するもの:p

    関連する問題