2010-11-01 20 views
7

¿Cuál es la mejor práctica para nombrar la columna que es la clave principal para una tabla mysql? He visto dos maneras:Nombrando la columna ID de MYSQL

  1. 'id'
  2. tableName_id (Donde nombreTabla se sustituye el nombre de la tabla).

Hubiera pensado que la identificación sería suficiente, porque aún se puede identificar de forma única la columna seleccionando la columna precedida por un punto y el nombre de la tabla (es decir, para la columna 'id' en la tabla 'cars', puede seleccionarlo como cars.id)

¿O estoy sobrepensando todo?

+1

Huh? 'tableName_id' se usa generalmente para un campo de relación externo, no para la tabla en sí, ¿o sí? –

+0

Esto se ha pedido muchas veces. Usualmente tales preguntas solo conducen a la llama. – Quassnoi

Respuesta

4

Normalmente los nombre como [tblname] _id. El motivo es simple Digamos que tengo dos tablas:

member 
    member_id 
    member_alias 
    ... 

post 
    post_id 
    member_id 
    post_text 
    ... 

Ahora puede unirse a ellos con MySQLs USO DE-sintaxis y ahorrar unos cuantos caracteres para cada uno de Ingreso:

SELECT post.*, member_id, member_alias FROM post 
    INNER JOIN member USING (member_id) 

Por supuesto, todo esto es sobre todo subjetiva.

+0

¿Qué sucede si 2 tablas tienen más de una relación? – symcbean

+0

Esto es de hecho muy subjetivo, particularmente teniendo en cuenta que puede hacer referencia a cualquier columna usando el nombre de la tabla: member.id y post.id. Si su sintaxis requería referencias explícitas a las tablas, obtendría member.member_id y post.post_id, lo que parece bastante superfluo. – Mark

1

Uso "ID" para la clave primaria de la tabla actual y tableName_id para un campo de clave externa, pero generalmente se trata de preferencias personales.

He trabajado en empresas que usan tblMyTable para el nombre de la tabla, y luego lo uso como un prefijo para cada campo de la tabla. Aunque no me gusta hacerlo de esa manera.

1

Siempre voy a tablename_id. De esa forma puedo usar USING.

Además, si está siendo malo y no especifica alias de tabla en uniones de mesas múltiples, su sql será un poco más claro.

2

MySQL no ofrece consideraciones específicas aparte de ser una base de datos SQL. Entonces la pregunta es qué convención de nomenclatura debería usarse para una base de datos SQL.

Tomando nota de que realmente se puede nombrar columnas lo que quiera (dentro de la gama de nombres permitidos), al evaluar la mejor elección de los nombres, considere:

  1. cómo convenientemente serán los nombres de interactuar con las características del lenguaje SQL - se une en particular?
  2. ¿Qué tan bien ayudarán los nombres a la comprensión?

En cuanto a 1, tenga en cuenta:

  • ¿Cómo se comporta la cláusula USING?
  • ¿Cómo se comporta la cláusula NATURAL JOIN?
  • ¿Cómo se comporta INNER JOIN cuando las columnas sin unión de diferentes tablas de origen tienen el mismo nombre y están SELECCIONADAS? (Aunque SQL permite que los nombres punteados difieran los conflictos, esto no se extiende a las subconsultas).

En cuanto a 2, considere que a medida que su esquema evolucione, lo que es primario puede volverse extraño. ¿Cuál es uno puede convertirse en muchos? ¿Ayuda cambiar el nombre de las columnas solo porque cambia la cardinalidad?

Finalmente, considere que una clave primaria de una sola columna no siempre es una clave artificial. En este ejemplo podría ser en realidad una clave externa (1-1 relación):

TAREA {task_id, task_created_date} - tarea con task_id fue creado el task_created_date

TASK_DUE {task_id, task_due_date} - tarea con task_id se debe en DUE_DATE