1

その場でデータベースに動的テーブルを作成する必要があります。たとえば、データベースには次の名前のテーブルがあります。

Table
Column
DataType
TextData
NumberData
DateTimedata
BitData

ここでは、table という名前のテーブルにテーブルを追加し、列テーブルのそのテーブルにすべての列を追加して、各列にデータ型を関連付けることができます。

基本的に、データベースに実際にテーブルを作成せずにテーブルを作成したい。これは可能ですか?もしそうなら、私が調査できるように適切な場所に私を案内してもらえますか? また、SQL サーバーまたは任意の無料のデータベース ソフトウェアを使用したいと思います。

ありがとう

4

5 に答える 5

17

あなたが説明しているのはエンティティ属性値モデル (EAV)です。これは、データ モデルを設計するための非常に貧弱な方法です。

データ モデルは非常に柔軟ですが、そのようなデータ モデルのクエリは非常に複雑です。さまざまな属性nを選択またはフィルター処理する場合は、テーブルの自己結合が必要になることがよくあります。nそれはかなり遅くなり、比較的迅速に最適化するのがかなり難しくなります。

さらに、通常、データベースまたは ORM が提供する多くの機能を構築することになります。

于 2012-08-26T05:32:46.517 に答える
8

あなたが抱えている本当の問題が何であるかはわかりませんが、あなたが提案した解決策は、非常に多くの人々をうんざりさせる「データベース内のデータベース」アンチパターンです。

データのクエリ方法に応じて、計画しているように構造化する場合、ミドルウェアに結合された一連の断片的なクエリが必要になるか (遅い)、1 つの巨大なモノリシック クエリが必要になります (いずれか遅くなるか、大規模なインデックスの肥大化を引き起こします)、可能であれば。

その場でテーブルを作成する必要がある場合は、使用している特定のデータベース エンジンのCREATE TABLE ALTER TABLEおよびDROP TABLEDDL ステートメントを学習してください。いっそのこと、あなたのためにこれを行うORMを見つけてください。構造化されていないデータを格納する必要があることが実際の問題である場合は、MongoDB、Redis、またはその他の NoSQL バリアントを確認してください。

私の最後のアドバイスは、解決しようとしている実際の問題を別の質問として書き上げることです。

于 2012-08-26T05:30:08.623 に答える
2

または、一時テーブルを作成することもできますが、cronジョブを使用して、%%時間ごとに一時テーブルを作成し、クエリの実行後に正しい名前に名前を変更します。だからあなたのサイトは宙に浮いている

アーカイブしようとしているものは悪くありませんが、正しい論理的な方法で使用する必要があります。

*私の悪い英語でごめんなさい

于 2013-02-26T14:10:57.590 に答える
2

ドキュメントでこれを行う方が簡単かもしれません。おそらく、 mongoDB などの noSQL ソリューションを検討する必要があります

于 2012-08-26T05:28:45.760 に答える
1

私はLedgerSMBでこのようなことをしました。EAVモデリングをいくつかの目的で使用しますが(柔軟性が必要であり、実行しているクエリの種類が単純である場合、たとえばメニューノードはこれを部分的に使用します)、一般的には、これをできるだけ避けたいと考えています。できるだけ。

より良いアプローチは、データ列を除いて、実行しているすべてのことを実行することです。次に、(ショックのショック)テーブルを作成するだけです。これにより、追加したもののカタログが提供されるため、アプリはこれを認識します(チェックする必要がある場合は、システムカタログと比較できます)が、同時に実際のリレーショナルモデリングを取得します。

LedgerSMBで行ったことは、テーブル名を受け入れるストアドプロシージャが存在するようにすることでした('extends_' ||名前が指定されています)。その場合、必要なデータ型の列を追加し、これをアプリケーションカタログに書き込みます。これにより、拡張属性のリレーショナルモデリングが可能になります。ロード時に、アプリケーションはアプリケーションカタログをロードし、データをロード/保存するための適切なポイントで必要に応じてクエリを書き込みます。実際、かなりうまく機能します。

于 2012-08-26T13:31:23.540 に答える