A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

Doctrine y la Administración de la Base de Datos

Existen muchos sistemas administradores de base de datos en el mercado. Estos sistemas se pueden dividir en dos grupos: las tradicionales bases de datos relacionales que usan el lenguaje SQL para consultar y manipular datos, y el segundo grupo, las bases de datos NoSQL que no solo usan SQL como método para acceder y administrar los datos. En cada proyecto particular podemos preferir determinado DBMS por sus capacidades y ventajas competitivas.

Bases de Datos Relacionales

En una base de datos relacional tenemos una colección de tablas (relaciones) que están constituidas por filas. Una fila puede tener una o varias columnas. Una o varias filas de una tabla pueden estar enlazadas a una o varias filas de otra tabla formando una relación entre datos.

Por ejemplo, suponiendo un sitio web para un blog cuya base de datos tiene dos tablas: la tabla post y la tabla comment. La tabla post tendría las columnas id, title, content, author y date_created y la tabla comment tendría las columnas id, post_id, author, content y date_created. La tabla post se relaciona con la tabla comment de uno-a-muchos porque una publicación tiene cero o más comentarios (muchos) mientras que un determinado comentario pertenece a una sola publicación.

Las tablas mencionadas arriba con sus columnas y relaciones se muestran abajo en la figura D.1.

Figura D.1. Tablas y relaciones entre tablas. Una publicación tiene muchos comentarios Figura D.1. Tablas y relaciones entre tablas. Una publicación tiene muchos comentarios

En el marcado existe un número mayor de base de datos relacionales. Entre ellas están: MySQL, PostgreSQL, Oracle, Microsoft SQL Server, etc.

Cada sistema de base de datos tiene sus características específicas que no tienen otros DBMS. Por ejemplo:

La biblioteca Doctrine se diseñó para trabajar con las principales bases de datos mediante el uso de un interfaz de programación unificada. Esta interfaz de programación se implementa en dos niveles:

  1. A bajo nivel, Doctrine provee un mecanismo unificado para construir consultas SQL para cualquiera de las bases de datos relacionales soportadas y manipular el esquema de la base de datos. Este mecanismo se implementa en el componente Database Abstraction Layer (DBAL).

  2. A alto nivel, el componente Object Relacional Mapper (ORM) de Doctrine provee la capacidad de consultar y administrar bases de datos de una manera orientada a objetos asociando las tablas a clases PHP. Además, este componente provee un lenguaje de consulta a base datos propio llamado DQL que permite construir consultas con el estilo orientado a objetos.

Generalmente usamos la API que provee el componente de alto nivel ORM. Al mismo tiempo podemos fácilmente usar el componente de bajo nivel DBAL si consideramos que es necesario para nuestras necesidades particulares.

Doctrine es independiente de la base de datos. En teoría cuando usamos Doctrine somos capaces de abstraernos del tipo de base de datos y cambiar entre bases de datos más fácilmente que cuando usamos una solución dependiente de una base de datos.

SQL vs. DQL

Cuando usamos un sistema de base de datos relacional generalmente usamos el lenguaje SQL como una manera estándar para acceder a los datos de la base de datos y administrar el esquema de base de datos. Sin embargo, cada DBMS generalmente tiene una extensión específica del lenguaje SQL (dialecto).

La biblioteca Doctrine se diseño para trabajar con todos los principales sistemas de bases de datos relacionales que usan el lenguaje SQL, pero es obvio que solo soporte un subconjunto de su funcionalidad y de las capacidades del lenguaje SQL.

Doctrine se construye sobre la principal extensión PDO de PHP (y otras extensiones de PHP para base de datos como sqlite, mysqli, oci8, etc.) Estas extensiones proveen controladores para todos los principales sistemas de base de datos relacionales. Especificamos el controlador adecuado a usar cuando configuramos la conexión a la base de datos.

Si no estamos familiarizados con SQL, un buen lugar para aprender su sintaxis es W3Schools Tutorials.

53) La extensión PHP Data Objects (PDO) define una interfaz ligera y consistente para acceder a la base de datos con PHP. Para hacerlo de una manera independiente de la base de datos PDO usa el concepto de controladores de base de datos. Cada controlador de base de datos que implementa una interfaz PDO puede proveer las características específicas de la base de datos como funciones regulares de la extensión.

Como el componente Object Relational Mapper de Doctrine se diseñó para trabajar con objetos en lugar de tablas, este provee su propio lenguaje de consulta "orientada a objetos" llamada DQL 54. Es similar a SQL en el sentido de que permite escribir y ejecutar consultas en la base de datos pero el resultado del la consulta es un arreglo de objetos en lugar de un arreglo de columnas de tabla.

54) DQL significa Doctrine Query Language.

Base de Datos NoSQL

En contraste con los sistemas de base de datos relacionales un sistema de base de datos NoSQL, como su nombre lo sugiere, usa no solo métodos SQL para acceder a los datos. Esto significa que cada sistema NoSQL puede proveer sus propios métodos y API para acceder y manipular datos. Técnicamente, las bases de datos NoSQL se pueden dividir en los siguientes grupos:

Doctrine provee soporte solo para el subconjunto de Bases de Datos Documentales de entre los sistemas de base de datos NoSQL. Los sistemas de almacenamiento en columnas y el llave-valor tienen un campo específico de aplicación y no son cubiertas por Doctrine.

Bases de Datos Documentales

Doctrine soporta algunas bases de datos documentales NoSQL: MongoDB, CouchDB, OrientDB y PHPCR.

Por ejemplo en un sitio web para un blog tendríamos un documento llamado post y un documento llamado comment. El documento post tendría los campos id, title, content, author y date_created; y el documento comment tendría los campos id, author, content y date_created. Esto es muy similar a las tablas que tendríamos in una base de datos relacional.

En este libro no discutiremos sobre la API que provee Doctrine para las bases de datos NoSQL. Si queremos aprender sobre estas características debemos revisar las secciones correspondientes de la documentación de Doctrine.


Top