1

我是 sql 新手。在我的聊天应用程序中,我在以下数据库表的帮助下存储消息。


SessionTable  -->  SessionID (PK)    Username1   Username2   Time

MessagesTable -->  SessionID (FK)    Username    Message     StartTime

第一个数据库表SessionTable用于生成一个SessionID(IDENTITY(1,1)),用户(仅限于两个)可以借助该表进行对话。每当用户向其他用户发送消息时,消息数据将存储在MessagesTable列中,列Message中包含相应用户的名称Username以及Time用户发送消息的时间。但是我面临的问题是如何获取要存储的确切 sessionID 以及在MessagesTable其中生成的消息SessionTable

我的另一个问题是,当我将消息存储在单个数据库表中时,将来会出现性能问题吗?(我正在创建的项目将在最多 30 个成员中使用)并且还请建议我设计数据库表的方式是否是更好的方法。

4

2 回答 2

2

insert进入行后,SessionTable您可以使用该Scope_Identity()功能将SessionID分配给新行。

至于性能,有太多因素无法提供有用的答案。

于 2013-01-04T05:08:59.210 回答
1

简而言之:似乎您在 Session 表和 Message 表之间存在一对多的关系。因此,您正在尝试加入表抛出公共SessionID列。

根据消息传递应用程序的负载,您还需要考虑索引策略。换句话说,具有高强度读写的表通常会受到性能影响。

解决方案 #1:您肯定需要使用SCOPE_IDENTITY()

DECLARE @SessionID INT;

INSERT INTO dbo.SessionTable  (Username1,   Username2,   Time)
SELECT 'User1', 'User2', GETDATE();

SELECT @SessionID = SCOPE_IDENTITY();    

创建会话后,您需要使用@SessionID在 MessagesTable 中添加消息详细信息。像下面的代码示例:

INSERT INTO dbo.MessagesTable (SessionID, Username,  Message, StartTime)
SELECT @SessionID, 'User1', 'The sample text of the message' GETDATE();
GO

总之:上面发布的代码示例中描述了总体原理。但是,我没有检查所有语法,因此您可能希望在此代码中进行一些语法更正 :)

于 2013-01-04T05:09:13.340 回答