Vấn đề tiềm năng là hiệu suất và bạn chưa có vấn đề về hiệu suất. Có rất nhiều điều bạn có thể làm tùy thuộc vào cơ sở dữ liệu lựa chọn để xử lý việc này trong giải pháp số 1: lập chỉ mục, phần cứng, bộ nhớ đệm, v.v ... Tất cả phụ thuộc vào tần suất người dùng cần để có được số lượng tin nhắn chưa đọc hiện tại. Nhiều lựa chọn trong số này không yêu cầu mã hóa tùy chỉnh ở phía ứng dụng, vì vậy bạn có thể thực hiện chúng với thay đổi mã hoặc rất ít. Làm cho nó dễ dàng hơn để phát triển với các ứng dụng.
Khi người dùng kết nối / đăng nhập, việc đếm số lượng từ cơ sở dữ liệu một lần không phải là xấu. Ứng dụng của bạn sẽ duy trì một danh sách cập nhật liên tục các tin nhắn như email chứ? Việc đếm số lượng chưa đọc từ đây không yêu cầu một chuyến đi khác đến cơ sở dữ liệu và để nhận được tin nhắn mới sẽ phải thực hiện một chuyến đi db.
Thực hiện một chuyến đi đến db mỗi khi đọc tin nhắn để gắn cờ IsRead? lĩnh vực này là đủ mà không cần tính toán lại một lĩnh vực khác.
Với giải pháp số 2 (giữ số đếm trong một trường / trên đĩa), bạn sẽ cần một thói quen để định kỳ xây dựng lại / tính toán lại trường này khi có vấn đề? Và luôn có vấn đề. Bạn sẽ bọc tất cả những điều này trong một giao dịch? Mỗi lần ai đó gửi tin nhắn cho người khác, nó có thể thất bại vì nó không thể cập nhật UnreadCount của người dùng đang nhận do khóa bảng Người dùng? Hay bạn sẽ tạo một bảng riêng cho lĩnh vực này?