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

Apakah ada cara untuk menggunakan objek json di SQL

JSON sebagai niat

Tidak ada cara untuk bekerja dengan JSON di MySQL. Beberapa DBMS mungkin mendukung JSON, tetapi itu tidak mungkin, dan, selain itu, "dukungan" semacam itu hanya tentang melakukan beberapa operasi khusus JSON, tetapi bukan tentang memodelkan arsitektur Anda (dan kedua hal itu sama sekali berbeda) Selengkapnya , dalam arti penuh, konsep model (yaitu hubungan) untuk MySQL berbeda dari JSON adalah:sebagai DBMS Relasional, mengikuti model data relasional , dan JSON adalah format yang sama sekali berbeda. Anda akan menyimpannya sebagai nilai string biasa, dengan demikian, tidak mungkin melakukan apa pun dengannya dengan cara lain, jika tidak menggunakan fungsi string. Jadi, bahkan bekerja dengan JSON, Anda tidak akan melakukannya di dalam model relasional, dengan demikian, tidak mungkin mempertahankan fitur relasional, seperti integritas referensial, misalnya.

Opsi untuk diselesaikan

Anda memiliki beberapa opsi:

  • Bermigrasi ke Postgree SQL karena telah memperluas dukungan untuk json, sejak versi 9.4 jsonb dan itu bahkan lebih cepat. Ini mungkin pilihan terbaik karena ini adalah RDBMS dan oleh karena itu migrasi tidak akan terlalu sulit seperti untuk DBMS yang benar-benar berorientasi dokumen.
  • Atau migrasi ke Mongo sekarang (jika itu niat Anda), sebelum terlambat. Perhatikan, bahwa Mongo benar-benar berbeda dari RDBMS, berorientasi pada dokumen. Saya rasa ini adalah opsi terbaik untuk proyek Anda dan untuk klien Anda (dan tugas Anda adalah menjelaskannya)
  • Ubah seluruh arsitektur sehingga Anda tidak akan menyimpan objek JSON dan akan bekerja dengan entitas yang dinormalisasi (dalam hal DB relasi). Ini berarti - ya, pemfaktoran ulang seluruh kode, mengubah semua relasi, dll. Dalam situasi nyata ini hanya opsi teoretis, Anda tidak akan diberi waktu atau uang untuk itu.
  • Terapkan perpustakaan JSON Anda sendiri untuk MySQL. Apakah sulit? Tergantung apa yang akan Anda lakukan dengan JSON Anda, tetapi JSON adalah format publik, jadi Anda akan tahu apa yang harus dilakukan, setidaknya. Anda dapat melakukannya sebagai UDF atau di user-land (jadi dengan CREATE FUNCTION penyataan). Ini akan membutuhkan keterampilan dan waktu khusus, tentu saja. Hal-hal buruk:bug. Bahkan jika Anda dapat membuat fungsi-fungsi itu lebih cepat daripada menyusun ulang arsitektur Anda atau bermigrasi ke Mongo, Anda tidak akan pernah yakin akan kualitas fungsi-fungsi itu. Tidak ada cara untuk menguji kode itu secara asli. Namun, saya dapat memberikan petunjuk untuk kasus fungsi lahan pengguna - Anda dapat menggunakan mysql-unit untuk menguji kode tersimpan Anda, jika MySQL Anda 5.6 atau lebih tinggi (well, saya telah menulis alat ini, tapi.. mungkin berisi bug juga)

Fungsi "Standar"

Terakhir, jika Anda menjalankan MySQL 5.7, maka mungkin ada secercah harapan dengan fungsi JSON pra-rilis - jadi, Anda boleh mencoba untuk menggunakan fungsionalitas JSON versi alfa, yang saat ini ada untuk MySQL 5.7. Tetapi saya tidak akan (sangat) merekomendasikan untuk menggunakannya dalam proyek nyata karena fungsi-fungsi itu tidak teruji dengan baik atau tidak lengkap sama sekali. Namun, untuk menginstal fungsi tersebut, Anda harus mengunduh paket yang sesuai, lalu menghubungkannya ke server Anda, seperti:

CREATE FUNCTION json_append RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_valid RETURNS integer SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_extract RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_replace RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_remove RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_set RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_merge RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_search RETURNS string SONAME 'libmy_json_udf.so'; CREATE FUNCTION json_contains_key RETURNS integer SONAME 'libmy_json_udf.so';

Dan setelah itu Anda bisa mencobanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksekusi prosedur tersimpan yang disinkronkan di mysql

  2. Tambahkan kolom baru ke tabel yang ada dalam migrasi di Laravel

  3. Entity Framework Code-First terlalu lambat saat startup

  4. Simpan kata sandi ok dalam variabel Sesi php?

  5. Pengecualian saat mencoba menjalankan program Java dari maven