【发布时间】:2012-04-16 09:48:46
【问题描述】:
是否可以优化我写的这个查询
我创建了一种动态虚拟数据库,让我的用户能够在不影响数据库结构的情况下添加自定义字段。这是迄今为止结构的一个非常简化的视图。
tables | columns
db_cases | caseid
db_structure | fieldname
db_data | fieldname, data, caseid
db_names | nameid
- 我们可以通过向 db_structure 添加一行来创建一个新字段
- 我们希望记录的任何数据都记录到 db_data。
- 名称存储在 db_names 中,name_id 存储在 db_data 中
我正在尝试将案例输出到 html 表中
希望其余部分是不言自明的,您可以看到它是多么低效。我可以通过连接做同样的事情吗?
SELECT
case_id,
(SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'casestatus'
) AS casestatus,
(SELECT forename_company
FROM db_names
WHERE name_id = (SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'client1'
)
) AS client1_forename_company
FROM db_cases
谢谢
【问题讨论】:
-
我会先将其缩进并使其易于理解。
-
动态数据库?因此,您将自己的数据库语义放在 SQL 数据库之上?可怕...thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
-
从删除它开始。
-
@MarcB 听起来就像 SharePoint(列表)...没什么大不了的 ;-)(实际上,SP 更改了基础表架构并维护内部/漂亮/数据库列名称的映射。)
-
这是一个非常讨厌的 EAV 风格结构的完美例子。在它把你装箱之前先装箱!
标签: mysql sql database-design optimization entity-attribute-value