除了贝尔实验室的语言其他语言全都不用 2024-05-15 23:42 采纳率: 71.4%
浏览 8
已结题

关于点赞收藏评论的设计思路问题

最近在开发一个内容管理系统,在设计思路方面,有一些纠结。就是关于点赞收藏和评论的消息通知。现在我有两个思路。第一个思路就是在点赞收藏和评论的各个表里面放一个字段(是否已读)每次获取新消息,就寻找是否已读这个字段为空。点进去之后就把这个字段设置为1 但是这有一个缺点,因为是涉及多个消息通知的表。点赞是一个表,收藏是一个表,评论也是一个表,这样的话,获取消息通知就要运行三次sql 所以我就产生了第二个思路,再新建一个单独的消息通知的表,当用户触发点赞收藏和评论的时候。同时,向消息通知的表里面添加字段,表示有新消息进来。可以指定消息的行为(点赞收藏或评论)这样只需要运行一次就可以了。就可以获取所有的消息通知。大家觉得哪种思路比较合理呢?是第一个比较好,还是第二个比较好呢?

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-15 23:42
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是解决在开发内容管理系统时,如何设计点赞、收藏和评论功能中的消息通知机制,以提高系统性能和用户体验。

    【问题出现原因】:问题出现的原因在于您在设计消息通知机制时,考虑到了两种不同的实现思路,每种思路都有其优缺点。第一种思路涉及到在每个相关表中添加一个“是否已读”字段,但这样会增加数据库查询的次数。第二种思路是创建一个统一的消息通知表,可以减少数据库查询次数,但可能会增加数据管理和维护的复杂性。

    【问题解决方案】:基于问题概括和出现原因,最优解决方案可能是采用第二种思路,即创建一个单独的消息通知表。这样可以将点赞、收藏和评论的通知统一管理,减少数据库查询次数,提高系统效率。同时,这种设计也更易于扩展,如果未来需要添加新的通知类型,只需在消息通知表中添加相应的字段即可。

    【提供代码】:由于这是一个设计思路问题,没有具体的代码错误需要修正,因此不提供具体的代码示例。但可以提供一个简化的设计概念:

    // 假设有一个MessageNotification类,用于表示消息通知
    class MessageNotification {
        private int id;
        private int userId; // 用户ID
        private String action; // 动作类型,如"点赞"、"收藏"或"评论"
        private int targetId; // 目标内容的ID
        private boolean isRead; // 是否已读
    
        // 构造函数、getter和setter省略
    }
    
    // 消息通知表的数据库操作可以封装在一个类中
    class MessageNotificationDAO {
        // 添加消息通知的方法
        public void addMessageNotification(int userId, String action, int targetId) {
            // 实现添加消息到数据库的逻辑
        }
    
        // 获取未读消息通知的方法
        public List<MessageNotification> getUnreadNotifications(int userId) {
            // 实现获取未读消息的逻辑
            return /* 未读消息列表 */;
        }
    
        // 更新消息通知为已读的方法
        public void markAsRead(int notificationId) {
            // 实现更新消息为已读的逻辑
        }
    }
    

    【代码运行方式】:上述代码仅为设计概念,需要根据实际使用的编程语言和数据库技术进行实现。运行代码需要有相应的开发环境,如Java开发环境,以及数据库管理系统,如MySQL或PostgreSQL。

    【代码预期运行结果】:采用第二种设计思路后,预期可以提高系统性能,减少对数据库的查询次数,同时提供更好的可维护性和扩展性。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月15日