Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Apa Persamaan Olimpiade, Pertandingan Sepak Bola UEFA Euro 2016, dan Basis Data?

Mendengar apa yang saya lakukan, orang cenderung menanyakan pertanyaan yang sama kepada saya:Dapatkah Anda mengembangkan sistem yang memprediksi hasil pertandingan sepak bola? Atau hasil medali Olimpiade? Secara pribadi, saya tidak terlalu percaya pada prediksi. Namun, jika kami memiliki sejumlah besar data historis dan indikator yang relevan, kami pasti dapat merancang sistem untuk membantu kami menghasilkan asumsi yang lebih akurat. Dalam artikel ini, kami akan mempertimbangkan model yang dapat menyimpan hasil pertandingan dan turnamen.

Model ini terutama berfokus pada pertandingan, statistik, dan hasil sepak bola Eropa, tetapi dapat dengan mudah diubah untuk mengakomodasi banyak olahraga lainnya. Motivasi utama saya untuk artikel ini adalah dua acara sepak bola besar tahun ini:Kejuaraan UEFA Euro 2016 yang baru saja terjadi, dan Pertandingan Olimpiade Musim Panas 2016 yang sedang berlangsung saat ini.

Apa yang Kami Ketahui Sebelum Turnamen Dimulai?

Sebelum turnamen dimulai, kami mengetahui hampir semua hal tentangnya — kecuali yang paling penting:siapa yang akan menang. Mari kita nyatakan secara singkat apa yang sudah kita ketahui:

  • Tanggal dimulai dan berakhirnya turnamen
  • Lokasi di mana pertandingan akan berlangsung
  • Waktu yang tepat untuk memulai pertandingan
  • Tim mana saja yang lolos ke turnamen
  • Para pemain di masing-masing tim ini
  • Kinerja masing-masing pemain di masa lalu dan performa mereka saat ini

Detail Kecocokan Apa yang Ingin Kami Simpan?

Turnamen terdiri dari beberapa pertandingan. Sebelum kami menyimpan detail kecocokan, kami perlu:

  • Hubungkan setiap pertandingan dengan turnamen
  • Rekam babak turnamen saat pertandingan dimainkan (mis. penyisihan grup, semi-final)

Kami juga perlu menyimpan detail untuk pertandingan tunggal, termasuk:

  • Tim yang terlibat dalam pertandingan
  • Starting lineup dan pergantian pemain
  • Acara pertandingan (dalam sepak bola ini adalah:gol, penalti, pelanggaran, kartu kuning, dll.)
  • Skor akhir
  • Tindakan pemain selama pertandingan

Kami akan menggunakan data ini untuk merekam semua peristiwa pertandingan penting. Membandingkan performa pemain sebelum dan selama pertandingan bisa membawa pada kesimpulan tertentu. Mungkin kami tidak dapat memprediksi hasil akhir dari kinerja mereka (yaitu menang atau kalah), tetapi statistik pasti dapat membantu kami membuat asumsi dengan tingkat keandalan.

Memperkenalkan Model




Model ini dibagi menjadi empat bidang utama:

  • Tournament details
  • Match details
  • Events
  • Indicators and Performance

Tabel di luar area ini adalah kamus (sport , phase , position ), katalog (sport_event , team , player ) dan satu relasi banyak-ke-banyak (plays ).

Kami akan menjelaskan tabel yang tidak dikategorikan terlebih dahulu, lalu mengamati setiap area dari dekat.

Tabel Tanpa Kategori

Tabel ini penting karena tabel dari keempat area menggunakannya sebagai kamus atau katalog.

sport tabel mencantumkan semua olahraga yang akan kami simpan di database kami. Kami mungkin hanya memiliki satu olahraga di sini, sepak bola pria, tetapi tabel ini memberi kami fleksibilitas untuk menambahkan olahraga serupa (misalnya sepak bola wanita) jika diperlukan.

Dalam sport_event meja, kami akan menyimpan acara yang terkait dengan olahraga kami. Salah satu contohnya adalah “Olimpiade 2016”.

phase table adalah kamus yang menampung semua kemungkinan tahapan turnamen. Ini berisi nilai-nilai seperti “tahap grup” , “babak 16 besar” , “perempat final” , “semifinal” , “akhir” .

team tabel adalah, seperti yang Anda duga, daftar sederhana dari semua tim. Nilai yang mungkin adalah “Kroasia” , “Polandia” , “AS” dll. Jika kami menggunakan database untuk menyimpan informasi tentang kompetisi klub atau liga, kami juga akan memiliki nilai seperti “Barcelona” , “Real Madrid” , “Bayern” , “Manchester United” dll.

Di player tabel, kami akan menyimpan catatan untuk semua pemain yang tergabung dalam tim terkait.

plays tabel adalah satu-satunya hubungan banyak-ke-banyak kami, dan ini menghubungkan pemain dan tim. Seorang pemain dapat menjadi bagian dari lebih dari satu tim pada saat yang sama (misalnya tim nasional dan klub), tetapi selama turnamen mereka jelas hanya akan bermain untuk satu tim.

Akhirnya, kami memiliki position meja. Kamus sederhana ini akan menyimpan daftar semua posisi yang dibutuhkan. Dalam sepak bola, ini termasuk penjaga gawang, bek tengah, striker, dll.

Detail Turnamen

Catatan: Jika Anda hanya ingin menyimpan hasil pertandingan tunggal, Anda tidak perlu menggunakan bagian ini.

Sebuah turnamen terdiri dari lebih dari satu pertandingan; baik UEFA Euro 2016 dan acara sepak bola di Olimpiade Musim Panas 2016 adalah turnamen. Seperti yang kami katakan sebelumnya, kami dapat menyimpan satu pertandingan di database kami, tetapi kami juga dapat menghubungkan pertandingan dengan turnamen yang relevan. Tabel di bagian Turnamen adalah:

  • tournament – Ini berisi semua data turnamen dasar:olahraga, tanggal mulai, tanggal akhir, dll. Kita juga perlu menyimpan nama turnamen dan deskripsi tempat berlangsungnya. sport_event_id atribut ini opsional karena turnamen tidak harus dikaitkan dengan acara yang lebih besar (seperti Olimpiade).
  • group – Ini mencantumkan semua grup di turnamen itu. UEFA Euro 2016 memiliki enam grup, A hingga F.
  • participant – Ini adalah tim yang bermain di turnamen; setiap peserta dapat ditugaskan ke grup. Sebagian besar turnamen dimulai dengan babak penyisihan grup dan kemudian berlanjut ke babak sistem gugur (misalnya UEFA Euro, Piala Dunia UEFA, sepak bola Olimpiade). Beberapa turnamen hanya memiliki babak penyisihan grup (misalnya liga nasional), sementara turnamen lainnya hanya memiliki babak sistem gugur (misalnya piala nasional).
  • in_team – Tabel ini menyediakan relasi many-to-many yang menyimpan informasi tentang pemain yang terdaftar untuk turnamen tersebut dan posisi yang diharapkan.
  • tournament_schedule – Menurut saya, ini adalah tabel yang paling menarik di bagian ini. Daftar semua game yang dimainkan selama turnamen ini disimpan di sini. tournament_id atribut menunjukkan turnamen mana yang dimiliki setiap pertandingan, dan phase_id atribut mendefinisikan fase di mana pertandingan akan berlangsung. Kami juga akan menyimpan lokasi pertandingan dan waktu dimulainya pertandingan. Kedua peserta akan dijelaskan oleh bidang teks. Ketika babak penyisihan grup selesai, kita akan tahu semua pertarungan untuk babak penyisihan. Sebagai contoh, pada awal UEFA Euro 2016, kami tahu bahwa pemenang Grup E (1E) akan bermain melawan runner-up Grup D (2D). Setelah ketiga babak fase grup dimainkan, pasangan ini adalah Italia vs. Spanyol.

Detail Pertandingan

Match details area digunakan untuk menyimpan data untuk pertandingan tunggal. Kami akan menggunakan dua tabel:

  • match – Ini berisi semua detail tentang satu pertandingan; pertandingan ini dapat dikaitkan dengan turnamen, tetapi juga dapat berupa permainan tunggal. Jadi tournament_schedule_id atribut adalah opsional, dan kami akan menyimpan sport_id , start_time dan location atribut lagi di sini. Jika pertandingan adalah bagian dari turnamen, maka tournament_schedule_id akan diberi nilai. team_1_id dan team_2_id atribut adalah referensi ke tim yang terlibat dalam pertandingan. goals_team_1 dan goals_team_2 atribut berisi hasil pertandingan. Keduanya wajib dan harus memiliki “0” sebagai nilai default untuk keduanya.
  • in_match – Tabel ini adalah daftar semua pemain yang terdaftar untuk pertandingan itu; pemain yang tidak berpartisipasi akan mendapatkan NULL di started_at atribut, sedangkan pemain yang masuk sebagai pengganti akan memiliki started_at> 0 . Jika seorang pemain diganti, mereka akan memiliki ended_at atribut yang cocok dengan started_at atribut pemain yang menggantikannya. Jika pemain tetap di sepanjang pertandingan, ended_at mereka atribut akan memiliki nilai yang sama dengan end_time atribut.

Acara Pertandingan

Bagian ini dimaksudkan untuk menyimpan semua detail atau peristiwa yang terjadi selama permainan. Dan tabelnya adalah:

  • event – Ini adalah kamus yang mencantumkan semua acara yang ingin kami simpan. Dalam sepak bola, ini adalah nilai-nilai seperti “berkomitmen buruk” , “sangat menderita” , “kartu kuning” , “kartu merah” , “tendangan bebas” , “hukuman” , “tujuan” , “offside” , “substitusi” , “pemain dikeluarkan dari pertandingan” .
  • match_event – Ini menghubungkan acara dengan pertandingan. Kami akan menyimpan event_time serta informasi pemain yang terkait dengan acara tersebut (in_match_id ).
  • related_event – Inilah yang menyatukan informasi acara. Untuk menjelaskannya, mari kita lihat contoh ketika Pemain A melanggar Pemain B. Kami akan memasukkan catatan di match_event tabel yang menunjukkan bahwa Pemain A melakukan pelanggaran dan tabel lain yang menunjukkan bahwa Pemain B melakukan pelanggaran. Kami juga akan menambahkan catatan ke related_event tabel, di mana 'pelanggaran yang dilakukan' akan menjadi orang tua dan 'pelanggaran yang diderita' akan menjadi anak. Kami juga akan mencatat hasil pelanggaran:kartu kuning, tendangan bebas atau tendangan penalti, dan mungkin gol.

Indikator dan Performa

Bagian ini akan membantu kami menganalisis pemain dan tim sebelum dan sesudah pertandingan.

indicator tabel adalah kamus dengan seperangkat indikator yang telah ditentukan untuk setiap pemain sebelum setiap pertandingan. Indikator ini harus menggambarkan bentuk pemain saat ini. Daftar ini dapat berisi nilai seperti:“jumlah gol dalam 10 pertandingan terakhir” , “jarak rata-rata yang ditempuh dalam 10 pertandingan terakhir” , “jumlah penyelamatan GK dalam 10 pertandingan terakhir” .

performance kamus sangat mirip dengan indicator , tetapi kami akan menggunakannya untuk menyimpan hanya nilai yang terkait dengan satu kecocokan:“jarak yang ditempuh” , “pass akurat” , dll.

player_indicator dan performance_indicator tabel memiliki struktur yang hampir sama:

  • in_match_id – mengacu pada pemain yang mengambil bagian dalam pertandingan tertentu
  • indicator_id / performance_id – mereferensikan indicator atau ”kamus kinerja
  • value – menyimpan nilai untuk indikator tersebut (mis. pemain menempuh jarak 10,72 km)
  • description – memiliki deskripsi tambahan, jika diperlukan
  • Apa yang Terjadi Selama Pertandingan?

    Dengan memasukkan semua data ini, kami dapat dengan mudah mendapatkan detail pertandingan, acara, dan statistik untuk setiap pertandingan di database kami.

    Kueri sederhana ini akan mengembalikan detail dasar untuk pertandingan mendatang:

    SELECT team_1.`team_name`, team_2.`team_name`, `match`.`start_time`, `match`.`location`
    FROM `match`, `team` AS team_1, `team` AS team_2
    WHERE `match`.`team_1_id` = team_1.`id`
    AND `match`.`team_2_id` = team_2.`id`
    

    Untuk mendapatkan daftar semua acara dalam permainan selama pertandingan tertentu, kami akan menggunakan kueri di bawah ini:

    SELECT `event`.`event_name`, `match_event`.`event_time`, `player`.`first_name`, `player`.`last_name`
    FROM `match`, `match_event`, `event`, `in_match`, `player`
    WHERE `match_event`.`match_id` = `match`.`id`
    AND `event`.`id` = `match_event`.`event_id`
    AND `in_match`.`id` = `match_event`.`in_match_id`
    AND `player`.`id` = `in_match`.`player_id`
    AND `match`.`id` = @match
    ORDER BY `match_event`.`event_time` ASC
    

    Ada banyak pertanyaan tambahan yang dapat saya pikirkan; mudah untuk melakukan analisis ketika Anda memiliki data. Jika Anda telah mengukur dan menyimpan sejumlah besar indikator dan data performa pemain, Anda mungkin dapat menghubungkan parameter ini dengan hasil akhir. Saya pribadi tidak percaya dengan prediksi seperti itu; ada faktor keberuntungan selama pertandingan, ditambah banyak faktor lain yang tidak dapat Anda ketahui sampai permainan dimulai. Namun, jika Anda memiliki kumpulan data yang besar dan banyak parameter, peluang Anda untuk membuat prediksi yang lebih akurat akan meningkat.

    Model yang disajikan dalam artikel ini memungkinkan kami untuk menyimpan pertandingan, detail pertandingan, dan riwayat kinerja setiap pemain. Kami juga dapat mengatur indikator formulir untuk setiap pemain sebelum pertandingan. Menyimpan detail yang cukup akan memberi kita lebih banyak parameter yang menjadi dasar asumsi kita. Saya tidak mengatakan bahwa kami dapat memprediksi hasil pertandingan, tetapi kami dapat bersenang-senang dengannya.

    Kami juga dapat dengan mudah mengubah model ini untuk menyimpan data untuk olahraga lain. Perubahan ini tidak boleh terlalu rumit. Menambahkan sport_id atribut ke kamus harus melakukan trik. Namun, saya pikir akan bijaksana untuk memiliki contoh baru untuk setiap olahraga yang berbeda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opsi Basis Data/Pelaporan Penggunaan Paket

  2. Cara Memperbaiki ORA-12505, TNS:pendengar saat ini tidak mengetahui SID yang diberikan di deskriptor koneksi

  3. 12 Operator SQL yang Umum Digunakan

  4. Mengapa Statistik Tunggu Saja Tidak Cukup

  5. Cara membuat Replikasi Snapshot