Heim  >  Artikel  >  Backend-Entwicklung  >  Datenbank-Denormalisierungsdesign: Anwendung in der PHP-Programmierung

Datenbank-Denormalisierungsdesign: Anwendung in der PHP-Programmierung

PHPz
PHPzOriginal
2023-06-22 19:09:09913Durchsuche

Mit der rasanten Entwicklung der Internettechnologie sind Datenbanken als Datenspeicher- und Verwaltungszentren zu einem unverzichtbaren Bestandteil des modernen Informationszeitalters geworden. Beim Entwerfen einer Datenbank hoffen viele Entwickler, der datenbankstandardisierten Entwurfstheorie so nahe wie möglich zu kommen, damit die Struktur der Datentabelle angemessen, standardisiert und für Wartung und Abfrage geeignet ist. In manchen Fällen ist die Denormalisierung jedoch auch eine sehr nützliche Technik, um die Effizienz der Datenspeicherung und des Datenzugriffs durch redundante Daten und eine ordnungsgemäße Datenorganisation zu optimieren. Bei der PHP-Programmierung kann Anti-Paradigma-Design die Leistung erheblich verbessern, die Datenbank-Maschinenlast reduzieren, die Datenbank-Skalierbarkeit verbessern und Entwicklungszyklen verkürzen. In diesem Artikel wird PHP unter den Aspekten Anti-Paradigma-Designprinzipien, Implementierung und anwendbare Szenarien beschrieben Verwenden Sie De-Paradigma-Design in der Programmierung.

1. Normalisiertes Design und denormalisiertes Design

Beim Entwurf einer Datenbank zielt ein angemessenes normalisiertes Design darauf ab, die Struktur der Datentabelle standardisierter, prägnanter und genauer zu gestalten, Vorgänge zu vereinfachen, Entwicklungsschwierigkeiten und den Grad der Datenredundanz zu verringern, um die Daten zu verbessern Übertragung und Sicherheit. Die Datenbanknormalisierungstheorie umfasst hauptsächlich mehrere Ebenen wie 1NF (erste Normalform), 2NF (zweite Normalform), 3NF (dritte Normalform) usw., die die Atomizität von Attributen, Beziehungsabhängigkeiten zwischen Entitäten und den Aspekt der Datenredundanz einschränken .

Denormalisierungsdesign ist das gegenteilige Konzept. Es zielt darauf ab, die Datenbankleistung durch Erhöhung bestimmter Datenredundanz, Optimierung von Abfragen und Beschleunigung zu verbessern. Dies wird hauptsächlich durch Denormalisierung erreicht, z. B. durch die Aufteilung von Feldern in mehrere Tabellen, um JOIN-Vorgänge beim Abfragen oder Speichern zu reduzieren redundante Daten in mehreren Tabellen, um JOIN beim Aktualisieren zu vermeiden. Allerdings weist das Anti-Paradigmen-Design auch gewisse Einschränkungen auf. In den meisten Fällen ist exzellentes Paradigmen-Design immer noch die erste Wahl.

2. Anwendungsszenarien des Denormalisierungsdesigns

Der Grundsatz, der beim Denormalisierungsdesign befolgt werden sollte, besteht darin, dass bei der Abwägung des Designs die Bedürfnisse der Entwickler und die benutzerorientierten Bedürfnisse berücksichtigt werden müssen.

  1. Szenarien mit hohen Abfrageanforderungen

Wenn häufige Abfragen erforderlich sind, kann die Verwendung des Denormalisierungsdesigns die Abfrageeffizienz optimieren und unnötige Abfragen wie JOIN-Vorgänge und mehrschichtige Abfragen reduzieren, z. B.: Benutzeranmeldeinformationen, Bestellungen. Weitere Informationen erhalten Sie kann zuerst den Cache laden und direkt ausgeben, wenn die Seite angezeigt wird.

  1. Situationen mit hohem Datenbankschreibvolumen oder großem Zugriffsvolumen

Die Einführung eines Denormalisierungsdesigns kann den Druck auf die Datenbank verringern, einige Daten, die nicht geändert werden müssen, in mehrere Tabellen aufteilen und Sperren während des Schreibens usw. vermeiden Beispielsweise können Produktpreise, bestimmte Textbeschreibungen usw. zunächst irgendwo zwischengespeichert und dann beim eigentlichen Schreiben aus dem Cache abgerufen werden.

  1. Szenarien, in denen einige Daten rechtzeitig aktualisiert/gelöscht werden müssen

Durch die Verwendung eines Denormalisierungsdesigns kann auch die Ineffizienz von UPDATE und DELETE vermieden werden. Wenn die Datenmenge groß ist, verbrauchen UPDATE- und DELETE-Vorgänge viele Ressourcen. Mithilfe des Denormalisierungsdesigns können einige Daten in mehrere Tabellen geschrieben werden, um eine verteilte Verarbeitung und teilweise Aktualisierung/Löschung zu erreichen.

3. Wie wendet man De-Paradigma-Design in der PHP-Programmierung an?

Das Folgende ist ein spezifisches PHP-Programmierbeispiel, das zeigt, wie das Denormalisierungsdesign verwendet wird:

  1. Voraussetzung: Die Bestellnummer, die Produkt-ID, der Produktname, der Produktstückpreis, die Produktmenge und die Produktzwischensumme müssen angezeigt werden die Seite mit den Bestelldetails. Es gibt zwei Tabellen, die Bestelltabelle und die Produkttabelle. Die Bestelltabelle enthält die Felder Bestellnummer, Produkt-ID und Produktmenge, und die Produkttabelle enthält die Felder Produkt-ID, Produktname und Produkteinheitspreis.
  2. Normaler Designplan: Fragen Sie Bestellungen und entsprechende Produktinformationen ab, indem Sie zwei Tabellen verbinden. Wie unten gezeigt:
SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
FROM order_tbl
LEFT OUTER JOIN product_tbl
ON order_tbl.product_id = product_tbl.product_id
WHERE order_no = '1001';
  1. Denormalisierungsentwurfsplan: Redundante die beiden Felder Produktname und Produktstückpreis in der Bestelltabelle zur Bestelltabelle, um Join-Vorgänge während der Abfrage zu reduzieren. Wie unten gezeigt:
SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
FROM order_tbl
WHERE order_no = '1001';
  1. Implementierungsschritte:

(1) Erstellen Sie zwei Tabellen: order_tbl und product_tbl.

CREATE TABLE `order_tbl` (
  `order_no` varchar(100) NOT NULL,
  `product_id` int(11) NOT NULL,
  `product_qty` int(11) NOT NULL,
  `product_name` varchar(100) DEFAULT NULL,
  `product_price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `product_tbl` (
  `product_id` int(11) NOT NULL,
  `product_name` varchar(100) NOT NULL,
  `product_price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

(2) In der Bestelltabelle order_tbl gibt es zwei redundante Felder: Produktname und Produktpreis.

ALTER TABLE `order_tbl` ADD COLUMN `product_name` VARCHAR(100) NOT NULL DEFAULT '';
ALTER TABLE `order_tbl` ADD COLUMN `product_price` DECIMAL(10,2) NOT NULL DEFAULT '0.00';

(3) Wenn Sie eine Bestellung schreiben, schreiben Sie Daten in order_tbl und in die Cache-Tabelle Cache_tbl.

//写入订单表
$sql = "INSERT INTO order_tbl(order_no, product_id, product_qty, product_name, product_price) 
        VALUES ('$order_no', $product_id, $product_qty, '$product_name', $product_price)";

//写入缓存表
$sql_cache = "INSERT INTO cache_tbl(key_name, cache_value) 
              VALUES ('product_info_${product_id}','{"product_name":"${product_name}", "product_price":"${product_price}"}')";

(4) Wenn Sie eine Bestellung abfragen, rufen Sie zunächst den Produktnamen und den Preis aus der Cache-Tabelle „cache_tbl“ ab. Wenn sie nicht im Cache vorhanden sind, fragen Sie den Produktnamen und den Preis aus der Produkttabelle „product_tbl“ ab und speichern Sie sie in „cache_tbl“.

$redis = new Redis(); 
$redis->connect('127.0.0.1', 6379);

$key_name = "product_info_${product_id}";
if ($redis->exists($key_name)) {
  $cache_data = json_decode($redis->get($key_name), true);
  $product_name = $cache_data['product_name'];
  $product_price = $cache_data['product_price'];
} else {
  $sql = "SELECT product_name, product_price FROM product_tbl WHERE product_id=$product_id";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_array($result);
  $product_name = $row['product_name'];
  $product_price = $row['product_price'];
  $redis->set($key_name, json_encode(['product_name'=>$product_name, 'product_price'=>$product_price]));
}

$sql = "SELECT order_no, product_id, product_name, product_price, product_qty, (product_price * product_qty) AS sub_total 
        FROM order_tbl
        WHERE order_no = '1001'";

In diesem Beispiel verwenden wir Redis zum Caching. Bei der Abfrage von Bestelldetails holen wir uns zunächst den Produktnamen und den Preis aus dem Cache. Wenn diese nicht im Cache vorhanden sind, fragen wir sie aus der Produkttabelle ab und schreiben sie hinein der Cache. Durch diese Methode vermeiden wir JOIN-Vorgänge und verbessern die Abfrageeffizienz und -leistung erheblich.

4. Zusammenfassung

Anti-Paradigma-Design hat sowohl Vor- als auch Nachteile, und eine vernünftige Anwendung ist der Schlüssel. Beim Entwerfen einer Datenbank sollten Sie je nach tatsächlicher Situation verschiedene Kompromisse eingehen, die Vor- und Nachteile abwägen und die Entwurfsmethoden flexibel einsetzen. In der PHP-Programmierung ist die Optimierung des Datenbankbetriebs durch Denormalisierungsdesign ebenfalls eine sehr nützliche und praktische Technologie. Wir können die Leistung und Effizienz der Datenbank, die Reaktionsgeschwindigkeit des Systems und die Benutzerzufriedenheit verbessern, indem wir redundante Daten, verteilte Verarbeitung, Caching- und Indexierungsstrategien und andere Maßnahmen hinzufügen.

Das obige ist der detaillierte Inhalt vonDatenbank-Denormalisierungsdesign: Anwendung in der PHP-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn