У меня нет серьезного опыта работы с SQL, и я даже ненавижу писать SQL вместо LINQ. Я достаточно счастлив с ОРМ.
С точки зрения работодателей и сектора, важно ли знать SQL? Должен ли я освоить это? Являются ли компании, которые предпочитают чистый SQL, а не ORM, "динозавром" в мире программирования?
sql
orm
entity-framework
Кто угодно
источник
источник
Ответы:
Это трудно объяснить многим программистам, потому что, если вы знаете только базовый SQL, то это действительно не дает вам большого преимущества перед опорой ORM. Однако более продвинутые концепции SQL являются важной частью различий между приложениями, которые просто работают, и приложениями высокого качества (в частности, быстрыми и надежными).
Я предполагаю, что кто-то другой разрабатывает базы данных для вас, потому что делать это, не зная SQL, просто за гранью. Но даже если вы разрабатываете только против них, вот лишь частичный список всех вещей, которые ORM все еще имеют тенденцию делать плохо или не делать вообще:
Этот список можно продолжать и продолжать - многие из этих вещей никогда не приходилось делать начинающим администраторам баз данных, а начинающий разработчик никогда даже не слышал о них - но они очень важны в более масштабных приложениях.
ORM действительно хороши в ускорении действительно скучного кода SQL - то есть, всех повторяющихся CRUD и картографических и других программных кодов, поэтому использовать их абсолютно не стыдно и не слушайте никого, кто говорит, что они злые. Но вам определенно все еще нужно учиться и, да, даже осваивать SQL, и быть готовым перейти к необработанным командам / запросам БД, когда ORM не тянет свое дело.
источник
GroupJoin
в LINQ) намного лучше.GroupJoin
.GroupJoin
. Просто люди, которые привыкли к SQL, сразу думают о внешнем соединении в этих случаях, а затем спрашивают, как перевести это в LINQ. Это не правильный подход. Вы не должны пытаться перевести ваш SQL в LINQ, вы должны перевести то, что вам нужно напрямую.Абсолютно! SQL по-прежнему является лингвистическим языком баз данных, и хотя вы можете многое сделать с ORM, вы должны понимать SQL, чтобы понимать решения, принимаемые ORM, и SQL, который они генерируют. Кроме того, есть еще много вещей, которые вы должны делать с пользовательскими SQL и хранимыми процедурами. Извините, нет бесплатного обеда.
источник
Да, вам все еще нужно знать SQL. ORM являются очень утечкой абстракции и не предоставляют доступ ко всем возможностям SQL. Для игрушечных приложений вы можете быть в порядке с ограниченными знаниями SQL. Для корпоративных приложений вы должны понимать базу данных, чтобы получить достойную производительность от ORM. Кроме того, существует множество задач, которые гораздо легче выполнить с помощью SQL, чем с языком приложения. Я видел, как Java-программисты тратят дни на написание кода, чтобы сделать что-то, что можно было бы написать в SQL за час. Знание SQL очень полезно для тех, кто пишет приложения, использующие реляционную базу данных.
источник
Навыки SQL - это обязательный навык в IT. LINQ - это технология Microsoft Only. Использование SQL выходит за рамки разработки веб-приложений и приложений клиент-сервер. Вы не можете моделировать базы данных и делать ETL, если вы не очень хорошо разбираетесь в SQL. Вам может не понадобиться осваивать диалекты SQL, используемые в ORACLE и SQL Server для их продуктов Data Warehous, но вы должны знать стандартный SQL. Основы SQL просты, есть множество материалов, с которых можно начать.
источник
Если вы взаимодействуете с базой данных SQL, вы должны понимать SQL, который генерирует ORM. Вы должны понимать концепции, присущие базам данных SQL, и понимать, что ваш ORM не может сделать для вас. ORM делают жизнь проще (и да, я думаю, что работа без них во многих случаях квалифицирует вас как динозавра), но это инструменты (для абстрагирования вещей, которые вы знаете), а не костыли (чтобы помешать вам учиться).
Если вы отказываетесь изучать SQL, у вас нет никакого дела, касающегося баз данных SQL, с ORM или без него, и вы должны найти другой тип работы.
источник
Я признаю, что я фанат ORM и много лет проповедовал преимущества ORM, и мне было что рассказать о том, почему ORM превосходит SQL.
НО...
Я должен признать, что SQL абсолютно необходим в реальном мире, и каждый разработчик должен хорошо понимать SQL.
Процессы SQL работают быстрее, чем ORM, почти во всех случаях. Несмотря на то, что вы можете оптимизировать вывод ORM в большинстве случаев, вы сможете сделать это за секунду до процессов SQL.
Иногда для получения нужного вам результата требуется мощный SQL-запрос, и эти монстр-запросы проще и быстрее создавать в процессах SQL.
Просто мои два бита.
источник
Придет время, когда вам придется оптимизировать что-то сложное, что создает ORM. На этом этапе у вас обычно есть чрезвычайно сложный запрос, который нужно разбить. Если вы никогда не изучали основы, как вы можете начать изучать SQL с помощью продвинутых вещей? Вы не поймете достаточно, чтобы даже начать. ORM в руках человека, который понимает SQL - хороший инструмент. ORM в руках того, кто вообще не знает SQL - катастрофа в ожидании.
Одна из причин, почему SQL имеет решающее значение для понимания баз данных, заключается в том, что разработчики приложений не думают естественным образом с точки зрения наборов данных. Но единственный эффективный способ работы баз данных - это наборы. Вы должны научиться мыслить в наборах, прежде чем пытаться использовать ORM.
источник
Я чаще вручную заставляю запросы в структурах ORM, чем нет. И хотя большинство из них имеют свой собственный язык запросов, все они вдохновлены sql, код превращается в sql, и вам нужно понять, что идет не так, читая этот sql, когда (не если, когда) что-то идет не так или работает плохо.
Поэтому, даже если вы не пишете sql напрямую, понимаете его за пределами базового уровня (хотя вам, вероятно, не нужно узнавать что-то о написании хранимых процедур, триггеров и т. Д., Если все, что вы собираетесь сделать, это получить доступ к базам данных), вы должен знать язык достаточно, чтобы понять сгенерированный код и настроить его по мере необходимости.
источник
Прежде чем говорить о вопросе, сначала небольшое введение; Я люблю ОРМ. И я ненавижу SQL. Мне нравятся ORM, потому что они скрывают недружественный пользователю беспорядок, которым является SQL, и обеспечивают хороший интегрированный с языком способ работы с базой данных.
Тем не менее, я должен признать, что SQL имеет много преимуществ, причем большая из них - точность. Я могу в значительной степени поспорить о сложности SQL-запроса без подробного знания базовой схемы базы данных, просто выполнив запрос. Поэтому, когда я использую SQL, я всегда бдителен, и у меня всегда есть интуиция о том, куда движется сложность компонента.
С другой стороны, при использовании ORM я настолько поражен простотой интеграции базы данных, что буквально забываю, что есть даже база данных. Это напортачило мне несколько раз. Много раз в прошлом я вызывал невинно выглядящие методы ORM, которые за сценой вызывают массивные и пугающие объединения баз данных, которые снижают производительность.
Вот почему для меня истина где-то посередине. Мне нравится использовать ORM, и я буду продолжать это делать, но я должен быть более осторожным и всегда изучать последствия (на уровне SQL) любого вызова метода ORM. Знание последствий уровня абстракции - чистое золото в этом бизнесе, и оно оправдывает использование абстракции. Все остальное, как выстрел в себя.
источник
Если все, что вам когда-либо требуется, это взаимодействовать с базой данных только через приложение, которое вы создаете, вам, вероятно, это не нужно. В некоторых небольших компаниях или командах разработчиков вам может потребоваться некоторая поддержка. Гораздо проще подключиться к базе данных клиента и выполнить несколько SQL-операторов, чтобы увидеть, что происходит с их данными.
источник
Даже с хорошим, зрелым ORM вы неизбежно столкнетесь с ситуациями, когда он испускает неэффективный SQL и сделает вашу жизнь намного проще, если вы сможете ухватиться за то, что происходит в сгенерированном SQL. Тем не менее, если вы очень хорошо разбираетесь в ORM и знаете, как использовать профилировщик для выбранной вами БД, вы можете довольно легко «подделать ее, пока не сделаете».
источник
Ответ на все эти типы вопросов («Нужно ли мне знать Х?») «Выучите его в первый раз, когда он вам понадобится, если он вам когда-нибудь понадобится».
Тем не менее, важно не попадать в ловушку, когда вы делаете вещи менее эффективно, потому что вы не знаете или не хотите учиться эффективному способу их выполнения.
В данном конкретном случае, например, что вы будете делать, если поймете, что в вашей программе была ошибка, из-за которой
PostCount
поле вашей пользовательской таблицы иногда было неточным.Вы исправили ошибку и теперь вам нужно обновить PostCount для всех пользователей. Как ты делаешь это?
Если вы пишете небольшой скрипт, используя ORM для этого, то вы очень неэффективны; очень простой SQL-запрос.
Поскольку эти ситуации довольно распространены, я боюсь, что вы попали в ловушку, описанную выше!
источник
Да, вам все еще нужен SQL.
Не спешите с предположением, что что-то «старое» как-то недостойно рассмотрения. Так называемые «устаревшие» технологии - это те, которые все еще существуют после того, как прошли испытание временем. Мы не называем компьютеры Wang «наследием», они потерпели неудачу и ушли.
Если вы спросите меня, беспокоит ли меня, что мой банк, вероятно, использует COBOL на мэйнфрейме или IBM i? Абсолютли нет. Это надежные и проверенные технологии. Угадайте, что они в основном используют DB2 SQL. Я гораздо больше доверяю своим деньгам, чем программам, разработанным на модном языке месяца.
Динозавры существовали на этой земле гораздо дольше, чем мы, люди. И если вы читаете «Парк Юрского периода» (да, книги лучше, чем фильмы), то я спрашиваю вас: действительно ли вы хотите встретить группу сверхчувственных велоцирапторов или упрямого Т-Рекса, который никогда не сдается? Не укушайте, недооценивая «динозавров». ;-)
источник
Помимо игр и (в основном, статистических) исследований, с которыми у меня нет опыта, кажется, что доступ к базам данных и операции - одна из немногих областей, где неправильные решения приводят к очень большому падению производительности. Я твердо верю в более мощные абстракции базы данных в коде, и я верю в linq, который связывает операции базы данных с языком программирования, предоставляя вам все инструменты языка (проверка типов, проверка синтаксиса, все, что вам нравится) ваш язык программирования), в то же время давая вам достаточно сил, чтобы делать то, что вы хотите, абсолютно потрясающе. К сожалению, это все еще не всегда работает. Это означает, что если уровень абстракции дает неверные результаты оптимизации, и вы, возможно, будете ждать секунд вместо микросекунд или минут вместо секунд для вашего результата. Так как это очень заметные времена, Вы должны оптимизировать их, иначе ваше приложение не «работает»: производительность становится самой большой проблемой вашего приложения. Это означает, что вам нужно приблизиться к металлу и оптимизировать руки.
Когда мы дойдем до того, что манипулирование большими наборами данных занимает, например, 3 мс при ручном выполнении, и 100 мс, когда вы позволяете уровню абстракции делать это за вас, непременно, пусть уровень абстракции обрабатывает это за вас, потому что вы можете быть в 30 раз медленнее, но вы все еще (вероятно, для большинства приложений) достаточно быстро. Однако реальность ситуации такова, что когда вы смотрите на оптимизированные решения, где у вас есть время отклика 200 мс, и когда уровень абстракции обрабатывает его для вас, алгоритм «просто» достигает 10-кратного успеха, у вас есть Задержка в 2 секунды, а потом вас все волнует, от не слишком быстрого до мучительно медленного. Видя, что решения для реляционных баз данных плохо масштабируютсяЯ не думаю, что это будет решено через два или три года. Это означает, что вам все равно придется довольно долго опускаться до чистого металла, когда дело доходит до более крупных баз данных, иначе ваше приложение будет слишком медленным, оно не сможет противостоять конкурентам.
источник