Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Desain basis data aplikasi web sosial:bagaimana cara meningkatkan skema ini?

Secara keseluruhan, saya tidak melihat kekurangan besar dalam penyiapan atau skema Anda saat ini.

Yang saya heran adalah pembagian Anda menjadi 3 tabel Pengguna*. Saya mendapatkan apa yang Anda inginkan dari niat Anda (memiliki hal-hal terkait pengguna yang berbeda secara terpisah) tetapi saya tidak tahu apakah saya akan menggunakan hal yang sama persis. Jika Anda berencana untuk hanya menampilkan data dari User tabel di situs, ini baik-baik saja, karena info lain tidak diperlukan beberapa kali pada halaman yang sama tetapi jika pengguna perlu menggunakan nama asli mereka dan menampilkan nama asli mereka (seperti John Doe alih-alih doe55) daripada ini akan memperlambat banyak hal ketika data bertambah besar karena Anda mungkin membutuhkan bergabung. Memiliki Preferences terpisah sepertinya pilihan pribadi. Saya tidak memiliki argumen yang mendukung atau menentangnya.

Tabel many-to-many Anda tidak memerlukan PK tambahan (mis. PostFavoriteID ). Gabungan utama dari kedua PostID dan UserID akan cukup karena PostFavoriteID tidak pernah digunakan di tempat lain. Ini berlaku untuk semua tabel gabungan

Seperti sebelumnya. jawaban, saya tidak melihat keuntungan atau kerugian. Saya mungkin letakkan keduanya di tabel yang sama karena NULL (atau mungkin lebih baik -1 ) nilai tidak akan mengganggu saya.

Saya akan menempatkan mereka ke dalam tabel yang sama menggunakan pemicu untuk menangani peningkatan ViewCount tabel

Anda menggunakan skema yang dinormalisasi sehingga setiap penambahan dapat dilakukan kapan saja.

Tidak dapat memberi tahu Anda, belum melakukannya, tetapi saya tahu bahwa Solr sangat kuat dan fleksibel, jadi saya pikir Anda harus melakukannya dengan baik.

Ada banyak utas di sini di SO membahas ini. Secara pribadi, saya lebih suka kunci pengganti (atau kunci nomor unik lainnya jika tersedia) karena membuat kueri lebih mudah dan lebih cepat karena int dicari lebih mudah. Jika Anda mengizinkan perubahan nama pengguna/email/apa pun-PK-Anda, maka diperlukan pembaruan besar-besaran. Dengan kunci pengganti, Anda tidak perlu repot.

Yang juga akan saya lakukan adalah menambahkan hal-hal seperti created_at , last_accessed at (paling baik dilakukan melalui pemicu atau prosedur IMO) agar beberapa statistik sudah tersedia. Ini benar-benar dapat memberi Anda statistik yang berharga

Strategi lebih lanjut untuk meningkatkan kinerja adalah hal-hal seperti memcache, counter cache, tabel yang dipartisi,... Hal-hal seperti itu dapat didiskusikan ketika Anda benar-benar dikuasai oleh pengguna karena mungkin ada hal/teknologi/teknik/... yang sangat spesifik untuk masalah Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penggunaan parameter untuk mysql_query

  2. Membandingkan nilai tanggal CURDATE() dengan bidang stempel waktu penuh

  3. Saya ingin memasukkan data ke database mysql menggunakan PDO PHP. Tapi datanya tidak dimasukkan

  4. Perbarui MySQL dari CSV menggunakan JAVA

  5. MySQL 1062 - Entri duplikat '0' untuk kunci 'PRIMARY'