Edw*_*ard 6 php mysql database-design
我的问题:我有一个mysql数据库,它包含一个事实表(虽然不是每个字段都是查找)和各种其他表.当我想显示来自该"事实"表的数据时,是否有必要对每个单独的查询运行查询,或者是否有办法制作已经完成"查找"的临时表?
示例:表结构 -
因此,例如当我想创建一个php页面来输入这些数据时,它似乎比它需要的更多"工作":
unique_id(未显示为数据输入字段,在提交时自动递增)
模型(下拉框.填充需要查询表#2,其中status = X)
type(只读文本框显示模型类型.需要根据表#2中的列查询表#3)
员工(下拉框.人口需要查询表#4,其中employee_status ="Active")
备注(文本框,用户输入提交的相关注释)
成本(文本框,用户输入与提交相关的成本)
小时(文本框,用户输入与提交相关的小时数)
只是为了得到一个填充有效数据的简单表单,我需要看起来像很多查询/查找.
这是最好的方法吗?有没有更好的办法?
旁白:我可以控制数据结构,所以如果问题是数据库设计,那么这些建议也会有所帮助.
维度表通常不会经常更改,至少相对于事实表的插入数量而言是这样。维度表也比事实表小得多。这使得维度表成为缓存的良好候选者。
有些人的良好效果是渲染表单的部分 HTML 输出,并将所有数据填充为下拉菜单、单选按钮等。然后将该部分 HTML 存储在 memcached 键下,这样您就不必执行任何操作大多数 PHP 请求的数据库查询或 HTML 渲染——您只需从 memcached 中获取预先填充的 HTML 片段并逐字回显即可。我认为这就像数据库驱动输出的“宜家”。
当然,如果您确实更改了维度表中的数据,您可能希望使缓存的 HTML 失效,或者更好地重新生成它并将新版本的 HTML 存储在 memcached 中。
关于进行所有查找,我将指出不需要在事实表中使用伪键。您可以使用自然值,并使其引用维度表的主键,该主键也可以是自然键而不是伪键。在某些情况下,它可能需要更多的空间,但它消除了查找。当然,对于长 varchar 维度继续使用伪键可能是有意义的。