2010-07-25 25 views
8

No estoy del todo seguro de si hay un estándar en la industria o no, así que lo estoy preguntando aquí.Sql naming best practice

estoy nombrando un Usuarios mesa, y no estoy del todo seguro acerca de cómo nombrar los miembros.

user_id es obvio, pero me pregunto si debería prefijar todos los demás campos con "user_" o no.

nombre_usuario user_age

o nombrar sólo y la edad, etc ...

Respuesta

9

los prefijos son inútiles, a menos que tenga algo un poco más arbitrario; como dos direcciones Entonces puede usar address_1, address_2, address_home, etc

Lo mismo con números de teléfono.

Pero para algo tan estático como edad, género, nombre de usuario, etc .; Simplemente los dejaría así.

sólo para mostrar Si se va a prefijar todos esos campos, sus consultas podría tener este aspecto

SELECT users.user_id FROM users WHERE users.user_name = "Jim" 

Cuando se podría fácilmente ser

SELECT id FROM users WHERE username = "Jim" 
+2

+1: Para la mayoría, con un giro. Para ID's (como user_id) SIEMPRE deletreamos el nombre completo, para todo lo demás no anteponemos el nombre de la tabla. Hace que las uniones sean más fáciles de leer. – NotMe

+1

"sexo ... Yo simplemente los dejaría así": es más probable que sea 'sexo' (específicamente masculino y femenino) para el cual hay un código estándar de la industria [ISO 5218] (http: //en.wikipedia. org/wiki/ISO_5218), en lugar de género (masculino, femenino, más otros). – onedaywhen

2

Sólo tienes que ir con el nombre y la edad, la mesa debe proporcionar el contexto necesario cuando se pregunta qué tipo de nombre que' Re trabajando con.

2

verlo como una entidad y el nombre de los campos en consecuencia

me gustaría sugerir una mesa usuario, con campos tales como identificador, nombre, edad, etc.

Un grupo de registros es un grupo de usuarios, pero el grupo de campos representa un usuario.

Por lo tanto, terminas refiriéndote a user.id, user.name, user.age (aunque no siempre incluirás el nombre de la tabla, dependiendo de la consulta).

2

Para los nombres de las tablas, Me usualmente usan nombres pluralizados (o frases nominales), como usted.

Para los nombres de las columnas, no usaría el nombre de la tabla como prefijo. La tabla misma especifica el contexto de la columna.

0

Es una preferencia personal. El mejor consejo que podemos darle es consistencia, legibilidad y asegurar que las relaciones también sean nombradas correctamente.

Use nombres que tengan sentido y que no sean abreviados si es posible, a menos que el mecanismo de almacenamiento que está utilizando no funcione bien con ellos.

En las relaciones, me gusta usar Id en la clave primaria y [table_name] _Id en la clave externa. p.ej. Order.Id y OrderItem.ID de pedido

Id funciona bien si se utiliza una clave sustituta como clave principal.

También su mecanismo de almacenamiento puede o no ser sensible a mayúsculas y minúsculas, así que asegúrese de tenerlo en cuenta.

Editar: Además, hay algunas teorías que sugieren que la tabla debe ser el nombre después de lo que debe representar un solo registro en esa tabla. Entonces, el nombre de la tabla "Usuario" en lugar de "Usuarios" - personalmente el plural tiene más sentido para mí, simplemente manténlo constante.

6

Acepto las otras respuestas que sugieren que no se prefijan los atributos con los nombres de la tabla.

Sin embargo, apoyo la idea de utilizar nombres coincidentes de las claves externas y la clave principal que hacen referencia , y para ello había que normalmente tienen como prefijo para los atributos id en la tabla dependiente.

Algo que no es muy conocido es que SQL soporta una sintaxis unirse concisa utilizando la USING palabra clave:

CREATE TABLE users (user_id int, first_name varchar(50), last_name varchar(50)); 
CREATE TABLE sales (sale_id int, purchase_date datetime, user_id int); 

A continuación, la siguiente consulta:

SELECT s.*, u.last_name FROM sales s JOIN users u USING (user_id); 

es equivalente a la más prolija y sintaxis de unión popular:

SELECT s.*, u.last_name FROM sales s JOIN users u ON (u.user_id = s.user_id); 

Esto no siempre es posible. Un ejemplo típico es un campo user_id en una tabla users y los campos reported_by y y assigned_to en la tabla de referencia que hacen referencia a la tabla users. Usar un campo user_id en tales situaciones es ambiguo y no es posible para uno de los campos.

+0

Aunque no veo un problema con las columnas llamadas "reported_by" y "assigned_to", podría llamarlas "reported_by_user_id" y "assigned_to_user_id" si desea que sea más explícita a qué columna se refieren. – ObiWanKenobi

+0

@Obi: Sí, pero mi punto era que todavía no sería posible usar la sintaxis 'USING' para tales situaciones. –

0

En primer lugar, se recomienda usar el sustantivo singular, es decir usuario en lugar de usuarios, aunque esto es más de una preferencia personal.

En segundo lugar, hay algunos que prefieren a nombre siempre la clave principal columna Identificación, en lugar de user_id (es decir nombre de la tabla + Identificación del), y similares, por ejemplo con nombre en lugar de employee_name . Creo que esto es una mala idea por la siguiente razón:

-- when every table has an "id" (or "name") column, you get duplicate column names in the output: 
select e.id, e.name, d.id, d.name 
from employee e, department d 
where e.department_id = d.id 

-- to avoid this, you need to specify column aliases every time you query: 
select e.id employee_id, e.name employee_name, d.id department_id, d.name department_name 
from employee e, department d 
where e.department_id = d.id 

-- if the column name includes the table, there are no conflicts, and the join condition is very clear 
select e.employee_id, e.employee_name, d.department_id, d.department_name 
from employee e, department d 
where e.department_id = d.department_id 

No estoy diciendo que usted debe incluir el nombre de la tabla en cada columna de la tabla, pero lo hago por la columna de la clave (ID) y otros " columnas genéricas como nombre, descripción, comentarios, etc. que probablemente se incluirán en las consultas.

3

Como otras respuestas sugieren, es una preferencia personal: elija un esquema de nomenclatura y cúmplalo.Hace
unos 10 años he trabajado con Oracle Designer y utiliza esquema de nomenclatura que me gusta y lo utilizan desde entonces:

  • nombres de tabla son plurales - Los usuarios
  • clave primaria sustituta es nombrado como singular del nombre de la tabla plus '_id' - la clave primaria para la tabla USERS sería "USER_ID". De esta forma, tendrá nombres constantes cuando use el campo "USER_ID" como clave foránea en alguna otra tabla.
  • los nombres de las columnas no tienen el nombre de la tabla como prefijo.

Opcionalmente:

  • en bases de datos con gran número de tablas (interpretan "grande" como mejor le parezca), utilice 2-3 prefijos de tabla caracteres para que lógicamente puede dividir tablas en las zonas. Por ejemplo: todas las tablas que contienen datos de ventas (facturas, elementos de facturación, artículos) tienen el prefijo "INV_", todas las tablas que contienen datos de recursos humanos tienen el prefijo "HR_". De esta forma es más fácil encontrar y ordenar tablas que contienen datos relacionados (esto también se puede hacer colocando tablas en diferentes esquemas y estableciendo los derechos de acceso apropiados, pero se complica cuando se necesita crear más de una base de datos en un servidor)

Una vez más, elija el esquema de nombres que desee y sea coherente.

1

tabla de usuarios (en plural):

  • id
  • nombre
  • edad

simple y llanamente.

+0

De acuerdo. Excepto que 'id' o' user_id' es un tema para discutir. Porque si tiene consultas con muchas combinaciones y cada tabla tiene una 'ID' de columna, puede confundirse fácilmente. – abatishchev

+1

@abatishchev Como es singular vs plural. Muchos modeladores de datos dirán que debe ser singular, ya que la colección de campos representa una entidad. Es decir, ¿qué representa 1 fila en una tabla de registros de usuario? Representa 1 usuario. –

+0

@George Marian: Sí y la tabla representa a todos los usuarios – abatishchev

0

Me nombrado explícitamente mis columnas utilizando un prefijo que estaba relacionado con la tabla

i.e. table = USERS, column name = user_id, user_name, user_address_street, etc. 

antes de eso, cuando empecé a usar UNE que tenía que ser alias de la basura fuera de los nombres de columna para evitar conflictos en la consulta resultados, y luego cuando se accede desde plantillas en una vista MVC, si el nombre del campo de resultados de la consulta no coincidía con el esquema db publicado, los diseñadores de la plantilla se confundirían y tendrían que pedir la vista SQL para determinar el nombre del campo correcto para utilizar.

Parece desordenado usar un prefijo en el nombre de una columna, pero en la práctica funciona mejor para nosotros.

0

Creo que los nombres de tablas y columnas deben ser así. Nombre

Tabla:
usuario -> mayúsculas cada palabra y no en plural.

nombres de columna:
Id -> Si veo "Id" Yo entiendo que es la columna PK.
ID de grupo -> Comprendo que hay una tabla que nombra Grupo y esta columna es columna de relación para la tabla Grupo.
Nombre -> Si hay una columna que nombra "Nombre" en la tabla de Usuario, esto significa el nombre del usuario. Está muy claro.

Especialmente si está utilizando Entity Framework supongo que esto más.

Nota: Lo siento por mi mal inglés. Si alguien va a corregir mi inglés malo, seré feliz.