sql >> Base de Datos >  >> RDS >> PostgreSQL

¿El nombre de la tabla o columna no puede comenzar con numérico?

Proviene de los estándares sql originales, que a través de varias capas de direccionamiento indirecto finalmente llegan a un inicio de identificador bloque, que es una de varias cosas, pero principalmente es "una letra latina simple". También hay otras cosas que se pueden usar, pero si desea ver todos los detalles, vaya a http://en.wikipedia.org/wiki/SQL-92 y siga los enlaces al estándar real (página 85)

Tener introductores de identificadores no numéricos hace que escribir un analizador para decodificar sql para su ejecución sea más fácil y rápido, pero un formulario entre comillas también está bien.

Editar:¿Por qué es más fácil para el analizador?

El problema para un analizador está más en SELECT cláusula -list que el FROM cláusula. La lista de selección es la lista de expresiones que se seleccionan de las tablas, y esto es muy flexible, permitiendo nombres de columna simples y expresiones numéricas. Considere lo siguiente:

SELECT 2e2 + 3.4 FROM ...

Si los nombres de las tablas y las columnas pudieran comenzar con números, es 2e2 un nombre de columna o un número válido (e normalmente se permite el formato en literales numéricos) y es 3.4 la tabla "3 " y columna "4 " o es el valor numérico 3.4 ?

Tener la regla de que identificadores comenzar con letras latinas simples (y algunas otras cosas específicas) significa que un analizador que ve 2e2 puede discernir rápidamente que será una expresión numérica, lo mismo ocurre con 3.4

Si bien sería posible idear un esquema para permitir caracteres numéricos principales, esto podría conducir a reglas aún más oscuras (opinión), por lo que esta regla es una buena solución. Si permitió dígitos primero, entonces siempre necesitaría comillas, lo que podría decirse que no es tan 'limpio'.

Descargo de responsabilidad , he simplificado ligeramente lo anterior, ignorando los nombres de correlación para que sea breve. No estoy totalmente familiarizado con postgres, pero verifiqué dos veces la respuesta anterior con la documentación de Oracle RDB y las especificaciones de sql