首页 程序笔记 设计一个消息通知表,附带已读未读功能

设计一个消息通知表,附带已读未读功能

如果要实现向全部用户发送通知,并支持每个用户的已读、未读状态,以及逻辑删除通知功能,可以采用以下表设计:

表名:Notifications
字段    数据类型    描述
id    INTEGER    消息通知的唯一标识符(主键)
title    VARCHAR(100)    消息标题
content    TEXT    消息内容
sender    VARCHAR(50)    发送者(可选,如果有发送者的概念)
timestamp    DATETIME    消息创建时间
is_deleted    BOOLEAN    标记消息是否逻辑删除(已删除为 true,未删除为 false)

表名:UserNotifications
字段    数据类型    描述
id    INTEGER    唯一标识符(主键)
notification_id    INTEGER    关联的通知ID(外键,连接到Notifications表的id字段)
user_id    INTEGER    接收者用户ID(外键,连接到用户表的用户ID字段)
is_read    BOOLEAN    标记消息是否已读(已读为 true,未读为 false)

在这个设计中,Notifications表用于存储实际的通知消息,每条通知对应一个唯一的id。该表中的"sender"字段指定了通知的发送者,"timestamp"字段记录通知创建时间,"is_deleted"字段用于标记消息是否逻辑删除。

UserNotifications表用于建立通知和用户之间的关联。每个用户会在表中有一条记录,与其收到的通知进行关联。"notification_id"字段是一个外键,用于连接到Notifications表中对应通知的id。"user_id"字段是另一个外键,用于连接到用户表中的用户ID,表示该通知是发送给哪个用户的。

UserNotifications表中的"is_read"字段用于标记用户是否已读了该通知。当通知被用户阅读后,将该字段标记为true,表示消息已读。如果用户尚未阅读通知,该字段将保持为false,表示消息未读。

逻辑删除可以通过在Notifications表中的"is_deleted"字段进行标记。当通知被删除时,将该字段标记为true,表示消息已被逻辑删除。而在UserNotifications表中仍然保留记录,以便保持每个用户与通知的关联关系。

这种设计允许您同时支持向所有用户发送通知,并且可以记录每个用户的已读未读状态以及逻辑删除通知的功能。

2

站心网

如果要实现向全部用户发送通知,并支持每个用户的已读、未读状态,以及逻辑删除通知功能,可以采用以下表设..

为您推荐

如何设计功能测试用例

最近招聘面试测试工程师,发现很多测试工程师都是半路出家,对一些基本的测试概念,思路与技术没有认知。在设计测试用例的时候只是基于直觉与经验去测试。这就导致测试用例的设计既不全面,也不科学。一般功能测试指..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

一个简单的大转盘抽奖程序(附.NetCore Demo源码)

最近闲下来在做一些demo,现在讲一下做的一个简单的大转盘抽奖demo,前端lottery,layui,后端.net core,sqlsugar,数据库用的mysql1.前端实现:前端用的是基于开源的lottery,其中有些改动的,使得前端可以自适应pc端..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

多语言网站数据库文章表设计

设计一个支持多语言的网站数据库时,应该确保内容能够方便地扩展和管理。以下是多语言数据库表设计的关键原则和示例:设计原则分离内容与语言:将与语言相关的内容独立存储,不直接硬编码到主要表中。每个支持多语言..

ASP.NET MVC最常用的设计模式代码示例

ASP.NET MVC 是一个基于分层架构的框架,其核心架构本身已经实现了 MVC 模式(Model-View-Controller)。除了 MVC 模式,开发者在使用 ASP.NET MVC 开发应用时,通常会结合其他设计模式以提高代码的可维护性、可扩展..

微软 .NET 9 正式发布!专为云原生和生成式 AI 应用设计

微软正式发布了 .NET 9,这是一次重大的版本更新。微软在 .NET 9 中带来了一系列新特性和改进,主要聚焦在性能优化、云原生支持、AI集成以及开发者体验的提升。以下是一些重要的更新亮点:性能改进:在 .NET 9 中,..

.NET 9 中System.Text.Json 的新增功能

在 .NET 9 中,System.Text.Json 进行了多个重要的更新和增强,进一步提升了 JSON 处理的性能、灵活性和易用性。以下是 .NET 9 中 System.Text.Json 的一些主要新增功能:1. 类型转换器 (Type Converters) 支持.NET ..

设计模式之高质量代码

0,什么是高质量代码我觉得回答这个问题,应该从两个方面考虑。从业务角度考虑。首先,在公司开发一款软件,应该是业务在驱动。所以,从这个角度来说,代码第一个应该满足的是业务需求,如果连最基本的业务需求都满..

每一个程序员,都希望能成为分布式系统架构师

有很多读者经常问我,程序员的学习、成长之路应该怎么规划,才能早日成为一名架构师。作为一个曾经的架构师,在我走上技术管理这条路之后,管理的团队越来越大,现在我管理的技术团队有一百多人,最大的体会就是操心..

.NET 9 即将推出的功能Task.WhenEach

.NET 爱好者!我刚刚偶然发现了一个非常酷的新 PR,它被合并到 .NET 运行时存储库中,我想分享一个例子。希望您能为新的 .NET 版本大肆宣传!在即将到来的 .NET 9 版本中,我们预计会有一个名为 .它在这里让您的异步..

前端CSS常见的三种设计模式

CSS设计模式主要包括OOCSS、SMACSS和BEMCSS等。以下是对这些模式的具体介绍:OOCSS:面向对象的CSS,旨在编写高可复用、低耦合和高扩展的CSS代码。它将抽象(结构)和实现(样式)分离,抽离公共代码,以提高代码的..

Angular Mock 一个类的静态方法

理解 Angular Mock 和 静态方法在 Angular 单元测试中,Angular Mock 是一个强大的工具,它允许我们模拟和替换 Angular 的服务、组件和其他依赖项。而静态方法 是属于类本身,而不是类的实例的方法。它们可以直接通..

.NET Core 3.0创建一个单独的可执行文件

一个独立的应用程序是一个很好的方式来共享您的应用程序,因为所有的组件、运行时和框架都包含在应用程序中。您只需提供application.exe文件,而不必担心其他计算机上是否存在框架或运行时安装状态。.NET Core 3.0预..

类似php iconv的函数功能,C#实现方法

在与一个第三方接口对接时,发现对方无法用GZip解压我发过去的数据,看了对方PHP的示例代码,发现对方使用的是PHP的$file = iconv("IOS-8859-1","UTF-8",gzencode($data_json));大致意思是要先压缩,在把压缩的数组..

系统架构7个非功能性需求

在软件系统里面,功能性需求是面向用户、详细明确的需求,由产品人员根据市场的需要提炼出来,是产品生命周期里最重要的一环。比如电商系统里面的优惠券功能,通常包含需求:优惠券分类、细分领券人群、核销优惠券等..

使用剪映图文成片功能将文章转为视频教程

最近因为ChatGPT的火爆也带火了很多AI工具,今天试用了剪映,它有一个图文成片的功能很强大,我用它尝试把一篇文章转为视频。首先准备文章内容,我直接复制了网站里的这边文章:https://www.leavescn.com/Articles/C..

4款功能强大桌面虚拟机软件推荐

虚拟机软件是现代计算机中必不可少的工具之一,它可以让我们在一台计算机上运行多个操作系统,这为开发人员、测试人员以及研究人员带来了很多便利。在这里,我们将探讨四款最强大的桌面虚拟机软件:VMware Workstati..

.NET常见设计模式面试题

.NET 设计模式是软件工程中的一个重要概念。设计模式可以帮助我们设计和构建更加可靠、可扩展和可维护的软件系统。以下是一些常见的 .NET 设计模式面试题:什么是设计模式?.NET 有哪些常见的设计模式?设计模式有什..

发表回复

返回顶部