关于查找的PHP mySQL最佳实践

Edw*_*ard 6 php mysql database-design

我的问题:我有一个mysql数据库,它包含一个事实表(虽然不是每个字段都是查找)和各种其他表.当我想显示来自该"事实"表的数据时,是否有必要对每个单独的查询运行查询,或者是否有办法制作已经完成"查找"的临时表?

示例:表结构 -

  • unique_id(自动增量int),
  • model(int,查找表#2),
  • type(int,从表#2到表#3的查找)
  • employee(int,查找表#4)
  • 笔记(文本)
  • 成本(浮点)
  • 小时(浮动)
  • -

因此,例如当我想创建一个php页面来输入这些数据时,它似乎比它需要的更多"工作":

  • unique_id(未显示为数据输入字段,在提交时自动递增)

  • 模型(下拉框.填充需要查询表#2,其中status = X)

  • type(只读文本框显示模型类型.需要根据表#2中的列查询表#3)

  • 员工(下拉框.人口需要查询表#4,其中employee_status ="Active")

  • 备注(文本框,用户输入提交的相关注释)

  • 成本(文本框,用户输入与提交相关的成本)

  • 小时(文本框,用户输入与提交相关的小时数)

只是为了得到一个填充有效数据的简单表单,我需要看起来像很多查询/查找.

这是最好的方法吗?有没有更好的办法?

旁白:我可以控制数据结构,所以如果问题是数据库设计,那么这些建议也会有所帮助.

Bil*_*win 0

维度表通常不会经常更改,至少相对于事实表的插入数量而言是这样。维度表也比事实表小得多。这使得维度表成为缓存的良好候选者。

有些人的良好效果是渲染表单的部分 HTML 输出,并将所有数据填充为下拉菜单、单选按钮等。然后将该部分 HTML 存储在 memcached 键下,这样您就不必执行任何操作大多数 PHP 请求的数据库查询或 HTML 渲染——您只需从 memcached 中获取预先填充的 HTML 片段并逐字回显即可。我认为这就像数据库驱动输出的“宜家”。

当然,如果您确实更改了维度表中的数据,您可能希望使缓存的 HTML 失效,或者更好地重新生成它并将新版本的 HTML 存储在 memcached 中。

关于进行所有查找,我将指出不需要在事实表中使用伪键。您可以使用自然值,并使其引用维度表的主键,该主键也可以是自然键而不是伪键。在某些情况下,它可能需要更多的空间,但它消除了查找。当然,对于长 varchar 维度继续使用伪键可能是有意义的。