2011-12-20 12 views
1

テーブルDBに格納する変数の型があります。 「変数」とは、フィールドの「種別」が値の型を決定するカップルのフィールド/値のシーケンスを意味し、フィールドの順序は正確ではなく、フィールドが何回繰り返されるかはわかりません。時には、フィールドのグループが複数回繰り返されます(これは財政モデルです)。Webフォームで読み込むDBテーブルの変数構造

追加要件:これらの変数データをWebページフォームにマップして、CRUD作業を処理する必要があります。 JQuery-ui、Struts 2、Hibernate。好ましいDBMS:MySQL。

私が考える解決策:

  1. 垂直のテーブル。パフォーマンスの問題が発生する可能性があります。大量のデータ処理が必要なときに列の行をピボットするマテリアライズドビューで解決できます。それは開発のために非常に高価であるように見えるので、これまでこの方向に行っていない。
  2. LOBフィールド。おそらく "マッピング"テーブルを各列をデコードするために、私の列をそれらの1つにパックします。私の考えは、検索可能なフィールドを「実際の」列として引き出して、LOBにデータのあまり興味深いものを残し、パフォーマンスの問題を発生させないようにすることです。
  3. またはそれ以上2a。 LOBフィールド内のxmlを使用します。これは、データをより快適にパック/アンパックするのに役立ちます。特にデータをWebフォームにマップする必要があります。

あなたはどう思いますか?さらに、xmlフィールドから自動ビューを作成する方法はありますか?このようなデータをWebフォームにマップする方が良いでしょうか?私は、私が記述したどのケースでもHibernate Toolsは動作しないと思われます。私はそれも私にはまだ少し混乱だ、私は明らかにされている願っています:)

+1

私は1を使用しており、マテリアライズドビューでも痛いです。それらは巨大になり、エラーになりがちです(DBAは、条件の1つに= 'Sibling'の代わりに 'SIBLING'を使用します)。 – Stefan

答えて

0

あなたのオプション1

Entity-Attribute-Valueアンチパターンです。

Product table, many kinds of product, each product has many parametersに私の答えや代替案とEAVは少なくともリレーショナルデータベース(私は、私の本の中でSQL Antipatterns: Avoiding the Pitfalls of Database ProgrammingをEAVをカバーする)ため、間違っているいくつかの理由のための私のブログの記事EAV FAILを参照してください。

同様の構造が会社をどのように運命づけたかについても、この記事をお読みください:Bad CaRMa

オプション2 & 3は、How FriendFeed uses MySQL to store schema-less dataと同様です。私はORMがあなたのためにその構造を維持するための自動方法を知らない。転置索引表をLOBデータと同期させておくという手間があります。

+0

私はそれを反パターンと呼んでいません。あなたがリンクしているWikipediaの記事は、EAVが完璧な意味を持つユースケースをリストしています。 – Stefan

+0

データ型、制約、テーブル見出しなど、SQLの多くの機能が失われていることを除けば、構造を強制するためにRDBMSに頼るのではなく、アプリケーションコードでメタデータを自分で実装する必要があります。 –

+0

私はこれらに同意します。しかし、レポートではさらに悪い列のXMLにも同様の問題があります。 EAVには有効な用途があり、私の考えでは反パターン化の対象にはなりません。そのような弱くて頑丈な型付き言語。両方とも、(異なる)用途を持っています。 – Stefan

関連する問題