Saya ingin mendesain meja untuk menyimpan hubungan pertemanan di proyek web saya
Setidaknya harus memenuhi 4 kondisi berikut:
yang mengirim permintaan add-friend misalnya (jika A TO B maka kolom ini akan menjadi A)
yang menerima permintaan add-friend misalnya (jika A TO B maka kolom ini akan menjadi B)
status saat ini misalnya (0 menunjukkan ditolak sedangkan 1 menunjukkan diterima atau 2 menunjukkan tidak diproses
hubungan teman kita bersifat bilateral
Jika ada di antara Anda yang berpengalaman dengan ini, ada saran yang disambut
desain saya saat ini (saya pikir buruk sekarang) adalah seperti ini ini adalah kolom
frienshipId
fromUserId
toUserId
status
requestTime
database-design
Hai 福气 鱼
sumber
sumber
Jawaban:
Saya akan membuat tabel seperti yang Anda miliki. Saya menggunakan tipe data dan sintaksis SQL Server, Anda mungkin perlu mengubah tergantung pada platform Anda.
Pengindeksan tabel akan menjadi penting karena tabel tumbuh hingga puluhan dan ratusan juta.
sumber
Di PostgreSQL:
Untuk daftar pertemanan, tampilan:
Anda dapat menggunakannya seperti ini:
sumber
Apa yang membuat Anda berpikir desain Anda saat ini buruk? Berikut adalah tabel buat untuk Oracle:
Jika database adalah Oracle Anda mungkin ingin mempertimbangkan kolom virtual yang diindeks yang akan membatasi data untuk entri yang diperlukan untuk permintaan tertentu. Misalnya, Anda bisa memiliki kolom virtual yang disebut AcceptedFromUserId yang menggunakan fungsi DECODE (StatusId, 1, FromUserId, NULL). Indeks hanya akan berisi AcceptedUserIds dan karenanya akan lebih kecil dari indeks untuk semua UserIds. Jika Anda secara teratur membersihkan permintaan yang ditolak, kolom virtual yang diindeks pada PendingToUserId mungkin lebih berguna.
Alternatif jika Anda mempartisi adalah mempartisi tabel pada StatusId.
Jika Anda tidak memerlukan beberapa permintaan teman di antara pengguna yang sama secara bersamaan, Anda dapat mengabaikan FriendId menggunakan FromUserId, ToUserId, dan StatusId sebagai kunci utama Anda. Dalam hal ini Anda juga harus mempertimbangkan membuat tabel sebagai Tabel yang Terorganisir Indeks.
sumber
Skema:
Dari PHP:
sumber
friends
definisi tabelnya dicurigai karena kesalahan sintaksis.)