2009-03-29 42 views
46

¿Está bien nombrar las tablas de mi base de datos que ya son palabras clave? Para mi caso, estoy tratando de nombrar la tabla que mantendrá a mis usuarios. Lo llamé Usuario pero aparece en color rosa en SQL Server Management Studio, por lo que supongo que es una tabla del sistema o palabra clave existente. Gracias por su consejo.Creación de nombres de tabla que son palabras reservadas/palabras clave en MS SQL Server

Lista oficial de palabras clave reservadas: Reserved Keywords (Transact-SQL)

+0

Para mysql: Aquí está la respuesta: SELECCIONAR * DESDE 'teclas' funciona - ponga el nombre de la tabla entre comillas simples en mi phpmyadmin. Por lo tanto, está bien. (pero no recomendado). – ssaltman

Respuesta

87

repetir esto tres veces:

NO LO HAGA, YO ¡NO UTILICE LAS PALABRAS RESERVADAS!

¡me lo agradecerás!

+0

Oh sí. Suceden cosas muy extrañas cuando intenta consultar dicha tabla/campo con una MS Query (que es la herramienta de consulta de MS Office). NO funcionará a pesar de que ponga corchetes en el lado de Excel. Cambiará el nombre de la tabla/campo eventualmente. – GSerg

+2

¿Por qué torturar a las personas que han mantenido su código más tarde o incluso a usted mismo? – ojblass

+13

Respetuosamente no estoy de acuerdo. Es una buena costumbre poner entre paréntesis los nombres de sus tablas. Y cada herramienta SQL que he usado, tanto MSFT como de terceros, lo hace de forma automática.Entonces en la práctica, no hace una gran diferencia. – Portman

7

Puede utilizar [usuario] para hacer esto. Si es posible, use un nombre de tabla que no entre en conflicto con una palabra clave, para evitar confusiones y errores.

59

Puede crear tablas con el mismo nombre que las palabras clave. Si "cita" el nombre de la tabla, debería funcionar. Las comillas predeterminadas en el servidor SQL son corchetes: []

CREATE TABLE [dbo].[user](
    [id] [bigint] NOT NULL, 
    [name] [varchar](20) NOT NULL 
) ON [PRIMARY] 
+3

Siempre debe citar todos los nombres de campo. Nunca se sabe lo que puede convertirse en una palabra reservada en una futura base de datos. No hace ningún daño. – rjmunro

+0

¡Gracias por esto! Ya tenía nombres de columna que eran palabras clave reservadas y me estaba cansando de las "respuestas" pésimas a esta pregunta (bueno, mi pregunta era más sobre el acceso que la creación) que básicamente eran "no hacer". – ShaneK

+0

¡Lo has clavado! gracias – GETah

8

Sí, está bien. En sus consultas, puede poner [y] alrededor de su nombre de la tabla de manera que SQL Server sabe que usted se refiere a una mesa - es decir,

CREATE TABLE [User] ... 
SELECT * FROM [User] 
2

Como se mencionó, puede hacerlo citando el nombre. Por supuesto, también tendrá que citar el nombre en cualquier momento que lo haga referencia; créame, se vuelve realmente rápido.

Como nota aparte, el hecho de que la sintaxis de SSMS coloree la palabra no significa necesariamente que sea reserved word. Sql puede ser molesto así. ;)

2

regla básica para la tabla y columna nombres (o mejores nombres de objetos en general):

no use nada el mismo que, o incluso similar a una palabra reservada. Solo use A-Za-z0-9 y guión bajo. Especialmente no use espacios. Solo use nombres que no requieran escaparse, y luego no use el escape como una prueba perpetua.

Usted, y todas las personas que trabajan con usted, o que alguna vez trabajarán en su código, no necesitan el agravante.

5

Me siento en el campamento que dice que los nombres de las tablas deben ser plurales, por lo que en su caso serían los Usuarios.

Me gusta esta convención, ya que tiene sentido para mí. Tienes una colección de usuarios, así que llama a tu mesa. Más adelante, si saca una fila individual que podría llenar un objeto llamado Usuario.

Si su convención dicta el uso del singular para los nombres de tabla utilizan algo diferente ej .: miembros, etc. cliente

Véase también la respuesta de racerx!

Como se mencionó anteriormente, está técnicamente bien si [Braket] el nombre.

+1

+1 a varios nombres de tabla. – Portman

+1

Tomo la ruta plural también para evitar el uso de palabras clave reservadas. Además, el uso de palabras clave reservadas podría ocasionar problemas de resaltado incorrectos. – puk

0

Como todos los demás han dicho, no hagas esto; sin embargo, yo estaba en el mismo bote. Tengo una regla que dice que todas mis tablas están almacenadas en forma singular. Organización no organizaciones, activos no activos, un catálogo de piezas tiene muchas partes, etc.

Bueno, tengo una tabla de usuario, ¿cómo la llamo? Terminé escapándome [Usuario]. Ahora lamento esa decisión porque siempre me olvido de escapar de la mesa; sin embargo, todavía no he encontrado un nombre mejor: el miembro es el principal candidato.

+0

Pongo a mis usuarios en una tabla de "Persona". :) – David

+0

Pero, ¿y si necesitas modelar Personas que no son usuarios? – JoshBerke

+0

Es mejor tener otro nombre, incluso si es imperfecto (léase: miembro), que seguir recibiendo un golpe cada vez que se le olvida citar al usuario. – JonathanHayward

4

Para MS Query, he encontrado que las comillas dobles funcionan perfectamente en la consulta.

select T1."Reference" 
from MyTable T1 
6

Usar la 'comilla simple' para Cuerdas y "doble cita" nombres de columna.

Ejemplo:

INSERT INTO AccountMovement 
("Date", Info) 
VALUES 
('2012/03/17', 'aa'), 
('2012/03/17', 'bb'), 
('2012/03/17', 'cc'), 
('2012/03/17', 'dd') 
0
No

una buena idea - por diversas razones

más razones por NO 1) El posible conflicto obvio con nombres reservados 2) Si en dos años que desea hacer un reemplazo global en su código de decir "usuario" en un campo de formulario o en cualquier lugar que esté atornillado al usar nombres genéricos 3) Si necesita buscar ocasiones que usan "usuario" en su código, ya sabe a dónde va (tenemos más de un millón de líneas de código, nos mataría).

lo que hicimos 1) el nombre de cada tabla tiene un comienzo único como O_nnn para objetos F_nnn de datos de las finanzas ... se aplicó la misma a campos como opp_created para la oportunidad se creó en la fecha, SUSR_RID para hacer referencia a un identificador de usuario dentro de una función de ventas versus OPUSR_RID una referencia operativa para un usuario ... 2) Además del prefijo, utilizamos nombres tan obvios como posibles, como O_FlightArrivalTime y no O_FltAT. Las bases de datos actuales no muestran degradación del rendimiento con nombres más largos. 3) Ahora, cuando se usa OF_FlightArrivalTime como nombre de Formfield, se encuentra fácilmente la asociación, pero una búsqueda global de O_F ... solo encontraría el campo DB, una búsqueda de OF_F ... el campo de formulario y _F .... ambos.

0

Definitivamente desaconsejaría utilizar una palabra clave reservada como lo está haciendo. La forma en que se ha diseñado nuestra base de datos es prefijando los nombres de los objetos de la base de datos para evitar que ocurra algo como esto. Por ejemplo, aquí está una definición rápida de cómo me gustaría crear una tabla 'Usuario':

CREATE TABLE tblUser 
(
    intUserId INT 
    ,vchUsername VARCHAR(255) 
    ,vchEmailAddress VARCHAR(255) 
    ,bitIsAccountEnabled BIT 
    ,dteUpdated DATETIME 
    ,dteCreated DATETIME 
    ,intUpdateUserId INT 
) 

De esta manera cuando estoy escribiendo consultas. No tengo problemas para entender qué tipos de datos estoy tratando. Tampoco tengo que preocuparme por las palabras clave reservadas en los nombres de tablas.

+7

Eww, notación húngara en una base de datos, simplemente ... no. – EkoostikMartin

+0

Al principio, cuando leí "prefijo", pensé que los nombres de tus columnas serían UserID, UserUsername, UserEmail, etc. Pero la notación húngara ... no, simplemente no ... ¿Y qué ocurre si decides cambiar el tipo de datos de la columna? También debe cambiar el nombre de la columna ... –

Cuestiones relacionadas