Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 9362|Răspunde: 0

[Sursă] Regula de fier a bazei de date MySQL

[Copiază linkul]
Postat pe 10.10.2019 14:00:44 | | |
O specificație bună a bazei de date ajută la reducerea complexității implementării software-ului și la reducerea costurilor de comunicare.

1. Legea de fier a construirii unui depozit

-
Legea de fier
Nivel
remarca
Set de caractere
Folosește UTF-8. Dacă emoji-ul este stocat, folosește utf8mb4 pentru stocare.
forțat

Reguli de sortare
Folosește utf8_general_ci
forțat

2. Legea de fier a construcției mesei

-
Legea de fier
Nivel
remarca
Exegeză
Asigură-te că ai adnotări de teren.
forțat

codifica
Folosește UTF-8. Dacă emoji-ul este stocat, folosește utf8mb4 pentru stocare.
forțat

dacă domeniul este conceptual
Trebuie denumit cu is_xx, iar tipul de date este unsigned tinyint (1 da, 0 nu), de exemplu is_deleted(1 ștergere, 0 nu șters).
forțat
Orice corp trebuie să fie nesemnat dacă nu este negativ
Nume tabel, nume domeniu
Se pot folosi doar litere mici, subliniere sau cifre; Este interzis să începi cu un subliniu sau un număr; Doar numerele sunt interzise între două linii de fundal; Dezactivează cuvintele rezervate; Utilizarea substantivelor la plural este interzisă în denumirile tabelelor.
forțat

Denumirea numelui bazei de date și a tabelului
Numele bazei de date ar trebui să fie compatibil cu numele aplicației, iar numele tabelului să fie menționat cu Name_Role Business al tabelului.
forțat

Denumirea indexului
Indexul principal de chei folosește numele pk_ câmp; Index unic cu uk_ nume de câmp; Indexurile normale folosesc idx_ nume de câmpuri.
forțat
pk_ este cheia primară; uk_ este o cheie unică; idx_ este index
Tip zecimal
Tipul de date este zecimal, iar utilizarea modulelor float și double este interzisă, float și double au pierdere de precizie, iar dacă intervalul stocat depășește intervalul zecimal, se recomandă împărțirea datelor în numere întregi și zecimale și stocarea lor separat.
forțat

Tip Varchar
varchar este un șir variabil lung, nu este alocat spațiu de stocare în avans, lungimea nu trebuie să depășească 5000 de caractere, dacă lungimea este mai mare de 5000, aplică text (creează un tabel separat, folosește cheia primară pentru a corespunde, pentru a evita afectarea eficienței de indexare a altor câmpuri).
forțat

Trebuie să existe trei câmpuri în numele tabelului
ID (tipul de date este unsigned bigint, un singur increment de tabel, dimensiunea pasului este 1), gmt_create, gmt_modified (timp activ de creare, timp de actualizare pasivă, tipul de date este datetime).
forțat

Redundanță de câmp
Câmpurile permit redundanță adecvată, dar trebuie luată în considerare consistența datelor, iar câmpurile redundante ar trebui să aibă 1) modificări rare; 2) Nu un câmp foarte lung varchar, cu atât mai puțin un câmp text.
recomanda

Împărțiți baza de date și tabelele
Partiționarea este recomandată doar atunci când numărul de rânduri dintr-un singur tabel depășește 5 milioane de rânduri sau capacitatea unui singur tabel depășește 2 GB.
recomanda


Setarea lungimii adecvate de stocare a caracterelor nu doar economisește spațiu în tabele în bază de date și stocare în index, ci, mai important, îmbunătățește viteza de recuperare.

3. Stabilirea unei legi de tip index iron

-
Legea de fier
Nivel
remarca
Index unic
Domeniile cu caracteristici unice în afacere, chiar dacă sunt o combinație de domenii, trebuie să fie indexate unic. Deși indicele unic afectează viteza de inserare, această pierdere este neglijabilă, dar îmbunătățește semnificativ viteza interogării. În plus, chiar dacă stratul aplicației are un control de verificare foarte complet, atâta timp cât nu există un indice unic, conform Legii lui Murphy, datele murdare vor fi generate inevitabil.
forțat

Alătură-te
Mai mult de trei tabele interzic joining-ul, câmpurile care necesită join, iar tipurile de date trebuie să fie consistente; Când mai multe tabele sunt asociate cu interogările, asigurați-vă că câmpurile asociate trebuie să aibă un index. Chiar dacă ai o îmbinare dublă a tabelelor, fii atent la indexarea tabelelor, performanța SQL.
forțat

Varcharfield
Lungimea indexului trebuie specificată și nu este nevoie să indexezi toate câmpurile, ci doar să se determine lungimea indexului în funcție de distincția textului reală. Lungimea și distincția indicilor sunt o pereche de contradicții; în general, pentru datele de tip de șir, indicii cu lungimea de 20 vor avea un grad de distincție de peste 90%, care poate fi determinat de gradul de distincție al numărului (distinct left(numele coloanei, lungimea indexului)))/count(*).
forțat

Estomparea este interzisă în căutarea paginilor
Căutarea pe pagini interzice estomparea sau estomparea completă; dacă este necesar, vă rugăm să accesați motorul de căutare pentru a rezolva problema. Motiv de interdicție: Fișierul index are proprietatea de potrivire a prefixului cel mai din stânga a arborelui B, iar dacă valoarea din stânga nu este determinată, acest index nu poate fi folosit.
forțat

Ordine după
Dacă există un scenariu ordonat pe scenarii, acordă atenție ordinii indexului. Ultimul câmp de ordine face parte din indicele combinat și este plasat la sfârșitul ordinii de combinație a indicilor pentru a evita file_sort și a afecta performanța interogării. Exemplu: unde a=? și b=? Ordinare cu C; Indicele ar trebui construit ca a_b_c; Contraexemplu: Dacă există o căutare de interval în index, atunci ordinea indexului nu poate fi utilizată, cum ar fi unde a>10 ordinează cu b; Indexul a_b nu poate fi sortat.
recomanda

4. Scrie reguli SQL de fier

-
Legea de fier
Nivel
remarca
număr(*)
Nu folosi count(column name) sau count(constant) în loc de count(*), care este sintaxa pentru numărul standard de rânduri definit de SQL92, independent de bază de date și independent de NULL și non-NULL. count(*) numără rândurile cu valoare NULL, în timp ce count(numele coloanei) nu numără rândurile cu această coloană NULL.
forțat

conte (col distinct)
Numără numărul de rânduri unice din coloană, cu excepția NULL. Rețineți că count(distinct col1, col2), dacă una dintre coloane este NULL, atunci returnează 0 chiar dacă cealaltă coloană are o valoare diferită.
forțat

Sum(col)
Când valorile unei coloane sunt toate NULL, count(col) returnează 0, dar sum(col) returnează NULL, așa că trebuie să fii atent la problemele NPE când folosești sum(). Problemele NPE pot fi evitate în următoarele moduri: selectează if(isnull(sum(g)), 0, sum(g)) din tabel;
forțat

isnull
Folosește isnull() pentru a determina dacă este o valoare NULL. NULL este NULL comparativ cu orice valoare.
forțat

Logica interogării prin paginare
Dacă numărătoarea este 0, aceasta trebuie returnată direct pentru a evita executarea următoarei instrucțiuni de paginare.
forțat

Chei exterioare și cascade
Utilizarea cheilor străine și a cascading-ului este interzisă, iar toate conceptele de chei străine trebuie rezolvate la nivelul aplicației. Motiv: Cheile externe și cascadele nu sunt potrivite pentru clustere distribuite, cu concurență mare, actualizările în cascadă blochează puternic, există riscul furtunilor de actualizări ale bazei de date, iar cheile străine afectează viteza de inserare a bazei de date.
forțat

Proceduri stocate
Procedurile stocate sunt interzise, iar procedurile stocate sunt greu de depanat și scalat și nu sunt portabile.
forțat

Corecția datelor
Când corectezi date (în special ștergerea sau modificarea înregistrărilor), selectează mai întâi pentru a evita ștergerea accidentală și execută instrucțiunea update doar după confirmarea că este corectă.
forțat

în
Dacă nu poate fi evitat, numărul de elemente setate după in ar trebui controlat cu o limită de 1000.
recomanda

Tabel trunchiat
Este interzis să se folosească tabelul trunchier, care este mai rapid decât ștergerea și consumă mai puține resurse de sistem și jurnal, dar trunchiul este fără tranzacții și nu declanșează declanșatoare, ceea ce poate provoca accidente, așa că nu folosiți această afirmație în codul de dezvoltare.
referință


5. ORM cartografiază legile de fier

-
Legea de fier
Nivel
remarca
Interogare tabel
Lista câmpurilor care sunt interzise de folosirea lui * pentru interogări trebuie să fie clară care câmpuri sunt necesare.
forțat

POJO
Atributul boolean al clasei POJO nu poate fi adăugat la is, în timp ce câmpul bazei de date trebuie adăugat la is, necesitând maparea între câmpuri și atribute în resultMap.
forțat

Parametri de returnare
Este interzis să se folosească resultClass ca parametru de returnare, chiar dacă toate numele atributelor de clasă corespund câmpurilor bazei de date unul câte unul, acestea trebuie definite; La rândul său, fiecare tabel trebuie să aibă un atribut corespunzător acestuia. Motiv: Configurează relația de mapare pentru a cupla câmpul cu clasa DO pentru o mentenanță ușoară.
forțat

Parametri de returnare
Este interzis să se folosească direct HashMap și HashTable ca ieșire a setului de rezultate al interogării. Motiv: Tipul valorii atributului este incontrolabil.
forțat

sql.xml Configurarea parametrilor
sql.xml Folosiți #{}, #param# pentru parametrii de configurare și nu folosiți ${}, deoarece ${} este predispus la injecții SQL.
forțat

queryForList
Utilizarea queryForList (String statementName, int start, int size) care vine cu Mybatis este interzisă. Motiv: Se implementează prin recuperarea tuturor înregistrărilor instrucțiunii SQL corespunzătoare statementName în baza de date, apoi folosind subList pentru a obține un subset de start, size.
forțat

Timpul actualizării
Când actualizezi o înregistrare de tabel de baze de date, trebuie să actualizezi în același timp timpul modificării înregistrării.
forțat

Actualizarea înregistrărilor tabelelor bazei de date
Nu scrie o interfață mare și completă de actualizare a datelor (transmisă ca o clasă POJO). Când executați SQL, nu actualizați câmpurile neschimbate din cauza stocării binlog predispuse la erori, ineficiente și crescută.
recomanda

@Transactional
@Transactional Nu abuzați de tranzacții. Tranzacțiile afectează QPS-ul bazei de date. În plus, atunci când folosești tranzacții, trebuie să iei în considerare diverse aspecte ale schemelor de rollback, inclusiv rollback-ul cache-ului, rollback-ul pentru motoarele de căutare, compensarea mesajelor, corecția statistică etc.
referință

Etichetele SQL dinamice Mybatis
< compareValue în isEqual> este o constantă comparativ cu valoarea atributului, de obicei un număr, indicând că instrucțiunea SQL corespunzătoare este executată când este egală; < isNotEmpty> indică faptul că este executat atunci când nu este gol și nici nul; < isNotNull> indică faptul că este executat atunci când nu este nul.
referință








Precedent:Harta operațională SEO este prima de pe întreaga rețea, o colecție ultra-completă de hărți operaționale de înaltă definiție pe Internet
Următor:[Știința Pământului] Enciclopedia pentru Copii DK O enciclopedie de înaltă calitate din Marea Britanie...
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com