我有一个用于消息的MSSQL表。我有客户,工作人员和用户,每个人都有各自的表。对于此消息传递组件,可以将消息发送给客户端工作人员或用户。为了区分发送者/接收者是哪种类型,我在消息表中有一列是tiny-int,用户为1,客户端为2,工作者为3。
因此,当我尝试接收消息时,什么是从相应表(客户端,用户或工作人员)中检索发件人名称的理想方法,而无需进行多次查询。
我知道我可以先执行查询以检查类型列,然后执行另一个查询以获取名称,但是我不希望这样做是为了解决性能问题。
您可以创建一个通用视图,该视图仅列出每种消息的相关列以及消息类型,然后从您的消息表中加入该列。
CREATE VIEW ExampleView
AS
begin
SELECT
firstname,
lastname,
1 AS MessageType
FROM
dbo.Users
union ALL
SELECT
firstname,
lastname,
2 AS MessageType
FROM
dbo.Clients
union ALL
SELECT
firstname,
lastname,
3 AS MessageType
FROM
dbo.Workers
END
询问:
SELECT
a.MessageText,
isnull(b.Firstname,'')+ISNULL(b.lastname,'') AS Name
FROM Messaging a
INNER JOIN ExampleView b ON a.MessageType = b.MessageType
如果空间不是一个大问题,则可以将消息类型直接存储在Users,Clients和Workers表上,然后直接加入该列...更好的性能,但实际上并不是很好的数据库设计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句