【问题标题】:Efficient MySQL Database Structure for Dynamic Form Creation用于动态表单创建的高效 MySQL 数据库结构
【发布时间】:2011-02-01 05:31:50
【问题描述】:

我正在 Codeigniter 中创建一个应用程序,它允许任何人在不登录的情况下创建一个使用不同输入类型(使用文本框、下拉列表、复选框等)填写的表单。此表格可能包含 1-100 个问题,完成后将通过电子邮件发送给其他人,然后由其他人在网站上填写。

我首先设置了类似于this post 的 MySQL 数据库,其中包含许多不同的表,所有表都只有几列。然后我索引并使用外键链接信息。

从那时起,我已经像这样更改并设置了我的数据库,因此我减少了查询:

Document
  id, name, email, recipientname, recipientemail, document name
Document Questions
  document_id, question_id, question, type, comments

与我现在的做法相比,拥有更多表但列更少但查询更多的效率更高吗?我知道normalization 起到了一定的作用,但是您将表做得特别小,在多大程度上影响了性能?

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    从规范化的角度来看,您可以做一些事情来进一步规范化您的数据(收件人可以有自己的实体,类型也可以),但这并不总是访问数据的最佳方式。

    例如,如果您将问题拆分为 4 个不同的实体(类型可以很容易地成为 ENUM):

    Documents
    Document Questions
    Recipients
    Types
    

    然后,要为您的应用程序获取单个表单,您将执行具有多个连接的查询。如果您使用的是 MyISAM,那么您的所有四个表都会被锁定,直到查询完成。具有错误连接和错误索引的查询可能会变得非常慢。

    更好的选择是在数据库上执行四个单独的查询(添加与您正在运行的最常见查询相关的索引)来检索您的数据,这样表将保持锁定更短的时间。

    我知道这是一个极端的例子,但我会更专注于您的索引优化,并在规范化和性能之间取得良好的平衡。

    总而言之,有时完全标准化的数据意味着性能较低。

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多