我在一家SaaS公司工作,任何租户都可以拥有多个联系人列表,每个列表可以存储任意数量的自定义字段联系人,并且该列表中的联系人可以包含任意数量的分组(分组用于对列表中的联系人进行分段)。 每个联系人都有一个必需的字段:电子邮件地址和为其所在列表定义的任意数量的用户定义字段。 我们必须能够根据它们所在的分组和用户定义值找到列表的联系人。 我们必须提供多达30个用户定义字段。 我现在看到解决这个问题的三种方式:
使用某种EAV(我们尝试像这样做),但它看起来相当复杂。 我们有一个表列表(租户的列表),相关的表 custom_fields,一个相关的表订阅者,存储了订阅者的电子邮件地址列表,表subscriber_custom_data与订阅者 和自定义字段表(存储订阅者的自定义字段的值)相关。
使用字段表模式。它的描述在此处http://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/。 在这种情况下,我们将使用与自定义字段相关的字段,该字段将在列中存储所有自定义字段,例如有30个列用于存储每个可能的自定义字段的值,以及一个表,该表存储映射的列名称和用户定义字段的名称。它看起来也很复杂。我们至少需要30个索引来通过自定义字段的值进行搜索,还有其他问题。
使用某种NoSQL数据库,至少用于存储用户定义字段和列表组。 您认为这些数据库可以在这里发挥作用,如果可以,请问如何设计以存储自定义字段和组。
我尝试了解不同类型的NoSQL,例如文档导向的MongoDb,但我立即看不出它如何帮助解决这个问题。我们可以在这里存储任意属性,但要搜索自定义字段的值,我们需要事先对它们进行索引,因此我们必须知道将拥有哪些自定义字段。
感谢您提供有关此信息的任何帮助。