当前位置: 首页 > 面试题库 >

通用Web表单的数据库设计

巢星纬
2023-03-14
问题内容

我想构建一个通用Web表单的后端,其中包含用户可以回答的问题。有多种类型的问题。

  • “普通”文本问题:通过一个简单的文本字段回答该问题。 示例 :一般的个人信息,例如姓名。
  • Textarea问题:相同,但是有更多的空间来写答案。 示例 :“您想要添加的更多信息”框。
  • 多选题:带有一些预定义答案的问题,可以从中选择一个。 示例 :您对PHP的编程程度如何?[]不太好[]平均[]我已经写过这本书。
  • …(其他问题类型应该是可添加的,而不必太费力气)

用户输入的输入应存储在MySQL数据库中。

我的问题是表格应该是可编辑的。它不会经常编辑,但是当它更改时,现有的提交不应受到更改的影响。由于这个事实,我认为仅通过XML文件进行配置是不够的。

我的方法如下:

  • 使用MySQL数据库(更好的方法?)对问题进行配置。
  • 数据库布局如下:
    • 问题
    • id:INT
    • 问题:TEXT
    • 类型:枚举(’NORMAL’,’TEXTAREA’,’MULTIPLE’)
    • active:BOOL-如果问题以当前形式使用,则为true。如果不再使用它,并且仅保留在数据库中以与旧提交兼容,则返回false。
    • q_multiplechoice
    • id:INT
    • Questionid:INT
    • 答案:TEXT
    • 意见书
    • id:INT
    • 用户名:INT
    • 提交细节
    • SubmittingID:INT
    • Questionid:INT
    • 给定答案:TEXT

如您所见,它为一个简单的Web表单使用了四个表。我认为这不是在此处使用的最佳方法,而是要您问一下是否可以给我一些有关应该应用哪些设计更改的提示。

(我考虑过的另一种方法是在提交数据库中存储带有呈现的提交的HTML字符串,并使用简单的配置文件来配置问题。旧的提交不会受到配置更改的影响,因为它们已经存储了这种方法的问题是,当设计更改并且应在另一个设计中显示提交时。)


问题答案:

首先,让我们同意否定将HTML存储在数据库中的想法,除了可能只有一些标签(例如换行符,粗体,强调和下划线)仅用于问题的文本。如果将重点放在调查的文本/语义上,而不是
查看 详细信息,那么定义调查和利用其输出将容易得多。

为了支持View(“布局”)配置,可以使用CSS。这将键入问题的ID,该ID将用作View决定存储问题的div(或其他html容器)的ID。在问题记录中也可以列出一些类名,但是用CSS定义。

在建议的数据库模式上,重要的东西似乎已经存在。但是,我看不到提交的响应存储在哪里;是在“提交+提交详细信息”表中?如果是这样,则将MULTIPLE响应类型存储在哪里,它们是否将转换为文本并转换为给定答案?(我认为他们不应该这样做,除非我们更喜欢在竞选期间修改调查后捕获稍有不同的价值。)

一些缺少的属性和想法:

  • 应该使多个(或另一种类型)能够 支持“单选按钮”类型选择 (“仅一个”)。一种可能的方法是在类型中添加一个属性,定义允许的最大选择数,这是一种常见的调查内容:“在以下项中选择3个…”
  • 问题记录可以具有“广告系列”或 SurveyID ,从而可以在同一商店中存储多个调查。
  • 不必太花哨, 可以将 某些 问题 假定 为先前的“布尔”类型的问题 。(如果被调查者对拥有自己的汽车回答“否”,请不要询问换油的频率…)这可以由问题ID和响应值(“通用文本”来定义)。
  • 问题表:添加一个“ 页码 ”,以便对问题进行分组(除非在问题容器概念(例如“调查”或“广告系列”)中定义了此信息)
  • 问题表:添加“ 序列号 ”以允许以预定的顺序获取问题(除非此类来自“调查/活动”表,此处未显示)
  • q_multiplechoice :(或列出给定MULTIPLE CHOICE的选项的任何表;我怀疑该表将其字段显示为问题中的showin。)添加 序列号 ,从而允许以特定顺序列出选项。


 类似资料:
  • 问题内容: 我正在建立一个网站,其中包含不同类型的项目,例如博客,帖子,文章等。用户可以将其中任何一个设置为他/她的最爱。现在,当我处理这个问题时,我有两个选择 为每种对象的用户收藏夹创建一个表。 为所有用户的所有类型的对象创建一个公用表。 第一种结构的问题是,我将不得不查询很多表以显示特定用户的收藏夹。但这将使我可以轻松地将收藏夹分为不同的类别。 但是,如果我必须在一个页面上显示所有收藏夹并将它

  • 我写的ASP/C#页面,我必须采取我已经创建的形式,并将其插入到MS访问数据库。使用以下字段设置MS Access数据库: ID,用户名,密码,名字,姓,地址,地址2,城市,州,邮政编码,电子邮件,性别,年龄,衬衫尺寸,裤子尺寸,电子邮件订阅。 我得到以下错误: 异常详细信息:System.Data.OleDb.OLEDBEException:未为一个或多个必需参数提供值。 我无法找出哪个参数缺少

  • 我想模拟一个学生,老师,班级的关系。每个学生都和一个老师联系在一起(老师可以有很多学生)。只有三个班级。我认为这是三个表格: 学生桌- 教师桌 - 班级表- 我不确定如何在表格中显示师生关系。我们怎么知道哪个老师被分配给哪个学生呢?

  • 问题内容: 我正在尝试构建一种表单生成器,该表单生成器将允许我以灵活的方式定义,显示和存储“测试”。即,允许用户通过网络界面创建一种新型的测试/表单(“分组”)并定义一组将在表单上显示的字段(任何类型的字段,包括日期,文本,广播,复选框等)。我还需要一个结果表,该表将存储保存在每个表单/测试中的值。 作为一个不足的示例,到目前为止,我有以下3个表: 上面的问题-如果没有其他问题-我不确定如何动态显

  • 我正在尝试将表单序列化值发布到控制器(WebAPI自宿主)。我无法理解为什么没有正确绑定NameValueCollection。使用jQuery的客户端: 使用Web API自主机的服务器端: 非常感谢。

  • 全部的 只是想看看用表单中提交的数据更新数据库行的最佳选项是什么。我理解Laravel更新查询生成器,但是我在如何获取表单数据,然后执行该查询方面遇到了困难。相对较新的Laravel:)这是我想出的,只是从我的PHP经验和逻辑: 我曾试图将查询放入一个函数中,然后让表单操作成为函数: 正如我所说,主要问题是试图让命名的表单对象成为更新行的对象。我有两个文本输入字段,分别命名为“body”和“not