Avec autant d'outils ORM pour la plupart des langages modernes, existe-t-il encore un cas d'utilisation pour écrire et exécuter SQL dans un programme, dans un langage / environnement qui les prend en charge? Si oui, pourquoi?
Pour plus de clarté: je ne demande pas si les programmeurs doivent connaître SQL ou si je dois avoir un outil SQL sur mon bureau. Je demande spécifiquement pourquoi je pourrais l'avoir dans le code (ou la configuration, ou autre) par opposition à un ORM.
Réponses:
SELECT * FROM...
, Dieu tue un chaton. Et vous détestez les chatons.la source
Écrire du SQL complexe
Les ORM sont parfaits pour les choses de base. Cependant, pour les situations complexes, vous devrez écrire SQL.
Bref, il y a certainement un besoin de SQL et il le restera toujours.
la source
ORM ne vous aide pas à créer, régler ou automatiser la base de données. Cela vous donne simplement un autre moyen d'interagir avec la base de données une fois que vous avez fait tout cela.
la source
Sûr:
la source
Les ORM existent en raison de l'inadéquation de l'impédance entre nos implémentations de bases de données relationnelles communes et nos fonctionnalités de langage OO. Ils ne sont qu'un pont, mais la plupart des gens traitent SQL comme le fromage Limburger dans le réfrigérateur.
Si vous pouvez à juste titre dire que vous utiliserez toujours votre ORM ou une autre couche d'accès aux données abstraites au lieu de traiter SQL / procédures stockées / vues comme une ou des interfaces de première classe, alors vous feriez probablement mieux sans toucher à SQL.
En pratique, je n'ai jamais vu de projet pur-ORM ne nécessitant pas au moins SQL pour interroger la base de données pour la validation finale.
la source
Les ORM sont un outil de la boîte à outils des programmeurs. Ils ont leurs propres problèmes. Certains exemples sont:
la source
Si vous savez ce que vous faites, vous pouvez utiliser efficacement un ORM pour remplacer une grande partie de votre code de type CRUD. Cependant, ils ne sont pas aussi efficaces pour les choses complexes, ils sont difficiles à régler (vous savez que les performances sont l'une des parties critiques de la conception de la base de données, pas d'émulation d'objets) et elles sont carrément horribles et dangereuses entre les mains de quelqu'un qui ne le fait pas. ne comprends pas ou n'écrit pas SQL lui-même
Je tiens également à souligner qu'il n'est pas facile de faire efficacement des rapports complexes avec un ORM. Et de plus, si vous n'apprenez pas le SQL simple dans les trucs faciles, comment arriverez-vous au point où vous pourrez écrire du SQL complexe pour le reporting? Je n'ai jamais travaillé dans une application qui n'avait pas de besoins de reporting et souvent assez compliquée.
Les ORM ne sont pas non plus utiles pour la plupart des processus BI ou ETL. Ils ne sont pas non plus utiles pour les requêtes d'administrateur de base de données ou pour trouver des informations dans les tables d'audit et annuler un ensemble particulier de modifications de base de données. Il y a beaucoup de choses qui sont encore plus efficaces avec SQL. L'application interrogeant la base de données est une petite partie de ce qui doit l'interroger dans un environnement d'entreprise.
Je vois également de nombreuses questions sur la façon de faire quelque chose à l'aide d'un ORM que l'affiche sait déjà faire en SQL. C'est agréable d'apprendre de nouvelles choses, mais quand elles génèrent du temps et des efforts supplémentaires sans réel gain par rapport à la méthode originale (et souvent une réelle perte de performances), pourquoi les utilisez-vous autrement qu'elles ne sont "à la mode" en ce moment.
la source
Parfois, un client veut juste une requête rapide et facile pour renvoyer des données pour un rapport, une exportation, un vidage de données, etc. et veut attendre qu'un programme entier soit développé.
De plus, un bon programmeur SQL peut toujours écrire du SQL plus rapide et plus efficace que n'importe quel ORM que j'ai utilisé. De plus, j'ai trouvé que beaucoup de gens ont juste le point ORM vers des procédures stockées - ignorant vraiment les avantages des ORM car les ORM ne sont pas parfaits pour les processus complexes.
De plus, lorsque vous utilisez une base de données comme Oracle avec un langage de procédure très riche et puissant, vous pouvez faire beaucoup sans jamais avoir besoin d'un "programme". PL / SQL sur Oracle dans les bonnes mains est très rapide et efficace.
la source
Si vous souhaitez utiliser une base de données vous-même, oui. La plupart des ORM que j'ai essayé d'utiliser n'étaient tout simplement pas suffisants ou ne couvraient pas ma base de données. De plus, comment allez-vous dépanner ou écrire des requêtes personnalisées qui ne sont pas couvertes?
la source
Il est toujours nécessaire pour écrire des déclencheurs et des procédures stockées. Les procédures stockées sont peut-être tombées en disgrâce actuellement, mais elles sont toujours très utiles dans certaines situations. SQL peut également être requis pour certaines jointures multi-tables particulièrement poilues.
la source
Oui, vous pouvez éviter d'écrire SQL. Mais vous finirez par écrire HQL à la place (ou Linq, ou DQL ...)!
Sérieusement, je suis un grand fan des ORM, et je pense qu'on peut éviter d'utiliser du SQL pur la plupart du temps. Mais nous devons nous rappeler qu'un ORM n'est qu'une grande abstraction, et toutes les grandes abstractions fuient ...
(Mais à propos du problème N + 1: il s'agit d'un chargement paresseux, et la plupart des outils ORM ont un moyen de demander un chargement rapide, évitant ainsi ce problème particulier.)
la source
ORM ne vous amènera qu'à un certain point. Mais il y a des cas où vous devez exécuter une requête vraiment compliquée, avec des jointures, des sous-requêtes, des unions, des moins, des fonctions analytiques compliquées, etc. C'est là que vous avez besoin de SQL. Mais comment êtes-vous censé écrire des requêtes compliquées lorsque vous laissez toutes les requêtes simples à l'ORM?
la source
Même si vous n'aviez pas besoin de l'écrire dans votre code, il est assez pratique de pouvoir l'utiliser lorsque vous avez un accès terminal à un serveur de base de données.
En outre, la plupart de ce qui rend la programmation d' un défi travaille dans les limites que les ensembles de vie US- souvent , nous sommes travaillons avec l' ancien code, ou les anciennes versions de bases de données et n'ont pas la possibilité d'installer la dernière ORM quelle que soit la langue que nous sommes travailler avec. Dans cette situation, vous aurez besoin de tout outil à votre disposition.
Le reste du temps, vous n'aurez peut-être pas besoin de SQL pour vos tâches CRUD, mais il y a beaucoup plus dans SQL que de simples requêtes SELECT, INSERT, UPDATE et JOIN de base. Vous pouvez faire des choses très intelligentes avec lui et même si vous ne les utilisez pas souvent, il est utile de savoir de quoi il s'agit.
De plus en plus, je pense que nous nous retrouverons dans un monde post-SQL, cependant - la plupart des services Cloud utilisent un stockage de table non SQL et pour un travail de type CRUD simple, la pleine puissance de SQL n'est pas nécessaire. Mais cela ne signifie pas qu'il n'y aura aucune valeur à le comprendre.
De plus, bien sûr, quelqu'un doit en savoir suffisamment pour écrire un meilleur système ORM si les systèmes actuels ne sont pas à la hauteur. Cela les aiderait s'ils connaissaient SQL ...
la source
Pour créer des applications Web à grande échelle, cela est totalement inutile et peut rendre les choses beaucoup plus stressantes et perdre du temps qu'elles ne devraient l'être. La raison en est que toute application à grande échelle devrait utiliser une couche de persistance de mémoire (en RAM) qui devrait être des parties de mise en cache de mémoire de la base de données qui sont fréquemment utilisées.
Si vous devez faire des choses avec des appareils mobiles, etc. qui n'ont pas beaucoup de mémoire pour travailler, où l'application en cours de programmation s'exécute en tant que "client" ou application autonome sur un appareil mobile, une tablette, etc. des choses comme l'utilisation de SQL sont encore courantes et sont importantes car la mémoire sur l'appareil est si petite que vous ne pouvez pas mettre en cache beaucoup de choses en mémoire.
la source
La complexité et la quantité de SQL que j'écris ne sont pas suffisantes pour rendre raisonnable le raccordement d'un framework ORM.
(J'écris SQL peut-être une fois par mois, si)
la source
J'ai rencontré de nombreux grands corps avec des DBA qui craignent activement les développeurs utilisant des outils ORM.
Ce sont des DBA impliqués dans le réglage et les performances.
Et oui, les outils ORM peuvent être gérés pour faire des choses comme ça, mais j'ai vu des endroits où ils n'accepteront qu'une procédure stockée (Sql Server) et vous poseront des questions sur ce que vous y faites.
De plus, les outils ORM peuvent être mal utilisés et produire un Sql aussi pauvre que l'écriture du Sql vous-même.
la source
One biggie - Migrations DDL et base de données. Parfois, vous devez assembler ces éléments à la main pour mettre à jour les choses sans casser les données existantes.
la source