Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Como para organizar mis procedimientos almacenados

Estas en el tema de Como para organizar mis procedimientos almacenados en el foro de SQL Server en Foros del Web. Hola a todos. Lo que les voy a preguntar ahora no es una duda de programacion, es mas bien una duda de concepto. El tema ...
  #1 (permalink)  
Antiguo 20/07/2011, 18:25
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 9 meses
Puntos: 14
Como para organizar mis procedimientos almacenados

Hola a todos. Lo que les voy a preguntar ahora no es una duda de programacion, es mas bien una duda de concepto.
El tema es que estoy haciendo una aplicacion web bastante grande.
Por ejemplo tengo bastantes formularios que hacen una consulta select, no siempre a las mismas tablas, sino a tablas diferentes, todo segun las necesidades en el momento.
Mi pregunta es la siguiente. Que es mas correcto a la hora de programar. Hacer un procedimiento almacenado para cada consulta que necesite?? o por ejemplo hacer un solo procedimiento almacenado SELECT, pasandole como valores, el nombre de la tabla y los campos a selecionar.

Espero haberme expresado correctamente. Muchas gracias a todos por vuestra ayuda

Un saludo
Pinty
  #2 (permalink)  
Antiguo 21/07/2011, 10:24
Avatar de SDEK  
Fecha de Ingreso: diciembre-2009
Ubicación: MX
Mensajes: 156
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Como para organizar mis procedimientos almacenados

Existen varias formas de establecer el acceso a datos, sin embargo tu debes definir lo que más te conviene. Debes considerar que flexibilidad tiene para ti hacerlo de esa manera, que cantidad de consultas vas a realizar y con que cantidad de parámetros.

Saludos,
__________________
Tecnologías de la Información
Karel Priego
| @karelpriego
  #3 (permalink)  
Antiguo 21/07/2011, 11:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Como para organizar mis procedimientos almacenados

Adicional a lo que comenta SDEK, si pasas el nombre de la tabla, supongo, solo eso, que haras QUERY DINAMICO y de ser asi, tendrias que dar PERMISOS a los usuarios que ejecuten tu store procedure hacia las tablas en cuestion (SELECT), ademas de que no harias uso de los indices, asi como el plan de ejecucion no entraria en cache.
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 21/07/2011, 18:41
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 9 meses
Puntos: 14
Respuesta: Como para organizar mis procedimientos almacenados

Hola. En primer lugar muchas gracias por vuestras aportaciones, pero sigo con la duda de que sera mejor, ustedes como suelen trabajar estos temas?.
Es que no me decido sobre que forma sera la mas conveniente, cada select por separado, o uno solo y pasarle los campos y el nombre de la tabla como parametros a parte de las posibles condiciones del where.

Muchas gracias nuevamente
Un saludo
Pinty
  #5 (permalink)  
Antiguo 22/07/2011, 08:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como para organizar mis procedimientos almacenados

Lo mas apropiado es que hagas una vista por cada una de las consultas que vayas a realizar para consultar a tu base de datos, porque? pues porque con los procedures encriptas un poco tu codigo desde tu aplicacion y asi es un poco mas dificil que puedas tener inyeccion de codigo sql, porque no es lo mismo que pongas un select campo, campo from tabla ya que alguien que sepa de sql podra poner un select * from tabla y obtener informacion a al cual no tendria acceso, pero si lo haces con una vista nada aunque ponga select * from vista, nada mas podra ver los datos que arroja la vista no datos que no tendria que ver, otra cosa para tener un mejor control de tus vistas y tablas podrias crear "schemas" dentro de tu base de datos esto para que todas las vistas encerradas por ejemplo en el schema ventas sean de ventas todas las de compras etc....

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 22/07/2011, 10:51
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Como para organizar mis procedimientos almacenados

Creo que mas claro, no podia haber sido, pero bueno, creo que estoy perdiendo la paciencia....
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 22/07/2011, 15:33
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 9 meses
Puntos: 14
Respuesta: Como para organizar mis procedimientos almacenados

Hola Libras, muchisimas gracias por contestar, la verdad que ahora si que lo tengo todo clarisimo, tu explicacion ha sido excelente y te lo agradezco, ahora ya lo tengo todo bien organizado en vistas y me funciona todo genial.
Muchas gracias nuevamente.
iislas, por que dices que pierdes la paciencia?? no lo entiendo.

Muchisimas gracias a todos por ayudarme.
Un saludo
Pinty
  #8 (permalink)  
Antiguo 24/07/2011, 11:47
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Como para organizar mis procedimientos almacenados

Pinty: Olvidalo, seguramente son los años que me cargo encima...
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 27/07/2011, 19:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 9 meses
Puntos: 14
Respuesta: Como para organizar mis procedimientos almacenados

Hola iislas. Creo que fui educado y corrercto a la hora de hacer la pregunta y agradeci mucho la respuesta de nuestro compañero.
Un saludo
  #10 (permalink)  
Antiguo 28/07/2011, 10:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Como para organizar mis procedimientos almacenados

Creo que yo tambien fui muy claro: Olvidalo, gracias
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 29/07/2011, 22:28
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Como para organizar mis procedimientos almacenados

Tienes diferentes formas de organizar las consultas, para tomar una decisión ten en mente factores como: código legible, mantenimiento, seguridad, escalabilidad, etc. En resumen, las opciones son:

1. Sentencias sql dentro del código de la aplicación construidas en forma dinámica (con vistas o tablas). Esta opción es la más común en la comunidad open source, ya que si codificas las consultas en ANSI SQL puedes tener, a bajo costo, un sistema que funcione en diferentes motores. Lo malo es que es un diseño viejo, en general no se recomienda por ser difícil de leer, costosa en mantenimiento y tiende a producir errores por consultas mal formadas, problema que no se detecta hasta que el sistema está en producción.

Código:
private String getEmpleadoById(int empId, String orderBy) {
    StringBuilder query = new StringBuilder();
    
    query.append("SELECT * FROM empleados ");
    if(empId != null) {
        query.append(" WHERE id=" + empId);
    }
    if(orderBy != null) {
        query.append(" ORDER BY " + orderBy);
    }
    
    return query.toString();
}

//llamada al método que devuelve la consulta sql 
getEmpleadoById(4,null); //un empleado
getEmpleadoById(null,"apellido"); //todos los empleados ordenados por apellido
2. Sentencias sql dentro de procedimientos almacenados (con o sin sql dinámico). Puede que sea la opción más utilizada, es fácil de leer, mantener, óptima en rendimiento y muy ordenada porque separa claramente la capa de datos. Tiene dos problemas fundamentales, es dependiente de la base de datos, si se quiere migrar el sistema a otro motor hay que recodificar todos los procedimientos, y por otro lado, te limita a elegir un motor que soporte procedimientos, inviable si trabajas con aplicaciones que necesitan motores como SQLite (ej: firefox).

Código:
create procedure getEmpleadoById(@empId numeric(8))
as
select *
from empleados
where id = @empId or @empId is null
go

exec getEmpleadoById 4 --un empleado
exec getEmpleadoById null --todos los empleados

3. Por último, un ORM, esto te permite hacer un mapeo de clases de lenguajes orientados a objetos hacia tablas en motores relacionales y así generar en forma automática las consultas sql. Con esta opción codificas una sola vez y el ORM se encarga de adaptar las consultas en función del motor al que está conectado (diferentes ORMs soportan diferentes motores) lo que te da portabilidad en forma inmediata, también separa claramente la capa de datos, tiene buen rendimiento porque genera buenas consultas, y en parte libera al programador de tener que saber SQL. En general, la contra está en aprender cómo funcionan, en la instalación y deploy, pueden tener limitaciones y no resolver consultas complejas, están ligados al lenguaje de programación (Doctrine para php, Hibernate para java, Entity Framework para .net, etc) y al haber varias opciones para cada uno, el análisis de cual implementar puede ser complejo.

Código:
private String getEmpleadoById(int empId, String orderBy) {
    SelectBuilder query = new SelectBuilder();
     
    query.select("*").from("empleados");
     
    if(empId != null) {
      query.where().and("id=#",empId);
    }
    if(orderBy != null){
      query.orderBy(orderBy);
    }

    return query.toSql();
}

//llamada al método que devuelve la consulta sql 
getEmpleadoById(4,null); //un empleado
getEmpleadoById(null,"apellido"); //todos los empleados ordenados por apellido
No hay receta única, mejor o peor, tendrás que evaluar pros y contra, hacer pruebas y ver que alternativa te da mejores resultados.

Saludos

Última edición por matanga; 29/07/2011 a las 22:34
  #12 (permalink)  
Antiguo 31/07/2011, 18:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 9 meses
Puntos: 14
Respuesta: Como para organizar mis procedimientos almacenados

Hola matanga. Muchas gracias por tu aportacion, me ha sido de gran ayuda. Me he estado informando sobre Entity, ya que estoy trabajando sobre .net, pero al final me parecio un poco complicado, asi que me decline por organizarlo segun tu segunda opcion, vistas y procedimientos almacenados. Tambien he organizado mis consultas por schemas, como bien dijo nustro compañero Libras un poco mas arriva, y creo que todo va bien de momento.

Gracias nuevamente. Un saludo
Pinty

Etiquetas: organizar, procedimiento, procedimientos, select, tabla, almacenar, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:45.