Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 9362|Atsakyti: 0

[Šaltinis] MySQL duomenų bazės geležinė taisyklė

[Kopijuoti nuorodą]
Paskelbta 2019-10-10 14:00:44 | | |
Gera duomenų bazės specifikacija padeda sumažinti programinės įrangos diegimo sudėtingumą ir komunikacijos išlaidas.

1. Geležinis sandėlio statybos dėsnis

-
Geležies įstatymas
Lygis
Pastaba
Simbolių rinkinys
Naudokite UTF-8. Jei jaustukas saugomas, saugojimui naudokite utf8mb4.
priverstinis

Rūšiavimo taisyklės
Naudokite utf8_general_ci
priverstinis

2. Geležinis stalo konstrukcijos dėsnis

-
Geležies įstatymas
Lygis
Pastaba
Egzegezė
Būtinai turėkite lauko komentarus.
priverstinis

Koduoti
Naudokite UTF-8. Jei jaustukas saugomas, saugojimui naudokite utf8mb4.
priverstinis

ar laukas yra konceptualus
Jis turi būti pavadintas is_xx, o duomenų tipas yra nepasirašytas tinyint(1 taip, 0 ne), pvz., is_deleted(1 ištrinti, 0 neištrintas).
priverstinis
Bet kuris laukas turi būti nepasirašytas, jei jis nėra neigiamas
Lentelės pavadinimas, lauko pavadinimas
Galima naudoti tik mažąsias raides, apatinius brūkšnius ar skaičius; Draudžiama pradėti nuo pabraukimo ar skaičiaus; Draudžiami tik skaičiai tarp dviejų apatinių brūkšnių; Išjungti rezervuotus žodžius; Lentelių pavadinimuose draudžiama vartoti daugiskaitos daiktavardžius.
priverstinis

Duomenų bazės pavadinimo ir lentelės pavadinimo pavadinimas
Duomenų bazės pavadinimas turi atitikti programos pavadinimą, o lentelės pavadinimas turi būti pavadintas lentelės verslo Name_Role.
priverstinis

Indekso pavadinimas
Pirminio rakto indeksas naudoja pk_ lauko pavadinimą; Unikalus indeksas su uk_ lauko pavadinimu; Įprasti indeksai naudoja idx_ laukų pavadinimus.
priverstinis
pk_ yra pirminis raktas; uk_ yra unikalus raktas; idx_ yra indeksas
Dešimtainis tipas
Duomenų tipas yra dešimtainis, draudžiama naudoti float ir double, float ir double turi tikslumo nuostolius, o jei saugomų duomenų diapazonas viršija dešimtainių skaičių, rekomenduojama duomenis padalyti į sveikuosius ir dešimtainius skaičius ir saugoti juos atskirai.
priverstinis

Varchar tipas
varchar yra kintama ilga eilutė, iš anksto neskiriama saugyklos vietos, ilgis neturėtų viršyti 5000 simbolių, jei ilgis didesnis nei 5000, taikykite tekstą (sukurkite atskirą lentelę, naudokite pirminį raktą, kad atitiktumėte, kad nepakenktumėte kitų laukų indeksavimo efektyvumui).
priverstinis

Lentelės pavadinime turi būti trys laukai
ID (duomenų tipas yra nepasirašytas bigint, vienos lentelės prieaugis, žingsnio dydis yra 1), gmt_create, gmt_modified (aktyvus kūrimo laikas, pasyvus atnaujinimo laikas, duomenų tipas datetime).
priverstinis

Lauko perteklius
Laukai leidžia atitinkamą dubliavimą, tačiau reikia atsižvelgti į duomenų nuoseklumą, o pertekliniai laukai turėtų būti 1) retai modifikuojami; 2) Ne varchar super ilgas laukas, jau nekalbant apie teksto lauką.
Rekomenduoti

Duomenų bazės ir lentelių padalijimas
Skaidymas rekomenduojamas tik tada, kai vienos lentelės eilučių skaičius viršija 5 milijonus eilučių arba vienos lentelės talpa viršija 2 GB.
Rekomenduoti


Nustačius tinkamą simbolių saugojimo ilgį, ne tik sutaupoma vietos duomenų bazėje ir indekso saugykloje, bet dar svarbiau, pagerėja paieškos greitis.

3. Nustatykite indekso geležies dėsnį

-
Geležies įstatymas
Lygis
Pastaba
Unikalus indeksas
Laukai, turintys unikalių verslo ypatybių, net jei jie yra laukų derinys, turi būti unikaliai indeksuojami. Nors unikalus indeksas turi įtakos įterpimo greičiui, šis praradimas yra nereikšmingas, tačiau žymiai pagerina užklausos greitį. Be to, net jei programos sluoksnis turi labai pilną patikrinimo kontrolę, kol nėra unikalaus indekso, pagal Murphy dėsnį neišvengiamai bus generuojami nešvarūs duomenys.
priverstinis

Prisijunkite
Daugiau nei trys lentelės draudžia sujungti, laukai, kuriuos reikia sujungti, o duomenų tipai turi būti nuoseklūs; Kai su užklausomis susietos kelios lentelės, įsitikinkite, kad susietuose laukuose turi būti indeksas. Net jei turite dvigubą lentelės sujungimą, atkreipkite dėmesį į lentelės indeksavimą, SQL našumą.
priverstinis

Varcharfield
Turi būti nurodytas indekso ilgis ir nereikia indeksuoti visų laukų, tiesiog nustatykite indekso ilgį pagal faktinį teksto skirtumą. Indekso ilgis ir skirtumas yra prieštaravimų pora, paprastai eilutės tipo duomenims indeksų, kurių ilgis yra 20, skiriamasis laipsnis bus didesnis nei 90%, kurį galima nustatyti pagal skaičiaus (distinct left(column name, index length))/count(*) skirtumo laipsnį.
priverstinis

Puslapio paieškoje draudžiama sulieti
Puslapio paieška draudžia sulieti arba visiškai sulieti, jei reikia, eikite į paieškos sistemą, kad tai išspręstumėte. Draudimo priežastis: indekso failas turi kairiausią priešdėlio atitikimo ypatybę B-Tree, ir jei reikšmė kairėje nėra nustatyta, tada ši rodyklė negali būti naudojama.
priverstinis

Užsakyti pagal
Jei yra tvarka pagal scenarijų, atkreipkite dėmesį į indekso tvarką. Paskutinis eilės laukas yra kombinuoto indekso dalis ir dedamas indekso kombinacijos pabaigoje, kad būtų išvengta file_sort ir paveiktų užklausos našumą. Pavyzdys: kur a=? ir b=? Užsakymas pagal C; Indeksas turėtų būti sudarytas taip, kaip a_b_c; Priešingas pavyzdys: Jei indekse yra diapazono paieška, indekso tvarkos naudoti negalima, pvz., kai a>10 tvarka pagal b; Indekso a_b rūšiuoti negalima.
Rekomenduoti

4. Parašykite SQL geležies taisykles

-
Geležies įstatymas
Lygis
Pastaba
skaičius(*)
Nenaudokite count(column name) arba count(constant) vietoj count(*), kuris yra SQL92 apibrėžto standartinio eilučių skaičiaus sintaksė, nepriklausomai nuo duomenų bazės ir nepriklausoma nuo NULL ir ne NULL. count(*) skaičiuoja eilutes su NULL reikšme, o count(column name) neskaičiuoja eilučių su šiuo stulpeliu NULL.
priverstinis

count(atskiras stulpelis)
Skaičiuoja unikalių stulpelio eilučių skaičių, išskyrus NULL. Atkreipkite dėmesį, kad count(distinct col1, col2), jei vienas iš stulpelių yra NULL, tada jis grąžina 0, net jei kito stulpelio reikšmė skiriasi.
priverstinis

suma (col)
Kai visos stulpelio reikšmės yra NULL, count(col) grąžina 0, bet sum(col) grąžina NULL, todėl turite žinoti apie NPE problemas, kai naudojate sum(). NPE problemų galima išvengti šiais būdais: pasirinkite if(isnull(sum(g)), 0, sum(g)) iš lentelės;
priverstinis

isnull
Naudokite isnull(), kad nustatytumėte, ar tai yra NULL reikšmė. NULL yra NULL, palyginti su bet kuria reikšme.
priverstinis

Puslapių užklausos logika
Jei skaičius yra 0, jis turėtų būti grąžintas tiesiogiai, kad būtų išvengta tolesnio puslapių sakinio vykdymo.
priverstinis

Išoriniai klavišai ir kaskados
Draudžiama naudoti išorinius raktus ir pakopas, o visos išorinio rakto sąvokos turi būti išspręstos programos lygmenyje. Priežastis: Išoriniai raktai ir kaskados netinka paskirstytiems, didelio sutapimo klasteriams, pakopiniai atnaujinimai stipriai blokuoja, kyla duomenų bazės atnaujinimo audrų pavojus, o išoriniai raktai turi įtakos duomenų bazės įterpimo greičiui.
priverstinis

Saugomos procedūros
Saugomos procedūros yra draudžiamos, o saugomas procedūras sunku derinti ir išplėsti mastelį, be to, jos nėra perkeliamos.
priverstinis

Duomenų taisymas
Taisydami duomenis (ypač naikindami ar modifikuodami įrašus), pirmiausia pasirinkite, kad išvengtumėte atsitiktinio naikinimo, ir vykdykite naujinimo sakinį tik įsitikinę, kad jis teisingas.
priverstinis

Į
Jei to išvengti nepavyksta, nustatytų elementų skaičius po įėjimo turėtų būti kontroliuojamas per 1000.
Rekomenduoti

Sutrumpinti lentelę
Draudžiama naudoti sutrumpintą lentelę, kuri yra greitesnė nei ištrinti ir naudoja mažiau sistemos ir žurnalo išteklių, tačiau sutrumpinti yra be operacijų ir nesukelia trigerių, kurie gali sukelti nelaimingus atsitikimus, todėl nenaudokite šio teiginio kūrimo kode.
Nuoroda


5. ORM žemėlapiai geležies dėsniai

-
Geležies įstatymas
Lygis
Pastaba
Lentelės užklausa
Laukų, kuriuos draudžiama naudoti * užklausoms, sąrašas turi būti aiškus, kurie laukai yra privalomi.
priverstinis

POJO
POJO klasės Bulio logikos atributo negalima įtraukti į is, o duomenų bazės laukas turi būti įtrauktas į is, todėl reikia susieti laukus ir atributus resultMap.
priverstinis

Grąžinimo parametrai
Draudžiama naudoti resultClass kaip grąžinimo parametrą, net jei visi klasės atributų pavadinimai po vieną atitinka duomenų bazės laukus, juos reikia apibrėžti; Savo ruožtu kiekviena lentelė turi turėti jį atitinkantį atributą. Priežastis: sukonfigūruokite susiejimo ryšį, kad laukas būtų susietas su DO klase, kad būtų lengva prižiūrėti.
priverstinis

Grąžinimo parametrai
Draudžiama tiesiogiai naudoti "HashMap" ir "HashTable" kaip užklausos rezultatų rinkinio išvestį. Priežastis: atributo reikšmės tipas nevaldomas.
priverstinis

sql.xml Konfigūruokite parametrus
sql.xml Naudokite #{}, #param# konfigūracijos parametrams ir nenaudokite ${}, nes ${} yra linkęs į SQL injekciją.
priverstinis

queryForList
Draudžiama naudoti queryForList(String statementName, int start, int size), kuris pateikiamas su Mybatis. Priežastis: Jis įgyvendinamas nuskaitant visus SQL sakinio įrašus, atitinkančius statementName duomenų bazėje, o tada naudojant subsąrašą, kad gautumėte pradžios, dydžio poaibį.
priverstinis

Atnaujinimo laikas
Atnaujindami duomenų bazės lentelės įrašą, tuo pačiu metu turite atnaujinti įrašo modifikavimo laiką.
priverstinis

Atnaujinti duomenų bazės lentelės įrašus
Nerašykite didelės ir pilnos duomenų atnaujinimo sąsajos (perduotos kaip POJO klasė). Vykdydami SQL, neatnaujinkite nepakeistų laukų dėl klaidų, neefektyvios ir padidėjusios binlog saugyklos.
Rekomenduoti

@Transactional
@Transactional Nepiktnaudžiaukite sandoriais. Sandoriai turi įtakos duomenų bazės QPS. Be to, kai naudojate operacijas, turite atsižvelgti į įvairius atšaukimo schemų aspektus, įskaitant talpyklos atšaukimą, paieškos sistemos grąžinimą, pranešimų kompensavimą, statistinį taisymą ir kt.
Nuoroda

Mybatis dinaminės sql žymės
< compareValue isEqual> yra konstanta, palyginti su atributo reikšme, paprastai skaičiumi, nurodančiu, kad atitinkamas SQL sakinys vykdomas, kai lygus; < isNotEmpty> rodo, kad jis vykdomas, kai jis nėra tuščias ir nėra nulinis; < isNotNull> nurodo, kad jis vykdomas, kai jis nėra nulinis.
Nuoroda








Ankstesnis:SEO operacijų žemėlapis yra pirmasis visame tinkle, itin išsamių interneto didelės raiškos operacijų žemėlapių rinkinys
Kitą:[Žemės mokslai] DK vaikų enciklopedija Aukštos kokybės enciklopedija iš Jungtinės Karalystės...
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com