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

Apakah ada keuntungan/kerugian menyimpan nilai bidang sebagai array JSON daripada membuat tabel baru dan hubungan satu-ke-banyak bertaruh?

Dalam pengalaman saya itu sangat tergantung pada data yang disimpan. Kedua cara tersebut memiliki kelebihan dan kekurangan. Jika ini adalah MMORPG webgame lalu katakan Anda memiliki PC yang memiliki sabuk. Dan PC dapat menempatkan ramuan di sabuk itu untuk akses cepat selama pertempuran. Jadi kami ingin menyimpan id ramuan, yang disimpan di sabuk karakter.

Permintaan yang paling umum adalah "dapatkan semua ramuan yang dimiliki karakter X". Dan itu akan berjalan cukup cepat dalam kedua kasus.

Manfaat menyimpan ramuan-id ini sebagai tabel terpisah:

  • Anda dapat mencari id ramuan tertentu dan itu sangat cepat. Contoh dalam game:admin telah menghapus beberapa ramuan dari game dan oleh karena itu Anda perlu memperbarui sabuk semua orang
  • Anda bisa mendapatkan statistik yang bagus. Contoh dalam game:cari ramuan yang paling sering digunakan di antara semua pemain
  • Basis data akan menjaga integritas data. Contoh dalam game:Anda tidak akan pernah menghadapi situasi saat Anda menggunakan ramuan dan permainan mengatakan "Ups, ramuan dengan id itu tidak ada"
  • Ini bagus untuk konsistensi. Contoh dalam game:Anda mengambil ramuan dari ikat pinggang dan memasukkannya ke dalam ransel. Gim ini dapat mengimplementasikannya dengan memanggil transaksi dengan dua pernyataan SQL sederhana yang jelas.
  • Anda dapat melakukan GABUNG. Contoh dalam game:kita perlu mendapatkan daftar ramuan di sabuk beserta nama, berat, dan gambarnya yang disimpan di tabel terpisah.
  • Anda dapat memperbarui satu item, tanpa perlu memperbarui seluruh sabuk. Contoh paksa dalam game:Anda memiliki sejuta ramuan di sabuk Anda dan Anda meminumnya.

Manfaat menyimpan sebagai json:

  • Jika ini adalah game browser yang menggunakan javascript di sisi klien, maka Anda mendapatkan objek Belt json dengan satu permintaan sederhana alih-alih melakukan Select-query dan kemudian mengonversi ke json
  • Menjaga urutan item jauh lebih mudah, karena array json sudah dipesan. Dengan pendekatan tabel, Anda memerlukan kolom tambahan yang disebut "pesanan" dan memperbaruinya setiap saat dan memeriksa apakah dua item tidak memiliki urutan yang sama, dll.
  • Anda dapat melakukan banyak pengaturan ulang di Sabuk di sisi klien, lalu klik "Terapkan" — boom, dengan satu kueri Anda dapat memperbarui seluruh sabuk. Sedangkan dengan pendekatan tabel, Anda memerlukan setidaknya dua kueri untuk itu (HAPUS + MASUKKAN)
  • selain itu, DBMS populer memiliki plugin yang mendukung fungsi json dalam database

Intinya:itu bukan utama keuntungan dan tidak kritis masalah. Semuanya dapat dipecahkan dan dengan desain aplikasi yang tepat, kedua solusi akan berfungsi dengan baik. Sebelum memutuskan cara menyimpan data, tanyakan pada diri Anda, kasus penggunaan apa yang paling umum untuk data ini dan pilih solusi setelahnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan DATE_ADD dengan Nama Kolom sebagai Nilai Interval

  2. Susunan MySQL untuk bahasa Portugis

  3. Bagaimana saya bisa mengoptimalkan fungsi ORDER BY RAND () MySQL?

  4. Menjalankan Galera Cluster di Kubernetes

  5. Contoh Spring Boot CRUD Dengan MySQL