Cada vez que diseño una base de datos, siempre me pregunto si hay una mejor manera de nombrar un elemento en mi base de datos. Muy a menudo me hago las siguientes preguntas:
- ¿Deben los nombres de las tablas ser plurales?
- ¿Deben los nombres de columna ser singulares?
- ¿Debo prefijar tablas o columnas?
- ¿Debo usar algún caso para nombrar elementos?
¿Existen pautas recomendadas para nombrar elementos en una base de datos?
Respuestas:
Recomiendo consultar las bases de datos de ejemplo de Microsoft SQL Server: https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks
El ejemplo de AdventureWorks utiliza una convención de nomenclatura muy clara y coherente que utiliza nombres de esquema para la organización de objetos de base de datos.
fuente
Respuesta tardía aquí, pero en resumen:
Elaboración:
(1) Lo que debes hacer. Hay muy pocas cosas que debe hacer de cierta manera, siempre, pero hay algunas.
(2) Lo que probablemente deberías hacer.
(3) Lo que debes considerar.
fuente
CustomerID
es la clave principal de laCustomer
tabla o una clave externa en alguna otra tabla. Es un problema menor. ¿Por qué querrías usar nombres pobres comoc
?CustomerID = Customer.ID
es muy claro en que ve que está uniendo una clave externa con una clave primaria; no es redundante ya que las dos partes son dos cosas diferentes. El nombramiento de un solo carácter es una mala práctica de la OMI.Ok, ya que estamos evaluando nuestra opinión:
Creo que los nombres de las tablas deberían ser plurales. Las tablas son una colección (una tabla) de entidades. Cada fila representa una sola entidad, y la tabla representa la colección. Por lo tanto, llamaría a una tabla de Entidades Personales Personas (o Personas, lo que sea que te apetezca).
Para aquellos a quienes les gusta ver "nombres de entidades" singulares en las consultas, para eso usaría los alias de tabla:
Un poco como LINQ "de persona en personas seleccione persona.Nombre".
En cuanto a 2, 3 y 4, estoy de acuerdo con @Lars.
fuente
Trabajo en un equipo de soporte de base de datos con tres DBA y nuestras opciones consideradas son:
Usamos nombres singulares para las tablas. Las tablas tienden a tener como prefijo el nombre del sistema (o sus siglas). Esto es útil si el sistema es complejo, ya que puede cambiar el prefijo para agrupar las tablas lógicamente (es decir, reg_customer, reg_booking y regadmin_limits).
Para los campos, esperamos que los nombres de campo incluyan el prefijo / acryonm de la tabla (es decir, cust_address1) y también preferimos el uso de un conjunto estándar de sufijos (_id para PK, _cd para "código", _nm para "nombre" ", _nb para" número ", _dt para" Fecha ").
El nombre del campo de clave Foriegn debe ser el mismo que el campo de clave primaria.
es decir
Al desarrollar un nuevo proyecto, le recomiendo que escriba todos los nombres de entidad preferidos, prefijos y siglas y que entregue este documento a sus desarrolladores. Luego, cuando deciden crear una nueva tabla, pueden consultar el documento en lugar de "adivinar" cómo deben llamarse la tabla y los campos.
fuente
Okay. Esa es mi $ 0.02
fuente
También estoy a favor de una convención de nomenclatura de estilo ISO / IEC 11179, señalando que son pautas en lugar de ser prescriptivas.
Ver Nombre del elemento de datos en Wikipedia :
"Las tablas son colecciones de entidades y siguen las pautas de denominación de colecciones. Idealmente, se usa un nombre colectivo: por ejemplo, personal. El plural también es correcto: empleados. Los nombres incorrectos incluyen: empleado, tblEmployee y EmployeeTable".
Como siempre, hay excepciones a las reglas, por ejemplo, una tabla que siempre tiene exactamente una fila puede ser mejor con un nombre singular, por ejemplo, una tabla de configuración. Y la consistencia es de suma importancia: verifique si su tienda tiene una convención y, de ser así, sígala; si no le gusta, haga un caso de negocios para cambiarlo en lugar de ser el llanero solitario.
fuente
Escucho el argumento todo el tiempo de que si una tabla está pluralizada o no es una cuestión de gusto personal y no hay una mejor práctica. No creo que eso sea cierto, especialmente como programador en lugar de un DBA. Hasta donde sé, no hay razones legítimas para pluralizar un nombre de tabla que no sea "Simplemente tiene sentido para mí porque es una colección de objetos", mientras que hay ganancias legítimas en el código al tener nombres de tabla singulares. Por ejemplo:
Evita errores y errores causados por ambigüedades plurales. Los programadores no son exactamente conocidos por su experiencia en ortografía, y la pluralización de algunas palabras es confusa. Por ejemplo, ¿la palabra plural termina en 'es' o simplemente 's'? ¿Son personas o personas? Cuando trabajas en un proyecto con equipos grandes, esto puede convertirse en un problema. Por ejemplo, una instancia en la que un miembro del equipo usa el método incorrecto para pluralizar una tabla que crea. En el momento en que interactúo con esta tabla, se usa en todo el código al que no tengo acceso o que tardaría demasiado en solucionarlo. El resultado es que debo recordar escribir mal la tabla cada vez que la uso. Algo muy similar a esto me sucedió. Cuanto más fácil sea hacer que todos los miembros del equipo usen de manera consistente y sencilla la información exacta, nombres de tabla correctos sin errores o tener que buscar nombres de tabla todo el tiempo, mejor. La versión singular es mucho más fácil de manejar en un entorno de equipo.
Si usa la versión singular de un nombre de tabla Y el prefijo de la clave primaria con el nombre de la tabla, ahora tiene la ventaja de determinar fácilmente el nombre de una tabla a partir de una clave primaria o viceversa a través del código solo. Se le puede dar una variable con un nombre de tabla, concatenar "Id" hasta el final, y ahora tiene la clave principal de la tabla a través del código, sin tener que hacer una consulta adicional. O puede cortar "Id" desde el final de una clave primaria para determinar el nombre de una tabla a través del código. Si usa "id" sin un nombre de tabla para la clave primaria, entonces no puede determinar mediante el código el nombre de la tabla a partir de la clave primaria. Además, la mayoría de las personas que pluralizan los nombres de las tablas y prefijan las columnas PK con el nombre de la tabla usan la versión singular del nombre de la tabla en la PK (por ejemplo, status y status_id),
Si hace que los nombres de las tablas sean singulares, puede hacer que coincidan con los nombres de clase que representan. Una vez más, esto puede simplificar el código y permitirle hacer cosas realmente ordenadas, como crear una instancia de una clase teniendo solo el nombre de la tabla. También hace que su código sea más consistente, lo que conduce a ...
Si hace que el nombre de la tabla sea singular, hace que su esquema de nombres sea consistente, organizado y fácil de mantener en cada ubicación. Usted sabe que en cada instancia de su código, ya sea en el nombre de una columna, como el nombre de una clase o como el nombre de la tabla, es el mismo nombre exacto. Esto le permite realizar búsquedas globales para ver en todas partes que se utilizan datos. Cuando pluraliza el nombre de una tabla, habrá casos en los que utilizará la versión singular de ese nombre de tabla (la clase en la que se convierte, en la clave primaria). Simplemente tiene sentido no tener algunas instancias en las que se hace referencia a sus datos como plural y algunas instancias singulares.
En resumen, si pluraliza los nombres de su tabla, está perdiendo todo tipo de ventajas para hacer que su código sea más inteligente y fácil de manejar. Incluso puede haber casos en los que deba tener tablas / matrices de búsqueda para convertir los nombres de las tablas en objetos o nombres de códigos locales que podría haber evitado. Los nombres de tablas singulares, aunque quizás se sientan un poco raros al principio, ofrecen ventajas significativas sobre los nombres pluralizados y creo que son las mejores prácticas.
fuente
nuestra preferencia:
¿Deben los nombres de las tablas ser plurales?
Nunca. Los argumentos para que sea una colección tienen sentido, pero nunca se sabe qué va a contener la tabla (0,1 o muchos elementos). Las reglas plurales hacen que la denominación sea innecesariamente complicada. 1 casa, 2 casas, ratón contra ratones, persona contra personas, y ni siquiera hemos visto otros idiomas.
Update person set property = 'value'
actúa sobre cada persona en la mesa.Select * from person where person.name = 'Greg'
devuelve una colección / conjunto de filas de filas de personas.¿Deben los nombres de columna ser singulares?
Por lo general, sí, excepto cuando está rompiendo las reglas de normalización.
¿Debo prefijar tablas o columnas?
Principalmente una preferencia de plataforma. Preferimos prefijar columnas con el nombre de la tabla. No prefijamos tablas, pero sí prefijamos vistas (v_) y procedimientos almacenados (sp_ o f_ (función)). Eso ayuda a las personas que desean intentar actualizar v_person.age, que en realidad es un campo calculado en una vista (que de todos modos no se puede ACTUALIZAR).
También es una excelente manera de evitar la colisión de palabras clave (delivery.from se rompe, pero delivery_from no lo hace).
Sí hace que el código sea más detallado, pero a menudo ayuda a la legibilidad.
bob = new person()
bob.person_name = 'Bob'
bob.person_dob = '1958-12-21'
... es muy legible y explícito. Sin embargo, esto puede salirse de control:
customer.customer_customer_type_id
indica una relación entre el cliente y la tabla customer_type, indica la clave principal en la tabla customer_type (customer_type_id) y si alguna vez ve 'customer_customer_type_id' mientras depura una consulta, sabe instantáneamente de dónde proviene (tabla de clientes).
o donde tiene una relación MM entre customer_type y customer_category (solo ciertos tipos están disponibles para ciertas categorías)
customer_category_customer_type_id
... es un poco (!) en el lado largo.
¿Debo usar algún caso para nombrar elementos? Sí, minúscula :), con guiones bajos. Estos son muy legibles y multiplataforma. Junto con 3 arriba también tiene sentido.
Sin embargo, la mayoría de estos son preferencias. - Siempre y cuando sea coherente, debe ser predecible para cualquiera que tenga que leerlo.
fuente
SELECT * FROM people AS person WHERE person.name = 'Greg'
me suena muy natural.<table name><id>
, por ejemploPersonID
, oPerson_ID
etc. Por lo tanto, tiene más sentido que no nombra a sus tablas en plural, ya que cada registro no es una persona separada personas.Eche un vistazo a ISO 11179-5: principios de identificación y nombres Puede obtenerlo aquí: http://metadata-standards.org/11179/#11179-5
Hace un blog lo escribí aquí: Convenciones de nomenclatura ISO-11179
fuente
Sé que esto es tarde para el juego, y la pregunta ya ha sido respondida muy bien, pero quiero ofrecer mi opinión sobre el # 3 con respecto al prefijo de los nombres de columna.
Todas las columnas deben nombrarse con un prefijo que sea único para la tabla en la que se definen.
Por ejemplo, en las tablas "cliente" y "dirección", vamos con los prefijos de "cust" y "addr", respectivamente. "cliente" tendría "cust_id", "cust_name", etc. en él. "dirección" tendría "addr_id", "addr_cust_id" (FK de regreso al cliente), "addr_street", etc.
Cuando se me presentó por primera vez este estándar, estaba totalmente en contra de él; Odiaba la idea. No podía soportar la idea de todo ese tipeo y redundancia adicionales. Ahora tengo suficiente experiencia con eso que nunca volvería.
El resultado de hacer esto es que todas las columnas en el esquema de su base de datos son únicas. Hay un beneficio importante para esto, que supera todos los argumentos en su contra (en mi opinión, por supuesto):
Puede buscar en toda su base de código y encontrar de manera confiable cada línea de código que toque una columna en particular.
El beneficio del # 1 es increíblemente enorme. Puedo desaprobar una columna y saber exactamente qué archivos deben actualizarse antes de que la columna pueda eliminarse del esquema de forma segura. Puedo cambiar el significado de una columna y saber exactamente qué código necesita ser refactorizado. O simplemente puedo decir si los datos de una columna incluso se están utilizando en una parte particular del sistema. No puedo contar la cantidad de veces que esto ha convertido un proyecto potencialmente enorme en uno simple, ni la cantidad de horas que hemos ahorrado en el trabajo de desarrollo.
Otro beneficio relativamente menor es que solo tiene que usar alias de tabla cuando realiza una autounión:
fuente
reliably find every line of code that touches a particular column
... ¿No es ese el punto?Mis opiniones sobre estos son:
1) No, los nombres de las tablas deben ser singulares.
Si bien parece tener sentido para la selección simple (
select * from Orders
), tiene menos sentido para el equivalente OO (Orders x = new Orders
).Una tabla en una base de datos es realmente el conjunto de esa entidad, tiene más sentido una vez que está utilizando set-logic:
Esa última línea, la lógica real de la unión, parece confusa con nombres de tablas plurales.
No estoy seguro de usar siempre un alias (como Matt sugiere) aclara eso.
2) Deben ser singulares ya que solo tienen 1 propiedad
3) Nunca, si el nombre de la columna es ambiguo (como arriba donde ambos tienen una columna llamada [Clave]), el nombre de la tabla (o su alias) puede distinguirlos lo suficientemente bien. Desea que las consultas sean rápidas de escribir y simples: los prefijos agregan complejidad innecesaria.
4) Lo que quieras, te sugiero CapitalCase
No creo que haya un conjunto de pautas absolutas sobre ninguno de estos.
Mientras lo que elija sea consistente en la aplicación o en la base de datos, no creo que realmente importe.
fuente
CapitalCase
?pascal case
Product.ProductName
,Product.ProductID
,Product.ProductPrice
etc tipificaciónProduct.P
le da todos los campos prefijados.En mi opinión:
Sin embargo, como se ha mencionado, cualquier convención es mejor que ninguna convención. No importa cómo elija hacerlo, documente para que las modificaciones futuras sigan las mismas convenciones.
fuente
Creo que usted y su equipo darían la mejor respuesta a cada una de esas preguntas. Es mucho más importante tener una convención de nomenclatura que la convención de nomenclatura.
Como no hay una respuesta correcta a eso, debe tomarse un tiempo (pero no demasiado) y elegir sus propias convenciones y, aquí está la parte importante, atenerse a ellas.
Por supuesto, es bueno buscar información sobre los estándares sobre eso, que es lo que está preguntando, pero no se preocupe ni se preocupe por la cantidad de respuestas diferentes que puede obtener: elija la que le parezca mejor.
Por si acaso, aquí están mis respuestas:
fuente
fuente
SELECT id,name FROM contacts WHERE email_address LIKE '%gmail%'
tablas en plural, columnas en singular. De nuevo siempre es una cuestión de opinión personal.Las convenciones de nomenclatura permiten al equipo de desarrollo diseñar capacidad de descubrimiento y mantenibilidad en el corazón del proyecto.
Una buena convención de nombres lleva tiempo para evolucionar, pero una vez que está en su lugar, permite que el equipo avance con un lenguaje común. Una buena convención de nombres crece orgánicamente con el proyecto. Una buena convención de nomenclatura hace frente fácilmente a los cambios durante la fase más larga e importante del ciclo de vida del software: la gestión del servicio en la producción.
Aquí están mis respuestas:
Nombrar es difícil, pero en cada organización hay alguien que puede nombrar cosas y en cada equipo de software debe haber alguien que se responsabilice de los estándares de nomenclatura y se asegure de que los problemas de nomenclatura como sec_id , sec_value y security_id se resuelvan temprano antes de integrarse en el proyecto. .
¿Cuáles son los principios básicos de una buena convención de nombres y estándares?
fuente
Aquí hay un enlace que ofrece algunas opciones. Estaba buscando una especificación simple que pudiera seguir en lugar de tener que confiar en una parcialmente definida.
http://justinsomnia.org/writings/naming_conventions.html
fuente
fuente
Lastname
debería serLastName
Los nombres de las tablas siempre deben ser singulares, ya que representan un conjunto de objetos. Como usted dice rebaño para designar un grupo de ovejas, o rebaño designe un grupo de pájaros. No hay necesidad de plural. Cuando un nombre de tabla es una composición de dos nombres y la convención de nomenclatura está en plural, se hace difícil saber si el nombre plural debe ser la primera palabra o la segunda palabra o ambas. Es la lógica: Objeto.instancia, no objetos.instancia. O TableName.column, no TableNames.column (s). Microsoft SQL no distingue entre mayúsculas y minúsculas, es más fácil leer los nombres de las tablas, si se utilizan letras mayúsculas, para separar los nombres de tablas o columnas cuando están compuestos de dos o más nombres.
fuente
User
es un grupo de usuarios.Nombre de la tabla: debe ser singular, ya que es una entidad singular que representa un objeto del mundo real y no objetos, que es singular.
Nombre de columna: debe ser singular solo entonces transmite que mantendrá un valor atómico y confirmará la teoría de normalización. Sin embargo, si hay un número n del mismo tipo de propiedades, entonces deben tener el sufijo 1, 2, ..., n, etc.
Prefijo de tablas / columnas: es un tema enorme, lo discutiremos más adelante.
Carcasa: debe ser un caso Camel
Mi amigo, Patrick Karcher , le pido que no escriba nada que pueda ser ofensivo para alguien, como escribió: "• Además, las claves foráneas deben ser nombradas consistentemente en diferentes tablas. Debería ser legal golpear a alguien que no hacer esto.". Nunca he cometido este error mi amigo Patrick, pero en general estoy escribiendo. ¿Qué pasa si juntos planean golpearte por esto? :)
fuente
Muy tarde a la fiesta, pero todavía quería agregar mis dos centavos sobre los prefijos de columna
Parece que hay dos argumentos principales para usar el estándar de nomenclatura table_column (o tableColumn) para las columnas, ambos basados en el hecho de que el nombre de la columna será único en toda su base de datos:
1) No tiene que especificar nombres de tabla y / o alias de columna en sus consultas todo el tiempo
2) Puede buscar fácilmente en todo el código el nombre de la columna
Creo que ambos argumentos son defectuosos. La solución para ambos problemas sin usar prefijos es fácil. Aquí está mi propuesta:
Siempre use el nombre de la tabla en su SQL. Por ejemplo, use siempre table.column en lugar de column.
Obviamente, resuelve 2) ya que ahora solo puede buscar table.column en lugar de table_column.
Pero puedo oírte gritar, ¿cómo resuelve 1)? Se trataba exactamente de evitar esto. Sí, lo era, pero la solución era terriblemente defectuosa. ¿Por qué? Bueno, la solución del prefijo se reduce a:
Para evitar tener que especificar table.column cuando hay ambigüedad, ¡nombra todas sus columnas table_column!
Pero esto significa que a partir de ahora SIEMPRE tendrá que escribir el nombre de la columna cada vez que especifique una columna. Pero si tiene que hacer eso de todos modos, ¿cuál es el beneficio de escribir siempre table.column explícitamente? Exactamente, no hay beneficio, es exactamente el mismo número de caracteres para escribir.
editar: sí, soy consciente de que nombrar las columnas con el prefijo exige el uso correcto, mientras que mi enfoque se basa en los programadores
fuente
Convenciones de nomenclatura de bases de datos esenciales (y estilo) (haga clic aquí para obtener una descripción más detallada)
los nombres de tablas eligen nombres cortos e inequívocos, el uso de no más de una o dos palabras para distinguir tablas facilita fácilmente la denominación de nombres de campo únicos, así como las tablas de búsqueda y vinculación dan a las tablas nombres singulares, nunca plurales (actualización: todavía estoy de acuerdo con las razones dadas para esta convención, pero a la mayoría de la gente realmente le gustan los nombres de tablas en plural, así que he suavizado mi postura) ... siga el enlace de arriba, por favor
fuente
e.g. PATIENTS would have a primary key called pa_patient_id_pk
!!Nombres de tablas en singular. Digamos que estabas modelando una relación entre alguien y su dirección. Por ejemplo, si está leyendo un modelo de datos, preferiría que "cada persona pueda vivir con 0,1 o más direcciones". o 'cada persona puede vivir en 0,1 o en muchas direcciones'. Creo que es más fácil pluralizar la dirección, en lugar de tener que reformular a las personas como personas. Además, los sustantivos colectivos a menudo son distintos de la versión singular.
fuente
Estas son las convenciones que me enseñaron, pero debes adaptarte a lo que sea que uses.
fuente