10 tips imperdibles sobre SQL para desarrolladores

SQL es otro de los lenguajes esenciales en la vida de un desarrollador que se encuentra deseando crear sitios web que manejen información y hagan uso de bases de datos.

Sin embargo, muchos desarrolladores no están familiarizados con varios aspectos del SQL, es por esto que en el siguiente artículo analizaremos 10 consejos esenciales a tener en cuenta sobre este lenguaje.

1. Utiliza el lenguaje correcto

Los desarrolladores web por lo general poseen una gran cantidad de lenguajes a su disposición. Es crucial que seleccionen el ideal para cada trabajo.

Revisemos el código que sigue. En el primer ejemplo, el desarrollador está seleccionando todas las columnas y todas las filas desde la tabla del cliente. En el segundo ejemplo, el desarrollador está seleccionando sólo el primer nombre, apellido y dirección de la tabla del cliente para un cliente particular cuya ID es 1001. El segundo pedido no solo limita las columnas que se devuelven sino que también tiene un mejor desempeño.

SELECT * FROM customer;

SELECT firstName, lastName, shippingAddress FROM customer WHERE customerID = 1001;

Al escribir código es necesario que te asegures que trabaje con eficiencia.

2. Asegura tu código

Las bases de datos almacenan información valiosa. Debido a esto, suelen ser objetivo de ataques. Muchos desarrolladores no están al tanto de que su código posee serios problemas de vulnerabilidad lo que resulta algo muy temido. Actualmente, los desarrolladores pueden tener problemas legales si su propia negligencia en cuanto a los temas de seguridad lleva a que una base de datos sea explotada.

Veamos otro ejemplo utilizando pseudo-código

// Theoretical code
txtUserName.setText(”eshafer’ OR 1=1″);
query = “SELECT username, password FROM users WHERE username = ‘” + txtUserName.getText() + “‘;”;

// Final statement
query = “SELECT username, password FROM users WHERE username = ejshafer OR 1=1;”

Con suerte al ver el código de arriba notaste las vulnerabilidades del mismo. El pedido terminará seleccionando todos los nombres de usuarios y contraseñas grabadas de la tabla, porque 1 es igual a 1. Ahora, este ejemplo particular no tendría mucha importancia para un supuesto hacker. Sin embargo, hay posibilidades casi ilimitadas sobre código adicional malicioso que pueda ser añadido con resultados catastróficos.

¿Cómo puedes escribir código seguro?

La solución es a menudo específico DBMS; que es, una variante entre MySQL, Oracle o SQL Server. En PHP con MySQL, por ejemplo, es usual escapar a los parámetros utilizando la función mysql_real_escape_string antes de enviar el pedido SQL. De forma alternativa, puedes utilizar afirmaciones preparadas para “preparar” tu pedido. Es tu obligación entender el DBMS con el que estás trabajando y los problemas de seguridad inherentes.

La inyección SQL no es el único problema de seguridad con el que los desarrolladores deben tratar, sin embargo, es uno de los más comunes métodos de ataque.

3. Entender las uniones

Las declaraciones SQL de tablas singulares son bastante fáciles de escribir. Sin embargo, los requerimientos de los negocios a menudo hacen que sea necesario escribir pedidos más complejos. Por ejemplo, “encontrar todas las ordenes de un cliente, y mostrar los productos para cada orden”. Ahora, en esta situación particular, sería probable que haya una tabla de cliente, una tabla de orden y una tabla de order_line. Para aquellos que están más familiarizados con SQL, es fácilmente aparente la unión de la tabla, dos tablas juntas serán requeridas para este pedido. Miremos el código de muestra:

SELECT customer.customerID, order.order_id, order_line.order_item
FROM customer
INNER JOIN order
ON customer.customerID = order.customerID
INNER JOIN order_line
ON order.orderID = order_line.orderID;

Para aquellos que no lo saben, el código de arriba es una unión interna. Más específicamente, una equi-join. Definamos los distintos tipos de uniones:

Uniones internas: Su propósito básico es devolver registros que combinen.

Uniones externas: No requieren que cada registro tenga un registro que le corresponda.

  • Unión externa izquierda: Una unión externa izquierda de tablas A y B devolverá todos los registros correspondientes de A y B, como así también cualquier registro no-correspondiente de la tabla izquierda.
  • Unión externa derecha: Una unión externa derecha de tablas A y B devolverá todos los registros correspondientes de A y B, como así también cualquier registro no-correspondiente de la tabla derecha.
  • Unión externa completa: Una unión externa completa de tablas A y B devolverá todos los registros correspondientes de A y B, como así también cualquier registro no-correspondiente de ambas.

Uniones propias

Las uniones propias son el último tipo de uniones que debemos considerar: se trata de una union de la tabla a sí misma.

EMPLOYEE TABLE

EmployeeName

SupervisorID

En esta situación, para poder encontrar cuáles empleados son supervisados por un empleado dado, se requerirá una unión propia.

Las uniones son una de las propiedades principales de SQL, así que asegúrate de usar la apropiada para cada situación.

4. Conoce tus tipos de información

En SQL, tradicionalmente cada columna de la tabla posee un tipo de información asociada. Text, Date, VarChar, Integer, etc, son algunos de los tipos disponibles de los cuales los desarrolladores pueden elegir.

Al desarrollar, debes asegurarte de escoger el tipo de información propicio para cada columna. Las fechas deberán ser variables DATE, números deberán ser de tipo numérico, etc. Esto se vuelve especialmente importante al tratar con el tema que sigue: indexación. Veamos un ejemplo:

SELECT employeeID, employeeName

FROM employee

WHERE employeeID = 112457891;

Parece correcto basado en lo que sabemos hasta ahora ¿No? Sin embargo ¿Qué pasaría si employeeID fuera una cadena? Tendríamos un gran problema, ya que DBMS puede no encontrar jamás una coincidencia (ya que los tipos de información son de distinto tipo).

Si estás utilizando indexación, probablemente te quedarás perplejo porque tu pedido jamás llegará. Esta es la razón por la que los desarrolladores deben prestar atención especial a los tipos de información en sus aplicaciones.

La utilización debida de los tipos de información es esencial para la buena programación de base de datos, porque ésta guía directamente a la eficiencia del pedido. Y pedidos eficientes son esenciales en la creación de aplicaciones escalables de calidad.

5. Escribe código dócil

Todos los lenguajes de programación poseen estándares que los desarrolladores web deben conocer. SQL fue estandarizado por ANSI y luego ISO, con nuevas revisiones del lenguaje siendo agregadas ocasionalmente. La última revisión es SQL: 2008, aunque la más importante es SQL: 1999. La revisión de 1999 introdujo disparadores, pedidos recursivos, soporte para PL/SQL y T-SQL, y algunas otras propiedades nuevas. También definió que las declaraciones JOIN sean realizadas en la cláusula FROM, en oposición a la cláusula WHERE.

Al escribir el código, es importante tener en mente qué estándares dóciles de código resultan útiles. Existen dos razones principales por la que los estándares son utilizados. La primera es el mantenimiento y la segunda es la estandarización de plataformas cruzadas. El sistema se pasa la mayor parte de su tiempo de vida en fase de mantenimiento. Cuando otro programador acceda a tu código en 2, 5 o 10 años, es necesario que todavía pueda entender lo que tu código está haciendo. Es por eso que los estándares están diseñados para desarrollar la capacidad de mantenimiento.

La otra razón es la funcionalidad de plataformas cruzadas. Con CSS, hay actualmente una batalla de estándares entre Firefox, Internet Explorer, Chrome, y otros navegadores sobre la interpretación del código. La razón para los estándares SQL es prevenir una situación similar entre Oracle, Microsoft y otras variantes SQL como MySQL.

6. Normaliza tu información

La normalización de base de datos es una técnica para organizar el contenido de las mismas. Sin esto las bases de datos pueden ser inapropiadas, lentas e ineficientes. La comunidad de profesionales de base de datos ha desarrollado una serie de guías para la normalización de las mismas. Cada “nivel” de normalización es referido como una forma y existen cinco formas en total.

  • Primer Forma Normal (1NF): Es el nivel más básico de normalización, requiere la eliminación de todas las columnas duplicadas de una tabla, y también la creación de tablas separadas para información relacionada, e identificación de cada tabla con un atributo clave principal.
  • Segunda Forma Normal (2NF): Encuentra todos los requerimientos de la primera forma normal, y crea relaciones entre las tablas utilizando claves extrañas.
  • Tercera Forma Normal (3NF): Encuentra todos los requerimientos de las primeras dos formas, y elimina todas las columnas que no dependan de la clave principal. También elimina todos los atributos derivados, tales como la edad.
  • Cuarta forma Normal (4NF): Adhiere un requerimiento extra, que es la remoción de cualquier dependencia multi-valuada en las relaciones.
  • Quinta Forma Normal (5NF): Es una rara forma de normalización, en la que las dependencias de uniones de caso están implicadas por claves candidatas.

En la realidad de las bases de datos llegar hasta la 3er forma es lo más importante. Si estás luchando con los conceptos, existe una simple relación entre ellos “La clave, la clave completa y nada más que la clave” relaciona a 1NF, 2NF y 3NF.

Los beneficios de la normalización son que a medida que la información progresa a través de las formas se vuelve más clara, mejor organizada y más rápida. A medida que la base de datos crezca, los efectos de la normalización se volverán más aparentes en lo que respecta a velocidad y mantención de la integridad de la información. Sin embargo, existen situaciones en las que la normalización no tiene sentido, como por ejemplo cuando la normalización de la información creará pedidos excesivamente complejos para devolver la misma.

7. Califica completamente los objetos de tu base de datos

Este es un punto comúnmente ignorado. En términos de un desarrollo de base de datos, un nombre de objeto completamente calificado luce así: DATABASE.schema.TABLE. El propósito de un nombre de objeto completamente calificado es eliminar la ambigüedad. Los desarrolladores principiantes raramente tienen acceso a bases de datos múltiples y esquemas, lo que complica el problema en el futuro. Cuando un usuario dado tiene acceso a múltiples bases de datos, múltiples esquemas y las tablas que hay ahí, se vuelve crucial especificar directamente a qué está el usuario intentado acceder.

Clasificar por completo los nombres de tus bases de datos es importante al trabajar con bases de datos grandes que son utilizadas por muchos usuarios y poseen varios esquemas.

8. Entender indexación

El índice de una base de datos es una estructura de información que mejora la velocidad de las operaciones en una base de datos. Los índices pueden ser creados utilizando una o más columnas de la tabla de la base de datos, dando la base tanto de vistazos rápidos al azar como de acceso eficiente a registros ordenados. La indexación es increíblemente importante al trabajar con tablas grandes, sin embargo, ocasionalmente las tablas pequeñas deberían ser indexadas si se espera que crezcan.

Cuando un pedido busca a una base de datos para registros correspondientes, hay dos formas en que la búsqueda puede ser desempeñada:

  • La primera y la más lenta es un escaneo de tabla. En este, el pedido busca cada registro de la tabla en miras de una correspondencia.
  • La segunda y la más rápida es el escaneo indexado. En este, los pedidos buscan el índice para encontrar los registros. En términos de no-base de datos, un escaneo de tabla sería el equivalente a leer cada página de un libro para buscar una palabra, mientras que uno de índice sería el equivalente a dar vuelta al final del libro, encontrar la palabra, ir a la página especifica y luego leer esa página para encontrar la palabra.

Es importante recordar que los índices deben ser reconstruidos ocasionalmente, a medida que información es añadida en la tabla. Por esto, la mayoría de las DBMS poseen una opción para temporalmente deshabilitar un índice para facilitar la modificación masiva de información, y así permitir que sea re-habilitada y reconstruida después.

9. Utilización propicia de los permisos de base de datos

Al trabajar con una base de datos que tiene múltiples usuarios es importante manejar correctamente los permisos. Obviamente, la mayoría de las bases de datos tienen un administrador, pero no siempre tiene sentido correr tus pedidos como administrador. Tampoco desearás proveer a todos los desarrolladores juniors con las credenciales de administrador para que puedan escribir sus propios pedidos. Los varios permisos posibles para tu base de datos dependen de tu DBMS, pero existen temas comunes entre ellos.

En MySQL, por ejemplo, el tipear “SHOW TABLES” revelará una lista de tablas en tu base de datos, en la que más que seguro notarás una tabla “user”. Tipeando ‘DESC user’ revelará que hay varios campos en esta tabla. Junto con un host, nombre de usuario y contraseña, hay también una lista de privilegios que pueden ser programados para cada usuario. Sumado a este, hay una tabla ‘db’ que gobierna privilegios más específicos para una base de datos.

Además, SQL Server provee las declaraciones GRANT, DENY y REVOKE para dar o sacar permisos a un usuario o rol.

10. Conoce las limitaciones de tu DBMS

Las bases de datos son herramientas poderosas pero todas tienen limitaciones. Oracle, SQL Server y MySQL poseen limitaciones propias en ciertas cosas como tamaños máximos de bases de datos, número máximo de tablas y otras cosas. Muchos desarrolladores sin saberlo eligen la solución DBMS para sus proyectos sin planear o considerar los requerimientos de sus bases de datos.

Para conocer las limitaciones puedes referirte al manual de tu DBMS, por ejemplo, las limitaciones de SQL Server están localizadas en el sitio de MSDN: http://msdn.microsoft.com/en-us/library/ms143432.aspx

Conclusión

En este artículo revisamos 10 consejos esenciales para desarrolladores SQL. Sin embargo, existen otras muchas técnicas SQL que pueden ser mencionadas. Continúen desarrollando y recuerden que el código que escriben debe soportar la infraestructura de internet y que sin ustedes, Internet no serían tan exitoso como es.

Fuente: Net Tuts Plus


0 comentarios to "10 tips imperdibles sobre SQL para desarrolladores"

Publicar un comentario en la entrada

Blog Archivo

Subscribete via E-Mail

Subscribete via RSS!

Ingresa tu email para:
Recibe actualizaciones del Blog.

Etiquetas

16-bit 2.0 2012 256 colores 2d 3 404 5 8 acelerar Acer Aspire ActionScript ADD-ONS addon adobe adobe air Adsense aerogarden agilidad airbender AJAX alarma alien all your base alta definición Android angulacion answers API APIs aplicacion aplicaciones Apple apps archive Argentina ask atajo atajos de teclado ataque audio avance avatar aventura grafica back background backtweets balsamiq mockups banda bang banners barcelona barra lateral bases de datos Batacazo bateria bbcode bear bebé Biblioteca Virtual big bing BitDefender BitTorrent blekko Blog blogger bloggers blogósfera Blogs bocetos bollywood bordes botánica brickify brush buenos aires buscador búsqueda avanzada cache caja calendario calidad cámara web canciones Canvas carrusel catástrofe ceguera de banners celular CEO charla chpimunk chrome chrome web store chromium chuck norris cine Cisco cita cliente ftp cloud cluster Cms cocina codec código coleccion color colorotate columna comercio commodore 64 compatibilidad Competencia compositio Comscore comunicacion Comunidad comunidad online Conferencia configuración consejos contenido content copia correo correo electrónico cotidiano cpanel Creatividad criminal cross-browser cse CSS CSS3 cubo cuenta cuentos cultivo Curiosidades curso photoshop Cursos daisies date Debian degradé dell desaparecer desarrollo web descarga Descargas descomprimir desfragmentar despertador despertar deviantart DHTML Digg diseñador Diseño Diseño Grafico Diseño Gráfico diseño web Disney dispositivo dispositivos moviles dispositivos táctiles div dominio dramatic dropbox duck go e-book e-commerce e-commerce day e-mail EBE ecología editor educación a distancia educativo Educativos Niños efecto efectos ejemplo emblema emprendimiento emulador emuladores encabezados encuesta enlace episodios error escritura España estadística Estados Unidos estilo estudio etica evento Eventos Excel exportar extensión extensiones extraterrestre Facebook facebook connect garage fc64 feeds Fiberparty film Filosofía Firebug firefinder Firefox firmware fixes Flash flex 4 Flickr fondo fondos font font dragr form formularios foto Fotografía Framework freelance fuente fuentes future FXG g1 gadget gadgets games gaming gazelle geek gestion gestor de contenido gestos gestuales gesture ghajini gm730 Gmail Google google analytics google app Google Calendar Google Chrome Google Docs gradient gradiente gradientes gráfico gran torino gratis groupon guerra guia h.264 habla hack Hackers handle handler hardware herramientas gráficas hitchcock hollywood homepage horizontal hover HP html HTML válido HTML5 HTTP hub huerta IBM icono IE illustrator imagen Imagenes imágenes importar impress inclinacion indio infecciones info-box infografías iniciador Inkscape inspiracion interactivo interfaz Internet Internet Explorer interno invasión investigación iPhone iphone os iPod island istick IT iTunes U jackson JavaScript jerarquía jetpack jQuery jQuery TOOLS jsc64 juego Juegos lanzamiento laptop lego lenguaje Lenovo Lg libre librería libro limpieza Links Linux literatura lógica logo logos logotipo lolcat Lotería love luca lucasarts luces luminoso luz Mac mac book pro mac os x MacBook macro mago Malware manejo mantenimiento manual mapa mapeo maquetación marciano Marketing mascara mascota McBook medicion medio ambiente meme memoria mente menú metafilter metropolis michael microsoft Mobile Learning mockup monkey moonwalker mootools moousture motivacional motor de busqueda motores de búsqueda mouse mouseprobe mov movil mozilla Mozilla Firefox Mozilla Labs mp3 MS Office mujer maravilla multimedia MultiTouch música MXML MySpace MySql N97 napkee navegación Navegador navegadores networking New York nightly nihilogic no ser encontrado nodos Nokia notebook noticias Novedades ochentoso oferta offers oficial online Open Source Open SUSE OpenOffice opera operativo oportunidad optimización orden organizacion orgullo os oscurecer oscuridad oso Outlook oz page speed PageRank pagespeed pageviews panaderia Panda paneles pantalla pantallas táctiles parasitos PDF peekfeed película pencil peoplebrowsr perfil pestaña photoshop photoshop clase 2 PHP php 5 Picasa picker pinceles pingie piratas pirates plagio plantación plantar plantilla plastic logic Plugin plugins pocket yoga podcasts port portal portátil posicionamiento powerpoint ppc prejuicio preparacion presentación Productividad Programación programas promocion protofish prototype proyecto prueba PSD Psicología public Publicidad puerto QEMU quickoffice quicktime quote rafael jimenez rank Recursos Red red social reddit Redes sociales reloj remake reproductor reseña resolución respaldo resultado retro robo rojo RSS rubik Ruby rust Safari Salud sans-serif sclipo script sculpting sdk seleccionador SEO serie serif SERP server servidor servidor web set shadow share sherlock shortcodes shuffle sidebar sidepost simple simpson Sin clasificar sistema sistema operativo sistemas operativos sitios web slideshow smart smooth SMS snow leopard social sociedad Software Software educativo software libre sombra sonido soundmanager2 spam spreadsheet SQL Squeeze startup steps left store streaming subdominio success suckerfish sun microsystems tablas table tabs tactil Taller de Fotografía Digital Taller de Photoshop taller photoshop Talleres Tarjetas de Crédito teaser tecnica Tecnologia teddy telefono television telltale template templates textbox the theme Themes theora thumbnails tienda time tipografía tipografias tips titulares to touchscreen tower defense trailer transform transition tres Troyano Troyanos truco Trucos tutorial photoshop tutoriales TV tweet tweetstats Twitter unplugged Usabilidad USB usuarios Utilidades para PC Utilidades para tu web variables vector vegetales velocidad venta Ventas verde verdura version video videojuego videojuegos videos Videos de Música Peruana viernes Viernes Unplugged VirtualBox Virus Visas VMware voucher w3c wallpaper wallpapers web Web 2.0 web participativa webcam WebKit webm webmaker Wi-Fi widescreen Wikipedia Windows Windows 7 Windows Mobile wiz wizard wolfram wonder woman Word Wordpress WorldBuilder wwdc 09 XHTML yahoo Youtube yui zip