2009-10-25 3 views
0

Это не шутка. ;)Что такое программирование на основе цикла?

Я работал с администратором баз данных, чтобы определить модель данных, и он отталкивался от некоторых моих предложений, сказав что-то вроде «задолго до того, как мы получили« программирование на основе цикла »или« модели данных на основе циклов »

Мои предложения, потому что мы работаем с Entity Framework, ORM на основе схемы ==, чтобы упростить некоторые отношения.

Я хочу знать, что он имел в виду?

Спасибо за ответы до сих пор, но это определенно не sql «на основе набора» и курсора, в то время как элемент цикла.


В ответ я сказал: «Я понятие не имею, что это значит», и он никогда не дал ответа, просто бросил какую-то часть своих возражений.

+0

Я не уверен, но он, возможно, имел в виду, что вместо того, чтобы выполнять правильный запрос и отбрасывать данные в наборе, они ранее захватили каждую строку в таблице (например, как курсор) и проверили ее на посмотрите, следует ли включить его в результаты. –

+0

Ну, я предполагаю, что это когда ваш код - одна огромная масса 'GOTO's – aviraldg

+0

. Я также не знаю, что это значит. Это те моменты, когда вы должны отпустить свой страх выглядеть глупым и просто спросить. В 99% случаев люди поймут, что они расплывчаты или говорят неформально, и они объяснят, не думая об этом. В 1% случаев, когда это действительно должно было быть чем-то, что вы знали, вы можете смиренно выразить удивление тем, что не знали об этом. – PeterAllenWebb

ответ

3

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

Например, в ментальной модели, основанной на циклах, вы должны сменить набор строк, выполнив запрос, выбирая строки один за другим, изменяя значение поля и отправляя каждую строку обратно в база данных. Это запускает N + 1 SQL-запросы для изменения N строк. Это часто является следствием использования инструментов ORM, таких как Entity Framework или Active Record.

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


Re комментарии от других людей: Мы можем придумать ответы на то, что мы думать «петли на основе» означает, но это никогда не будет ответить, что ваш коллега имел в виду, когда он сказал это. Если бы он отступил, то он, возможно, не знал, как быть более четко сформулированным. Если это так, вы никогда не узнаете, что он имел в виду.


Re ORMs умнее, чем в наши дни, я хотел бы услышать несколько примеров. Я не отрицаю этого - я действительно заинтересован в примере ORM, который может вызывать обновление по строкам, которые он не выбрал. То есть, в интерфейсе «ORMish», а не путем нарушения абстракции.

+1

ORMs умнее, чем в наши дни ... –

+1

Не все из них. – Randolpho

+0

Я видел только пользовательские домашние слои DAL, которые делают такие вещи. – jfar

0

Возможно, он имел в виду избегать циклов в хранимой процедуре.

Наличие циклов в Transact-SQL, как правило, является плохим приемом, SQL создается для быстрого извлечения данных без циклов.

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

Надеется, что это помогает

0

Я думаю, что он имел в виду, как это было сделано в классическом ASP, где был объект RecordSet и вы Переберите результаты запроса для отображения страницы. Я не могу понять, что это должно было бы сделать с созданием хорошей схемы.

1

С вашего вопроса, появляется, что он говорит, что вам следует избегать операций на основе набора, потому что они были старым способом ... «прежде чем у нас было программирование на основе петли».

Это как свисающее красное мясо перед львом - , если это то, что он на самом деле говорит.

Так что - вызов ему. «Что ты имеешь в виду? Ты имеешь в виду использование курсоров?» «Вы полагаете, что манипуляция данными в базе данных« на основе цикла »(на самом деле, на основе курсора) лучше, чем операции на основе Set? - или наоборот?» Если он на самом деле означает, что вы должны изучить подход, основанный на наборе, свойственный SQL, тогда у вас вполне может быть чему поучиться у парня. Если он подкован в отношении компромиссов, присущих многим ORM (даже если они достаточно умны, чтобы не просто передать все операции, зацикливая на извлеченные записи), то у вас определенно есть чему поучиться у него.

Если, с другой стороны, он считает, что курсоры - это унылое новое изобретение, которое поможет вам избежать хлопот на основе набора SQL-данных, тогда у вас есть настоящая проблема, если этот парень является вашим администратором баз данных!

О, и еще одна вещь, есть много вещей, которые я не знаю, но у меня многолетний глубокий опыт разработки SQL. Действительно, я написал несколько SQL that'll make your hair curl. И я должен сказать вам - я никогда не слышал термин «петлевое программирование». Таким образом, не воспринимают это как нечто стандартное или искусство или что-то, что вы должны были знать.

Успехов ...

0

«Я искренне заинтересован в качестве примера ORM, который может вызвать обновление против строк он не извлекается.»

У меня есть сомнения, действительно ли такая возможность будет хорошей идеей.

Изменение значений базы данных без модификатора KNOWING Фактическое содержимое, которое он изменяет?

Это как сказать кому-то: «Как бы то ни было, вы думаете, что знаете (и я даже не знаю, что именно вы думаете, что знаете), это неправильно».

Смежные вопросы