Если вы используете LINQ to SQL, есть ли веская причина для изучения запросов / синтаксиса SQL? - PullRequest
3 голосов
/ 30 апреля 2009

Я понимаю запросы SQL и синтаксис из-за предыдущей работы с использованием веб-форм и хранимых процедур ASP.NET, но я бы не стал называть себя «экспертом» в этом.

Поскольку я использую ASP.NET MVC и LinqToSql, мне кажется, что большая часть тяжелой работы проделана за меня и инкапсулирована в конце SQL, поэтому я задаюсь вопросом, есть ли какая-либо польза от продолжения пополнения счета мои знания SQL-запросов или лучше сосредоточить свое «время обучения» на других вещах.

Ваши мысли?

Ответы [ 12 ]

13 голосов
/ 30 апреля 2009

Вы должны абсолютно знать SQL и поддерживать свои знания в актуальном состоянии. ORM разработан, чтобы облегчить боль от выполнения утомительного, что вы знаете, как делать, так же, как графический калькулятор предназначен для того, чтобы делать то, что вы можете сделать вручную (и должен знать, как).

В ту минуту, когда вы начинаете позволять вашему ORM делать в базе данных вещи, которые вы не до конца понимаете, это минута, когда вы теряете контроль над своей моделью.

5 голосов
/ 30 апреля 2009

По моему мнению, знание SQL более ценно, чем любая технология, специфичная для поставщика. Всегда будут случаи, когда эти красивые готовые интегрированные среды не смогут решить конкретную ситуацию, и потребуется знание продвинутого SQL.

1 голос
/ 08 мая 2009

Я бы сказал, что вам определенно нужно глубоко знать свой SQL, потому что вам нужно знать, какой код генерирует ваше Linq-выражение и какие последствия будет иметь этот код, если вы хотите выполнять запросы с высокой производительностью. Конечно, вы можете выполнить работу в большинстве случаев, но иногда существует огромная разница в производительности при очень тонкой разнице в синтаксисе Linq.

Я столкнулся с этим сегодня утром на самом деле, где я сделал .Any (d => d.Id == (...). First (). Id) вместо того, чтобы делать где (...). Любой ( i => i.Id == d.Id). Это привело к тому, что запрос выполнялся в пять раз медленнее.

Иногда вам нужно проанализировать фактический Sql-запрос, чтобы понять ошибки, которые вы делаете.

1 голос
/ 03 мая 2009

SQL - это инструмент. Linq to SQL также является инструментом. Наличие большего количества инструментов в вашем поясе - это хорошо. Это даст вам больше перспектив при атаке проблемы.

Рассмотрим сценарий, в котором вы можете выполнить несколько запросов или несколько обновлений базы данных за одну операцию. Если вы можете написать TSQL, вы потенциально можете сэкономить много обращений к базе данных.

1 голос
/ 30 апреля 2009

Это зависит от того, над чем вы работаете, и от того, что вы сказали, может быть, имеет смысл сосредоточиться на других областях.

Сказав, что я знаю, что знание SQL позволяет следующее:

  • Возможность писать запросы для простого извлечения данных из систем. Для специальных запросов или проверки вещей.
  • Возможность писать сложные хранимые процедуры, что позволяет мне группировать сложную обработку данных в одном месте, где это должно быть, в базе данных.
  • Возможность точной настройки LinqToSql путем добавления индексов и понимания процедур SQL / плана запросов.

Большинство из них больше помогают в более сложных системах, поэтому, если вы не работаете с ними, это может быть не такой большой помощью.

В вашей ситуации может помочь перечисление технологий, которые могут быть полезны, а затем расставить приоритеты.
Другими словами, составьте план развития для себя, который может включать в себя не только изучение технических знаний, но и более широкий фокус, такой как шаблоны проектирования, навыки общения и другие области.

1 голос
/ 30 апреля 2009

Я думаю, что LinqToSQL (или другие поставщики Linq to SQL) не должны мешать вам знать SQL.

Когда ваш запрос не возвращает того, что вы ожидаете, или если для запуска производственной базы данных требуется 30 минут, вам лучше понять, что сгенерировал LTS и почему он не работает.

Я знаю, это перефразированная тема, и она может быть неприменима к тому, что вы делаете («маленькая» база данных, которая никогда не столкнется с подобными проблемами и т. Д.), Но иногда стоит не слишком забывать о слоях абстракции.

Другая причина в том, что Linq не обладает полным набором возможностей, которые вы можете делать в SQL, поэтому вам, возможно, придется прибегнуть к написанию «сырого» SQL, даже если результат материализуется как объекты.

1 голос
/ 30 апреля 2009

По-прежнему важно знать SQL и его парадигму (основанную на множестве), чтобы иметь возможность создавать эффективные операторы SQL, даже если вы используете LinqToSql или любое другое OR / M.

Всегда будут ситуации, когда вы захотите написать запрос на нативном SQL, потому что невозможно написать его в LinqToSql / HQL / что-либо еще, или LinqToSql просто не сможет сгенерировать для него производительный запрос.

Всегда будут ситуации, когда вы захотите выполнить специальный запрос к базе данных, используя собственный sql и т. Д. *

1 голос
/ 30 апреля 2009

По-прежнему важно изучать SQL-запросы / синтаксис. Причина в том, что вам нужно хотя бы понять, как Linq to SQL транслируется в базу данных за кулисами.

Это поможет вам, когда вы обнаружите проблемы, например, что-то неправильно обновляется. Или необходимо повысить производительность запроса.

Это то же самое, что вам нужно понять, что такое язык ассемблера и как он в конечном итоге становится машинным языком. Однако не обязательно быть экспертом, но, по крайней мере, уметь писать и понимать это.

0 голосов
/ 30 апреля 2009

LINQ To SQL будет работать только с .NET. Если вам случится получить другую работу, где вы не работаете с .NET, вам придется вернуться к написанию сохраненных процессов.

Знание SQL также поможет вам лучше понять, как работает сервер, и, возможно, сделает вас лучшим разработчиком баз данных.

0 голосов
/ 30 апреля 2009

Рано или поздно вы столкнетесь с проблемами, которые требуют практического знания SQL для решения. И рано или поздно вы столкнетесь с требованиями, которые лучше всего реализуются в БД (будь то SP-ы, триггеры, представления или что-либо еще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...