Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 9362|Jawab: 0

[Sumber] Aturan besi database MySQL

[Salin tautan]
Diposting pada 10/10/2019 14.00.44 | | |
Spesifikasi basis data yang baik membantu mengurangi kompleksitas implementasi perangkat lunak dan mengurangi biaya komunikasi.

1. Hukum besi membangun gudang

-
Hukum besi
Tingkat
Pernyataan
set karakter
Gunakan UTF-8. Jika emoji disimpan, gunakan utf8mb4 untuk penyimpanan.
dipaksa

Aturan penyortiran
Gunakan utf8_general_ci
dipaksa

2. Hukum besi konstruksi meja

-
Hukum besi
Tingkat
Pernyataan
Penafsiran
Pastikan untuk memiliki anotasi bidang.
dipaksa

Mengkodekan
Gunakan UTF-8. Jika emoji disimpan, gunakan utf8mb4 untuk penyimpanan.
dipaksa

apakah bidang itu konseptual
Itu harus diberi nama dengan is_xx, dan tipe datanya tidak ditandatangani tinyint(1 ya, 0 tidak), misalnya is_deleted(1 hapus, 0 tidak dihapus).
dipaksa
Bidang apa pun harus tidak ditandatangani jika tidak negatif
Nama tabel, nama bidang
Hanya huruf kecil, garis bawah atau angka yang dapat digunakan; Dilarang memulai dengan garis bawah atau angka; Hanya angka yang dilarang di antara dua garis bawah; Nonaktifkan kata-kata yang dicadangkan; Penggunaan kata benda jamak dilarang dalam nama tabel.
dipaksa

Penamaan nama database dan nama tabel
Nama database harus konsisten dengan nama aplikasi, dan nama tabel harus diberi nama dengan Name_Role Bisnis tabel.
dipaksa

Penamaan indeks
Indeks kunci utama menggunakan nama bidang pk_; Indeks unik dengan nama bidang uk_; Indeks normal menggunakan nama bidang idx_.
dipaksa
pk_ adalah kunci utama; uk_ adalah kunci unik; idx_ adalah indeks
Tipe desimal
Jenis datanya adalah desimal, dan penggunaan float dan double dilarang, float dan double memiliki kerugian presisi, dan jika rentang data yang disimpan melebihi rentang desimal, disarankan untuk membagi data menjadi bilangan bulat dan desimal dan menyimpannya secara terpisah.
dipaksa

Jenis Varchar
Varchar adalah string panjang variabel, tidak ada ruang penyimpanan yang dialokasikan terlebih dahulu, panjangnya tidak boleh melebihi 5000 karakter, jika panjangnya lebih besar dari 5000, terapkan teks (buat tabel terpisah, gunakan kunci utama untuk berkorespondensi, untuk menghindari mempengaruhi efisiensi pengindeksan bidang lain).
dipaksa

Harus ada tiga bidang dalam nama tabel
id (tipe data tidak ditandatangani bigint, peningkatan tabel tunggal, ukuran langkah adalah 1), gmt_create, gmt_modified (waktu pembuatan aktif, waktu pembaruan pasif, tipe data adalah tanggalwaktu).
dipaksa

Redundansi bidang
Bidang memungkinkan redundansi yang sesuai, tetapi konsistensi data harus dipertimbangkan, dan bidang redundan harus memiliki 1) modifikasi yang jarang; 2) Bukan bidang super panjang varchar, apalagi bidang teks.
Merekomendasikan

Bagi database dan tabel
Partisi direkomendasikan hanya jika jumlah baris dalam satu tabel melebihi 5 juta baris atau kapasitas satu tabel melebihi 2 GB.
Merekomendasikan


Mengatur panjang penyimpanan karakter yang sesuai tidak hanya menghemat ruang tabel database dan penyimpanan indeks, tetapi yang lebih penting, meningkatkan kecepatan pengambilan.

3. Tetapkan hukum besi indeks

-
Hukum besi
Tingkat
Pernyataan
Indeks unik
Bidang dengan karakteristik unik dalam bisnis, meskipun merupakan kombinasi bidang, harus diindeks secara unik. Meskipun indeks unik memengaruhi kecepatan penyisipan, kerugian ini dapat diabaikan, tetapi secara signifikan meningkatkan kecepatan kueri. Selain itu, meskipun lapisan aplikasi memiliki kontrol cek yang sangat lengkap, selama tidak ada indeks unik, menurut Hukum Murphy, data kotor pasti akan dihasilkan.
dipaksa

bergabung
Lebih dari tiga tabel melarang penggabungan, bidang yang memerlukan penggabungan, dan jenis data harus konsisten; Saat beberapa tabel dikaitkan dengan kueri, pastikan bidang terkait harus memiliki indeks. Bahkan jika Anda memiliki penggabungan tabel ganda, perhatikan pengindeksan tabel, kinerja SQL.
dipaksa

Varcharfield
Panjang indeks harus ditentukan, dan tidak perlu mengindeks semua bidang, cukup tentukan panjang indeks sesuai dengan perbedaan teks yang sebenarnya. Panjang dan perbedaan indeks adalah sepasang kontradiksi, umumnya untuk data jenis string, indeks dengan panjang 20 akan memiliki tingkat perbedaan lebih dari 90%, yang dapat ditentukan oleh tingkat perbedaan count (berbeda kiri (nama kolom, panjang indeks))/count (*).
dipaksa

Blurring dilarang dalam penelusuran halaman
Pencarian halaman melarang keburaman atau keburaman penuh, jika perlu, silakan buka mesin pencari untuk mengatasinya. Alasan Larangan: File indeks memiliki properti pencocokan awalan paling kiri dari B-Tree, dan jika nilai di sebelah kiri tidak ditentukan, maka indeks ini tidak dapat digunakan.
dipaksa

Pesan oleh
Jika ada urutan berdasarkan skenario, perhatikan keteraturan indeks. Bidang urutan terakhir oleh adalah bagian dari indeks gabungan dan ditempatkan di akhir urutan kombinasi indeks untuk menghindari file_sort dan memengaruhi performa kueri. Contoh: di mana a=? dan b=? perintah oleh c; Indeks harus dibangun sebagai a_b_c; Contoh tandingan: Jika ada pencarian rentang dalam indeks, maka keterurutan indeks tidak dapat digunakan, seperti di mana a>10 mengurutkan dengan b; a_b indeks tidak dapat diurutkan.
Merekomendasikan

4. Tulis aturan besi SQL

-
Hukum besi
Tingkat
Pernyataan
hitungan(*)
Jangan gunakan count(column name) atau count(constant) alih-alih count(*), yang merupakan sintaks untuk jumlah standar baris yang ditentukan oleh SQL92, independen dari database, dan independen dari NULL dan non-NULL. count(*) menghitung baris dengan nilai NULL, sedangkan count(nama kolom) tidak menghitung baris dengan kolom ini NULL.
dipaksa

hitung (kol yang berbeda)
Menghitung jumlah baris unik dalam kolom kecuali NULL. Perhatikan bahwa count(distinct col1, col2), jika salah satu kolom semuanya NULL, maka itu mengembalikan 0 bahkan jika kolom lain memiliki nilai yang berbeda.
dipaksa

jumlah(kol)
Ketika nilai kolom semuanya NULL, count(col) mengembalikan 0, tetapi sum(col) mengembalikan NULL, jadi Anda perlu mengetahui masalah NPE saat menggunakan sum(). Masalah NPE dapat dihindari dengan cara berikut: pilih if(isnull(sum(g)), 0, sum(g)) dari tabel;
dipaksa

isnull
Gunakan isnull() untuk menentukan apakah itu adalah nilai NULL. NULL adalah NULL dibandingkan dengan nilai apa pun.
dipaksa

Logika kueri penomoran halaman
Jika hitungannya adalah 0, itu harus dikembalikan secara langsung untuk menghindari eksekusi pernyataan penomoran halaman berikutnya.
dipaksa

Kunci dan kaskade luar
Penggunaan kunci asing dan cascading dilarang, dan semua konsep kunci asing harus diselesaikan di lapisan aplikasi. Alasan: Kunci dan kaskade asing tidak cocok untuk kluster konkurensi tinggi yang terdistribusi, pembaruan berjenjang adalah pemblokiran yang kuat, ada risiko badai pembaruan database, dan kunci asing memengaruhi kecepatan penyisipan database.
dipaksa

Prosedur tersimpan
Prosedur tersimpan dilarang, dan prosedur tersimpan sulit untuk di-debug dan diskalakan, dan tidak portabel.
dipaksa

Koreksi data
Saat mengoreksi data (terutama menghapus atau memodifikasi rekaman), pilih terlebih dahulu untuk menghindari penghapusan yang tidak disengaja, dan hanya jalankan pernyataan pembaruan setelah mengonfirmasi bahwa itu benar.
dipaksa

dalam
Jika tidak dapat dihindari, jumlah elemen set setelahnya harus dikontrol dalam 1000.
Merekomendasikan

Meja potong
Dilarang menggunakan memotong tabel, yang lebih cepat daripada menghapus dan menggunakan lebih sedikit sumber daya sistem dan log, tetapi memotong bebas transaksi dan tidak memicu pemicu, yang dapat menyebabkan kecelakaan, jadi jangan gunakan pernyataan ini dalam kode pengembangan.
referensi


5. ORM memetakan hukum besi

-
Hukum besi
Tingkat
Pernyataan
kueri tabel
Daftar bidang yang dilarang menggunakan * untuk kueri harus jelas bidang mana yang diperlukan.
dipaksa

POJO
Atribut Boolean dari kelas POJO tidak dapat ditambahkan ke is, sedangkan bidang database harus ditambahkan ke is, memerlukan pemetaan antara bidang dan atribut di resultMap.
dipaksa

Parameter pengembalian
Dilarang menggunakan resultClass sebagai parameter pengembalian, bahkan jika semua nama atribut kelas sesuai dengan bidang database satu per satu, mereka perlu ditentukan; Pada gilirannya, setiap tabel harus memiliki atribut yang sesuai dengannya. Alasan: Konfigurasikan hubungan pemetaan untuk memasangkan bidang dengan kelas DO untuk perawatan yang mudah.
dipaksa

Parameter pengembalian
Dilarang secara langsung menggunakan HashMap dan HashTable sebagai output dari kumpulan hasil kueri. Alasan: Jenis nilai atribut tidak dapat dikendalikan.
dipaksa

sql.xml Mengonfigurasi parameter
sql.xml Gunakan #{}, #param# untuk parameter konfigurasi, dan jangan gunakan ${}, karena ${} rentan terhadap injeksi SQL.
dipaksa

queryForList
Penggunaan queryForList(String statementName, int start, int size) yang disertakan dengan Mybatis dilarang. Alasan: Ini diimplementasikan dengan mengambil semua rekaman pernyataan SQL yang sesuai dengan statementName dalam database, lalu menggunakan subList untuk mendapatkan subset start, size.
dipaksa

Waktu pembaruan
Saat memperbarui rekaman tabel database, Anda harus memperbarui waktu modifikasi rekaman secara bersamaan.
dipaksa

Perbarui rekaman tabel database
Jangan menulis antarmuka pembaruan data yang besar dan lengkap (diteruskan sebagai kelas POJO). Saat menjalankan SQL, jangan perbarui bidang yang tidak berubah karena penyimpanan binlog yang rawan kesalahan, tidak efisien, dan meningkat.
Merekomendasikan

@Transactional
@Transactional Jangan menyalahgunakan transaksi. Transaksi memengaruhi QPS database. Selain itu, di mana Anda menggunakan transaksi, Anda perlu mempertimbangkan berbagai aspek skema pengembalian, termasuk pengembalian cache, pengembalian mesin pencari, kompensasi pesan, koreksi statistik, dll.
referensi

Tag sql dinamis Mybatis
< compareValue di isEqual> adalah konstanta dibandingkan dengan nilai atribut, biasanya angka, yang menunjukkan bahwa pernyataan SQL yang sesuai dijalankan jika sama; < isNotEmpty> menunjukkan bahwa itu dieksekusi ketika tidak kosong dan tidak null; < isNotNull> menunjukkan bahwa itu dieksekusi ketika bukan null.
referensi








Mantan:Peta operasi SEO adalah yang pertama di seluruh jaringan, kumpulan peta operasi definisi tinggi Internet yang sangat lengkap
Depan:[Ilmu Bumi] Ensiklopedia Anak DK Ensiklopedia berkualitas tinggi dari Inggris...
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com