【问题标题】:What's the most efficient way of structuring this database? [closed]构建此数据库的最有效方法是什么? [关闭]
【发布时间】:2013-01-28 14:46:18
【问题描述】:

我正在设计一个表单处理 Web 服务,类似于用户注册的 wufooformstack.com,创建一个表单操作,他们将复制并粘贴到他们的表单中,我的服务会将这些数据存储在一个数据库并重定向回他们的感谢页面。

我将使用PHPMySQL 构建它。到目前为止,我已经弄清楚了基本的功能,但是我在抽象层面上变得松懈的地方是如何最好地存储用户数据。

我的第一个想法是为每个创建的新表单创建一个新表,这看起来有点傻而且过头了。

现在我在想,我创建了一个通用 data 表,其中包含 50 个字段,命名为:field1, field2, field3, field4 等,它将存储每个人的数据,然后将该表链接到另一个名为 fieldnames 的表,用户可以在其中自定义他们的 '仪表板”看起来像是他们已经命名了这些字段。

我真的不太确定如何最好地处理这个问题。

【问题讨论】:

  • 创建 50 个字段来保存数据,然后坐下来等待用户进来要求 51...然后 52... 然后 53...
  • 是的。我在哪里停下来?但是为每个用户创建一个新表似乎是精神上的。
  • “标准化”。用户表。字段表(userid、fieldid、fieldname、fieldtype、fieldvalue)。例如一对多的关系。
  • 实体-属性-值 (EAV)

标签: php mysql database forms


【解决方案1】:

使用两张表格填写表格和字段,一张填写答案:

form(id, title, user ...)
field(id, form_id, order, title, type ...)
answer(field_id, value, ...)

这样您就不会将用户限制在一定数量的字段中。

【讨论】:

  • 好的,但是我将在用户网站上提交的表单数据存储在哪里?
  • 答案的第三个表格(见我的编辑)。
  • 好吧,这比我尝试的更有意义。
【解决方案2】:

对此有多种解决方案 - 这主要取决于您希望在输入数据后如何处理这些数据。

hsan 的答案通常被称为“实体属性值”或 EAV。它很灵活,可以存储许多不同类型的数据(当您需要超过 50 个答案时不会用完)。如果您正在存储数据以重新构建另一个网页(例如,显示表单的所有者),它工作得很好;如果你想创建一些“人类可读”的东西,例如一个报告,它有点棘手。如果您想对数据提出问题,这可能会很棘手 - 想象一下找到“你赚多少钱”这个问题的所有答案,答案是“25000-35000”,用户还说他们最喜欢的颜色是“红色” .

您还可以将数据存储在 XML 或 JSON 文档中。这使得数据更难在 SQL 中推理,但使得将数据转换为报告或 PDF 变得非常简单。

【讨论】:

  • 一旦数据被存储。我希望用户(表单所有者)能够登录到我的服务,并从表单中查看所有内容,就好像它是一张表一样。然后生成报告,提交数量、提交时间和日期等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多