2011-11-28 13 views
7

tengo tabla Reproductores y mesa Personasidentidad SqlServer convención de nomenclatura

tanto de ellos contiene la columna de identidad (semilla)

lo que es la convención de nomenclatura recomendada para la columna de identidad?

es que "id" (para ambas tablas):

Widgets.Id 
Persons.Id 

o

Widgets.WidgetId 
Persons.PersonId 

¿Hay ventajas/desventajas en la antigua comparar a este último?

+2

Esto se ha preguntado antes en [Programmers SE] (http://programmers.stackexchange.com/questions/114728/why-is-naming-a-tables-primary-key-column-id-considered-bad- práctica), lamentablemente no puedo enviarlo allí. Es demasiado amplio para Stack Overflow. –

+0

@TimPost Hola, todavía no entiendo por qué lo cerraste ... acabo de hacer una pregunta porque tenía un dilema ... nunca tuve la intención de iniciar un debate ... –

+0

@RoyiNamir nunca fue un debate. Así es como funciona la red Stack Exchange. Estás bien. – jcolebrand

Respuesta

6

Este es un caso en que yo iría a la redundancia y he Thing.ThingID
lo contrario tendrá que crear un alias que todas partes cuando se une a

Nota: esto ya se hizo para la muerte y más allá en programmers.se:
Why is naming a table's Primary Key column “Id” considered bad practice?

+0

Siempre alias mis tablas cuando me uno a ellas, así que no veo esto como un inconveniente. – Icarus

+0

@Icarus: aliasing * columns * por lo que no tiene Id dos veces en un conjunto de resultados – gbn

+0

@gbn cuando dice "alias", ¿quiere decir en la instrucción select? –

3

La mejor práctica para esto es prefacio con el nombre de la tabla.

Esto lo hará mucho más claro cuando se una a qué campo se refiere en la lista SELECT.

También hace accidentales malas condiciones JOIN imposible, es decir,

JOIN TableA ON ID = TableA.ID

Como regla general, los nombres de campo duplicados a través de tablas debe evitarse a menos que representen los mismos datos.

+0

El argumento de la unión accidental es un muy buen punto. Siempre me gusta mis tablas cuando me uno pero definitivamente existe esa posibilidad. – Icarus

3

Usando el nombre de la tabla en la columna de la identidad es un poco redundante, pero me parece que sea útil y más descriptivo sobre todo cuando se realiza la clave externa se une. Por ejemplo, el que parece mejor:

SELECT P.PersonID, P.FullName, W.WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.WidgetsID = PW.WidgetsID JOIN 
    Person P ON P.PersonID = PW.PersonID 

O

SELECT P.ID as PersonID, P.FullName, W.ID as WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.ID = PW.WidgetsID JOIN 
    Person P ON P.ID = PW.PersonID 

La primera consulta es más explícito y conduce a uniones menos accidental. También elimina la necesidad de usar alias en su lista SELECT.

Cuestiones relacionadas