-1

アプリケーションのすべてのユーザーが、異なるデータ型のn個の異なるフォームフィールドを持つN個のフォームを作成できるユースケースを検討しています。その後、各ユーザーはそれぞれのフォームでフォームデータを受け取ることができます。このデータは、更新、編集、検索、並べ替えなどができます。

MySQLでこのためのDBアーキテクチャを設計するにはどうすればよいのでしょうか。

私の最初のアプローチは、form_idを主キーとして1つのテーブルにシリアル化された形式でフォーム構造を保存することでした。別のテーブルであるデータは、form_id、record_id、order、valueの列を持つレコードを保持する必要があります。ここで、順序は、フォーム構造内のフィールドの位置を示す番号になります。値の列には、そのフィールドの値が含まれます。このアプローチにより、1セットのレコードに対して10行(10フィールドのフォームの場合)ができました。また、特定のフォームのレコードを検索するためにそのようなクエリを作成することはできないと思います。

このユースケースでmongodbを使用することを考えました。このユースケースでは、フォーム構造が配列に格納され、その配列内に、その特定のフォームのすべてのレコードが格納されます。私はmongodbを使用したことがありませんが、ドキュメントをドキュメント内に保存する場合、mongodbにはサイズに何らかの制限があると思います。したがって、MySQL(またはそのようなユースケースに最適な他のDB)を使用してこれを行うための最良の方法は何ですか?

4

1 に答える 1

1

各mongoDBドキュメントのサイズは16MBに制限されています。各ドキュメントを大きくする必要がある場合は、デザインを適切に調整する必要があります。MongoDbには、大きなファイルをチャンクに分割できるGridFSも含まれています。

この例では、フォームフィールドを配列としてmongoDBに格納できますが、埋め込みドキュメントとして格納することもできます。どちらの方法を選択した場合でも、mongoDBのスキーマ設計はデータアクセスパターンと一致する必要があります。

アプリケーションを介して、mongoDBドキュメントに新しいキーと値のペアを簡単に追加できます。擬似コードは次のようになります。

if user adds form field
db.collection.update({'id':1},{$addToSet {'newField':'value'}})

あなたの質問がMySQL構造についてだったことは知っていますが、mongoDBでどのように機能するかを示す価値があると思いました(明らかに、選択した言語に適合させる必要があります)。

于 2013-02-06T12:22:30.357 に答える