2010-04-17 10 views
7

¿Podría enumerar algunas de las malas prácticas en SQL que hacen las personas novatas?SQL Code Smells

He encontrado el uso del "bucle WHILE" en escenarios que podrían resolverse utilizando operaciones de conjunto.

Otro ejemplo es insertar datos solo si no existe. Esto se puede lograr usando LEFT OUTER JOIN. Algunas personas optan por "SI"

¿Alguna otra idea?

Editar: Lo que estoy buscando es escenarios específicos (como se menciona en la pregunta) que podría lograrse mediante SQL sin utilizar construcciones de procedimiento

, gracias

Lijo

+3

Esto se debe (al menos) ser wiki de la comunidad –

+0

Tenga en cuenta que un "bucle WHILE" no es estrictamente SQL - Es una construcción en algunos lenguajes de extensión de procedimiento. – mkj

+0

@mkj - Estoy de acuerdo con su punto. Mi pregunta es la mismaLo que estoy buscando es escenarios específicos (como se menciona en mi pregunta) que se podrían lograr usando SQL sin usar constructos de procedimiento. – Lijo

Respuesta

8

Éstos son algunos tengo visto:

  • El uso de cursores en lugar de operaciones de conjuntos equivalentes (y más rápido) (se une etc).
  • SQL dinámico para todo.
  • Código que está abierto a ataques de inyección SQL.
  • Uniones exteriores completas incluso cuando no se necesitan.
  • Procedimientos almacenados enormes (cientos/miles de líneas).
  • No hay comentarios.
+0

(n) Hibernate hace uniones externas por defecto -_- –

+0

Considero que insertar null es un olor de código para el diseño de esquema. Si tiene que verificar todo por nulo todo el tiempo, su código puede ser bastante feo y difícil de seguir. – Stuporman

2

Personalmente para mí: todo lo que no es una inserción de llanura, UPDATE, DELETE o SELECT

no me gusta la lógica en SQL.

+2

Eso es irónico, dado que SQL se basa en lógica de predicados. Tal vez debería calificar esta afirmación (¿Quiso decir "sin cursores" o algo así?). –

+0

Supongo que entonces no ha trabajado con grandes conjuntos de datos en un entorno corporativo. No es que esté completamente en desacuerdo, pero a veces es la mejor solución. –

+1

Creo que la lógica dentro de SQL es inevitable cuando se trabaja con Informes. – Lijo

1

Mi mayor problema aquí es definitivamente el SQL repetitivo. Como ejemplo, múltiples procedimientos almacenados que realizan exactamente las mismas uniones pero diferentes filtros.

Uso de las vistas en tales casos puede hacer que su base de datos mucho más fácil mirar y trabajar con

+0

¿Podría por favor dar un ejemplo que solo se puede lograr usando consultas repetitivas, si estamos utilizando Stored Proecure? [Lo mismo se puede lograr sin repetición cuando se usa VIEWS] – Lijo

4

La colocación de ODBC o SQL dinámico llamadas de todo el código.

A menudo es mejor definir una capa de abstracción de datos que proporcione acceso a las bases de datos. Todo el código SQL puede ocultarse en esa capa. Esto a menudo evita la replicación de consultas similares, y facilita el cambio de los modelos de datos .

0
  1. Creación de SQL específico del proveedor, cuando SQL genérico lo haría.

  2. Creación de tablas dinámicamente en el tiempo de ejecución (que no sean tablas TEMPORALES).

  3. Deje que su código de aplicación tenga creación de tabla o privs de superusuario.