1. 程式人生 > >仿微信實時聊天簡單資料庫設計

仿微信實時聊天簡單資料庫設計

  廢話不多說博主先上圖效果

 

此次實時聊天功能參考了資料,以及請教了師父給出設計,只設計了四張表,分別是,組表,組成員表,聊天記錄表,好友移除表。

       這裡我先說下我的設計思路組表的意思和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