2011-07-22 13 views
7

Tôi đã chỉ cần đọc bài viết sau đây trên cùng một chủ đề:Cơ sở dữ liệu để theo dõi các thông báo người sử dụng hoặc hoạt động (Facebook tương tự)

Facebook like notifications tracking (DB Design)Database design to store notifications to users

Một số giải pháp đã được đưa ra nhưng không chính xác những gì tôi cần và làm thế nào nó nên được cho một hệ thống thông báo giống như Facebook. Trong một thông báo, chúng tôi thường có một số liên kết trỏ tới người dùng đã thực hiện một số hành động, liên kết tới bài đăng hoặc video mà anh ấy đã nhận xét, liên kết tới bất kỳ nội dung nào và chúng tôi có một vài liên kết trong một thông báo duy nhất.

notification 
----------------- 
id (pk) 
userid 
notification_type 
notification_text 
timestamp 
last_read 

Với cấu trúc bảng này, chúng tôi có thể hiển thị tất cả thông báo cho một người dùng và giải pháp khá vững chắc. Nhưng trong trường hợp này, chúng tôi chỉ có thể hiển thị thông báo văn bản thuần túy. Chúng tôi không thể liên kết đơn giản với người dùng hoặc bài đăng trên tường.

Tôi đang cố gắng đưa ra giải pháp cho vấn đề này. Một là để lưu trữ các mã BB trong thuộc tính notification_text, nhưng sau đó bạn cần phải viết trình phân tích cú pháp mã BB cho cả ứng dụng web và di động. Một người khác sẽ tạo một bảng khác xuất phát từ bảng thông báo này với ID cho các thực thể chúng ta cần. Ví dụ:

PostCommentNotification : Notification 
---------------------------------------- 
id 
userId (user who commented on a wall post) 
postId (post where comment was made) 

Bây giờ chúng tôi có thể viết mẫu để hiển thị thông báo (chúng tôi không cần thuộc tính văn bản trong bảng thông báo bây giờ) và sau đó xử lý hiển thị nó. Tôi không hài lòng với giải pháp này vì số bảng xuất phát từ bảng thông báo có thể lớn (đối với mỗi loại thông báo).

Tôi đang tìm kiếm ý tưởng! :)

Trả lời

8

Rất tiếc, không có nhiều câu trả lời ở đây. Tôi đã có cùng một vấn đề và không tìm thấy bất kỳ giải pháp tốt. Thừa kế trong cơ sở dữ liệu luôn phức tạp và phức tạp quá nhanh. Vì vậy, tôi đã kết thúc với một giải pháp đơn giản: lưu trữ một mảng giá trị khóa của các tài nguyên được bao bọc trong JSON trong cột "dữ liệu".

Something như thế này:

notification 
----------------- 
id (pk) 
userid 
notification_type 
notification_data 
timestamp 
last_read 

Ví dụ, đối với một thông báo bình luận, bạn sẽ lưu trữ

[{"author_id": "1234", "comment_id":"1234"}] 

Sau đó, bạn sử dụng NOTIFICATION_TYPE để định dạng một cách chính xác dữ liệu của bạn trên client-side.

Không thể thấy bất kỳ hạn chế nào vì chúng tôi chỉ cần id tài nguyên trên máy khách để tạo url hoặc ý định, có trường nguyên tử cho chỉ mục là vô ích.

Hy vọng điều này sẽ hữu ích.

+0

bạn đã thử đọc dữ liệu json bằng javascript chưa? tôi đã không nhưng tôi có thể cho bạn biết rằng khi bạn nhận được dữ liệu json với php, nó không thể đọc dữ liệu json như đối tượng json. php đọc nó như là chuỗi và không thể giải mã chuỗi như dữ liệu json. –

+1

Hoạt động hoàn hảo trong php bằng cách sử dụng json_decode –

+0

Sau đó, bạn sử dụng notification_type để định dạng chính xác dữ liệu của mình ở phía máy khách. Không thể thấy bất kỳ hạn chế nào vì chúng tôi chỉ cần id tài nguyên trên máy khách để tạo các url hoặc các mục đích, có các trường nguyên tử cho các chỉ mục là vô ích. Hi vọng điêu nay co ich. –