Tôi đang xây dựng biểu đồ xã hội cho trang web của mình. Người dùng sẽ tạo ra các mối quan hệ (của biểu mẫu đi theo/theo sau) trong đó mỗi bên có thể độc lập theo dõi nhau. bảng người dùng của tôi trông như thế này:SQL Modeling Follower/Các mối quan hệ tiếp theo Đối với mạng xã hội
Users table
- UserId (PK, Auto-incrementing integer)
tư duy như thế nào để mô hình này, tôi đã đi lên với một số lựa chọn thay thế, chẳng hạn như:
(a) Một bảng chứa mỗi hành động 'làm theo' như một hàng riêng biệt.
Relationships table
- FollowerId (FK to Users.UserId)
- FollowedId (FK to Users.UserId)
Điều này có nhược điểm cho nhiều người dùng, nó sẽ tạo ra một số lượng lớn hàng.
(b) Một bảng chứa danh sách của người sử dụng mỗi người dùng được sau như một CSV hoặc cấu trúc khác: (? Và tốn kém)
Relationships table
- FollowerId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
này có nhược điểm là các truy vấn sẽ phức tạp hơn nhiều. Tôi cũng phải duy trì trật tự của các giá trị chuỗi, vv ...
(c) Một mối quan hệ cho mỗi hàng, nơi người dùng có thể vào một trong hai 'bên' của mối quan hệ:
Relationships table
- Party1Id (FK to Users.UserId)
- FollowingParty2 (boolean)
- Party2Id (FK to Users.UserId)
- FollowingParty1 (boolean)
Điều này tiết kiệm hàng trên (a), nhưng các truy vấn phức tạp hơn vì người dùng có thể là một trong hai bên.
(d) Đặt cả 'theo dõi' và 'tiếp theo' như danh sách tương tự (b)
Relationships table
- UserId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
- FollowedBy (e.g. 2,488,28,40)
Điều này có vẻ như tốt nhất của tất cả thế giới, nhưng bây giờ tôi phải sử dụng các giao dịch để cập nhật nhiều hàng .
Giả sử tôi đang tìm cách mở rộng quy mô lớn, mặc dù nhận thức được rằng "sự cố của Facebook không phải là vấn đề của tôi" - tùy chọn nào hoặc tùy chọn nào khác được ưu tiên?