[en] Databases are the preferred method for structured data storage. Large multi-user applications, mobile telephones and electronic agendas all use database technology to ensure data integrity and to facilitate the task of both the users and the programmers who developed them. Since the first data model was created, followed by administration of the management system and, finally, development of the application, the technology and associated concepts have been extremely diverse. It is also essential to know the key aspects of each of these topics to ensure success in any project that involves working with databases. This course will attempt to offer a comprehensive view of the concepts related to database management systems. To begin with, we will look at the aspects involved in the engines of these data warehouses, their historical evolution and the different types of organisation and abstraction they have gone through from their initial design to the present day. We will then look at the 'relational' model (the most common one nowadays), providing the tools and methods that allow us to represent data storage and query needs in this model. Following on from this, we will study Structured Query Language (SQL) in depth, since it is essential for working with relational databases, whether directly or through a programming language. Database design also has a chapter on learning how to model a database and represent it graphically, to detect possible design issues before they affect the application and to build optimal databases for the different cases of relations between entities that will form our database. Once we have established these bases, we will be ready to take a detailed look at two of the most popular free software database management systems currently available. Hence, we will learn about the use, administration and special features of MySQL and PostgreSQL with examples and case studies. We will also look at query and graphic administration tools for these two database management systems, which will enhance our productivity in our day-to-day work with them. We will then study the methods for accessing these database management systems from some programming languages. In each case, we will discuss the best practices and their special features, and we will introduce concepts related to programming in databases, such as persistence, dealing with errors, etc. Lastly, we believe that the best way to end this course is a complete case study looking at the topics we have discussed in the order in which they would occur in a real project, putting practice before theory. To sum up, this course attempts to provide students with a comprehensive understanding of the aspects of working with databases. Although we will not discuss certain specialist topics, such as the internal design of a database management system, we will take a technical approach to the more essential topics.

[es] Las bases de datos son el método preferido para el almacenamiento estructurado de datos. Desde las grandes aplicaciones multiusuario hasta los teléfonos móviles y las agendas electrónicas utilizan tecnología de bases de datos para asegurar la integridad de los datos y facilitar la labor tanto de usuarios como de los programadores que las desarrollaron. Desde la realización del primer modelo de datos, pasando por la administración del sistema gestor, hasta llegar al desarrollo de la aplicación, los conceptos y la tecnología asociados son muchos y muy heterogéneos. Sin embargo, es imprescindible conocer los aspectos clave de cada uno de estos temas para tener éxito en cualquier proyecto que implique trabajar con bases de datos. En este curso trataremos de dar una visión completa de los conceptos relacionados con los sistemas gestores de bases de datos. En los primeros capítulos veremos los aspectos involucrados en los motores de estos almacenes de datos, su evolución histórica y los distintos tipos de organización y abstracción que han ido surgiendo desde su conceptualización hasta nuestros días. A continuación profundizaremos en el modelo llamado relacional (el más usado en nuestros días), proporcionando los métodos y las herramientas que nos permitan representar necesidades de almacenamiento y consulta de datos en este modelo. En el siguiente capítulo estudiaremos a fondo el lenguaje de consultas estructurado SQL, imprescindible para trabajar con bases de datos relacionales, ya sea directamente o a través de cualquier lenguaje de programación. El diseño de bases de datos tiene también un capítulo dedicado a aprender a modelar y representar gráficamente una base de datos, a detectar los posibles problemas de diseño antes de que estos afecten a la aplicación, y a construir bases de datos óptimas para los distintos casos de relaciones entre entidades que formarán nuestra base de datos. Una vez sentadas estas bases, estaremos en disposición de examinar detenidamente dos de los sistemas gestores de bases de datos de software libre más usados y populares actualmente. Así pues, aprenderemos el uso, la administración y las particularidades de MySQL y PostgreSQL mediante ejemplos y casos prácticos. También veremos las herramientas de consulta y administración gráficas para estos dos sistemas gestores de bases de datos, que nos permitirán mejorar nuestra productividad en el trabajo diario con ellos. A continuación, veremos los métodos de acceso a estos sistemas gestores de bases de datos desde algunos lenguajes de programación. En cada caso, comentaremos las mejores prácticas para cada uno, así como sus particularidades, e introduciremos algunos conceptos relacionados con la programación en bases de datos como la persistencia, el tratamiento de errores, etc. Finalmente, creemos que la mejor forma de finalizar este curso es mediante un caso de estudio completo que aborde los temas tratados en todos los capítulos, en el orden en que se producirían en la realidad de un proyecto y primando la práctica sobre la teoría. Así pues, este curso trata de proporcionar al estudiante una visión completa de los aspectos implicados en el trabajo con bases de datos. Aunque no profundizaremos en algunos temas muy especializados como el diseño interno de un sistema gestor de bases de datos, profundizaremos técnicamente en los temas más necesarios.