私はSaaSで働いています。ここでは、テナントは連絡先の複数のリストを持つことができ、各リストには、このリストの連絡先が格納できる任意の数のカスタムフィールドを含めることができ、リストの接続に含めることができる任意の数のグループを含めることができます(グループが使用されます)リストの連絡先をセグメント化するため)。各連絡先には、1つの必須フィールドがあります。email_addressと、前述のリストに定義されている任意の数のユーザー定義フィールドです。リストの連絡先は、所属するグループとユーザー定義の値に基づいて見つけることができなければなりません。最大30のユーザー定義フィールドを用意する必要があります。この問題を解決する3つの方法がわかりました。
一種のEAVを使用します(私たちはこのようにしようとします)が、それはかなり複雑に見えます。テーブルリスト(テナントのリスト)、関連テーブルcustom_fields、リストのサブスクライバーのemail_addresesを格納した関連テーブルsubscribers、サブスクライバーに関連するテーブルsubscribers_custom_data、およびcustom_fieldsテーブル(サブスクライバーのカスタムフィールドの格納値)があります。 。
フィールドテーブルのパターン。説明はこちらhttp://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/です。この場合、カスタムフィールドに関連するフィールドを使用します。これにより、すべてのカスタムフィールドが列に格納されます。たとえば、30個の列があり、可能な各カスタムフィールドの値が格納され、テーブルには、列名とユーザー定義の名前のマッピングが格納されます。分野。それも複雑に見えます。カスタムフィールドの値で検索するには、少なくとも30個のインデックスが必要ですが、他にも問題があります。
少なくともユーザー定義のフィールドと、場合によってはリストのグループを格納するために、ある種のNoSQLデータベースを使用すること。このようなデータベースがここで役立つと思いますか。もしそうなら、カスタムフィールドとグループを格納するための設計方法を教えてください。さまざまなタイプのNoSQL、たとえばMongoDbのようなドキュメント指向を調べようとしていますが、この問題の解決にどのように役立つかすぐにはわかりません。ここに任意の属性を格納できますが、カスタムフィールドの値を検索するには、事前にそれらにインデックスを付ける必要があるため、どのカスタムフィールドを使用するかを知る必要があります。
それについての情報をありがとう。