Я хочу создать систему обмена сообщениями электронной почты, подобную 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 отправляет сообщение пользователю BI, я храню строку в этой таблице. Но если пользователь B удаляет это сообщение, он также удаляет отправленное сообщение от пользователя A.Это неправильно, я хочу точно так же, как обычная система обмена сообщениями электронной почты.Если A удаляет сообщение из отправленного им сообщения, то B не должен удаляться из своего почтового ящика.Я думаю о другой проблеме, которая возникнет, предположим, что пользователь А отправил письмо 500 пользователям одновременно, поэтому в соответствии с моим дизайном у меня будет 500 строк с дублированными телами, то есть не эффективный способ хранения.Не могли бы вы, ребята, помочь мне в разработке дизайна системы обмена сообщениями?