我正在开发一款可让用户根据用户需求创建自定义项目的应用,该项目基本上是一个可由其他用户提交的表单。
我想允许用户动态地为项目创建新字段(使用Javascript)(基本表单),并为每个字段选择自定义值。
当项目(表单)准备就绪时,可以提交它,并且用户指定的值将转到数据库。然后另一个用户可以提交表单,原始用户选择的值作为该表单的选项。
价值(由用户动态创建)很可能是基本数据,如姓名,电话,电子邮件等。但也有食品,地址等特定数据的选项。我想要用户能够询问他/她认为必要的任何数据。
那么我应该如何构建我的数据库呢?我无法确定用户将为他的项目选择什么或多少字段,我想在传统的关系数据库中做这个应用程序,很可能是Postgres或Mysql。
那么应该为我能想到的所有数据创建列(或允许用户创建),还是可以通过其他方式完成?
答案 0 :(得分:1)
您可能需要查看EAV模型。它有一些优点,因为你可以灵活地创建你想要的任何结构,但它在检索和查询之后也有一些限制。
答案 1 :(得分:1)
您的数据库应在表格中包含以下列,用于表单规范:
答案 2 :(得分:1)
一种可能的选择:
表:输入
inputtypeid
(主要),input_type
,status
表格:字段
fieldid
(主要),inputtypeid
(参考输入),label
表:值
valueid
(主要),fieldid
(参考字段),value
,default
(bool是/否)table:project_forms
pfid
(主要),projid
(参考项目),fieldid
(参考输入)一方面注意到这里。确保您注意不要让用户将个人身份信息存储到此类内容中。或者,如果这样做,请确保采取必要的预防措施来保护这些数据,这在大多数情况下与此设置略有不同。
答案 3 :(得分:1)
我遇到了与评估申请相似的情况。每项评估都提出了一些问题,但问题集会定期更改。我没有使用键/值对为问题和答案创建单独的表,而是利用PHP中的序列化。
(只需要1张桌子)
在显示表单时,使用序列化数据构建所需的其他表单元素。
使用此模型,很难搜索存储在序列化数据中的其他数据,但它简化了开发;我们有几千条记录,每次评估超过100个'问题',我们还没有遇到过问题。