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

Dua Nilai yang Dihasilkan dalam Ajaran

Dari apa yang saya ketahui, strategi GeneratedValue dicadangkan untuk kunci utama, artinya Anda hanya dapat menggunakannya sekali per Entitas.

Tergantung pada kebutuhan Anda, Anda memiliki beberapa opsi:

  • Anda selalu dapat memiliki acara siklus hidup prePersist , menyetel nilai apa pun yang Anda suka untuk nama tersebut sebelum Anda mempertahankannya untuk pertama kali.

  • Jika Anda bergantung pada id untuk menghasilkan id unik lain darinya, Anda dapat mengimplementasikan acara postPersist, menetapkan nama Anda di sana dan pastikan Anda menyiram dua kali (Pertama kali membuat kunci utama, kedua kalinya menyimpan nama).

  • Jika tidak masalah bagi Anda bahwa nama tersebut kosong dalam database untuk beberapa waktu, mungkin tidak masalah untuk mengimplementasikan acara postLoad, yang mengisi nama jika kosong. Dengan cara ini aplikasi Anda selalu melihat nama (karena diambil dari database atau diisi oleh event postLoad) dan ketika Anda menambahkan atau mengedit informasi pertama kali setelah penyimpanan awal, nama Anda juga akan disimpan

  • Tidak apa-apa untuk tidak menyimpan nama dan membuatnya dihasilkan oleh beberapa cronjob/deamon/queue sehingga aplikasi Anda tidak harus menghadapinya. Satu-satunya hal yang perlu Anda lakukan adalah memastikan nama yang hilang tidak mengacaukan sesuatu.

  • Mungkin boleh saja membuat kunci yang tidak bergantung pada kunci utama dan dengan demikian dapat dibuat oleh penangan acara global . Anda tentu saja memiliki kelemahan bahwa event handler seperti itu, karena ia bersifat global, dipanggil untuk setiap objek yang Anda pertahankan, tidak peduli apakah itu entitas yang benar.

  • Terakhir, namun tidak kalah pentingnya, mungkin tidak masalah untuk mundur ke Prosedur/Pemicu Tersimpan agar database menangani ini. Dengan cara ini Anda tidak perlu mengacaukan ini di dalam aplikasi Anda. Tapi hati-hati, mungkin ada jebakan di jalan (seperti pengembang melupakan ini karena ini bukan di kode tapi di database!).

Mungkin ada cara lain. Apa yang saya coba katakan adalah:Jangan gunakan generateValue untuk properti kunci non-primer!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan uuid sebagai nomor?

  2. Bagaimana cara memanggil prosedur tersimpan MySQL dari dalam kode PHP?

  3. Permintaan MySQL menggunakan CASE untuk PILIH beberapa kolom

  4. Pernyataan pilih-masukkan baris mulitple mysql dengan last_insert_id()

  5. Apakah mysql memiliki fungsi analitik yang setara dengan Oracle?