Il provient des normes SQL d'origine, qui, à travers plusieurs couches d'indirection, finissent par arriver à un début d'identifiant bloc, qui est l'une des nombreuses choses, mais c'est principalement "une simple lettre latine". Il y a aussi d'autres choses qui peuvent être utilisées, mais si vous voulez voir tous les détails, allez sur http://en.wikipedia.org/wiki/SQL-92 et suivez les liens vers la norme actuelle ( page 85 )
Le fait d'avoir des introducteurs d'identifiants non numériques facilite et accélère l'écriture d'un analyseur pour décoder sql pour une exécution, mais une forme entre guillemets convient également.
Modifier :pourquoi est-ce plus simple pour l'analyseur ?
Le problème pour un analyseur est plus dans le SELECT
-list clause que le FROM
clause. La liste de sélection est la liste des expressions sélectionnées dans les tables, ce qui est très flexible, permettant des noms de colonnes simples et des expressions numériques. Considérez ce qui suit :
SELECT 2e2 + 3.4 FROM ...
Si les noms de table et les noms de colonne peuvent commencer par des chiffres, est 2e2
un nom de colonne ou un nombre valide (e
format est généralement autorisé dans les littéraux numériques) et est 3.4
le tableau "3
" et colonne "4
" ou est-ce la valeur numérique 3.4
?
Avoir la règle que les identifiants commencer par de simples lettres latines (et quelques autres choses spécifiques) signifie qu'un analyseur qui voit 2e2
peut rapidement discerner qu'il s'agira d'une expression numérique, même chose avec 3.4
Bien qu'il soit possible de concevoir un schéma pour autoriser les premiers caractères numériques, cela pourrait conduire à des règles encore plus obscures (opinion), donc cette règle est une bonne solution. Si vous autorisiez les chiffres en premier, il faudrait toujours les guillemets, ce qui n'est sans doute pas aussi "propre".
Avis de non-responsabilité , j'ai légèrement simplifié ce qui précède, en ignorant les noms de corrélation pour le garder court. Je ne suis pas totalement familier avec postgres, mais j'ai vérifié la réponse ci-dessus par rapport à la documentation Oracle RDB et aux spécifications sql