Je n'ai aucune expérience sérieuse en SQL et je déteste écrire SQL au lieu de LINQ. Je suis assez content des ORM.
Du point de vue des employeurs et du secteur, est-il important de connaître SQL? Dois-je maîtriser dessus? Les entreprises qui préfèrent le SQL pur aux frameworks ORM sont-elles un "dinosaure" dans le monde de la programmation?
sql
orm
entity-framework
N'importe qui
la source
la source
Réponses:
C'est difficile à expliquer à beaucoup de programmeurs, car si vous ne connaissez que le SQL de base, cela ne vous donne vraiment pas un avantage considérable sur le béquille d'un ORM. Les concepts SQL les plus avancés, cependant, constituent une partie cruciale de la différence entre les applications qui fonctionnent simplement et les applications de haute qualité (en particulier, rapides et fiables).
Je suppose que quelqu'un d'autre conçoit les bases de données pour vous, parce que le faire sans savoir que le SQL est au-delà de tout ce qui est nécessaire . Mais même si vous ne vous développez que contre eux, voici une liste partielle de tout ce que les ORM ont encore tendance à faire mal ou pas du tout:
La liste est encore longue: bon nombre de ces tâches n’ont jamais été confiées à un administrateur de bases de données débutant, et un développeur novice n’en a jamais entendu parler, mais elles sont très importantes dans les applications à grande échelle.
Les ORM sont vraiment efficaces pour accélérer le code SQL si ennuyeux - c'est-à-dire tous les codes CRUD et mappages et autres codes de plomberie répétitifs. Il n'y a donc aucune honte à les utiliser et à n'écouter personne qui dit qu'ils sont diaboliques. Mais vous devez absolument apprendre et même maîtriser le SQL, et vous préparer à passer aux commandes / requêtes de base de données brutes lorsque l'ORM ne fait pas le poids.
la source
GroupJoin
dans LINQ) est bien meilleur.GroupJoin
.GroupJoin
. C'est juste que les gens qui sont habitués à SQL pensent immédiatement à la jointure externe dans ces cas-là et demandent ensuite comment traduire cela en LINQ. Ce n'est pas la bonne approche. Vous ne devriez pas essayer de traduire votre SQL en LINQ, vous devriez traduire directement ce dont vous avez besoin.Absolument! Le langage SQL est toujours la lingua franca des bases de données et, même si vous en faites beaucoup avec les ORM, vous devez comprendre le langage SQL pour comprendre les décisions que les ORM prennent et le code SQL qu’ils génèrent. En outre, il reste encore beaucoup à faire avec les procédures personnalisées SQL et stockées. Désolé, pas de repas gratuit.
la source
Oui, vous devez toujours connaître SQL. Les ORM sont une abstraction très fuyante et ne donnent pas accès à toute la puissance de SQL. Pour les applications de jouets , vous êtes peut-être d'accord avec une connaissance limitée de SQL. Pour les applications d'entreprise, vous devrez comprendre la base de données pour obtenir des performances décentes de la part de l'ORM. En outre, de nombreuses tâches sont beaucoup plus faciles à accomplir avec SQL qu'avec un langage d'application. J'ai vu des programmeurs Java passer des jours à écrire du code pour faire quelque chose qui aurait pu être codé en SQL en une heure. La connaissance de SQL est très utile à quiconque écrit des applications utilisant une base de données relationnelle.
la source
La compétence SQL est une compétence incontournable de l'informatique aujourd'hui. LINQ est une technologie Microsoft Only. Les utilisations SQL vont au-delà du développement d'applications Web et client / serveur. Vous ne pouvez pas modéliser des bases de données et utiliser ETL si vous n’êtes pas doué avec SQL. Vous n'avez peut-être pas besoin de maîtriser les dialectes SQL utilisés dans ORACLE et SQL Server pour leurs produits Data Warehous, mais vous devez connaître le langage SQL standard. Les bases de SQL sont simples, il existe des tonnes de matériel pour vous aider à démarrer.
la source
Si vous interagissez avec une base de données SQL, vous devez comprendre le code SQL généré par l'ORM. Vous devez comprendre les concepts inhérents aux bases de données SQL et comprendre ce que votre ORM ne peut pas faire pour vous. Les ORM facilitent la vie (et oui, je pense que travailler sans eux vous qualifie souvent de dinosaure), mais ce sont des outils (pour résumer des choses que vous connaissez), pas des béquilles (pour vous empêcher d’apprendre).
Si vous refusez d'apprendre le langage SQL, vous ne devez absolument pas toucher aux bases de données SQL, avec ou sans ORM, et vous devriez trouver un autre type de travail.
la source
Je reconnais que je suis un inconditionnel de l'ORM et que je prêche les avantages de l'ORM depuis des années et que j'ai beaucoup à dire sur les raisons pour lesquelles l'ORM l'emporte sur SQL.
MAIS...
Je dois admettre que SQL est absolument nécessaire dans le monde réel et que tous les développeurs doivent bien comprendre SQL.
Les procs SQL sont plus rapides que l'ORM dans presque tous les cas. Même si vous pouvez être optimiste, la sortie de l'ORM dans la plupart des cas fait en sorte qu'elle arrive juste après les procédures SQL.
À l'occasion, vous avez besoin de SQL très résistant pour obtenir le résultat souhaité, et ces requêtes monstres sont plus faciles et plus rapides à créer dans les processus SQL.
Juste mes deux bits.
la source
Il viendra un moment où vous devrez optimiser quelque chose de complexe créé par l'ORM. À ce stade, vous avez généralement une requête extrêmement complexe à décomposer. Si vous n'avez jamais appris les bases, comment pouvez-vous espérer commencer à apprendre SQL avec les outils avancés? Vous ne comprendrez pas assez pour commencer même. ORMs entre les mains d'une personne qui comprend le langage SQL - un bon outil. Les ORM dans les mains de quelqu'un qui ne connaît pas du tout le langage SQL - un désastre imminent.
L'une des raisons pour lesquelles SQL est essentiel à la compréhension des bases de données est que les programmeurs d'applications ne pensent pas naturellement en termes de jeux de données. Mais la seule manière dont les bases de données fonctionnent efficacement est par jeux. Vous devez apprendre à penser en ensembles avant même d'essayer d'utiliser un ORM.
la source
Je me retrouve à forcer manuellement les requêtes dans les frameworks ORM le plus souvent. Et bien que la plupart aient leur propre langage de requête, ceux-ci sont tous inspirés de SQL, le code est transformé en SQL, et vous devez comprendre ce qui ne va pas en lisant ce SQL quand (pas si, quand) les choses tournent mal ou fonctionnent mal.
Ainsi, même si vous n’écrivez pas directement SQL, si vous comprenez bien au-delà d’un niveau élémentaire (vous n’aurez probablement pas besoin d’apprendre à écrire des procédures stockées, des déclencheurs, etc. si vous ne voulez accéder qu’à des bases de données). devrait connaître suffisamment la langue pour comprendre le code généré et le modifier au besoin.
la source
Avant de parler de la question, une petite introduction d’abord; J'adore les ORM. Et je déteste le SQL. J'adore les ORM car ils cachent le gâchis hostile à l'utilisateur qu'est SQL et constituent un moyen agréable de gérer la base de données avec un langage intégré.
Cependant, je dois admettre que SQL présente de nombreux avantages, le plus important étant la précision. Je peux assez bien discuter de la complexité d'une requête SQL sans avoir une connaissance détaillée du schéma de base de données sous-jacent, simplement en parcourant la requête. Par conséquent, lorsque j'utilise SQL, je suis toujours alerte et j'ai toujours l'intuition de savoir où va la complexité d'un composant.
D'autre part, lorsque j'utilise des ORM, je suis tellement impressionné par la facilité d'intégration de la base de données que j'oublie littéralement qu'il existe même une base de données. Cela m'a vissé plusieurs fois. Dans le passé, j'ai souvent appelé des méthodes ORM d'apparence innocente, appelées dans les coulisses des jointures de bases de données massives et effrayantes, qui détruisent les performances.
C'est pourquoi pour moi, la vérité est quelque part entre les deux. J'aime utiliser les ORM, et je vais continuer à le faire, mais je dois faire plus attention et toujours étudier les implications (au niveau SQL) de tout appel de méthode ORM. Connaître les implications d'une couche d'abstraction est de l'or pur dans cette entreprise, et justifie l'utilisation de l'abstraction. Tout le reste, c'est comme se tirer une balle dans le pied.
la source
Si tout ce dont vous avez besoin est d'interagir avec la base de données uniquement avec l'application que vous créez, vous n'en avez probablement pas besoin. Dans certaines petites entreprises ou équipes de développeurs, vous devrez peut-être vous aider. Il est beaucoup plus facile de se connecter à la base de données d'un client et d'exécuter quelques instructions SQL pour voir ce qui se passe avec leurs données.
la source
Même avec un bon ORM mature, vous allez inévitablement rencontrer des situations dans lesquelles il émettra du SQL inefficace et vous facilitera grandement la vie si vous pouvez saisir ce qui se passe dans le SQL généré. Cela dit, si vous êtes très compétent avec l'ORM et savez comment utiliser un profileur pour votre base de données de choix, vous pouvez très facilement "simuler jusqu'à ce que vous le fabriquiez".
la source
La réponse à tous ces types de questions ("Dois-je savoir X?") Est "apprends-le la première fois que tu en as besoin, si jamais tu en as besoin".
Cependant, il est important de ne pas tomber dans le piège de faire les choses moins efficacement, car vous n'êtes pas au courant ou n'êtes pas disposé à apprendre le moyen efficace de les faire.
Dans ce cas particulier, par exemple, que faites-vous si vous vous rendez compte qu’un bogue dans votre programme rendait
PostCount
parfois le champ de votre table utilisateur inexact.Vous corrigez le bogue et vous devez maintenant mettre à jour le PostCount pour tous les utilisateurs. Comment faites-vous?
Si vous écrivez un petit script en utilisant ORM pour le faire, vous êtes très inefficace; une requête SQL très simple fera l'affaire.
Comme ces situations sont assez courantes, je crains que vous ne tombiez dans le piège décrit ci-dessus!
la source
Oui, vous avez toujours besoin de SQL.
Ne sautez pas à l’hypothèse que quelque chose de "vieux" est en quelque sorte indigne de considération. Les technologies dites "traditionnelles" sont celles qui existent encore après avoir résisté à l'épreuve du temps. Nous n'appelons pas les ordinateurs Wang «hérités», ils ont échoué et sont partis.
Si vous me demandez si cela me gêne que ma banque utilise probablement COBOL sur un ordinateur central, ou IBM i? Absolument pas. Ce sont des technologies solides, éprouvées et vraies. Devinez quoi, ils utilisent principalement DB2 SQL. Je suis beaucoup plus heureux de faire confiance à mon argent là-bas qu'avec un logiciel développé dans un langage à la mode du mois.
Les dinosaures ont duré sur cette terre beaucoup plus longtemps que nous, les humains. Et si vous lisez Jurasic Park (oui, les livres sont meilleurs que les films), alors je vous demande si vous voulez vraiment affronter une meute de velociraptors hyper-malins ou un T-Rex obstiné qui n'abandonne jamais? Ne soyez pas mordu en sous-estimant les "dinosaures". ;-)
la source
Hormis les jeux et la recherche (principalement statistique), pour laquelle je n’ai aucune expérience, il semble que l’accès aux bases de données et leur fonctionnement soient l’un des rares domaines dans lesquels de mauvaises décisions ont de très lourdes répercussions sur les performances. Je crois fermement en des abstractions de base de données plus puissantes dans le code, et je crois en linq, qui relie les opérations de la base de données au langage de programmation, en vous donnant tous les outils du langage (vérification de type, vérification de la syntaxe, tout ce qui vous plait votre langage de programmation) tout en vous donnant tout le pouvoir de faire ce que vous voulez est absolument fantastique. Malheureusement, cela ne fonctionne toujours pas toujours. Cela signifie que si la couche d'abstraction obtient ses optimisations erronées, vous risquez d'attendre des secondes au lieu de microsecondes, ou des minutes au lieu de secondes pour votre résultat. Comme ce sont des moments très remarquables, vous devez les optimiser, sinon votre application ne fonctionne pas: les performances deviennent le plus gros problème de votre application. Cela signifie que vous devez vous rapprocher du métal et optimiser à la main.
Lorsque nous en arrivons au point que manipuler de grands ensembles de données prend par exemple 3 ms lorsque vous le faites à la main, et 100 ms lorsque vous laissez la couche d'abstraction le faire pour vous, laissez-la bien gérer par la couche d'abstraction, car vous pourriez être 30 fois plus lent, mais vous êtes toujours (probablement pour la plupart des applications) assez rapide. La réalité de la situation est toutefois que lorsque vous recherchez des solutions optimisées avec un temps de réponse de 200 ms et que la couche d’abstraction le traite pour vous, l’algorithme prend «juste» 10 fois le nombre de performances, vous avez un 2 secondes de retard, puis vous vous souciez énormément, car cela ne va pas très vite, mais devient extrêmement lent. Constatant que les solutions de bases de données relationnelles ne sont pas adaptéesJe ne pense pas que cela sera résolu d’ici deux ou trois ans. Cela signifie que vous aurez encore besoin de passer au vase nu pendant un certain temps lorsqu'il s'agira de bases de données plus volumineuses, ou votre application sera si lente qu'elle ne pourra pas résister à la concurrence.
la source