我有一个消息表,我的当前消息可以分配给某些人查看,因此我想到了使用两个表来实现此功能,以下是我的主要消息表:
create table tbMessages (
`iMessageId` int unsigned not null auto_increment,
`sContent` varchar(1000) not null default '',
`dtCommitTime` datetime not null default '0000-00-00 00:00:00',
primary key `pk_iMessageId` (`iMessageId`)
)engine=innodb default charset=utf8mb4;
我需要设置指定的人来查看消息,因此我设计了一个tbMessages表来表示用户和消息之间的关系。下面是我的tbUserMessages表:
create table tbUserMessages (
`iSeqId` int unsigned not null auto_increment,
`iUserId` int unsigned not null default 0 comment 'user id',
`iMessageId` int unsigned not null default 0,
`dtCommitTime` datetime not null default '0000-00-00 00:00:00',
primary key `pk_iSeqId` (`iSeqId`)
)engine=innodb default charset=utf8;
然后,我发现每次创建或说我推送消息时,都需要在tbUserMessages表中插入n条记录。由于可以批量选择多个用户团队,因此可能会发生这种情况。每个消息都会被创建,并将被额外写入。在tbUserMessages表中输入1亿条数据,维护成本太高了,一旦删除消息,就需要删除表中的所有记录。这将导致卡被卡住。还有其他更好的设计吗?