Me pregunto cuál es la mejor práctica para nombrar claves principales/únicas en una base de datos con muchas tablas. ¿Debería siempre llamar a la clave principal de cada tabla id
o está bien para no tener un campo id
en cada tabla y simplemente nombrar cada uno de ellos something1_id
, something2_id
, etc.?Dar nombre a las claves principales "id" frente a "something_id" en SQL
Respuesta
Hagas lo que hagas, elige una u otra y sigue ese estándar. Existen ventajas y desventajas para cada uno.
Prefiero SomethingID
pero otras personas prefieren solo ID
. En el sistema con el que trabajo hay más de mil tablas y tener el PK y el FK con los mismos nombres hace las cosas más fáciles.
hola KM, gracias. Así que mientras no haya una manera claramente superior, creo que me quedaré con 'somethingID'. –
@tim peterson, todo depende de cómo uses SQL y lo que funcione para ti. El punto clave de la consulta es recuperar la información rápidamente, y el nombre de la columna no afectará eso, el uso del índice sí lo hará. –
Lo peor es que los DB utilizan más de una convención de nomenclatura. Trabajé en un sistema que usaba 4 convenciones de nombres diferentes para PKs sustitutos. –
Es una preferencia personal. Al final del día no hace absolutamente ninguna diferencia. Personalmente prefiero usar solo Id
ya que me parece que consultar el campo (digamos Customer
tabla y Id
campo) Customer.CustomerId
es incómodo, donde Customer.Id
parece tener más sentido.
Sugiero que use una abreviatura para nombres largos y use (algo) Id (como user_id
) para las tablas normales. Por lo tanto, para la tabla customer_company_relation_metadata
, use ccm_id
. Pero está bien usar id
así como
No use abreviaturas en este contexto, solo ofusca su código y es menos legible para los nuevos (más) miembros de su equipo/código (e incluso usted mismo después de un descanso). Buen material de lectura: http://programmers.stackexchange.com/a/24083 – Styxxy
@Styxxy He encontrado que es la forma más útil entre tener nombres de columna largos (que son molestos en consultas más largas) y tener que usar 'usuario. id' todo el tiempo. Pero es, por supuesto, una cuestión de gusto. –
Los nombres muy largos se pueden abreviar, tal vez.Sin embargo, no lo usaría para el usuario (¿cuáles son esas 2 letras si paga mucho en legibilidad?). De hecho, es en parte su preferencia, pero la abreviatura abreviar es simplemente incorrecta (no me gustaría mantener el código así). PD: si tienes un editor decente, incluso los nombres largos no deberían importar. – Styxxy
id
es solo una convención conveniente: puede llamar al campo cualquier cosa siempre que lo declare como un campo clave.
La prefijación de la identificación con un contexto relevante puede ser útil cuando se trata de leer y escribir su código, y mejora especialmente la legibilidad cuando se unen datos de varias tablas y claves externas.
(* Solo un pensamiento porque su respuesta me llamó la atención y estaba pensando en programar en una interfaz. *) Es cierto, y estoy de acuerdo, pero el enfoque 'id' traduce mejor los registros de las tablas a los objetos, especialmente si tiene un super abstracto -clase con una propiedad 'id'. Si haces lo que sugieres (lo cual sucede que hago también), también debes administrar los diversos campos y propiedades de 'blahId' al mapear registros de tabla a objetos. Eso sería cierto para las claves externas que se traducen a propiedades de objeto de todos modos, pero al menos la superclase abstracta podría tener una propiedad simple llamada 'id'. –
Puede tener una propiedad 'id' de todos modos, pero su código sería más consistente horizontalmente en superclases abstractas si usamos el' id', especialmente cuando asignamos el valor del campo 'id' a la propiedad' id'. La claridad de la base de datos puede sufrir un poco, pero eso se puede mitigar dando nombres de claves externas 'blahId'. Esos nombres se filtrarán en los objetos, pero podrás saber qué es qué. –
Es es una cuestión de preferencia; sin embargo, existe la ventaja de usar ID (algo) en los nombres de las columnas que se vuelven menos ambiguos cuando se realizan uniones entre tablas.
sí, gracias, estoy de acuerdo, esta pregunta surgió cuando escribí más y más UNIONES ... –
Hay una ventaja para ambos al hacer uniones. Prefiero 'id' para el nombre de la columna, ya que voy a enumerar los nombres de las tablas antes de las columnas en * all * joins de todos modos, por lo que' tablename_id' o algo similar es solo una especificidad extra, innecesaria. – 0b10011
@bfrohs: Sí, estoy de acuerdo en incluir el nombre de la tabla en el nombre de la columna de ID implica un poco más de mecanografía. –
Hay racimos de artículos hacia fuera allí, ir a comprobar éste hacia fuera ...
¡Y lo más importante, como dijo KM anteriormente, elija uno y cúmplalo! – larryr
- 1. Datos principales frente a SQLite 3
- 2. Datos principales frente a Sqlite y rendimiento
- 3. consulta SQLite para encontrar las claves principales
- 4. Nombre de usuario o ID para las claves en Redis
- 5. DDD: claves principales (Id) y ORM (por ejemplo, NHibernate)
- 6. Dar nombre a la mesa después seleccione
- 7. GAE Almacenamiento de claves frente a StringID
- 8. Cadenas como claves principales en la base de datos SQL
- 9. ¿Cómo dar nombre a un hilo invocable?
- 10. Pasar de ints a GUID como claves principales
- 11. Datos principales frente a SQLite para desarrolladores con experiencia en SQL
- 12. T-SQL: SUSER_SNAME frente a SUSER_NAME?
- 13. ¿Cómo obtengo las claves principales de una tabla de Postgres a través de plpgsql?
- 14. ¿Es válido dar un elemento de estilo a una ID?
- 15. cómo reutilizar claves principales eliminadas en mysql?
- 16. Argumentos con nombre: C# frente a Python
- 17. NUnit frente a MbUnit frente a MSTest frente a xUnit.net
- 18. POSTGRESQL Clave externa que hace referencia a las claves principales de dos tablas diferentes
- 19. ¿Cuándo se requiere dar un nombre de tabla a un alias en SQL?
- 20. Pregunta fácil de mysql con respecto a las claves principales y una inserción
- 21. ¿Una o dos claves principales en la tabla de muchos a muchos?
- 22. ¿Las vistas de SQL Server pueden tener claves principales y externas?
- 23. La regla de oro para dar nombre a clases contenedoras
- 24. MySQL - ¿Se necesitan restricciones "NOT NULL" para las claves principales?
- 25. ¿Clave externa que se refiere a claves principales en varias tablas?
- 26. SQL Server Compact 4.0 frente a SQLite
- 27. iterador frente a referencia frente a puntero
- 28. T-SQL Emitir frente a Convertir
- 29. SQL Server: cliente nativo frente a ODBC?
- 30. Dar nombre a los pasos de compilación - configuración de Jenkins
'something_id' es redundante cuando se puede usar' table.id' todas partes ... a menos que seas poniendo una clave foránea –
Siempre me he preguntado qué opinan las personas sobre los pros y contras de los enfoques – erikkallen
el problema de la clave foránea es la razón por la cual "ID" puede ser confuso, porque luego tiene que crear una relación con "somethingID" en una tabla diferente; estás creando relaciones en campos con diferentes nombres. – niico