He visto varias reglas para nombrar procedimientos almacenados.
Algunas personas prefieren el nombre de sproc con usp_, otras con una abreviatura para el nombre de la aplicación y otras con el nombre del propietario. No debe usar sp_ en SQL Server a menos que realmente lo diga en serio.
Algunos comienzan el nombre del proceso con un verbo (Obtener, Agregar, Guardar, Eliminar). Otros enfatizan los nombres de la entidad.
En una base de datos con cientos de sprocs, puede ser muy difícil desplazarse y encontrar un sproc adecuado cuando cree que ya existe. Las convenciones de nomenclatura pueden facilitar la localización de un protocolo.
¿Utiliza una convención de nomenclatura? Descríbalo y explique por qué lo prefiere sobre otras opciones.
Resumen de respuestas:
- Todo el mundo parece abogar por la coherencia de los nombres, ya que podría ser más importante que todos usen la misma convención de nombres que la que se usa en particular.
- Prefijos: aunque mucha gente usa usp_ o algo similar (pero raramente sp_), muchos otros usan la base de datos o el nombre de la aplicación. Un DBA inteligente utiliza gen, rpt y tsk para distinguir los procesadores CRUD generales de los que se utilizan para informes o tareas.
- Verb + Noun parece ser un poco más popular que Noun + Verb. Algunas personas usan las palabras clave SQL (Seleccionar, Insertar, Actualizar, Eliminar) para los verbos, mientras que otras usan verbos que no son SQL (o abreviaturas para ellos) como Obtener y Agregar. Algunos distinguen entre sustantivos singulares y plurales para indicar si se están recuperando uno o varios registros.
- Se sugiere una frase adicional al final, cuando corresponda. GetCustomerById, GetCustomerBySaleDate.
- Algunas personas usan guiones bajos entre los segmentos de nombre y otros evitan los guiones bajos. app_ Get_Customer vs.appGetCustomer: creo que es una cuestión de legibilidad.
- Se pueden segregar grandes colecciones de sprocs en paquetes de Oracle o soluciones y proyectos de Management Studio (SQL Server), o esquemas de SQL Server.
- Deben evitarse las abreviaturas inescrutables.
Por qué elijo la respuesta que hice: hay tantas buenas respuestas. ¡Gracias a todos! Como puede ver, sería muy difícil elegir solo uno. El que elegí resonó conmigo. He seguido el mismo camino que él describe: tratar de usar Verbo + Sustantivo y luego no poder encontrar todas las aplicaciones que se aplican al Cliente.
Es muy importante poder localizar un sproc existente o determinar si incluso existe uno. Pueden surgir problemas graves si alguien crea inadvertidamente un sproc duplicado con otro nombre.
Como generalmente trabajo en aplicaciones muy grandes con cientos de sprocs, prefiero el método de denominación más fácil de encontrar. Para una aplicación más pequeña, podría recomendar Verbo + Sustantivo, ya que sigue la convención de codificación general para nombres de métodos.
También aboga por el prefijo con el nombre de la aplicación en lugar de usp_ no muy útil. Como señalaron varias personas, a veces la base de datos contiene sprocs para múltiples aplicaciones. Por lo tanto, el prefijo con el nombre de la aplicación ayuda a segregar los sprocs Y ayuda a los DBA y otros a determinar para qué aplicación se usa el sproc.
Respuestas:
Para mi último proyecto usé usp_ [Acción] [Objeto] [Proceso], por ejemplo, usp_AddProduct o usp_GetProductList, usp_GetProductDetail. Sin embargo, ahora la base de datos está en 700 procedimientos más, se hace mucho más difícil encontrar todos los procedimientos en un objeto específico. Por ejemplo, ahora tengo que buscar 50 procedimientos de Agregar impares para el Producto agregado y 50 impares para Obtener, etc.
Debido a esto en mi nueva aplicación, estoy planeando agrupar nombres de procedimientos por objeto, también estoy descartando la usp porque siento que es algo redundante, aparte de decirme que es un procedimiento, algo que puedo deducir del nombre de El procedimiento en sí.
El nuevo formato es el siguiente
Ayuda a agrupar las cosas para encontrarlas más tarde, especialmente si hay una gran cantidad de sprocs.
Con respecto a dónde se usa más de un objeto, encuentro que la mayoría de las instancias tienen un objeto primario y secundario, por lo que el objeto primario se usa en la instancia normal y se hace referencia al secundario en la sección de proceso, por ejemplo App_Product_AddAttribute.
fuente
Aquí hay algunas aclaraciones sobre el problema del prefijo sp_ en SQL Server.
Los procedimientos almacenados nombrados con el prefijo sp_ son sprocs del sistema almacenados en la base de datos maestra.
Si le da a su sproc este prefijo, SQL Server los busca primero en la base de datos maestra, luego en la base de datos contextual, desperdiciando recursos innecesariamente. Y, si la sproc creada por el usuario tiene el mismo nombre que una sproc del sistema, la sproc creada por el usuario no se ejecutará.
El prefijo sp_ indica que sproc es accesible desde todas las bases de datos, pero que debe ejecutarse en el contexto de la base de datos actual.
Aquí hay una buena explicación, que incluye una demostración del éxito en el rendimiento.
Aquí hay otra fuente útil proporcionada por Ant en un comentario.
fuente
sp_
primero el proceso prefijado en la base de datos maestra, luego en la base de datos actual si no se encuentraLos sistemas húngaros (como el prefijo "usp" anterior) me estremecen.
Compartimos muchos procedimientos almacenados en diferentes bases de datos de estructura similar, por lo que para los específicos de la base de datos, usamos un prefijo del nombre de la base de datos en sí; Los procedimientos compartidos no tienen prefijo. Supongo que usar diferentes esquemas podría ser una alternativa para deshacerse de prefijos tan feos por completo.
El nombre real después del prefijo apenas difiere del nombre de la función: normalmente un verbo como "Agregar", "Establecer", "Generar", "Calcular", "Eliminar", etc., seguido de varios sustantivos más específicos como "Usuario" "," DailyRevenues ", y así sucesivamente.
En respuesta al comentario de Ant:
fuente
He usado casi todos los diferentes sistemas a lo largo de los años. Finalmente desarrollé este, que sigo usando hoy:
Prefijo
Especificador de acción:
(En los casos en que el procedimiento hace muchas cosas, el objetivo general se usa para elegir el especificador de acción. Por ejemplo, un INSERT del cliente puede requerir una gran cantidad de trabajo de preparación, pero el objetivo general es INSERT, por lo que se elige "Ins".
Objeto:
Para gen (CRUD), este es el nombre de la tabla o vista afectado. Para rpt (Informe), esta es la breve descripción del informe. Para tsk (Tarea) esta es la breve descripción de la tarea.
Clarificadores opcionales:
Estos son bits de información opcionales utilizados para mejorar la comprensión del procedimiento. Los ejemplos incluyen "Por", "Para", etc.
Formato:
[Prefijo] [Especificador de acción] [Entidad] [Clarificadores opcionales]
Ejemplos de nombres de procedimientos:
fuente
TableName_WhatItDoes
Comment_GetByID
Lista de clientes
UserPreference_DeleteByUserID
Sin prefijos ni tonterías tontas húngaras. Solo el nombre de la tabla con la que está más estrechamente asociado y una descripción rápida de lo que hace.
Una advertencia a lo anterior: personalmente siempre prefijo todo mi CRUD autogenerado con zCRUD_ para que se clasifique al final de la lista donde no tengo que mirarlo.
fuente
Iniciar un nombre de procedimiento almacenado con
sp_
es incorrecto en SQL Server porque todos los sprocs del sistema comienzan con sp_. La nomenclatura constante (incluso en la medida de hobgoblin-dom) es útil porque facilita las tareas automatizadas basadas en el diccionario de datos. Los prefijos son un poco menos útiles en SQL Server 2005, ya que admite esquemas, que se pueden usar para varios tipos de espacios de nombres de la misma manera que los prefijos en los nombres. Por ejemplo, en un esquema en estrella, uno podría tener esquemas tenues y de hecho y referirse a las tablas de esta convención.Para los procedimientos almacenados, los prefijos son útiles para identificar las aplicaciones de las aplicaciones de las aplicaciones del sistema.
up_
vs.sp_
hace que sea relativamente fácil identificar procedimientos almacenados que no son del sistema desde el diccionario de datos.fuente
Siempre encapsulo los procedimientos almacenados en paquetes (estoy usando Oracle, en el trabajo). Eso reducirá la cantidad de objetos separados y ayudará a reutilizar el código.
La convención de nomenclatura es cuestión de gustos y debe estar de acuerdo con todos los demás desarrolladores al inicio del proyecto.
fuente
para bases de datos pequeñas, uso uspTableNameOperationName, por ejemplo uspCustomerCreate, uspCustomerDelete, etc. Esto facilita la agrupación por entidad 'principal'.
para bases de datos más grandes, agregue un nombre de esquema o subsistema, por ejemplo, Recepción, Compras, etc. para mantenerlos agrupados (ya que al servidor SQL le gusta mostrarlos alfabéticamente)
Intento evitar abreviaturas en los nombres, para mayor claridad (y las personas nuevas en el proyecto no tienen que preguntarse qué significa 'UNAICFE' porque el sproc se llama uspUsingNoAbbreviationsIncreasesClarityForEveryone)
fuente
Actualmente uso un formato que es el siguiente
Notación:
[PREFIJO] [APLICACIÓN] [MÓDULO] _ [NOMBRE]
Ejemplo:
P_CMS_USER_UserInfoGet
Me gusta esta notación por algunas razones:
fuente
Yo siempre uso:
usp [Nombre de la tabla] [Acción] [Detalle adicional]
Dada una tabla llamada "tblUser", eso me da:
Los procedimientos están ordenados alfabéticamente por nombre de tabla y por funcionalidad, por lo que es fácil ver qué puedo hacer con cualquier tabla. El uso del prefijo "usp" me permite saber a qué estoy llamando si (por ejemplo) escribo un procedimiento de 1000 líneas que interactúa con otros procedimientos, múltiples tablas, funciones, vistas y servidores.
Hasta que el editor en el IDE de SQL Server sea tan bueno como Visual Studio, mantendré los prefijos.
fuente
aplicación prefijo_ operación prefijo_ descripción de los objetos de la base de datos involucrados (menos los espacios entre guiones bajos - tuvieron que poner espacios para que aparecieran) .
prefijos de operación que usamos -
p.ej
wmt_ ins _ detalles _ del cliente
"herramienta de gestión de la fuerza laboral, inserte detalles en la tabla del cliente"
ventajas
Todos los procedimientos almacenados relacionados con la misma aplicación se agrupan por nombre. Dentro del grupo, los procedimientos almacenados que realizan el mismo tipo de operación (por ejemplo, inserciones, actualizaciones, etc.) se agrupan.
Este sistema funciona bien para nosotros, ya que tiene aprox. 1000 procedimientos almacenados en una base de datos fuera de mi cabeza.
No he encontrado ninguna desventaja en este enfoque hasta ahora.
fuente
GetXXX - Obtiene XXX basado en @ID
GetAllXXX - Obtiene todos los XXX
PutXXX: inserta XXX si se pasa @ID es -1; más actualizaciones
DelXXX: elimina XXX según @ID
fuente
Creo que la convención de nombres usp_ no sirve de nada.
En el pasado, he usado los prefijos Obtener / Actualizar / Insertar / Eliminar para operaciones CRUD, pero ahora desde que uso Linq to SQL o EF para hacer la mayor parte de mi trabajo CRUD, estos desaparecieron por completo. Como tengo muy pocos procesos almacenados en mis nuevas aplicaciones, las convenciones de nombres ya no importan como solían ;-)
fuente
Para la aplicación actual en la que estoy trabajando, tenemos un prefijo que identifica el nombre de la aplicación (cuatro letras minúsculas). La razón de esto es que nuestra aplicación debe poder coexistir con una aplicación heredada en la misma base de datos, por lo que el prefijo es obligatorio.
Si no tuviéramos la restricción heredada, estoy bastante seguro de que no estaríamos usando un prefijo.
Después del prefijo, generalmente comenzamos el nombre del SP con un verbo que describe lo que hace el procedimiento, y luego el nombre de la entidad en la que operamos. Se permite la pluralización del nombre de la entidad: intentamos enfatizar la legibilidad, de modo que sea obvio lo que hace el procedimiento solo con el nombre.
Los nombres de procedimientos almacenados típicos en nuestro equipo serían:
fuente
No creo que realmente importe exactamente cuál es su prefijo siempre que sea lógico y consistente. Personalmente uso
spu_ [descripción de la acción] [descripción del proceso]
donde la descripción de la acción es una de una pequeña gama de acciones típicas como obtener, establecer, archivar, insertar, eliminar, etc. La descripción del proceso es algo breve pero descriptivo, por ejemplo
o
Nombre mis funciones de manera similar, pero prefijo con udf_
He visto personas que intentan usar la notación pseudohúngara para nombrar procedimientos, lo que en mi opinión oculta más de lo que revela. Mientras enumere mis procedimientos alfabéticamente, puedo verlos agrupados por funcionalidad, entonces para mí ese parece ser el punto óptimo entre el orden y el rigor innecesario.
fuente
Evite sp_ * en el servidor SQl porque todos los procedimientos almacenados del sistema comienzan con sp_ y, por lo tanto, se hace más difícil para el sistema encontrar el objeto correspondiente al nombre.
Entonces, si comienzas con algo diferente a sp_, las cosas se vuelven más fáciles.
Para empezar, usamos un nombre común de Proc_. Eso facilita la identificación de los procedimientos si se presenta con un gran archivo de esquema.
Aparte de eso, asignamos un prefijo que identifica la función. Me gusta
Proc_Poll_Interface, Proc_Inv_Interface
etc.Esto nos permite encontrar todos los procesos almacenados que hacen el trabajo de POLL en comparación con el inventario, etc.
De todos modos, el sistema de prefijos depende del dominio del problema. Pero al dijo e hizo algo similar que debería estar presente, incluso si fuera solo para permitir que las personas ubiquen rápidamente el procedimiento almacenado en el menú desplegable de exploración para editarlo.
otros eg de la función.
Seguimos la denominación basada en funciones porque los Procs son similares al código / función en lugar de objetos estáticos como tablas. No ayuda que los Procs puedan funcionar con más de una tabla.
Si el proceso realizó más funciones de las que se pueden manejar en un solo nombre, significa que su proceso está haciendo mucho más de lo necesario y es hora de dividirlas nuevamente.
Espero que ayude.
fuente
Me uní tarde al hilo pero quiero ingresar mi respuesta aquí:
En mis dos últimos proyectos hay diferentes tendencias, como en uno que utilizamos:
Estas convenciones de nomenclatura también se siguen en el front-end al prefijar la palabra dt .
Ejemplo:
Con la ayuda de las convenciones de nomenclatura anteriores en nuestra aplicación, tenemos nombres buenos y fáciles de recordar.
Mientras que en el segundo proyecto usamos las mismas convenciones de nomenclatura con poca diferencia:
Ejemplo:
fuente