仿微信實時聊天簡單資料庫設計
廢話不多說博主先上圖效果
此次實時聊天功能參考了資料,以及請教了師父給出設計,只設計了四張表,分別是,組表,組成員表,聊天記錄表,好友移除表。
這裡我先說下我的設計思路組表的意思和QQ 群一樣,一個組就代表一個群,一個房間,兩個人要想聊天,必須有一方發起聊天的同時先建立一個組,並且把你要聊天的目標拉到組裡,這樣他們就可以在這個組(房間)聊天,我們把一對一好友聊天當成由兩個人組成組,這樣只需在組表裡加個標識,是好友聊天即可。預設這個組是群聊,
組成員表的意思就記錄這個房間有多少人,多少人可以接受到這個房間的訊息,
聊天記錄表顧名思義。
好友移除表的話,這個是為了記錄,拉黑,單向刪除,雙向刪除,比如我和小米是好友,我把小米刪除了,但是小米的好友裡還是有我,這個情況我們就不能把整個好友關係刪除了,所以在這邊要記錄,我刪除了小米,我的好友列表裡沒有小米,小米有我,當小米也把我刪除時候,我們兩人的關係才徹底刪除,此時就要把我們之間組成的組,房間號給徹底刪除。
以下是資料庫
組表:
CREATE TABLE [dbo].[Groups]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [GroupTitle] [nvarchar](250) NULL, [GroupType] [int] NULL, [FinalPost] [nvarchar](250) NULL, [ChatType] [int] NULL, [LastUserId] [bigint] NULL, [UserId] [bigint] NULL, [Status] [int] NULL, [Created] [datetime] NULL, CONSTRAINT [PK__Groups__3214EC0738D1CDA8] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Groups] ADD CONSTRAINT [DF__Groups__GroupTyp__5649C92D] DEFAULT ((0)) FOR [GroupType] GO
ALTER TABLE [dbo].[Groups] ADD CONSTRAINT [DF__Groups__LastUser__573DED66] DEFAULT ((0)) FOR [LastUserId] GO
ALTER TABLE [dbo].[Groups] ADD CONSTRAINT [DF__Groups__UserId__5832119F] DEFAULT ((0)) FOR [UserId] GO
ALTER TABLE [dbo].[Groups] ADD CONSTRAINT [DF__Groups__Status__592635D8] DEFAULT ((0)) FOR [Status] GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'Id' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組標題' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'GroupTitle' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組型別1是單聊天2是群聊' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'GroupType' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最後發表內容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'FinalPost' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'訊息型別' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'ChatType' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最後發表者' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'LastUserId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立者' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'UserId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'狀態' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'Status' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立時間' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups', @level2type=N'COLUMN',@level2name=N'Created' GO
EXEC sys.sp_addextendedproperty @name=N'Groups', @value=N'組表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Groups' GO
組成員表:
CREATE TABLE [dbo].[GroupMembers]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [GroupId] [bigint] NULL, [GroupUserId] [bigint] NULL, [Status] [int] NULL, [Created] [datetime] NULL, PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
ALTER TABLE [dbo].[GroupMembers] ADD DEFAULT ((0)) FOR [GroupId] GO
ALTER TABLE [dbo].[GroupMembers] ADD DEFAULT ((0)) FOR [GroupUserId] GO
ALTER TABLE [dbo].[GroupMembers] ADD DEFAULT ((0)) FOR [Status] GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers', @level2type=N'COLUMN',@level2name=N'Id' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組ID關聯組表ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers', @level2type=N'COLUMN',@level2name=N'GroupId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組成員ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers', @level2type=N'COLUMN',@level2name=N'GroupUserId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'狀態' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers', @level2type=N'COLUMN',@level2name=N'Status' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立時間' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers', @level2type=N'COLUMN',@level2name=N'Created' GO
EXEC sys.sp_addextendedproperty @name=N'GroupMembers', @value=N'組成員表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GroupMembers' GO
聊天記錄表:
CREATE TABLE [dbo].[Messages]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [ChatContent] [ntext] NULL, [ChatType] [int] NULL, [SendingStatus] [int] NULL, [GroupId] [bigint] NULL, [UserId] [bigint] NULL, [Created] [datetime] NULL, PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Messages] ADD DEFAULT ((0)) FOR [ChatType] GO
ALTER TABLE [dbo].[Messages] ADD DEFAULT ((0)) FOR [SendingStatus] GO
ALTER TABLE [dbo].[Messages] ADD DEFAULT ((0)) FOR [GroupId] GO
ALTER TABLE [dbo].[Messages] ADD DEFAULT ((0)) FOR [UserId] GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'Id' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'訊息內容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'ChatContent' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'訊息型別' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'ChatType' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'傳送狀態' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'SendingStatus' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組Id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'GroupId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立者ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'UserId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立時間' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages', @level2type=N'COLUMN',@level2name=N'Created' GO
EXEC sys.sp_addextendedproperty @name=N'Messages', @value=N'聊天記錄表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Messages' GO
好友移除表
CREATE TABLE [dbo].[FriendsRemove]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [GroupId] [bigint] NULL, [UserId] [bigint] NULL, [Status] [int] NULL, [Created] [datetime] NULL, PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
ALTER TABLE [dbo].[FriendsRemove] ADD DEFAULT ((0)) FOR [GroupId] GO
ALTER TABLE [dbo].[FriendsRemove] ADD DEFAULT ((0)) FOR [UserId] GO
ALTER TABLE [dbo].[FriendsRemove] ADD DEFAULT ((0)) FOR [Status] GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove', @level2type=N'COLUMN',@level2name=N'Id' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'組Id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove', @level2type=N'COLUMN',@level2name=N'GroupId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'刪除記錄人ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove', @level2type=N'COLUMN',@level2name=N'UserId' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'狀態' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove', @level2type=N'COLUMN',@level2name=N'Status' GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'建立時間' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove', @level2type=N'COLUMN',@level2name=N'Created' GO
EXEC sys.sp_addextendedproperty @name=N'FriendsRemove', @value=N'臨時好友移除表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'FriendsRemove' GO
次部落格本人原創 如果各位有夥伴有不懂之處,或者發現博主的設計缺點 歡迎指出 轉載 林啊鋮 QQ 964878912