Tôi đang cố gắng xác định thiết kế bảng tốt nhất cho tính năng "theo dõi/hủy theo dõi", tương tự như Twitter (chỉnh sửa: Tôi không tạo ứng dụng giống như Twitter). Dưới đây là thiết kế bảng hiện tại của tôi và xử lý php. Tôi không chắc chắn nếu đó là cách tiếp cận tốt nhất và thực sự sẽ đánh giá cao phản hồi của bạn.Thiết kế bảng cơ sở dữ liệu "Theo dõi người dùng"
CREATE TABLE IF NOT EXISTS `user_follow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`follower` int(11) NOT NULL,
`following` int(11) NOT NULL,
`subscribed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `follow_unique` (`follower`,`following`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
On sau, những người theo id sẽ được thêm vào follower
lĩnh vực và id của người dùng sẽ được theo sau sẽ được thêm vào following
. Tôi cũng đang ghi ngày mà người dùng đã đăng ký theo dõi một người dùng khác trong trường subscribed
. Ngày đăng ký có thể được sử dụng để sắp xếp.
Khi người dùng không theo dõi, tôi chỉ cần xóa hàng tương ứng.
Để ngăn các hàng trùng lặp, tôi đã tạo các cột follower
và following
duy nhất. Nếu người dùng là đã sau một id và nhấp chuột để làm theo một lần nữa, tôi nhận được lỗi cơ sở dữ liệu 1062. Ví dụ
Duplicate entry '62 -88' cho khóa 'follow_unique'
Rõ ràng khi đã sau người dùng, người theo dõi sẽ thấy nút unfollow
. Điều này đạt được bằng cách kiểm tra xem một hàng bảng sau có tồn tại giữa 2 người dùng hay không. Nếu rows > 0
tôi hiển thị unfollow
nếu không follow
.
Vâng, bạn nghĩ sao?
Tôi không cố gắng tạo lại Twitter .. Nó cho mục đích hoàn toàn khác nhưng có chức năng giống như Twitter về đăng ký – CyberJunkie
Nghe có vẻ hay nhưng tôi sẽ thêm (nếu bạn chưa có) trên 'follower' và' following' tới bảng Người dùng của bạn. – Dirk
Điều bạn đang làm có vẻ ổn với tôi. Tôi sẽ đề nghị sử dụng 'ENGINE = InnoDB' hơn là' MyISAM' mặc dù, vì vậy bạn có thể thực thi các mối quan hệ 'NGOẠI TỆ 'và' ON DELETE/UPDATE'. Điều này có thể yêu cầu thay đổi động cơ cho nhiều bảng của bạn để có hiệu quả mặc dù. –