我一直在尝试回答一个关于在线应用程序自定义字段的复杂Mysql数据结构问题。我对Mysql相当陌生,所以任何意见都会受到赞赏。
当前数据库是一个关系型数据库,服务的每个用户将共享同一个数据库和表。
以下是我正在尝试做的示例。
假设我正在尝试创建一个列表。此列表最多可以包含30个自定义字段。用户可以在12个唯一元素之间进行选择,并且每个元素可以具有多达15个用户定义的属性。
每个列表在帐户内部和帐户之间都可以是独特的。帐户可以拥有众多列表,每个列表可能具有不同数量的元素以及每个元素的不同属性。
元素可以是许多东西,例如:多选、单选按钮、电话字段、地址、单行文本、多行文本等。
多选(复选框)元素的属性示例可以是:红色、绿色、蓝色、橙色、白色、黑色
单行文本元素的示例可以是:名字输入字段。
每个元素还必须具有用户定义的标题字段和标签字段,可以在应用程序的其他功能中引用和使用。
分段也非常重要。用户需要能够基于任何元素对列表进行分段。例如,用户可能希望基于所有多选元素#1中存在“红色”的记录来分段列表“ABC”(他们可能有多个多选元素用于一个列表)。
在这个例子中,我会认为数组、EAV和序列化LOB都可以很好地工作。然而,我不确定什么结构最适合我的规模需求。
实际上,每个列表很可能有多达50,000条记录,并且有20,000多个账户-每个账户都有许多列表的真实可能性。因此,我正在寻找最有效和灵活的结构。
更复杂的是,我还需要确保以有效的方式在任何给定时间向任何特定列表添加/删除元素。例如,如果用户创建了一个具有最大允许自定义字段数量(30)的列表,然后三个月后决定删除一个字段,我需要一种方法来查找该列表和所有相关值的自定义字段,然后删除所有值、元素类型及其属性。然后,用户将被允许向此列表添加新元素。
我已经阅读了本网站上的许多EAV帖子,以及这个http://www.martinfowler.com/eaaCatalog/serializedLOB.html。由于数据检索方面的缺点,EAV似乎不太适合我的需求。
我还想知道在这种情况下,多维数组是否能很好地工作?我相信WordPress在其自定义字段中使用了这个。
非常感谢任何关于如何最好地为这种情况构建数据库的意见。谢谢!
当前数据库是一个关系型数据库,服务的每个用户将共享同一个数据库和表。
以下是我正在尝试做的示例。
假设我正在尝试创建一个列表。此列表最多可以包含30个自定义字段。用户可以在12个唯一元素之间进行选择,并且每个元素可以具有多达15个用户定义的属性。
每个列表在帐户内部和帐户之间都可以是独特的。帐户可以拥有众多列表,每个列表可能具有不同数量的元素以及每个元素的不同属性。
元素可以是许多东西,例如:多选、单选按钮、电话字段、地址、单行文本、多行文本等。
多选(复选框)元素的属性示例可以是:红色、绿色、蓝色、橙色、白色、黑色
单行文本元素的示例可以是:名字输入字段。
每个元素还必须具有用户定义的标题字段和标签字段,可以在应用程序的其他功能中引用和使用。
分段也非常重要。用户需要能够基于任何元素对列表进行分段。例如,用户可能希望基于所有多选元素#1中存在“红色”的记录来分段列表“ABC”(他们可能有多个多选元素用于一个列表)。
在这个例子中,我会认为数组、EAV和序列化LOB都可以很好地工作。然而,我不确定什么结构最适合我的规模需求。
实际上,每个列表很可能有多达50,000条记录,并且有20,000多个账户-每个账户都有许多列表的真实可能性。因此,我正在寻找最有效和灵活的结构。
更复杂的是,我还需要确保以有效的方式在任何给定时间向任何特定列表添加/删除元素。例如,如果用户创建了一个具有最大允许自定义字段数量(30)的列表,然后三个月后决定删除一个字段,我需要一种方法来查找该列表和所有相关值的自定义字段,然后删除所有值、元素类型及其属性。然后,用户将被允许向此列表添加新元素。
我已经阅读了本网站上的许多EAV帖子,以及这个http://www.martinfowler.com/eaaCatalog/serializedLOB.html。由于数据检索方面的缺点,EAV似乎不太适合我的需求。
我还想知道在这种情况下,多维数组是否能很好地工作?我相信WordPress在其自定义字段中使用了这个。
非常感谢任何关于如何最好地为这种情况构建数据库的意见。谢谢!