Pourquoi pas d’amour pour SQL?

J’ai entendu beaucoup de fois récemment que SQL est un langage terrible, et il semble que chaque framework sous le soleil soit livré avec une couche d’abstraction de firebase database.

Cependant, selon mon expérience, SQL est souvent le moyen le plus simple, le plus polyvalent et le plus convivial pour gérer les entrées et les sorties de données. Chaque couche d’abstraction que j’ai utilisée semble être une approche nettement limitée, sans réel avantage.

Qu’est-ce qui rend SQL si terrible et pourquoi les couches d’abstraction de firebase database sont-elles précieuses?

C’est en partie subjectif. Donc c’est mon avis:

SQL a un style pseudo-langage naturel . Les inventeurs pensaient qu’ils pouvaient créer un langage comme l’anglais et que les requêtes de firebase database seraient très simples. Une terrible erreur SQL est très difficile à comprendre, sauf dans des cas sortingviaux.

SQL est déclaratif. Vous ne pouvez pas dire à la firebase database comment elle doit faire les choses, juste ce que vous voulez comme résultat. Ce serait parfait et très puissant si vous ne deviez pas vous soucier de la performance. Vous vous retrouvez donc à écrire des plans d’exécution en lecture SQL – en reformulant SQL en essayant d’influencer le plan d’exécution, et vous vous demandez pourquoi vous ne pouvez pas écrire vous-même le plan d’exécution .

Un autre problème du langage déclaratif est que certains problèmes sont plus faciles à résoudre de manière impérative. Vous pouvez donc l’écrire dans une autre langue (vous aurez besoin de SQL standard et probablement d’une couche d’access aux données) ou en utilisant des extensions de langue spécifiques au fournisseur, par exemple en écrivant des procédures stockées, etc. Vous vous rendrez probablement compte que vous utilisez l’une des pires langues que vous ayez jamais vues – car elle n’a jamais été conçue pour être utilisée comme langage impératif.

SQL est très ancien . SQL a été standardisé, mais trop tard, de nombreux fournisseurs ont déjà développé leurs extensions de langage. Ainsi, SQL s’est retrouvé dans des dizaines de dialectes. C’est pourquoi les applications ne sont pas portables et l’une des raisons d’être une couche d’abstraction de firebase database.

Mais c’est vrai – il n’y a pas d’alternatives possibles. Nous allons donc tous utiliser SQL pour les prochaines années.

En dehors de tout ce qui a été dit, une technologie ne doit pas nécessairement être mauvaise pour rendre une couche d’abstraction précieuse .

Si vous faites un script ou une application très simple, vous pouvez vous permettre de combiner les appels SQL dans votre code où vous le souhaitez. Toutefois, si vous utilisez un système complexe, isoler les appels de firebase database dans des modules distincts est une bonne pratique. Il isole donc votre code SQL. Il améliore la lisibilité, la maintenabilité et la testabilité de votre code. Il vous permet d’adapter rapidement votre système aux modifications du modèle de firebase database sans briser tous les éléments de haut niveau, etc.

SQL est génial. Les couches d’abstraction au-dessus le rendent encore plus grand!

Un sharepoints couches d’abstraction est le fait que les implémentations SQL ont tendance à être plus ou moins incompatibles puisque la norme est légèrement ambiguë, et aussi parce que la plupart des fournisseurs y ont ajouté leurs propres extras (non standard). En d’autres termes, le langage SQL écrit pour une firebase database MySQL peut ne pas fonctionner de manière similaire avec, par exemple, une firebase database Oracle, même si cela doit “être”.

Je suis d’accord, cependant, que SQL est bien meilleur que la plupart des couches d’abstraction. Ce n’est pas la faute de SQL si elle est utilisée pour des choses pour lesquelles elle n’a pas été conçue.

SQL est malmené de plusieurs sources:

  • Les programmeurs qui ne sont pas à l’aise avec autre chose qu’un langage impératif.
  • Consultants qui doivent gérer quotidiennement de nombreux produits SQL incompatibles
  • Des fournisseurs de bases de données non relationnelles essayant de briser la mainmise des fournisseurs de bases de données relationnelles sur le marché
  • Des experts en bases de données relationnelles comme Chris Date qui considèrent les implémentations actuelles de SQL comme insuffisantes

Si vous vous en tenez à un produit SGBD, je suis tout à fait d’accord pour dire que les bases de données SQL sont plus polyvalentes et de meilleure qualité que leurs concurrents, du moins jusqu’à ce qu’une barrière d’évolutivité soit insortingnsèque au modèle. Mais essayez-vous vraiment d’écrire le prochain Twitter, ou essayez-vous simplement de garder certaines données comptables organisées et cohérentes?

La critique de SQL est souvent une critique des critiques de RDBMS. Ce que les critiques des SGBDR ne semblent pas comprendre, c’est qu’ils résolvent assez bien une grande partie des problèmes informatiques et qu’ils sont là pour nous rendre la vie plus facile et non plus difficile.

S’ils étaient sérieux au sujet de critiquer SQL lui-même, ils soutiendraient des efforts comme le tutoriel D et le Dataphor.

Ce n’est pas si terrible. C’est une tendance malheureuse dans cette indussortinge de se débarrasser de la technologie fiable précédente lorsqu’un nouveau “paradigme” se dégage. En fin de compte, ces frameworks utilisent très probablement SQL pour communiquer avec la firebase database, alors comment peut-il être si mauvais? Cela dit, avoir une couche d’abstraction “standard” signifie qu’un développeur peut se concentrer sur le code de l’application et non sur le code SQL. Sans une telle couche standard, vous écririez probablement une couche légère chaque fois que vous développez un système, ce qui est une perte de temps.

SQL est conçu pour la gestion et l’interrogation de données basées sur SET. Il est souvent utilisé pour faire plus et les cas extrêmes entraînent parfois des frustrations.

L’utilisation réelle de SQL peut être affectée par la conception de la firebase database que le SQL n’est peut-être pas le problème, mais la conception risque de l’impliquer (lorsque vous lancez le code associé à une mauvaise conception). personne n’aime revenir en arrière et “réparer” des choses qui “fonctionnent” et atteindre les objectives)

Les charpentiers peuvent marteler les clous avec des marteaux, scier du bois avec des scies et des planches lisses avec des avions. Il est possible de “voir” en utilisant des marteaux et des avions, mais c’est frustrant.

Je ne dirai pas que c’est terrible. C’est inadapté à certaines tâches. Par exemple: vous ne pouvez pas écrire un bon code procédural avec SQL. J’ai été une fois obligé de travailler avec la manipulation de set avec SQL. Il m’a fallu tout un week-end pour comprendre cela.

SQL a été conçu pour l’algèbre relationnelle – c’est là qu’il devrait être utilisé.

J’ai entendu beaucoup de fois récemment que SQL est un langage terrible, et il semble que chaque framework sous le soleil soit livré avec une couche d’abstraction de firebase database.

Notez que ces couches convertissent simplement leurs propres éléments en SQL . Pour la plupart des fournisseurs de bases de données, SQL est le seul moyen de communiquer avec le moteur.

Cependant, selon mon expérience, SQL est souvent le moyen le plus simple, le plus polyvalent et le plus convivial pour gérer les entrées et les sorties de données. Chaque couche d’abstraction que j’ai utilisée semble être une approche nettement limitée, sans réel avantage.

… Raison pour laquelle je viens de décrire ci-dessus.

Les couches de la firebase database n’ajoutent rien, elles vous limitent . Ils rendent les requêtes sans doute plus simples mais jamais plus efficaces.

Par définition, il n’y a rien dans les couches de firebase database qui ne sont pas en SQL .

Qu’est-ce qui rend SQL si terrible et pourquoi les couches d’abstraction de firebase database sont-elles précieuses?

SQL est un bon langage, cependant, il faut un peu de torsion pour travailler avec.

En théorie, SQL est déclaratif, c’est-à-dire que vous déclarez ce que vous voulez obtenir et que le moteur le fournit de la manière la plus rapide possible.

En pratique, il existe plusieurs manières de formuler une requête correcte (c’est-à-dire la requête qui renvoie des résultats corrects).

Les optimiseurs peuvent construire un château Lego à partir de certains algorithmes prédéfinis (oui, ils sont multiples), mais ils ne peuvent tout simplement pas créer de nouveaux algorithmes. Il faut toujours un développeur SQL pour les aider.

Cependant, certaines personnes s’attendent à ce que l’optimiseur produise “le meilleur plan possible” et non “le meilleur plan disponible pour cette requête avec une implémentation donnée du moteur SQL “.

Et comme nous le soaps tous, lorsque le programme informatique ne répond pas aux attentes des gens, c’est le programme qui est mis en cause, pas les attentes.

Dans la plupart des cas, cependant, reformuler une requête peut produire le meilleur plan possible. Il y a des tâches quand c’est impossible, cependant, avec les améliorations nouvelles et croissantes de SQL ces cas sont de moins en moins nombreux.

Ce serait bien, cependant, si les fournisseurs fournissaient un access de bas niveau aux fonctions comme “get the index range”, “get a rowid by the rowid “, etc., comme les compilateurs C vous permettent d’intégrer l’assemblage directement dans la langue.

J’ai récemment écrit un article à ce sujet sur mon blog:

  • Double pensée en SQL

Je suis un grand défenseur de l’ORM et je crois toujours que SQL est très utile, bien qu’il soit certainement possible de faire des choses terribles avec lui (comme n’importe quoi d’autre). .

Je considère SQL comme un langage super efficace qui n’a pas la réutilisation du code ou la maintenabilité / refactorisation comme priorités.

Le traitement rapide de la foudre est donc la priorité. Et c’est acceptable. Vous devez simplement être conscient des compromis, qui pour moi sont considérables.

D’un sharepoint vue esthétique, en tant que langage, je pense qu’il manque certaines choses car il n’a pas de concepts OO, etc. Mais c’est le moyen le plus rapide de faire certaines choses, et c’est un créneau puissant!

Je dirais qu’une couche d’abstraction de firebase database incluse dans un framework est une bonne chose car elle résout deux problèmes très importants:

  1. Il garde le code distinct. En plaçant le SQL dans un autre calque, qui est généralement très mince et ne devrait servir que de base à l’interrogation et au transfert des résultats (de manière standardisée), vous évitez l’encombrement du SQL. C’est la même raison pour laquelle les développeurs Web (devraient) placer CSS et Javascript dans des fichiers séparés. Si vous pouvez l’éviter, ne mélangez pas vos langues .

  2. Beaucoup de programmeurs sont tout simplement mal à utiliser SQL. Pour une raison quelconque, un grand nombre de développeurs (en particulier les développeurs Web) semblent très, très mal utiliser SQL ou les SGBDR en général. Ils traitent la firebase database (et SQL par extension) comme l’intermédiaire médiocre qu’ils doivent traverser pour accéder aux données. Cela conduit à des bases de données extrêmement mal conçues, sans index, à des tables empilées de manière douteuse et à des requêtes très mal écrites. Ou pire, ils essaient d’être trop généraux (système expert, n’importe qui?) Et ne peuvent raisonnablement pas relier les données de manière significative.

Malheureusement, parfois, la façon dont quelqu’un essaie de résoudre un problème et les outils qu’il utilise, que ce soit par ignorance, entêtement ou par un autre trait, sont en opposition directe, et bonne chance pour les convaincre. En tant que tel, en plus d’être une bonne pratique, je considère une couche d’abstraction de firebase database comme une sorte de filet de sécurité, car elle permet non seulement de garder le SQL hors de la scope du développeur, puisque toutes les requêtes sont au même endroit.

SQL est excellent pour certains types de tâches, notamment la manipulation et la récupération d’ ensembles de données.

Cependant, SQL manque (ou n’implémente que partiellement) plusieurs outils importants pour gérer le changement et la complexité:

  • Encapsulation : les mécanismes d’encapsulation SQL sont grossiers. Lorsque vous écrivez du code SQL, vous devez tout savoir sur l’implémentation de vos données. Cela limite la quantité d’ abstraction que vous pouvez atteindre.

  • Polymorphisme : si vous souhaitez effectuer la même opération sur des tables différentes, vous devez écrire le code deux fois. (On peut atténuer cela avec une utilisation imaginative des vues.)

  • Contrôle de la visibilité : il n’existe aucun mécanisme SQL standard permettant de masquer des éléments du code ou de les regrouper en unités logiques. Ainsi, chaque table, procédure, etc. est accessible par tous les autres, même si elle est indésirable.

  • Modularité et versioning

Enfin, le codage manuel des opérations CRUD en SQL (et l’écriture du code pour le raccorder au rest de l’application) est répétitif et sujet aux erreurs.

Une couche d’abstraction moderne fournit toutes ces fonctionnalités et nous permet d’utiliser SQL où il est le plus efficace, tout en masquant les détails d’implémentation répétés et perturbateurs. Il fournit des outils permettant de surmonter la non-concordance d’impédance object-relationnelle qui complique l’access aux données dans le développement de logiciels orientés object.

SQL est basé sur la théorie des ensembles, alors que la plupart des langages de haut niveau sont orientés object. Les programmeurs d’objects aiment généralement penser aux objects et doivent effectuer un changement mental pour utiliser les outils basés sur Set pour stocker leurs objects. Généralement, il est beaucoup plus naturel (pour le programmeur OO) de simplement couper le code dans le langage de son choix et de faire quelque chose comme object.save ou object.delete dans le code de l’application plutôt que d’écrire des requêtes SQL et d’appeler la firebase database. le même résultat.

Bien entendu, SQL est parfois plus simple à utiliser et plus efficace, et il est donc judicieux de maîsortingser les deux types de technologie.

IMO, le problème que je vois avec SQL n’a rien à voir avec la conception relationnelle ni avec le langage SQL lui-même. Cela concerne la discipline de la modélisation de la couche de données qui, à bien des égards, diffère fondamentalement de la modélisation d’une couche ou d’une interface métier. Les erreurs de modélisation au niveau de la couche de présentation sont généralement beaucoup plus faciles à corriger qu’à la couche de données où plusieurs applications utilisent la firebase database. Ces problèmes sont identiques à ceux rencontrés lors de la modélisation d’une couche de service dans les conceptions SOA, où vous devez prendre en compte les consommateurs actuels de votre service et les contrats d’entrée et de sortie.

SQL a été conçu pour interagir avec des modèles de bases de données relationnelles. Il existe d’autres modèles de données qui existent depuis un certain temps, mais la discipline de conception de la couche de données existe indépendamment du modèle théorique utilisé. Par conséquent, les difficultés que rencontrent généralement les développeurs avec SQL sont généralement liées à des tentatives d’imposition non relationnelle. modèle de données sur un produit de firebase database relationnelle.

D’une part, ils simplifient l’utilisation de requêtes paramétrées, vous protégeant des attaques par injection SQL. Dans cette perspective, l’utilisation de SQL brut est plus risquée, c’est-à-dire plus facile de se tromper du sharepoint vue de la sécurité. Ils présentent également souvent une perspective orientée object sur votre firebase database, ce qui vous évite de devoir faire cette traduction.

Vous avez beaucoup entendu récemment? J’espère que vous ne confondez pas cela avec le mouvement NoSql. Autant que je sache, il s’agit principalement d’un groupe de personnes qui utilisent NoSql pour des applications Web hautement évolutives et semblent avoir oublié que SQL est un outil efficace dans un scénario d’application Web non hautement évolutif.

Le métier de la couche d’abstraction consiste simplement à sortinger la différence entre le code orienté object et le code basé sur un ensemble de tables, tel que SQL aime parler. Cela se traduit généralement par l’écriture de beaucoup de plaque de chaudière et de code de transition terne entre les deux. ORM automatise cela et économise ainsi du temps pour les personnes objectives.

Pour les programmeurs SQL expérimentés, les mauvais côtés sont

  • Verbosité
  • Comme beaucoup l’ont dit, SQL est déclaratif, ce qui signifie que l’ optimisation n’est pas directe . C’est comme le rallye par rapport aux courses en circuit.
  • Des frameworks qui tentent de traiter tous les dialectes possibles et ne prennent en charge aucun des raccourcis
  • Pas de contrôle de version facile.

Pour d’autres, les raisons sont les suivantes:

  • certains programmeurs sont mauvais en SQL. Probablement parce que SQL fonctionne avec des ensembles, alors que les langages de programmation fonctionnent dans un paradigme fonctionnel ou object. Penser en ensembles (union, produit, intersection) est une question d’habilité que certaines personnes n’ont pas.
  • certaines opérations ne s’expliquent pas par elles-mêmes: c’est-à-dire qu’au début, il n’est pas évident de savoir et quand filtrer différents ensembles.
  • il y a trop de dialectes

L’objective principal des frameworks SQL est de réduire votre saisie. Ils font en quelque sorte, mais trop souvent seulement pour des requêtes très simples. Si vous essayez de faire quelque chose de complexe, vous devez utiliser des chaînes et taper beaucoup. Les frameworks qui essaient de gérer tout ce qui est possible, comme SQL Alchemy, deviennent trop volumineux, comme un autre langage de programmation.

[mise à jour le 26.06.10] Récemment, j’ai travaillé avec le module ORM de Django . C’est le seul framework SQL que j’ai vu. Et celui-ci fait beaucoup travailler avec des choses. Les agrégats complexes sont cependant un peu plus difficiles.

SQL n’est pas un langage terrible, il ne joue parfois pas très bien avec les autres.

Si, par exemple, vous avez un système qui veut représenter toutes les entités en tant qu’objects dans un langage OO ou un autre, alors combiner ceci avec SQL sans aucune sorte de couche d’abstraction peut devenir assez lourd. Il n’y a pas de moyen facile de mapper une requête SQL complexe sur le monde OO. Pour atténuer la tension entre ces mondes, des couches supplémentaires d’abstraction sont insérées (un OR-Mapper par exemple).

SQL est un très bon langage pour la manipulation de données. Du sharepoint vue du développeur, ce que je n’aime pas, c’est que changer la firebase database ne rompt pas votre code au moment de la compilation … J’utilise donc l’abstraction qui ajoute cette fonctionnalité au prix des performances et peut-être de l’expressivité du langage SQL , car dans la plupart des applications, vous n’avez pas besoin de tout ce que SQL a.

L’autre raison pour laquelle SQL est détesté est due aux bases de données relationnelles.

Le théorème de CAP devient populaire:

Quels objectives pourriez-vous souhaiter d’un système de données partagé?

  • Consistance forte: tous les clients voient la même vue, même en présence de mises à jour
  • Haute disponibilité: tous les clients peuvent trouver des répliques des données, même en présence de pannes
  • Tolérance de partition: les propriétés du système sont conservées même lorsque le système est partitionné

Le théorème indique que vous ne pouvez toujours avoir que deux des trois propriétés CAP en même temps

La firebase database relationnelle traite de la cohérence forte et de la tolérance de partition.

Ainsi, de plus en plus de personnes réalisent que la firebase database relationnelle n’est pas la solution miracle, et de plus en plus de personnes commencent à la rejeter en faveur de la haute disponibilité, car la haute disponibilité facilite la mise à l’échelle horizontale. La mise à l’échelle horizontale gagne en popularité parce que nous avons atteint la limite de la loi de Moore , donc la meilleure façon de la mettre à l’échelle est d’append plus de machine.

Si la firebase database relationnelle est rejetée, SQL est également rejeté.

SQL a beaucoup de défauts, comme d’autres affiches l’ont souligné. Néanmoins, je préfère de loin utiliser SQL sur la plupart des outils proposés par les utilisateurs, car les «simplifications» sont souvent plus compliquées que ce qu’elles étaient censées simplifier.

Ma théorie est que SQL a été inventé par un tas de skieurs bleus de la tour d’ivoire. Toute la structure non procédurale. Ça sonne bien: dites-moi ce que vous voulez plutôt que ce que vous voulez faire. Mais dans la pratique, il est souvent plus facile de donner les étapes. Cela ressemble souvent à essayer de donner des instructions d’entretien de la voiture en décrivant comment la voiture devrait fonctionner lorsque vous avez terminé. Oui, vous pourriez dire: “Je veux que la voiture obtienne à nouveau 30 miles par gallon, et courir avec ce bourdonnement comme ça … hmmmm … et, etc” Mais ne serait-il pas plus facile pour tout le monde de il suffit de dire “Remplacer les bougies”? Et même lorsque vous déterminez comment exprimer une requête complexe en termes non procéduraux, le moteur de firebase database propose souvent un plan d’exécution très inefficace pour y parvenir. Je pense que SQL serait grandement amélioré par l’ajout de moyens standardisés pour lui indiquer quelle table lire en premier et quel index utiliser.

Et la manipulation des null me rend fou! Oui, théoriquement, cela devait sembler bien quand quelqu’un disait: “Hey, si null signifie inconnu, alors append une valeur inconnue à une valeur connue devrait donner une valeur inconnue. Après tout, par définition, nous n’avons aucune idée de la valeur inconnue . ” Théoriquement, absolument vrai. En pratique, si nous avons 10 000 clients et que nous soaps exactement combien d’argent nous doit 9 999, il ya des questions sur le montant dû par le dernier, et la direction dit: «Quels sont nos comptes clients? la réponse est “je ne sais pas”. Mais la réponse pratique est “nous calculons 4 327 287,42 $, mais un compte est en cause, ce qui fait que ce nombre n’est pas exact”. Je suis sûr que la direction préférerait obtenir un nombre proche, sinon certain, d’un regard vide. Mais SQL insiste sur cette approche immaculée mathématiquement, donc à chaque opération que vous faites, vous devez append du code supplémentaire pour vérifier les valeurs NULL et les gérer de manière spécifique.

Cela dit, je préfèrerais utiliser SQL plutôt que certaines couches construites au-dessus de SQL, ce qui ne fait que créer tout un ensemble de choses que je dois apprendre, et je dois savoir que cela sera traduit en SQL et parfois Je peux juste lui faire confiance pour faire la traduction correctement et efficacement, mais quand les choses se compliquent, je ne peux pas, alors maintenant je dois connaître la couche supplémentaire, je dois encore savoir SQL, et je dois savoir comment ça va traduire Je peux tromper la couche en incitant SQL à faire ce qu’il faut. Arggh.

• Chaque fournisseur étend la syntaxe SQL à ses besoins. Donc, à moins de faire des choses assez simples, votre code SQL n’est pas portable.

• la syntaxe de SQL n’est pas orthogonale; Par exemple, les instructions select, insert, update, et delete ont toutes une structure syntaxique complètement différente.

Je suis d’accord avec vos remarques, mais pour répondre à votre question, l’absence de standardisation complète de T-SQL entre les fournisseurs de bases de données (SQL Server, Oracle, etc.) rend le code SQL si peu fiable. complètement portable. Les couches d’abstraction de firebase database résolvent ce problème, mais avec un coût de performance (parfois très élevé).

Vivre avec du SQL pur peut vraiment être un enfer de maintenance. Pour moi, le plus grand avantage des ORM est la possibilité de restructurer le code en toute sécurité sans les procédures fastidieuses de “refactorisation de firebase database”. Il existe de bons frameworks de tests unitaires et des outils de refactoring pour les langages OO, mais je dois encore voir l’homologue de Resharper pour SQL, par exemple.

Cependant, tous les DAL ont SQL en arrière-plan, et vous devez toujours le savoir pour comprendre ce qui se passe dans votre firebase database, mais le travail quotidien avec une bonne couche d’abstraction devient plus facile.

Si vous n’avez pas trop utilisé SQL, je pense que le principal problème est le manque de bons outils de développement.

Si vous avez beaucoup d’expérience avec SQL, vous serez, à un moment ou à un autre, frustré par le manque de contrôle sur le plan d’exécution. C’est un problème inhérent à la manière dont SQL a été spécifié pour les fournisseurs. Je pense que SQL doit devenir un langage plus robuste pour exploiter véritablement la technologie sous-jacente (qui est très puissante).

Rapidement, écrivez-moi SQL pour paginer un dataset qui fonctionne dans MySQL, Oracle, MSSQL, PostgreSQL et DB2.

Ah oui, le standard SQL ne définit aucun opérateur pour limiter le nombre de résultats et la ligne à démarrer.

Il n’y a pas d’amour pour SQL car SQL est mauvais en syntaxe, sémantique et utilisation courante. Je vais t’expliquer:

  • sa syntaxe est un cobol shrapnel, toute la critique cobol s’applique ici (dans une moindre mesure, pour être juste). Essayer d’être un langage naturel sans essayer d’interpréter le langage naturel crée une syntaxe arbitraire (est-ce DROP TABLE ou DROP, UPDATE TABLE, UPDATE ou UPDATE IN, DELETE ou DELETE FROM …) et des monstruosités syntaxiques comme SELECT il remplit?)
  • la sémantique est aussi profondément erronée, Date l’explique en détail, mais il suffira de noter qu’une logique booléenne à trois valeurs ne correspond pas vraiment à une algèbre relationnelle où une ligne ne peut ou ne peut faire partie d’une table
  • Avoir un langage de programmation comme interface principale (et souvent unique) avec les bases de données s’est avéré un très mauvais choix et a créé une nouvelle catégorie de failles de sécurité

Je suis d’accord avec la plupart des articles ici que le débat sur l’utilité de SQL est principalement subjectif, mais je pense que c’est plus subjectif dans la nature des besoins de votre entreprise.

Les langages déclaratifs, comme Stefan Steinegger l’a souligné, sont utiles pour spécifier ce que vous voulez, et non comment vous voulez le faire. Cela signifie que vos différentes implémentations de SQL sont décentes dans une perspective de haut niveau: si vous voulez simplement obtenir des données et que rien d’autre ne compte, vous pouvez vous contenter d’écrire des requêtes relativement simples et choisir l’implémentation de SQL. c’est bon pour toi.

Si vous travaillez sur un niveau “inférieur” et que vous devez optimiser tout cela vous-même, c’est loin d’être idéal. Utiliser une autre couche d’abstraction peut aider, mais si vous essayez vraiment de spécifier les méthodes d’optimisation des requêtes, etc., il est plutôt intuitif d’append un intermédiaire pour optimiser.

Le plus gros problème avec SQL est comme les autres langages “standardisés”, il y a très peu de standards réels. Je préférerais presque devoir apprendre un tout nouveau langage entre Sybase et MySQL afin de ne pas confondre les deux conventions.

Je ne déteste pas SQL, mais je ne veux pas non plus devoir l’écrire dans le cadre de ce que je développe. La DAL ne concerne pas la rapidité de mise sur le marché – en fait, je n’ai jamais pensé qu’il y aurait une implémentation DAL plus rapide que les requêtes directes du code. Mais l’objective de la DAL est d’ abstraire . L’abstraction a un coût, et la mise en œuvre prendra plus de temps.

Les avantages sont énormes, cependant. Écrire des tests natifs autour du code, en utilisant des classes expressives, des jeux de données fortement typés, etc. Nous utilisons une sorte de “DAL”, qui est une implémentation pure DDD utilisant Generics en C #. Nous avons donc des référentiels génériques, des implémentations d’unité de travail (transactions basées sur le code) et une séparation logique. Nous pouvons faire des choses comme simuler nos ensembles de données avec peu d’efforts et développer en fait avant les implémentations de bases de données. Il y a eu un coût initial dans la construction d’un tel cadre, mais il est très agréable que la logique métier soit à nouveau la vedette du spectacle . Nous consommons maintenant des données en tant que ressource et les traitons dans le langage que nous utilisons de manière native dans le code. Un avantage supplémentaire de cette approche est la séparation claire qu’elle offre. Je ne vois plus une requête de firebase database dans une page Web, par exemple. Oui, cette page a besoin de données. Oui, la firebase database est impliquée. Mais maintenant, peu importe d’où je tire les données, il y a un (et un seul) endroit pour entrer dans le code et le trouver. Peut-être pas une grosse affaire sur les petits projets, mais lorsque vous avez des centaines de pages dans un site ou des dizaines de fenêtres dans une application de bureau, vous pouvez vraiment l’apprécier.

En tant que développeur, j’ai été embauché pour mettre en œuvre les exigences de l’entreprise en utilisant mes compétences logiques et analytiques – et la mise en œuvre de notre framework me permet d’être plus productif maintenant. En tant que responsable, je préfère que mes développeurs utilisent leurs compétences logiques et analytiques pour résoudre des problèmes plutôt que pour écrire en SQL. Le fait que nous puissions créer une application entière qui utilise la firebase database sans avoir la firebase database jusqu’à la fin du cycle de développement est une belle chose. Il n’est pas destiné à bash les professionnels des bases de données. Parfois, une implémentation de firebase database est plus complexe que la solution. SQL (et dans notre cas, Views et Stored Procs, spécifiquement) sont un point d’abstraction où le code peut consumr des données en tant que service. Dans les magasins où il existe une séparation nette entre les équipes de données et de développement, cela permet d’éviter de restr dans un modèle d’attente en attente d’implémentation de la firebase database et de modifications. Les développeurs peuvent se concentrer sur le domaine problématique sans survoler un administrateur de firebase database et l’administrateur de firebase database peut se concentrer sur l’implémentation correcte sans qu’un développeur en ait besoin maintenant .

Beaucoup de publications ici semblent soutenir que SQL est mauvais parce qu’il n’a pas de fonctionnalités d’optimisation de code et que vous n’avez aucun contrôle sur les plans d’exécution.

Les bons moteurs SQL proposent un plan d’exécution pour une instruction écrite, orientée vers les données , le contenu réel. Si vous voulez regarder au-delà du côté de la programmation, vous verrez que les données sont plus nombreuses que les octets transmis entre les niveaux d’application.

Bien que SQL fasse le travail, il a certainement des problèmes …


  • il essaye à la fois d’être le haut niveau et l’abstraction de bas niveau , et c’est bizarre. Peut-être aurait-il dû y avoir deux ou plusieurs normes à différents niveaux.
  • c’est un énorme échec en tant que norme . Beaucoup de choses se passent mal quand un standard bouge dans tout, demande trop d’implémentations, demande trop peu ou, pour une raison quelconque, n’atteint pas l’objective partiellement social de motiver les fournisseurs et les développeurs pour produire des implémentations complètes interopérables ssortingctement conformes. Vous ne pouvez certainement pas dire que SQL a fait tout cela. Regardez d’autres normes et notez que le succès ou l’échec de la norme est clairement un facteur de la coopération utile atteinte:
    • RS-232 ( Mauvais , pas assez spécifié, même si la broche est transmise en option et que la broche est en option, sheesh. Vous pouvez vous conformer mais ne rien faire. Chance d’interopérabilité réussie: vraiment faible jusqu’à ce que le PC IBM devienne de facto utile .)
    • IEEE 754-1985 Floating Point ( Bad , overreach: not a single supercomputer or scientific workstation or RISC microprocessor ever adopted it, although eventually after 20 years we were able to implement it nicely in HW. At least the world eventually grew into it.)
    • C89, C99, PCI, USB, Java ( Good , whether standard or spec, they succeeded in motivating ssortingct compliance from almost everyone, and that compliance resulted in successful interoperation.)
  • it failed to be selected for arguably the most important database in the world . While this is more of a datapoint than a reason, the fact that Google Bigtable is not SQL and not relational is kind of an anti-achievement for SQL.