Ada beberapa pertanyaan/masalah di sini, jadi saya akan mencoba menjawabnya satu per satu.
Semua interaksi turnamen harus real-time/tercermin pada banyak pengguna.
Untuk lalu lintas kecil hingga menengah di situs web Anda, ini mungkin tidak menjadi masalah. Untuk lalu lintas yang lebih padat, ini akan segera menjadi masalah besar.
Pertimbangkan sebagai contoh seberapa sering Anda ingin melakukan polling database dengan panggilan AJAX Anda. Setiap detik? Jadi jika Anda memiliki 100 orang dengan halaman terbuka, Anda memiliki 100 panggilan database setiap detik? Anda akan menemukan bahwa itu akan dengan cepat mematikan database Anda.
Meskipun ini sedikit di luar topik, saya sangat menyarankan untuk menyelidiki cara menyimpan hasil turnamen sebelumnya. Anda dapat menyimpan statistik, dll. dan membiarkannya kedaluwarsa atau kedaluwarsa secara proaktif, tetapi luangkan waktu untuk menelitinya.
Statistik/hasil waktu nyata
Perlu diingat bahwa bergabung membutuhkan waktu dalam database relasional. Jika Anda sangat menormalkan struktur turnamen Anda, maka mendapatkan statistik mungkin menyakitkan. Bagian tersulit dari sistem untuk menjadi efisien adalah agregat dan statistik dari setiap turnamen.
Saat Anda mendesain database/tabel/tampilan/prosedur tersimpan, ingatlah tujuan akhirnya - mendapatkan statistik dengan cepat. Ini mungkin berarti tidak menormalkan data terlalu banyak (untuk menghindari terlalu banyak gabungan). Ini mungkin juga berarti sangat memperhatikan tipe data Anda - misalnya menggunakan bits/shorts/dll. bukannya bilangan bulat.
Cara membuat model berbagai jenis turnamen
Saya tidak terbiasa dengan model turnamen, tetapi saya memiliki saran khusus tentang cara membuat model. =)
Beberapa pertanyaan yang harus Anda tanyakan pada diri sendiri:
-
Apakah semua turnamen memiliki bidang yang sama? Dengan kata lain, untuk turnamen round robin kami menyimpan 10 bidang. Untuk turnamen eliminasi tunggal, kami menyimpan 11 bidang. Jika mereka berbagi 10 bidang yang sama, maka saya akan merekomendasikan menempatkan semua jenis turnamen ke dalam satu tabel dan kemudian menggunakan bidang turnamen_type untuk menentukan jenis turnamen untuk aplikasi Anda.
-
Apakah semua turnamen tidak memiliki bidang yang sama? Buat mereka tabel terpisah - satu per jenis turnamen. Anda mungkin membuat satu tabel untuk data bersama, tetapi kemudian memiliki tabel yang berbeda untuk informasi tertentu.
-
Akankah bidang turnamen tumbuh terpisah dari waktu ke waktu ? Seiring waktu, Anda ingin menambahkan bidang ke jenis turnamen. Jika Anda memprediksi turnamen akan menjadi sangat unik dan sangat spesifik dari waktu ke waktu, buatlah turnamen tersebut terpisah. Jika tidak, Anda akan mendapatkan banyak bidang yang memiliki banyak nilai NULL di dalamnya.
-
Sudahkah Anda mempertimbangkan solusi NoSQL ? Hal yang menyenangkan tentang toko NoSQL adalah ia mendenormalisasi data sehingga Anda tidak memiliki gabungan. Anda juga dapat memiliki heterogen (berbagai jenis data) dalam "tabel" atau wadah yang sama. Hanya sesuatu yang perlu dipertimbangkan karena mungkin membuat hidup Anda jauh lebih mudah. Lihat MongoDB sebagai contoh.