0

我们正在开发一个允许用户创建“促销”实例的平台,其中有任意数量的页面和与这些页面关联的“模块”。每个模块都有自己可定制的属性集合。我正在开发的模块之一是输入表单,它是主要组件。

该表格包括一些默认字段,例如姓名、出生日期和电子邮件地址。然后,该模块允许用户添加他们需要的任意类型的任意数量的附加字段(例如,“25 个单词或更少”的文本字段、额外的选择加入复选框等)。

我正在尝试计划如何在 MySQL 中的存储方面处理这些 X 附加字段。对这些字段进行排序和过滤将是一项要求。

这似乎是一个已知且已解决的问题,但我没有任何运气正确措辞或遇到相关信息。我在搜索时有一些想法;但每个人都有一个垮台,这让我认为必须有更好的方法:

  1. 为每个表单模块创建一个新表,其中包含作为新行的附加字段 - 这看起来真的很混乱/笨拙。
  2. 将附加信息以 JSON(或其他一些数据格式)的形式存储在额外的行中。将所有数据拉入 PHP,扩展 JSON 并使用 PHP 中的所有数据 - 我们设想大量条目(5-10k),所以我认为这太低效了。
  3. 对附加字段设置上限并将一堆行附加到条目表中,即“custom1”、“custom2”、“custom3”等。这似乎也很混乱。

再次查看第 2 点,我认为可能有一种方法可以获取额外行中的数据块并从中创建派生表,但我没有任何运气找到有关这是否可能的信息。例如:

SELECT * FROM( JSON_DECODE(entries.extra) ) ...

如果这是可能的,那可能是我的偏好。

解决需要动态数量的附加行的问题的正确方法是什么?

4

1 回答 1

0

正确的解决方案很大程度上取决于您将如何使用数据。所有解决方案都有优点和缺点,您必须了解您基本上是在尝试做一些关系数据库不是为之设计的事情。

今年早些时候,我就这个主题进行了一次名为“可扩展数据建模”的演讲,其中我试图对不同的解决方案及其优缺点进行调查。

您也可以认输,并使用非关系数据库来存储非关系数据。

于 2013-10-22T03:33:14.240 回答