Tabel tunggal dengan lebih banyak kolom vs beberapa tabel dengan lebih sedikit kolom

8

Apa yang akan menjadi desain database yang lebih baik untuk situs web jejaring sosial? Satu tabel dengan lebih banyak kolom dan lebih sedikit baris, atau beberapa tabel dengan lebih sedikit kolom tetapi lebih banyak baris?

Misalnya: Pengguna dapat memposting pembaruan di dinding mereka atau dalam grup.

Dua desain database yang dapat saya pikirkan adalah:

Desain 1

UserPosts

  • Indo
  • identitas pengguna
  • pos
  • tanggal Waktu

UserGroupPost :

  • Indo
  • groupId
  • identitas pengguna
  • pos
  • tanggal Waktu

Masalah potensial : Mungkin memerlukan gabungan, yang dapat (di masa depan) menjadi permintaan yang lambat.

Desain 2

Posting :

  • Indo
  • identitas pengguna
  • groupId
  • pos
  • datetime (di mana groupid akan menjadi nol jika pengguna memposting di dinding mereka)

Masalah Potensial : Perulangan pada dataset besar bisa memakan waktu (lama).


Bagaimana saya bisa mendapatkan kinerja yang lebih baik ketika data meningkat? Apakah ada cara lain (lebih baik)?

Siddharth Patel
sumber
Bagi saya, beberapa kolom lebih banyak baris. Sangat mudah untuk mengelola porsi demi porsi daripada memiliki dataset besar. Jika masalah besar Anda adalah data besar di masa depan, jangan. Sql server dirancang dengan masalah seperti itu, yang harus Anda lakukan adalah mendesainnya dengan benar. Memiliki dataset besar bukanlah masalah jika Anda tahu cara mengoptimalkan kueri Anda
Vincent Dagpin
Menggunakan rencana eksekusi benar-benar sangat membantu. Ini memberitahu Anda apa masalah dengan permintaan Anda. Ps: jangan lakukan perulangan, jika mungkin gunakan pemrosesan massal, fitur itu sudah ada, gunakan
Vincent Dagpin

Jawaban:

2

Kecenderungan saya di sini akan selalu menjadi opsi desain 1, atau setidaknya di sepanjang garis itu. Jangan khawatir terlalu banyak tentang mencoba menghilangkan kebutuhan untuk bergabung dengan tabel di kueri masa depan - setiap database yang dinormalisasi akan menggunakan gabungan dalam setiap pertanyaan yang berguna, itu hanya database relasional.

Juga, mengapa Anda harus bergabung dengan tabel userPosts dan userGroupPosts untuk situs web Anda? Apakah mereka tidak akan ditampilkan secara terpisah? Satu-satunya alasan Anda bergabung dengan tabel ini adalah mungkin ketika mencari posting, tetapi seharusnya tidak terlalu sulit untuk menulis pertanyaan yang efisien untuk itu. Selain itu, Anda mungkin ingin menanyakan tabel untuk keperluan analisis, tetapi itu bukan tujuan utama dari database ini.

Desain 2 setidaknya bisa berarti bahwa Anda berakhir dengan meja yang sangat sibuk.

Opsi terbaik adalah prototipe masing-masing dan menjalankan beberapa tes. Buat prototipe dari setiap opsi desain, dan lakukan pembandingan kinerja pada operasi yang berbeda dengan beberapa data tiruan.

Ian_H
sumber
-3

Bagi saya, sesuai struktur Anda saat ini Desain 2 lebih baik. Anda dapat mengimplementasikan partisi, kueri yang dioptimalkan & cara terstruktur untuk membuat database / tabel akan mengurangi waktu eksekusi. Tetapi beberapa kasus normalisasi bekerja lebih baik, tetapi sangat tergantung pada arsitektur perancangan basis data Anda.

Dipa
sumber