Laba datu bāzes specifikācija palīdz samazināt programmatūras ieviešanas sarežģītību un samazināt komunikācijas izmaksas.
1. Noliktavas celtniecības dzelzs likums
- | Dzelzs likums | Līmenis | Piezīme | rakstzīmju kopa | Izmantojiet UTF-8. Ja emocijzīme ir saglabāta, glabāšanai izmantojiet utf8mb4. | piespiedu |
| | Šķirošanas noteikumi | Izmantojiet utf8_general_ci | piespiedu | |
2. Galda konstrukcijas dzelzs likums
- | Dzelzs likums | Līmenis | Piezīme | Ekseģēze | Pārliecinieties, ka jums ir lauka anotācijas. | piespiedu |
| | Kodēt | Izmantojiet UTF-8. Ja emocijzīme ir saglabāta, glabāšanai izmantojiet utf8mb4. | piespiedu |
| | vai lauks ir konceptuāls | Tam jābūt nosauktam ar is_xx, un datu tips ir neparakstīts tinyint(1 jā, 0 nē), piemēram, is_deleted(1 dzēst, 0 nav izdzēsts). | piespiedu | Jebkurš lauks ir jānoņem, ja tas nav negatīvs | Tabulas nosaukums, lauka nosaukums | Var izmantot tikai mazos burtus, pasvītrojumus vai ciparus; Aizliegts sākt ar pasvītrojumu vai numuru; Tikai skaitļi ir aizliegti starp diviem pasvītrojumiem; Atspējot rezervētos vārdus; Daudzskaitļa lietvārdu lietošana tabulu nosaukumos ir aizliegta. | piespiedu |
| | Datu bāzes nosaukuma un tabulas nosaukuma nosaukums | Datu bāzes nosaukumam jāatbilst lietojumprogrammas nosaukumam, un tabulas nosaukumam jābūt nosauktam ar tabulas biznesa Name_Role. | piespiedu |
| | Indeksa nosaukums | Primārās atslēgas indekss izmanto pk_ lauka nosaukumu; Unikāls indekss ar uk_ lauka nosaukumu; Parastajos indeksos tiek izmantoti idx_ lauku nosaukumi. | piespiedu | pk_ ir primārā atslēga; uk_ ir unikāla atslēga; idx_ ir indekss | Decimāldaļas tips | Datu tips ir decimāldaļa, un ir aizliegts izmantot float un double, float un double ir precizitātes zudums, un, ja saglabātais datu diapazons pārsniedz decimāldaļu diapazonu, ieteicams sadalīt datus veselos un decimāldaļās un glabāt tos atsevišķi. | piespiedu |
| | Varchar tips | varchar ir mainīga gara virkne, iepriekš netiek piešķirta krātuves vieta, garums nedrīkst pārsniegt 5000 rakstzīmes, ja garums ir lielāks par 5000, lietojiet tekstu (izveidojiet atsevišķu tabulu, izmantojiet primāro atslēgu, lai atbilstu, lai neietekmētu citu lauku indeksēšanas efektivitāti). | piespiedu |
| | Tabulas nosaukumā jābūt trim laukiem | id (datu tips ir neparakstīts bigint, vienas tabulas pieaugums, soļa lielums ir 1), gmt_create, gmt_modified (aktīvais izveides laiks, pasīvais atjaunināšanas laiks, datu tips datetime). | piespiedu |
| | Lauka dublēšana | Lauki pieļauj atbilstošu dublēšanu, bet ir jāņem vērā datu konsekvence, un liekajiem laukiem jābūt 1) retām modifikācijām; 2) Nav varchar super garš lauks, nemaz nerunājot par teksta lauku. | ieteikt |
| | Datu bāzes un tabulu sadalīšana | Sadalīšana ir ieteicama tikai tad, ja rindu skaits vienā tabulā pārsniedz 5 miljonus rindu vai vienas tabulas ietilpība pārsniedz 2 GB. | ieteikt | |
Atbilstoša rakstzīmju krātuves garuma iestatīšana ne tikai ietaupa vietu datu bāzes tabulā un indeksa krātuvē, bet vēl svarīgāk - uzlabo izgūšanas ātrumu.
3. Izveidojiet indeksa dzelzs likumu
- | Dzelzs likums | Līmenis | Piezīme | Unikāls indekss | Laukiem ar unikālām uzņēmuma īpašībām, pat ja tie ir lauku kombinācija, jābūt unikāli indeksētiem. Lai gan unikālais indekss ietekmē ievietošanas ātrumu, šis zudums ir niecīgs, taču tas ievērojami uzlabo vaicājuma ātrumu. Turklāt, pat ja lietojumprogrammas slānim ir ļoti pilnīga pārbaudes kontrole, kamēr nav unikāla indeksa, saskaņā ar Mērfija likumu neizbēgami tiks ģenerēti netīri dati. | piespiedu |
| | Pievienoties | Vairāk nekā trīs tabulas aizliedz apvienošanu, lauki, kuriem nepieciešama savienošana, un datu tipiem jābūt konsekventiem; Ja ar vaicājumiem ir saistītas vairākas tabulas, pārliecinieties, vai saistītajiem laukiem ir nepieciešams indekss. Pat ja jums ir dubultā tabulas pievienošana, pievērsiet uzmanību tabulas indeksēšanai, SQL veiktspējai. | piespiedu |
| | Varčarfīlda | Indeksa garums ir jānorāda, un nav nepieciešams indeksēt visus laukus, vienkārši nosakiet indeksa garumu atbilstoši faktiskajai teksta atšķirībai. Indeksa garums un atšķirība ir pretrunu pāris, parasti virknes tipa datiem indeksiem, kuru garums ir 20, atšķirības pakāpe būs lielāka par 90%, ko var noteikt pēc atšķirības pakāpes count(distinct left(column name, index length))/count(*). | piespiedu |
| | Lapas meklēšanā aizmiglošana ir aizliegta | Lapas meklēšana aizliedz aizmiglošanu vai pilnīgu aizmiglošanu, ja nepieciešams, lūdzu, dodieties uz meklētājprogrammu, lai to atrisinātu. Aizlieguma iemesls: indeksa failam ir B-koka prefiksa atbilstības rekvizīts, un, ja kreisajā pusē esošā vērtība nav noteikta, tad šo indeksu nevar izmantot. | piespiedu |
| | Pasūtīt pēc | Ja ir secība pēc scenārija, pievērsiet uzmanību indeksa kārtībai. Pēdējais kārtošanas lauks ir daļa no kombinētā indeksa un tiek novietots indeksa kombinācijas secības beigās, lai izvairītos no file_sort un ietekmētu vaicājuma veiktspēju. Piemērs: kur a=? un b=? pasūtījums pēc c; Indekss jāveido kā a_b_c; Pretpiemērs: Ja indeksā ir diapazona uzmeklēšana, tad indeksa secību nevar izmantot, piemēram, ja a>10 secība pēc b; Indeksa a_b nevar kārtot. | ieteikt | |
4. Uzrakstiet SQL dzelzs noteikumus
- | Dzelzs likums | Līmenis | Piezīme | skaits(*) | Nelietojiet count(kolonnas nosaukums) vai count(constant) count(*) vietā, kas ir SQL92 definēto rindu standarta skaita sintakse, neatkarīgi no datu bāzes un neatkarīga no NULL un ne-NULL. count(*) skaita rindas ar vērtību NULL, bet count(kolonnas nosaukums) neskaita rindas ar šo kolonnu NULL. | piespiedu |
| | count(atšķirīgs skoliņš) | Saskaita unikālo rindu skaitu kolonnā, izņemot NULL. Ņemiet vērā, ka count(distinct col1, col2), ja viena no kolonnām ir NULL, tad tā atgriež 0 pat tad, ja otrai kolonnai ir cita vērtība. | piespiedu |
| | SUM(COL) | Ja visas kolonnas vērtības ir NULL, count(col) atgriež 0, bet sum(col) atgriež NULL, tāpēc, lietojot sum(), ir jāapzinās NPE problēmas. NPE problēmas var izvairīties šādos veidos: atlasiet if(isnull(sum(g)), 0, sum(g)) no tabulas; | piespiedu |
| | isnull | Izmantojiet isnull(), lai noteiktu, vai tā ir vērtība NULL. NULL ir NULL salīdzinājumā ar jebkuru vērtību. | piespiedu |
| | Lapu veidošanas vaicājuma loģika | Ja skaits ir 0, tas jāatgriež tieši, lai izvairītos no nākamā lappuses priekšraksta izpildes. | piespiedu |
| | Ārējie taustiņi un kaskādes | Ārējo atslēgu un kaskādes izmantošana ir aizliegta, un visi ārējās atslēgas jēdzieni ir jāatrisina lietojumprogrammas slānī. Iemesls: Ārējās atslēgas un kaskādes nav piemērotas izplatītiem, augstas vienlaicīgas klasteriem, kaskādes atjauninājumi ir spēcīgi bloķējoši, pastāv datu bāzes atjaunināšanas vētru risks, un ārējās atslēgas ietekmē datu bāzes ievietošanas ātrumu. | piespiedu |
| | Uzglabātās procedūras | Saglabātās procedūras ir aizliegtas, un uzglabātās procedūras ir grūti atkļūdot un mērogot, un tās nav pārnēsājamas. | piespiedu |
| | Datu labošana | Labojot datus (īpaši dzēšot vai modificējot ierakstus), vispirms atlasiet, lai izvairītos no nejaušas dzēšanas, un izpildiet atjaunināšanas priekšrakstu tikai pēc tam, kad esat pārliecinājies, ka tas ir pareizs. | piespiedu |
| | Rīgā | Ja no tā nevar izvairīties, iestatītu elementu skaits pēc ieejas ir jākontrolē 1000 robežās. | ieteikt |
| | Saīsināt tabulu | Aizliegts izmantot saīsinātu tabulu, kas ir ātrāka par dzēšanu un izmanto mazāk sistēmas un žurnāla resursu, bet saīsināt ir bez darījumiem un neizraisa trigerus, kas var izraisīt negadījumus, tāpēc neizmantojiet šo paziņojumu izstrādes kodā. | Atsauce |
|
5. ORM kartē dzelzs likumus
| - | Dzelzs likums | Līmenis | Piezīme | Tabulas vaicājums | To lauku sarakstam, kurus vaicājumiem aizliegts izmantot *, ir jābūt skaidram, kuri lauki ir obligāti. | piespiedu |
| | POJO | POJO klases Būla atribūtu nevar pievienot is, bet datu bāzes lauks ir jāpievieno is, kas prasa kartēšanu starp laukiem un atribūtiem resultMap. | piespiedu |
| | Atgriešanas parametri | Aizliegts izmantot resultClass kā atgriešanās parametru, pat ja visi klases atribūtu nosaukumi atbilst datu bāzes laukiem pa vienam, tie ir jādefinē; Savukārt katrai tabulai jābūt tam atbilstošam atribūtam. Iemesls: konfigurējiet kartēšanas relāciju, lai savienotu lauku ar DO klasi, lai atvieglotu uzturēšanu. | piespiedu |
| | Atgriešanas parametri | Aizliegts tieši izmantot HashMap un HashTable kā vaicājuma rezultātu kopas izvadi. Iemesls: atribūta vērtības veids ir nekontrolējams. | piespiedu |
| | sql.xml Parametru konfigurēšana | sql.xml Izmantojiet #{}, #param# konfigurācijas parametriem un neizmantojiet ${}, jo ${} ir pakļauts SQL injekcijai. | piespiedu |
| | queryForList | QueryForList(String statementName, int start, int size) izmantošana, kas nāk ar Mybatis, ir aizliegta. Iemesls: Tas tiek īstenots, izgūstot visus SQL priekšraksta ierakstus, kas atbilst statementName datu bāzē, un pēc tam izmantojot apakšsarakstu, lai iegūtu sākuma, lieluma apakškopu. | piespiedu |
| | Atjaunināšanas laiks | Atjauninot datu bāzes tabulas ierakstu, vienlaikus ir jāatjaunina ieraksta modificēšanas laiks. | piespiedu |
| | Datu bāzes tabulas ierakstu atjaunināšana | Nerakstiet lielu un pilnu datu atjaunināšanas interfeisu (nodots kā POJO klase). Izpildot SQL, neatjauniniet nemainītos laukus, jo ir kļūdas, neefektīva un palielināta binlogu krātuve. | ieteikt |
| | @Transactional | @Transactional Neļaunprātīgi neizmantojiet darījumus. Darījumi ietekmē datu bāzes QPS. Turklāt, ja izmantojat darījumus, jums ir jāņem vērā dažādi atcelšanas shēmu aspekti, tostarp kešatmiņas atcelšana, meklētājprogrammas atcelšana, ziņojumu kompensācija, statistiskā korekcija utt. | Atsauce |
| | Mybatis dinamiskie sql tagi | < compareValue isEqual> ir konstante salīdzinājumā ar atribūta vērtību, parasti skaitlis, kas norāda, ka atbilstošais SQL priekšraksts tiek izpildīts, ja tas ir vienāds; < isNotEmpty> norāda, ka tas tiek izpildīts, kad tas nav tukšs un nav nulle; < isNotNull> norāda, ka tas tiek izpildīts, ja tas nav nulle. | Atsauce | |
|