Maison > Article > développement back-end > Conception de dénormalisation de bases de données : application en programmation PHP
Avec le développement rapide de la technologie Internet, les bases de données, en tant que centres de stockage et de gestion de données, sont devenues un élément indispensable de l'ère moderne de l'information. Lors de la conception d'une base de données, de nombreux développeurs espèrent être aussi proches que possible de la théorie de conception standardisée de la base de données afin que la structure de la table de données soit raisonnable, standardisée et pratique pour la maintenance et les requêtes. Cependant, dans certains cas, la dénormalisation est également une technique très utile pour optimiser l’efficacité du stockage et de l’accès aux données grâce à des données redondantes et à une organisation appropriée des données. Dans la programmation PHP, la conception anti-paradigme peut considérablement améliorer les performances, réduire la charge de la machine de base de données, améliorer l'évolutivité de la base de données et raccourcir les cycles de développement. Cet article décrira PHP sous les aspects des principes de conception anti-paradigme, de la mise en œuvre et des scénarios applicables. utiliser la conception hors paradigme dans la programmation.
1. Conception normalisée et conception dénormalisée
Lors de la conception d'une base de données, une conception normalisée raisonnable vise à rendre la structure de la table de données plus standardisée, concise et précise, à simplifier les opérations, à réduire les difficultés de développement et le degré de redondance des données pour améliorer les données. transmission et sécurité. La théorie de la normalisation des bases de données comporte principalement plusieurs niveaux tels que 1NF (première forme normale), 2NF (deuxième forme normale), 3NF (troisième forme normale), etc., qui limitent l'atomicité des attributs, les dépendances relationnelles entre les entités et l'aspect de redondance des données. .
La conception de la dénormalisation est le concept opposé. Elle vise à améliorer les performances de la base de données en augmentant la redondance de certaines données, en optimisant les requêtes et en accélérant. Ceci est principalement réalisé grâce à la dénormalisation, comme la division des champs en plusieurs tables pour réduire les opérations de JOIN lors de l'interrogation ou du stockage. données redondantes dans plusieurs tables pour éviter JOIN lors de la mise à jour. Cependant, la conception anti-paradigme présente également certaines limites. Dans la plupart des cas, une excellente conception paradigmatique reste le premier choix.
2. Scénarios d'application de la conception de dénormalisation
Le principe qui doit être suivi dans la conception de dénormalisation est que lors de l'évaluation de la conception, les besoins des développeurs et les besoins orientés utilisateur doivent être pris en compte.
Lorsque des requêtes fréquentes sont requises, l'utilisation de la conception de dénormalisation peut optimiser l'efficacité des requêtes et réduire les requêtes inutiles telles que les opérations JOIN et les requêtes multicouches, telles que : les informations de connexion de l'utilisateur, les commandes. Pour plus de détails, vous peut d'abord charger le cache et le sortir directement lorsque la page est affichée.
L'adoption d'une conception de dénormalisation peut réduire la pression sur la base de données, diviser certaines données qui n'ont pas besoin d'être modifiées en plusieurs tables et éviter les verrous lors de l'écriture, etc. Par exemple, les prix des produits, certaines descriptions textuelles, etc. peuvent d'abord être mis en cache quelque part, puis récupérés du cache lorsqu'ils sont réellement écrits.
L'utilisation de la conception de dénormalisation peut également éviter l'inefficacité de UPDATE et DELETE. Lorsque la quantité de données est importante, les opérations UPDATE et DELETE consomment beaucoup de ressources. Grâce à la conception de dénormalisation, certaines données peuvent être écrites dans plusieurs tables pour réaliser un traitement distribué et une mise à jour/suppression partielle.
3. Comment appliquer la conception sans paradigme dans la programmation PHP ?
Ce qui suit est un exemple de programmation PHP spécifique pour montrer comment utiliser la conception de dénormalisation :
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';
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) Créez deux tables : order_tbl et 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) Il y a deux champs redondants dans la table de commande order_tbl : product_name et product_price.
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) Lors de l'écriture d'une commande, écrivez les données dans order_tbl et dans la table de cache 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) Lors de l'interrogation d'une commande, obtenez d'abord le nom et le prix du produit dans la table de cache cache_tbl. S'ils n'existent pas dans le cache, interrogez le nom et le prix du produit dans la table des produits product_tbl et mettez-les en cache dans 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'";
Dans cet exemple, nous utilisons Redis pour la mise en cache. Lors de l'interrogation des détails de la commande, nous obtenons d'abord le nom du produit et le prix du cache. S'ils n'existent pas dans le cache, nous les interrogeons dans la table des produits et les écrivons dans. la cache. Grâce à cette méthode, nous évitons les opérations JOIN et améliorons considérablement l'efficacité et les performances des requêtes.
4. Résumé
La conception anti-paradigme présente à la fois des avantages et des inconvénients, et une application raisonnable est la clé. Lors de la conception d'une base de données, vous devez faire divers compromis en fonction de la situation réelle, peser le pour et le contre et utiliser les méthodes de conception avec flexibilité. En programmation PHP, l'optimisation des opérations de base de données grâce à la conception de dénormalisation est également une technologie très utile et pratique. Nous pouvons améliorer les performances et l'efficacité des bases de données, la vitesse de réponse du système et la satisfaction des utilisateurs en ajoutant des données redondantes, des stratégies de traitement distribué, de mise en cache et d'indexation et d'autres moyens.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!