Cet article compare l'utilisation de DQL (Doctrine Query Language) et de SQL natif dans l'écosystème Symfony, en se basant sur des exemples concrets avec Symfony 7.4 et PHP 8.4+. Il explore les performances, la maintenabilité et l'expérience de développement des deux approches. L'auteur définit d'abord un modèle de domaine simple avec une entité Product, puis illustre l'utilisation de DQL à travers un exemple de requête dans un repository. Les avantages de DQL, comme la manipulation d'objets et la portabilité entre bases de données, sont mis en avant. L'article promet également une analyse des performances et de l'hydratation des résultats.
L’article défend l’importance des bases de données relationnelles comme exemple de « boring technology » sous-estimée, soulignant que malgré leur large utilisation pour stocker des données, beaucoup de développeurs ne maîtrisent plus le SQL ni les fonctionnalités avancées des SGBD, ce qui se révèle problématique quand les charges augmentent et que les performances chutent ; il ajoute que les ORM sont utiles mais doivent être bien compris pour optimiser les requêtes et exploiter pleinement des concepts comme vues, index ou requêtes récursives afin de bâtir des applications robustes sans multiplier inutilement les technologies.
sqldef est un outil en ligne de commande pour comparer deux schémas SQL et générer des scripts de migration. Il prend en charge plusieurs bases de données comme MySQL, PostgreSQL, SQL Server, et SQLite3. La page propose une démo en ligne utilisant WebAssembly pour visualiser les différences entre deux schémas et générer les requêtes SQL nécessaires pour les migrations. Plus d'informations et le code source sont disponibles sur GitHub.
Les formes normales en bases de données sont essentielles pour optimiser les performances, réduire la redondance des données et faciliter la maintenance à long terme. Elles permettent d'éviter les problèmes de duplication d'informations, d'incohérences lors des mises à jour et de complexité croissante des requêtes. Les trois niveaux fondamentaux sont la 1NF (atomicité des données), la 2NF (dépendance fonctionnelle complète) et la 3NF (élimination des dépendances transitives).
On a 3 manières de compter les lignes en SQL :
COUNT(*) compte toutes les lignes, sans s'occuper des valeurs de celles-ci. On l'utilise souvent avec GROUP BY comme dans cette requête sur les prénoms les plus populaires.
SELECT first_name, COUNT(*) FROM people GROUP BY first_name ORDER BY COUNT(*) DESC LIMIT 50
COUNT(DISTINCT column) renvoie le nombre de valeurs distinctes, et est donc très utile si une colonne a des valeurs dupliquées. Par exemple, la requête suivante trouve le nombre d'espèces pour chaque gêne de plante.
SELECT genus, COUNT(DISTINCT species) FROM plants GROUP BY 1 ORDER BY 2 DESC
À noter que GROUP BY 1 signifie de grouper par la 1ère expression du SELECT.
SUM(CASE WHEN expression THEN 1 ELSE 0 END) permet de compter, par exemple dans la requête ci-dessous, combien chaque propriétaire a de chats, de chiens et d'autres animaux.
SELECT owner , SUM(CASE WHEN type = 'dog' THEN 1 ELSE 0 END) AS num_dogs , SUM(CASE WHEN type = 'cat' THEN 1 ELSE 0 END) AS num_cats , SUM(CASE WHEN type NOT IN ('dog','cat') THEN 1 ELSE 0 END) AS num_other FROM pets GROUP BY owner
Ça marche bien si la table a le format
| owner | type |
|---|---|
| 1 | dog |
| 1 | cat |
| 2 | dog |
| 2 | parakeet |
L'article explique comment protéger les sites WordPress contre les attaques par injection SQL, une méthode couramment utilisée par les hackers pour accéder aux bases de données. Les sites WordPress, représentant 43% des sites web, sont des cibles privilégiées en raison de leur popularité. Une injection SQL peut endommager un site, voler des données et verrouiller l'accès administrateur. Pour se protéger, il est crucial de valider les entrées utilisateur, éviter le SQL dynamique, mettre à jour régulièrement les thèmes et plugins, utiliser un pare-feu, cacher la version de WordPress, personnaliser les messages d'erreur de la base de données, limiter les permissions des rôles utilisateurs, activer l'authentification à deux facteurs, supprimer les fonctions inutiles de la base de données, surveiller l'activité du site et effectuer des sauvegardes régulières. En cas d'attaque, il faut vérifier la base de données, supprimer le code malveillant, restaurer une sauvegarde propre, changer tous les mots de passe et renforcer la sécurité du site.
L'article présente ce que sont les transactions ACID.
Les transactions ACID sont un ensemble de principes garantissant la fiabilité des transactions dans les bases de données. ACID signifie Atomicité, Cohérence, Isolation et Durabilité. Ces propriétés assurent que les transactions sont complètes, maintenant l'intégrité des données même en cas de panne. L'atomicité garantit qu'une transaction est entièrement exécutée ou pas du tout, la cohérence maintient la base de données dans un état valide, l'isolation empêche les interférences entre transactions, et la durabilité assure que les modifications sont permanentes une fois la transaction terminée.
Les transactions ACID sont cruciales dans des domaines comme la finance et le commerce électronique, où l'intégrité des données est primordiale. Cependant, elles peuvent poser des défis en termes de performance et d'évolutivité, surtout dans les systèmes distribués. Les bases de données NoSQL, en revanche, adoptent souvent le modèle BASE (Basically Available, Soft state, Eventual consistency), privilégiant la disponibilité et la flexibilité à la cohérence stricte.
Pour optimiser les transactions ACID, il est recommandé de limiter leur portée, d'utiliser des transactions plus petites, et de choisir des niveaux d'isolation appropriés. La surveillance et l'enregistrement des transactions sont également essentiels pour maintenir les performances du système.
Tout est dans le titre
Tout est dans le titre
Pas si simple en SQL... notamment pour les performances
Tout est dans le titre (via https://korben.info/octosql-interroger-csv-json-sql.html )
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre
Un long tutoriel sur SQL (basé sur SQLite)
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre (via https://korben.info/trdsql-outil-puissant-interroger-fichiers-plats-sql.html )
Des snippets de code : Python, JavaScript, CSS, HTML, Makefile, Shell, regex, SQL, etc