Quiero hacer que un sistema de mensajes de correo electrónico como gmail tenga. Me gustaría tener la siguiente opción: Starred, Trash, Spam, Draft, Read, Unread. En este momento tengo la siguiente estructura en mi base de datos:Diseño de base de datos para el sistema de mensajería de correo electrónico
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]
Pero tengo algunos problemas con la estructura anterior. Ahora mismo, si un usuario A envía un mensaje de ms al usuario B, estoy almacenando una fila en esta tabla. Pero si el usuario B borra ese mensaje, este se borra del mensaje A del usuario enviado. Esto es incorrecto, quiero exactamente como lo hace el sistema de correo electrónico normal. Si A borra el mensaje de su artículo enviado, entonces B no debería eliminarse de su bandeja de entrada. Estoy pensando en otro problema que supondrá que un usuario A envíe un correo electrónico a 500 usuarios a la vez, de modo que según mi diseño, tendré 500 filas con cuerpos duplicados, es decir, no una manera eficiente de almacenarlo. ¿Podrían por favor ayudarme a hacer el diseño de un sistema de mensajería?
¿Puede describir, cómo podemos saber en este diseño qué es de usuario y para quién se envía el mensaje? – zarpio
@zarpio el ID de autor en la tabla de mensajes es ID de remitente. –
¿No debería tener una clave compuesta en la tabla Users_Messages_Mapped? – user3308043