Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Soll ich meine DB normalisieren oder nicht?

Eine philosophische Antwort:Suboptimale (relationale) Datenbanken sind voller Insert-, Update- und Delete-Anomalien. All dies führt zu inkonsistenten Daten und damit zu einer schlechten Datenqualität. Wenn Sie der Genauigkeit Ihrer Daten nicht vertrauen können, was nützen sie? Fragen Sie sich:Wollen Sie die richtigen Antworten langsamer oder schneller die falschen?

Als praktische Angelegenheit:Mach es richtig, bevor du es schnell bekommst. Wir Menschen sind sehr schlecht darin, vorherzusagen, wo Engpässe auftreten werden. Machen Sie die Datenbank großartig, messen Sie die Leistung über einen angemessenen Zeitraum und entscheiden Sie dann, ob Sie sie schneller machen müssen. Bevor Sie denormalisieren und die Genauigkeit opfern, probieren Sie andere Techniken aus:Können Sie einen schnelleren Server, eine schnellere Verbindung, einen schnelleren DB-Treiber usw. bekommen? Könnten gespeicherte Prozeduren die Dinge beschleunigen? Wie sind die Indizes und ihre Füllfaktoren? Wenn diese und andere Leistungs- und Tuning-Techniken nicht ausreichen, sollten Sie nur dann eine Denormalisierung in Betracht ziehen. Messen Sie dann die Leistung, um zu überprüfen, ob Sie die Geschwindigkeitssteigerung erhalten haben, für die Sie "bezahlt" haben. Stellen Sie sicher, dass Sie optimieren, nicht pessimieren.

[Bearbeiten]

A:Sicher.

  1. Erstellen Sie eine Sicherung.
  2. Erstellen Sie eine weitere Sicherung auf einem anderen Gerät.
  3. Erstellen Sie neue Tabellen mit Befehlen vom Typ "Aus alter Tabelle in neue Tabelle auswählen...". Sie müssen einige Joins durchführen, um zuvor unterschiedliche Tabellen zu kombinieren.
  4. Lassen Sie die alten Tabellen fallen.
  5. Benennen Sie die neuen Tabellen um.

ABER ... ziehen Sie einen robusteren Ansatz in Betracht:

Erstellen Sie jetzt einige Ansichten Ihrer vollständig normalisierten Tabellen. Diese Ansichten (virtuelle Tabellen, "Fenster" auf den Daten ... fragen Sie mich, wenn Sie mehr über dieses Thema wissen möchten) hätten die gleiche definierende Abfrage wie Schritt drei oben. Wenn Sie Ihre Anwendungs- oder DB-Layer-Logik schreiben, verwenden Sie die Ansichten (zumindest für den Lesezugriff; aktualisierbare Ansichten sind ... na ja, interessant). Wenn Sie dann später denormalisieren, erstellen Sie eine neue Tabelle wie oben, löschen Sie die Ansicht, benennen Sie die neue Basistabelle um, was auch immer die Ansicht war. Ihre Anwendung/DB-Schicht wird den Unterschied nicht erkennen.

In der Praxis gibt es eigentlich noch mehr dazu, aber das sollte Ihnen den Einstieg erleichtern.