Вставить запрос: почему плохая идея не включать имена столбцов? - PullRequest
3 голосов
/ 08 февраля 2012

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

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

Спасибо заранее.

Ответы [ 8 ]

4 голосов
/ 08 февраля 2012

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

3 голосов
/ 08 февраля 2012

Адвокат дьявола: если есть только пара столбцов, что дает вам короткая позиция?Вы сэкономили несколько нажатий клавиш, большое дело.

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

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

1 голос
/ 08 февраля 2012

Причина состоит в том, чтобы сделать код более надежным.

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

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

0 голосов
/ 08 февраля 2012

Отношение не имеет порядка столбцов слева направо. То же самое нельзя сказать о таблице SQL, не очень хорошая вещь. Однако тот факт, что SQL обладает нереляционными функциями, не означает, что вы должны их использовать! Указание списка столбцов как части конструктора значений таблицы или строки - это один из способов снижения порядка столбцов в SQL.

Учтите, что следующие операторы SQL семантически эквивалентны:

INSERT INTO Table1 (col1, col2, col3) VALUES (1, 2, 3);

INSERT INTO Table1 (col2, col1, col3) VALUES (2, 1, 3);

INSERT INTO Table1 (col3, col2, col1) VALUES (3, 2, 1);
0 голосов
/ 08 февраля 2012

Кроме того, есть небольшая хитрость, если вы не хотите вводить имена столбцов.В Management Studio вы можете настроить его так, чтобы ваш набор результатов возвращался в CSV (с заголовками столбцов).CTRL-T.

Затем быстро,

select top 1 * from <tablename>

, скопируйте и вставьте список столбцов из окна набора результатов.

0 голосов
/ 08 февраля 2012

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

0 голосов
/ 08 февраля 2012

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

0 голосов
/ 08 февраля 2012

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

Кроме того, если добавлен столбец, вставка завершится неудачей.

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