针对类似数据类型的多个表的单个表

时间:2012-11-14 14:00:41

标签: php mysql sql table-structure

我需要对此方法提出一些建议 - 请参阅下面的示例。

我的表结构如下

data_jobtype
id, identifier (varchar), description (varchar), userid (int)

data_statustype
id, identifier (varchar), description (varchar), userid (int)

data_usertype
id, identifier (varchar), description (varchar), userid (int)

data_roletype
id, identifier (varchar), description (varchar), userid (int)

还有大约10个类似的表。然后我又有了一个想法并创建了一个像

这样的新表
data_types
id, identifier (varchar), description (varchar), userid (int), typetype (varchar)

此表获取上表中的所有数据,typetype字段表示它是哪种类型的数据。例如。 typetype ='jobtype'或typetype ='roletype`

这第二种方法运行得很好但是当我编写一个查询来引用同一个表两次以在两个不同类型的types上创建连接时,我意识到我需要了解是否多次查询单个表查询比多个表更好。示例查询:

select u.*, dt.description usertype_desc, dt2.description roletype_desc
from users u 
left join data_types dt on dt.identifier = u.user_identifier and dt.typetype = 'usertype'
left join data_types dt2 on dt2.identifier = u.role_identifier and dt2.typetype = 'roletype'
Where u.status = 'live'

我不仅担心这个问题。该项目仍处于早期阶段,但它最终会变得很大,所以我现在有时间把基本结构放进去,所以如果我做得对,我会很感激你的意见。你推荐哪种方式而不是其他方法?为什么?感谢

2 个答案:

答案 0 :(得分:1)

在连接条件中链接两种类型的链接要简单得多:

left join data_types dt 
on dt.identifier = u.user_identifier and dt.typetype in ('usertype', 'roletype')

我不认为单表方法会对性能产生影响。问题是什么使得更可读的查询。

答案 1 :(得分:0)

我认为这种方法会给你一些更难编写的复杂SQL,更重要的是长期维护更难。

除非你看到相同的"东西"在所有这些表中都被复制 - 在这种情况下,你想要分开" type_type"进入连接表 - 我建议坚持使用准确描述它们所持有的表格。

随着时间的推移,您可能会想要为statustype添加新字段,为jobtype等添加不同的字段。最终,这些表结构将越来越不相似。