6

私は PHP/MySQL アプリを構築しており、ユーザーが独自のカスタム (好きなだけ) プロファイル データを作成できるようにしています (つまり、追加のテキスト ボックスを使用してプロファイルに任意の量の情報を追加できますが、「コア」があります)。ユーザー プロファイル フィールドのセット)

たとえば、フォームに新しいテキスト ボックスを作成し、それを「私のペット」や「私のお気に入りの色」と呼ぶことができます。このデータをデータベースに保存する必要があり、事前に追加情報が何であるかがわからないため、選択肢ごとに列を作成することはできません。

彼らが提供するすべての「追加情報」を保存できると私たちが考える1つの方法は、追加情報をJSONとして保存し、それをMySQLテキストフィールドに保存することです(私はMySQLが大好きです:))

独自のフィールドを作成できるWordpressフォームビルダープラグインを見たことがあります.NoSQLソリューションはこれらのプラグインの範囲を超えているため、データをMySQLに保存する必要があると思います.

私は MySQL を使い続けたいと思っていますが、MongoDB/Redis のような NoSQL ソリューションがより良い解決策になると思いますか?

ありがとう

4

3 に答える 3

3

これにアプローチする 1 つの方法は、EAV パラダイムまたはエンティティ属性値を使用して単一のテーブルを使用することです。ウィキペディアの記事を参照してください。これは、ユーザーにデータベース スキーマを選択させるよりも、ほとんどの点ではるかに整頓されています。

于 2012-12-19T21:25:23.040 に答える
1

コアにないものを格納するキーと値のペアのテーブルを作成できます。テーブルは次のようになります: user_id, name_of_user_specified_field, user_specified_value;

name_of_user_specified_field が多く表示され始めたら、コア テーブルに追加できます。これは、Entity-Attribute-Value と呼ばれます。一部の人々はこれをアンチパターンと見なしていることに注意してください。

これを行う場合は、コントロールを追加して、ユーザーが作成できる新しいエントリの数を制限してください。そうしないと、誰かがあなたのデータベースにたくさんのフィールドを詰め込んでいるのを見つけるかもしれません:)

于 2012-12-19T21:24:49.627 に答える
0

MySQL はこれを問題なく処理できます。追加データが常にまとめて取り出される場合 (つまり、他の追加フィールドなしで pet フィールドだけを取得する必要がない場合)、users テーブルの列にシリアル化して格納できます。ただし、よりリレーショナルなモデルが必要な場合は、ユーザー ID でリンクされた別のテーブルに余分なデータを格納できます。追加のテーブルには、ユーザー ID、追加のフィールド名、追加のフィールドの値、および必要なその他の列が含まれます。次にJOIN、プロファイルを取得するときにクエリを実行して、すべての追加フィールドを取得します。

于 2012-12-19T21:25:28.080 に答える