Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 9362|Antwort: 0

[Quelle] MySQL-Datenbank-Eisenregel

[Link kopieren]
Veröffentlicht am 10.10.2019 14:00:44 | | |
Eine gute Datenbankspezifikation hilft, die Komplexität der Softwareimplementierung zu reduzieren und die Kommunikationskosten zu senken.

1. Das eiserne Gesetz des Baus eines Lagerhauses

-
Eisengesetz
Level
Bemerkung
Zeichensatz
Benutze UTF-8. Wenn das Emoji gespeichert ist, nutze utf8mb4 zur Speicherung.
Zwang

Sortierregeln
Nutzen Sie utf8_general_ci
Zwang

2. Das eiserne Gesetz des Tischbaus

-
Eisengesetz
Level
Bemerkung
Exegese
Stellen Sie sicher, dass Sie Feldanmerkungen haben.
Zwang

kodieren
Benutze UTF-8. Wenn das Emoji gespeichert ist, nutze utf8mb4 zur Speicherung.
Zwang

ob das Feld konzeptuell ist
Sie muss mit is_xx benannt sein, und der Datentyp ist unsigned tinyint(1 ja, 0 no), z. B. is_deleted(1 delete, 0 nicht gelöscht).
Zwang
Jeder Körper muss unsigniert sein, sofern er nicht negativ ist
Tabellenname, Feldname
Es dürfen nur Kleinbuchstaben, Unterstriche oder Zahlen verwendet werden; Es ist verboten, mit einer Unterstrich oder Zahl zu beginnen; Nur Zahlen zwischen zwei Unterstrichen sind verboten; Reservierte Wörter deaktivieren; Die Verwendung von Plural-Substantiven ist in Tabellennamen verboten.
Zwang

Die Benennung des Datenbank- und Tabellennamens
Der Datenbankname sollte mit dem Anwendungsnamen übereinstimmen, und der Tabellenname sollte mit Business Name_Role der Tabelle benannt sein.
Zwang

Indexbenennung
Der Primärschlüsselindex verwendet pk_ Feldnamen; Eindeutiger Index mit uk_ Feldnamen; Normale Indizes verwenden idx_ Feldnamen.
Zwang
pk_ ist der Primärschlüssel; uk_ ist ein einzigartiger Schlüssel; idx_ ist Index
Dezimaltyp
Der Datentyp ist dezimal, und die Verwendung von Float und Double ist verboten; Float und Double haben Präzisionsverlust, und wenn der gespeicherte Datenbereich den Dezimalbereich überschreitet, wird empfohlen, die Daten in ganze Zahlen und Dezimalzahlen aufzuteilen und separat zu speichern.
Zwang

Varchar-Typ
Varchar ist ein variabel langer String, kein Speicherplatz wird im Voraus zugewiesen, die Länge darf 5000 Zeichen nicht überschreiten, wenn die Länge größer als 5000 ist, wird Text angewendet (eine separate Tabelle erstellt, mit dem Primärschlüssel entsprechend verwendet, um die Indexierungseffizienz anderer Felder nicht zu beeinträchtigen).
Zwang

Im Tabellennamen müssen drei Felder enthalten sein
id (Datentyp ist unsigned bigint, Single Table Increment, Schrittgröße 1), gmt_create, gmt_modified (aktive Erstellungszeit, passive Aktualisierungszeit, Datentyp ist Datetime).
Zwang

Feldredundanz
Felder ermöglichen angemessene Redundanz, aber Datenkonsistenz muss berücksichtigt werden, und redundante Felder sollten 1) seltene Änderungen aufweisen; 2) Kein Varchar-Super-Langfeld, geschweige denn ein Textfeld.
Empfehlen

Teile die Datenbank und Tabellen auf
Partitionierung wird nur empfohlen, wenn die Anzahl der Zeilen in einer einzelnen Tabelle 5 Millionen Zeilen übersteigt oder die Kapazität einer einzelnen Tabelle 2 GB übersteigt.
Empfehlen


Die Einstellung der passenden Speicherlänge für Zeichen spart nicht nur Speicherplatz in Datenbanktabellen und Indexspeicher, sondern verbessert vor allem die Abrufgeschwindigkeit.

3. Ein Index-Eisen-Gesetz festlegen

-
Eisengesetz
Level
Bemerkung
Einzigartiger Index
Bereiche mit einzigartigen Merkmalen im Unternehmen, selbst wenn sie eine Kombination von Bereichen sind, müssen eindeutig indexiert werden. Obwohl der eindeutige Index die Einfügungsgeschwindigkeit beeinflusst, ist dieser Verlust vernachlässigbar, verbessert jedoch die Abfragegeschwindigkeit erheblich. Außerdem werden selbst wenn die Anwendungsschicht eine sehr vollständige Kontrolle hat, solange es keinen eindeutigen Index gibt, laut Murphys Gesetz zwangsläufig unsaubere Daten erzeugt.
Zwang

Beitreten
Mehr als drei Tabellen verbieten Joining, Felder, die Join erfordern, und die Datentypen müssen konsistent sein; Wenn mehrere Tabellen mit Abfragen verknüpft sind, stellen Sie sicher, dass die zugehörigen Felder einen Index benötigen. Auch wenn du einen doppelten Tabellen-Join hast, achte auf die Tabellenindexierung und die SQL-Performance.
Zwang

Varcharfield
Die Indexlänge muss angegeben werden, und es ist nicht notwendig, alle Felder zu indexieren, sondern nur die Indexlänge entsprechend der tatsächlichen Textunterscheidung zu bestimmen. Indexlänge und Unterscheidung sind ein Paar von Widersprüchen; im Allgemeinen haben Indizes mit einer Länge von 20 einen Unterscheidungsgrad von mehr als 90 %, der durch den Unterscheidungsgrad von Count(distinct left(Spaltenname, Indexlänge))/Count(*) bestimmt werden kann.
Zwang

Unschärfe ist bei der Seitensuche verboten
Die Seitensuche verbietet Unschärfe oder vollständige Unschärfe, falls nötig, geh bitte in die Suchmaschine, um das Problem zu lösen. Prohibitionsgrund: Die Indexdatei hat die linke Präfix-Match-Eigenschaft des B-Baums, und wenn der Wert links nicht bestimmt ist, kann dieser Index nicht verwendet werden.
Zwang

Ordnung nach
Wenn es eine Reihenfolge nach Szenario gibt, achte auf die Ordnung des Indexes. Das letzte Feld der Ordnung nach ist Teil des kombinierten Index und wird am Ende der Indexkombinationsreihenfolge platziert, um file_sort zu vermeiden und die Abfrageleistung zu beeinträchtigen. Beispiel: wo a=? und b=? Ordnung nach C; Der Index sollte wie a_b_c aufgebaut werden; Gegenbeispiel: Wenn es eine Bereichssuche im Index gibt, kann die Indexordnung nicht genutzt werden, etwa wenn a>10 durch b geordnet ist; Index a_b kann nicht sortiert werden.
Empfehlen

4. SQL-Eisenregeln schreiben

-
Eisengesetz
Level
Bemerkung
Zähl(*)
Verwenden Sie nicht count(Spaltenname) oder count(constant) statt count(*), das ist die Syntax für die Standardanzahl der von SQL92 definierten Zeilen, unabhängig von der Datenbank und unabhängig von NULL und nicht-NULL. count(*) zählt Zeilen mit einem NULL-Wert, während count(Spaltenname) keine Zeilen mit dieser Spalte NULL zählt.
Zwang

Graf (besonderer Koll)
Zählt die Anzahl der eindeutigen Zeilen in der Spalte, außer NULL. Beachte, dass Count (unterschiedliche Kol1, Kol2), wenn eine der Spalten alle NULL ist, sie 0 zurückgibt, selbst wenn die andere Spalte einen anderen Wert hat.
Zwang

sum(kol)
Wenn die Werte einer Spalte alle NULL sind, gibt count(col) 0 zurück, aber sum(col) gibt NULL zurück, daher müssen Sie bei der Verwendung von sum() auf NPE-Probleme achten. NPE-Probleme können auf folgende Weise vermieden werden: Auswahl if(isnull(sum(g)), 0, sum(g)) aus der Tabelle;
Zwang

isnull
Verwenden Sie isnull(), um zu bestimmen, ob es sich um einen NULL-Wert handelt. NULL ist NULL im Vergleich zu jedem beliebigen Wert.
Zwang

Paginations-Abfragelogik
Ist der Count 0, sollte er direkt zurückgegeben werden, um die Ausführung der nachfolgenden Paginierungsanweisung zu vermeiden.
Zwang

Äußere Schlüssel und Kaskaden
Die Verwendung von Fremdschlüsseln und Kaskadieren, und alle Fremdschlüsselkonzepte müssen auf der Anwendungsebene gelöst werden. Begründung: Fremdschlüssel und Kaskaden sind für verteilte, hochzeitige Cluster nicht geeignet, kaskadierende Updates sind starke Blockierungen, es besteht das Risiko von Datenbank-Aktualisierungsstürmen und Fremdschlüssel beeinflussen die Einfügungsgeschwindigkeit der Datenbank.
Zwang

Gespeicherte Verfahren
Gespeicherte Prozeduren sind verboten, gespeicherte Prozeduren sind schwer zu debuggen und skalierbar und nicht portabel.
Zwang

Datenkorrektur
Beim Korrekturen von Daten (insbesondere beim Löschen oder Ändern von Datensätzen) wählen Sie zuerst, um eine versehentliche Löschung zu vermeiden, und führen Sie die Aktualisierungsanweisung erst nach Bestätigung der Korrektheit aus.
Zwang

in
Wenn es nicht vermieden werden kann, sollte die Anzahl der gesetzten Elemente nach in innerhalb von 1000 kontrolliert werden.
Empfehlen

Trunkiert-Tabelle
Es ist verboten, die Tabelle zu truncieren, da sie schneller ist als Delete und weniger System- und Logressourcen benötigt, aber Truncate ist transaktionsfrei und löst keine Trigger aus, die Unfälle verursachen können, daher sollten Sie diese Anweisung nicht im Entwicklungscode verwenden.
Referenz


5. ORM bildet eiserne Gesetze ab

-
Eisengesetz
Level
Bemerkung
Tabellenabfrage
Die Liste der Felder, die für Abfragen verboten sind, * zu verwenden, muss klar sein, welche Felder erforderlich sind.
Zwang

POJO
Das Boolesche Attribut der POJO-Klasse kann nicht zu is hinzugefügt werden, während das Datenbankfeld zu is hinzugefügt werden muss, was eine Abbildung zwischen Feldern und Attributen im resultMap erfordert.
Zwang

Rückgabeparameter
Es ist verboten, resultClass als Rückgabeparameter zu verwenden, selbst wenn alle Klassenattributnamen einzeln Datenbankfeldern entsprechen, müssen sie definiert werden; Jede Tabelle muss wiederum ein entsprechendes Attribut besitzen. Grund: Konfigurieren Sie die Mapping-Beziehung so, dass das Feld mit der DO-Klasse gekoppelt wird, um die Wartung zu erleichtern.
Zwang

Rückgabeparameter
Es ist verboten, HashMap und HashTable direkt als Ausgabe der Abfrageergebnismenge zu verwenden. Begründung: Der Attributtyp ist unkontrollierbar.
Zwang

sql.xml Parameter konfigurieren
sql.xml Verwenden Sie #{}, #param# für Konfigurationsparameter und verwenden Sie nicht ${}, da ${} anfällig für SQL-Injektionen ist.
Zwang

queryForList
Die Verwendung von queryForList (String statementName, int start, int size), die mit Mybatis geliefert wird, ist verboten. Reason: Es wird implementiert, indem alle Datensätze der SQL-Anweisung, die dem StatementName entspricht, in der Datenbank abgerufen und dann die SubList verwendet wird, um eine Teilmenge von Startgröße zu erhalten.
Zwang

Aktualisierungszeit
Beim Aktualisieren eines Datenbanktabellendatensatzes müssen Sie gleichzeitig die Änderungszeit des Datensatzes aktualisieren.
Zwang

Datenbanktabellendatensätze aktualisieren
Schreibe keine große und vollständige Daten-Update-Oberfläche (als POJO-Klasse übergeben). Beim Ausführen von SQL sollten unveränderte Felder aufgrund fehleranfälliger, ineffizienter und erhöhter Binlog-Speicherkapazität nicht aktualisiert werden.
Empfehlen

@Transactional
@Transactional Missbrauche keine Transaktionen. Transaktionen beeinflussen die QPS der Datenbank. Außerdem müssen Sie bei Verwendung von Transaktionen verschiedene Aspekte von Rollback-Schemata berücksichtigen, darunter Cache-Rollback, Suchmaschinen-Rollback, Nachrichtenkompensation, statistische Korrekturen usw.
Referenz

Mybatis dynamische SQL-Tags
< compareValue in isEqual> ist eine Konstante im Vergleich zum Attributwert, meist eine Zahl, die anzeigt, dass die entsprechende SQL-Anweisung ausgeführt wird, wenn sie gleich ist; < isNotEmpty> zeigt an, dass es ausgeführt wird, wenn es nicht leer und nicht null ist; < isNotNull> zeigt an, dass es ausgeführt wird, obwohl es nicht null ist.
Referenz








Vorhergehend:SEO-Operationskarte ist die erste im gesamten Netzwerk, eine Sammlung ultra-kompletter Internet-High-Definition-Operationskarten
Nächster:[Erdwissenschaften] DK Kinderenzyklopädie Eine hochwertige Enzyklopädie aus Großbritannien...
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com