需求如下:
一条消息可以发送给多个人,或者多个部门如何设计数据库呢?
消息中如何保存这些人或者部门的ID,
是为每个人在数据库复制该条消息,还是一条消息共享给这些人查看呢?如果是共享一条消息给这些人查看,那删除时候怎么办??
希望有经验的人多多提出,分不是问题菜鸟提问?请大家多帮忙

解决方案 »

  1.   

    用共享还是复制要看具体情况,
    如果你消息的内容不多,可以考虑复制,就像你说的,如果当一个人要删除可能会有问题(这个在下面可以解决),但如果你的内容很多,这样会产中冗余数据,如果采用共享,则可在一条消息记录中加上各个接收消息者的一个标志字段,当一个人要删除该消息,则在其相应的标志字段上标志为删除(也就是逻辑删除,),而其他人还是能看到,当所有人都删除了,也就是每个标志字段都标志为删除了,则可进行物理删除,
    我以前项目中就采用共享的方式,但这样可扩展性不好,如果这时又要加入一个接收消息方,改的就多了.所以适用于需求比较稳定的.改进版,你另外用一个表保存该消息对各用户的许可察看(或是否已删除)的标志。只要三个字段:
    create table [dbo].[MessageStatus](
    messageid int not null,
    userid int not null,
    deleted tinyint not null default(0)
    )
      

  2.   

    消息表中的字段:
    接受方id,消息id,消息状态(未读,已读,删除)消息内容表:
    消息id,消息内容,引用个数阅读消息的人对消息的操作-----更改消息表中的消息状态字段。