0

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

我的表结构如下

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=“工作类型”或typetype=“角色类型”

第二种方法工作得很好,但是当我编写查询以两次引用同一个表以创建两种不同类型的连接时,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'

我担心的不仅仅是这个问题。该项目仍处于早期阶段,但最终会发展壮大,因此我现在有时间放置基本结构,如果我做得对,我将不胜感激。您会推荐哪种方法而不是其他方法,为什么?谢谢

4

2 回答 2

1

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

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

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

于 2012-11-14T14:04:28.877 回答
0

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

除非您在所有这些表中看到相同的“东西”重复——在这种情况下,您希望将“type_type”分离到一个连接表中——我建议坚持使用准确描述它们所包含内容的表。

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

于 2012-11-14T14:38:05.613 回答