Я хочу создать почтовую систему обмена сообщениями, такую как gmail. Я хотел бы иметь следующий вариант: помеченные, корзины, спам, черновик, чтение, непрочитанные. Сейчас у меня есть следующая структура в моей базе данных:
CREATE TABLE [MyInbox](
[InboxID] [int] IDENTITY(1,1) NOT NULL,
[FromUserID] [int] NOT NULL,
[ToUserID] [int] NOT NULL,
[Created] [datetime] NOT NULL,
[Subject] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Body] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[IsRead] [bit] NOT NULL,
[IsReceived] [bit] NOT NULL,
[IsSent] [bit] NOT NULL,
[IsStar] [bit] NOT NULL CONSTRAINT [DF_MyInbox_IsStarred] DEFAULT ((0)),
[IsTrash] [bit] NOT NULL CONSTRAINT [DF_MyInbox_IsTrashed] DEFAULT ((0)),
[IsDraft] [bit] NOT NULL CONSTRAINT [DF_MyInbox_Isdrafted] DEFAULT ((0))
) ON [PRIMARY]
Но я столкнулся с некоторыми проблемами с вышеуказанной структурой. Прямо сейчас, если пользователь A отправляет сообщение пользователю B, я сохраняю строку в этой таблице. Но если пользователь B удаляет это сообщение, он удаляется. Frm user. Отправленное сообщение тоже. Это неправильно, я хочу, чтобы это нормально, как обычная система обмена сообщениями электронной почты. Если A удаляет сообщение из отправленного объекта, B не следует удалять из своего почтового ящика. Я думаю о другой проблеме здесь, которая придет, предположим, что пользователь A отправил почту 500 пользователям одновременно, так как в моем дизайне у меня будет 500 строк с дублирующими телами, а не как эффективный способ хранения памяти. Могли бы вы, ребята, помочь мне в разработке дизайна системы обмена сообщениями?