Почему у вас может быть столбец с именем ORDER в DB2? - PullRequest
0 голосов
/ 29 октября 2008

В DB2 вы можете назвать столбец ORDER и написать SQL как

SELECT ORDER FROM tblWHATEVER ORDER BY ORDER

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

Ответы [ 4 ]

6 голосов
/ 29 октября 2008

Я в основном согласен с мнением, что ключевые слова не должны быть разрешены в качестве идентификаторов. Большинство современных вычислительных языков имеют 20 или, может быть, 30 ключевых слов, и в этом случае введение моратория на их использование в качестве идентификаторов вполне разумно. К сожалению, SQL происходит из старой школы языков COBOL («вычислительные языки должны быть как можно ближе к английскому»). Следовательно, SQL (как и COBOL) имеет несколько сотен ключевых слов .

Я не помню, говорит ли стандарт SQL что-либо о том, должны ли зарезервированные слова быть разрешенными в качестве идентификаторов, но, учитывая обширный (чрезмерный!) Словарь, неудивительно, что несколько реализаций SQL позволяют это. *

Сказав, что использование ключевых слов в качестве идентификаторов не так глупо, как сама концепция идентификаторов в кавычках в SQL (и они не относятся к DB2). Разрешить использование чувствительных к регистру идентификаторов - это одно, а заключенные в кавычки идентификаторы допускают всякую чепуху, включая пробелы, диакритические знаки и в некоторых реализациях (да, включая DB2) управляющие символы! Попробуйте следующее, например:

CREATE TABLE "My
Tablé" ( A INTEGER NOT NULL );

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

3 голосов
/ 29 октября 2008

Многие парсеры SQL (особенно DB2 / z, который я использую) умнее, чем некоторые обычные парсеры, которые иногда полностью разделяют лексический и семантический анализ (это разделение в основном хорошая вещь).

Синтаксические анализаторы SQL могут определить на основе контекста, является ли ключевое слово допустимым или должно рассматриваться как идентификатор.

Следовательно, вы можете получить столбцы с именем ORDER или GROUP или DATE (это особенно распространено).

Меня раздражают некоторые синтаксические редакторы окраски, когда они маркируют идентификатор цветом ключевого слова. Их парсеры не такие «умные», как в DB2.

1 голос
/ 29 октября 2008

Интересно, что вы можете использовать ключевые слова в качестве имен полей и в SqlServer. Единственное отличие заключается в том, что вам нужно использовать круглые скобки с именем поля

так что вы можете сделать что-то вроде

create table [order](
id int,
[order] varchar(50) )

, а затем:)

select 
    [order] 
from 
    [order]
order by [order]

Это, конечно, несколько крайний пример, но, по крайней мере, с использованием скобок вы можете видеть, что [порядок] не является ключевым словом.

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

1 голос
/ 29 октября 2008

Поскольку имена объектов ... names . Все системы баз данных позволяют вам использовать указанные в кавычках имена, чтобы избежать проблем.

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

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