El Sistema de Información de una Empresa o de cualquier Organización es un sistema más al servicio de ésta y de sus objetivos, en ningún caso independiente de su estrategia y, como algunos autores afirman, resulta ser parte de su Infraestructura, ya que hoy no se considera
Si te ha gustado esta entrada, suscríbete para recibir las próximas entradas por correo electrónico. Por favor, apoya este blog.
Concepto de Almacenamiento estructurado
El Sistema de Información de una Empresa o de cualquier Organización es un sistema más al servicio de ésta y de sus objetivos, en ningún caso independiente de su estrategia y, como algunos autores afirman, resulta ser parte de su Infraestructura, ya que hoy no se considera
perteneciente a ninguna unidad organizativa ni actividad determinada sino interdependiente con los demás sistemas componentes de la organización
perteneciente a ninguna unidad organizativa ni actividad determinada sino interdependiente con los demás sistemas componentes de la organización
El Sistema de Información de una organización ya no es algo vinculado a un departamento aislado, sino que es parte de la infraestructura de la organización. Tal es la importancia de un Sistema de Información, y de los datos gestionados por éste, que se estima que de las empresas que tienen una pérdida principal de registros automatizados el 43 % nunca vuelve a abrir, el 51 % cierra en menos de dos años, y sólo el 6 % sobrevivirá el largo plazo [1]
Una de las aportaciones más relevantes que ha supuesto la informática para los Sistemas de Información es el concepto de Base de Datos (B.D.); al menos por las siguientes razones:
- Incorpora una visión global del conjunto de datos de una organización en cuyo diseño todos sus departamentos deben estar de acuerdo.
- Estructura el S.I. alrededor de la B.D. considerada como Núcleo del Sistema.
En los últimos años la evolución de los S.I. ha sido realmente notable, haciéndose cada vez mayores las exigencias de prestaciones de información almacenada en el Sistema, lo que ha supuesto un avance continuado de la tecnología de las B.D. y un fuerte impacto económico sobre las organizaciones que han aplicado estas tecnologías.
Evolución de la gestión de los datos
Datos dependientes de las aplicaciones (hardcode). Datos de acceso no estandarizado de forma procedimental (ficheros).
En los comienzos de la historia de la informática los datos estaban integrados en los programas como constantes (práctica que habitualmente se conoce como "hardcode", o parámetro incluído en código y por tanto no configurable).
Con la aparición de los ficheros como colección de datos homogénea, es decir, integrados por elementos estructurados de la misma manera, en el que cada elemento contiene el mismo tipo de información y almacenada en soporte informático determinado, se diferencian de manera incipiente la estructura lógica que representa el punto de vista del usuario y la estructura física de los datos (en general cinta magnética y por lo tanto organización secuencial de los datos).
Posteriormente, la definición de ficheros independientes del resto del programa podrá llevarse a cabo por medio del lenguaje de programación. De esta manera, se facilita el acceso y actualización de los ficheros, y se evita la programación de muchas tareas repetitivas. Como consecuencia de la aparición de subsistemas de gestión de datos integrados en los sistemas operativos las estructuras lógica y física se empiezan a diferenciar.
El nivel de diferenciación entre las estructuras lógica y física alcanzado hasta este momento no es suficiente para evitar la dependencia casi total de los datos respecto a los programas y viceversa, y de ambos respecto a la máquina. Si un programa guardaba la información manejada en ficheros (binarios o de texto), el formato del fichero no estaba estandarizado, ni por tanto la forma de acceso a los datos almacenados en el fichero. En consecuencia, cada programa usaba sus propios formatos, y el acceso a los datos estaba fuertemente relacionado con la aplicación (que es la que daba estructura al fichero).
Con el fin de atenuar estas dependencias (entre datos y aplicaciones) se pasa a una arquitectura que diferencia claramente la representación de los datos orientados hacia el problema (estructura lógica de los datos) de la representación orientada hacia la máquina (estructura física de los datos), siendo necesaria una transformación (mapping) de una en otra.
Aparición de las Bases de Datos. Arquitectura a dos niveles.
En la década de los 60 nacen los primeros S.G.B.D. Los sistemas dejan de estar orientados al proceso o tratamiento y se orientan hacia las B.D. Los datos y sus interrelaciones se integran en las B.D. y se aíslan de las aplicaciones. La estructura lógica se hace más flexible y sencilla y la estructura física se complica buscando mejorar el rendimiento.
Los S.G.B.D. facilitan la descripción y el almacenamiento de las interrelaciones permitidas, que a su vez caracterizan los distintos Modelos de Datos Jerárquico, red, relacionar.
El tipo de Arquitectura de los primeros S.G.B.D. era a dos niveles:
- Estructura Global (características lógicas y físicas): Esquema
- Vistas Lógicas Externas de los usuarios: Subesquemas
Aparición de la arquitectura de 3 niveles de ANSI.
En la arquitectura de dos niveles se introdujo un nivel de abstracción más, pasándose a una arquitectura de tres niveles, en busca de conseguir la independencia lógica y física de los datos.
Más adelante veremos los detalles de la arquitectura de 3 niveles de ANSI/SPARC/X3.
Sistemas de Gestión de Base de Datos (SGBD)
Las B.D. Requieren básica y fundamentalmente un Software de Gestión que facilite las operaciones y las interfaces con los usuarios. Este software es el Sistema de Gestión de Bases de Datos (S.G.B.D.)
Algunas definiciones de SGBD.
"EL S.G.B.D. es un conjunto coordinado de programas, procedimientos, lenguajes… que suministra, tanto a los usuarios no informáticos, como a los analistas programadores, o al administrador, los medios necesarios para describir y manipular los datos integrados en la base, manteniendo su integridad, confidencialidad y seguridad." [2]
"Colección de datos correspondientes a las diferentes perspectivas de un sistema de información (de una empresa o institución), existentes en algún soporte de tipo físico (normalmente de acceso directo), agrupados en una organización integrada y centralizada en la que figuran no sólo los datos en sí, sino también las relaciones existentes entre ellos, y de forma que se minimiza la redundancia y se maximiza la independencia de los datos de las aplicaciones que los requieren." [3]
"Una base de datos es una colección de datos estructurados según un modelo que refleje las relaciones y restricciones existentes en el mundo real. Los datos, que han de ser compartidos por diferentes usuarios y aplicaciones, deben mantenerse independientes de éstas, y su definición y descripción han de ser únicas estando almacenadas junto a los mismos. Por último, los tratamientos que sufran estos datos tendrán que conservar la integridad y seguridad de éstos." [4]
Este software capaz de soportar B.D. proporciona facilidades para definir Esquemas Conceptuales a través del llamado DDL (Data Definition Language, Lenguaje de Definición de Datos) y además suministra operaciones para consultar y actualizar (altas, bajas y modificaciones) la información residente en la B.D. A este segundo tipo de lenguaje se le conoce por DML (Data Manage Language: Lenguaje de Manipulación de Datos).
Arquitectura de referencia que debe tener un SGBD según ANSI
La arquitectura de los S.G.B.D. quedó establecida en 1975. El Comité ANSI/X3/SPARC (grupo de estudio del Standards Planning and Requirementes Committee del Organismo Estadounidense de Normalización - American National Standards Institute -) viene ocupándose desde principios de los años 70 de la normalización de los SGBD. Después de una serie de informes parciales, publica en 1975 un informe provisional ANSI (1975), donde propone la arquitectura a 3 niveles. Un informe posterior ANSI (1977) revisa y detalla esta arquitectura. Prosiguen los trabajos y en Mayo de 1985 aparece un nuevo informe del DAFTG (Database Architecture Framework TaskGroup) subgrupo del DBSSG (Database System Study Group) en donde se presenta el Modelo de Referencia para la estandarización de los SGBD (ANSI-1986)
Características que debe tener un SGBD
En general todos los SGBD presentan unas características comunes. Estas fueron ya definidas por Codd y posteriormente revisadas en función de las nuevas necesidades detectadas con la generalización del uso de las bases de datos. Idealmente, el SGBD debe poseer una serie de características indispensables para satisfacer a los usuarios, tales como:
- Mantener la independencia entre los programas y la estructura de la base de datos. Así se simplifica el mantenimiento de las aplicaciones que acceden a la base de datos. Aunque esta independencia nunca es absoluta, los SGBD, principalmente los relacionales, van respondiendo cada vez mejor a esta exigencia.
- Asegurar la coherencia de los datos. En lo posible, no debe existir redundancia de datos, los datos deben estar almacenados una sola vez en la base de datos.
- Permitir a los usuarios almacenar datos, acceder a ellos y actualizarlos. Además, el SGBD debe hacerlo de forma transparente al usuario, ocultando la estructura física interna de los datos y la forma de almacenarlos.
- Contener un catálogo accesible por los usuarios en el que se almacenen las descripciones de los datos de forma centralizada. Este catálogo se denomina diccionario de datos y permite identificar y eliminar las redundancias y las inconsistencias.
- Garantizar que todas las actualizaciones correspondientes a una determinada transacción se realicen, o que no se realice ninguna. Una transacción es un conjunto de acciones que cambian el contenido de la base de datos. Si la transacción falla durante su realización, la base de datos quedará en un estado inconsistente. Algunos de los cambios se habrán hecho y otros no, por lo tanto, los cambios realizados deberán ser deshechos para devolver la base de datos a un estado consistente. Esta característica se denomina atomicidad.
- Permitir que varios usuarios tengan acceso al mismo tiempo a los datos. Cuando dos o más usuarios acceden a la base de datos y al menos uno de ellos está actualizando datos, el SGBD deberá gestionar el acceso concurrente, impidiendo que haya datos corruptos o inconsistentes. Aquí el SGBD puede permitir la simultaneidad de accesos mediante el manejo eficiente de los bloqueos de la bases de datos.
- Garantizar la recuperación de la base de datos en caso de que algún suceso la dañe. El fallo puede ser debido a una avería en algún dispositivo hardware o un error del software, que hagan que el SGBD aborte, o puede ser debido a que el usuario detecte un error durante la transacción y la aborte antes de que finalice. En todos estos casos, el SGBD debe proporcionar un mecanismo capaz de recuperar la base de datos llevándola a un estado consistente.
- Garantizar la seguridad de la base de datos. Esto es, sólo los usuarios autorizados pueden acceder a la base de datos, permitiendo diferentes niveles de acceso. La protección debe ser contra accesos no autorizados, tanto intencionados como accidentales.
- Garantizar la integridad de la base de datos. Esto requiere la validez y consistencia de los datos almacenados. Normalmente se expresa mediante restricciones, que son una serie de reglas que la base de datos no puede violar.
- Mantener la disponibilidad continua. La base de datos debe estar siempre disponible para su acceso. El SGBD debe proporcionar utilidades de administración, mantenimiento y gestión que puedan realizarse sin detener el funcionamiento de la base de datos.
- Proporcionar herramientas de administración de la base de datos. Estas herramientas permiten entre otras funcionalidades: importar y exportar datos, monitorizar el funcionamiento y obtener estadísticas de utilización de la base de datos, reorganizar índices y optimizar el espacio liberado para reutilizarlo.
- Integrarse con algún software gestor de comunicaciones. Muchos usuarios acceden a la base de datos desde terminales remotos, por lo que la comunicación con la máquina que alberga al SGBD se debe hacer a través de una red. Todas estas transmisiones de mensajes las maneja el gestor de comunicaciones de datos. Aunque este gestor no forma parte del SGBD, es necesario que el SGBD se pueda integrar con él.
- Garantizar la escalabilidad y elevada capacidad de proceso. El SGBD debe aprovechar todos los recursos de máquina disponibles en cada momento, aumentado su capacidad de proceso, conforme disponga de más recursos.
- Poseer un lenguaje de definición de datos que permita fácilmente la creación de nuevas bases de datos, así como la modificación de su estructura.
- Poseer un lenguaje de manipulación de datos, que permita la inserción, eliminación, modificación y consulta de los datos de la base, de la forma más eficiente y conveniente posible.
- Permitir el almacenamiento de enormes cantidades de datos (miles de millones de caracteres), sin que el usuario perciba una degradación en cuanto al rendimiento global del sistema. Para ello el SGBD debe utilizar: índices, partición de tablas, etc.
La forma en que las distintas bases de datos comerciales y académicas abordan estas características difieren enormemente, no sólo por las técnicas utilizadas sino también por las aproximaciones o paradigmas con que se han desarrollado.
Ventajas de las Bases de Datos
El uso de las B.D. ha crecido vertiginosamente debido a las ventajas que presentan:
- En relación con los datos:
- Independencia de éstos respecto a los tratamientos y viceversa
- Disminución de las redundancias
- Mayor disponibilidad de los mismos
- Protección de los datos
- Mayor eficiencia en la recogida, codificación y entrada en el sistema
- En relación con los resultados:
- Mayor coherencia
- Mayor valor informativo
- Mayor eficiencia
- Mejor y más normalizada documentación de la información
- En relación con los usuarios:
- Acceso más rápido y sencillo de los usuarios finales
- Facilidades para compartir los datos
Una de las principales ventajas de implantar un Sistema de Gestion de Base de Datos en una organización radica en que se independizan los datos, que residen en el gestor de base de datos, de las aplicaciones que hacen tratamiento de ellos. Los beneficios de esto son muchos: la lógica de las aplicaciones no se ocupa de cómo se debe acceder a los datos, ni de la forma en que estos se han almacenado (de esto se ocupa el gestor, que se especializa en todas las peculiaridades del acceso y modificación de datos), los datos residen en la base datos, pudiendo ser accedidos desde diferentes sistemas, o pudiendose migrar la aplicación sin problemas.
La arquitectura de tres niveles y el modelo de referencia de ANSI/X3/SPARC.
La arquitectura ANSI-SPARC es un diseño abstracto para la elaboración de estándares en materia de SGBD, cuyos primeros trabajos datan del año 1975. La mayoría de SGBD comerciales actuales están basados en mayor o menor medida en este modelo (pese a que nunca se ha convertido en un estándar formal de iure, siendo por tanto un estándar de facto).
La principal innovación introducida por el modelo ANSI-SPARC consiste en introducir el concepto de independencia de los datos. La introducción de tres capas de abstracción (esquema externo o vistas de usuarios, esquema conceptual o lógico y esquema físico o interno) permite que se pueda modificar una de las capas sin que se vea afectado el resto (y por tanto, aumentando la flexibilidad de las aplicaciones).
Más información sobre la Arquitectura de 3 niveles de ANSI/X3/SPARC
Modelos de datos y Sistemas de Gestión de Bases de Datos.
El concepto de modelo de datos es un concepto que trasciende el ámbito de los Sistemas de Gestión de Base de Datos, pero que tiene una aplicación directa para los SGBD, y juega un papel esencial dentro del Modelo de Referencia de ANSI. Existen múltiples definiciones del concepto modelo de datos:
"Un modelo de datos, en el campo de la ingeniería del software, es un modelo abstracto que describe cómo se representan los datos y cómo se accede a ellos. Los modelos de datos definen, de un modo formal, elementos de datos y sus interrelaciones, para un determinado dominio objeto del problema (universo del discurso). Los modelos de datos se suelen especificar mediante lenguajes de modelado de datos."
“Conjunto de conceptos, reglas y convenciones que nos permiten describir los datos de una parcela del mundo real (Universo del discurso)”.
“Modelizar consiste en definir un mundo abstracto y teórico tal que las conclusiones que se pueden deducir de él coincidan con las manifestaciones aparentes del mundo real”.
En el Modelo de Referencia de ANSI, uno de los componentes esenciales del núcleo del SGBD es el Sistema de Control de Transformación de Datos (SCTD). El SCTD incorpora operadores para definir y manipular los datos gestionados, mediante los lenguajes de definición de datos (DDL) y lenguaje de manipulación de datos (DML). El SCTD está basado en un modelo de datoso o metamodelo capaz de soportar la descripción y la manipulación de otros modelos de datos.
En el proceso de abstracción que es el diseño de una base de datos se trata de modelizar el mundo real para lo cual nos apoyamos en un Modelo de Datos, considerado así como una herramienta intelectual que facilita la interpretación de nuestro universo de discurso y su representación. El Modelo de Datos debe recoger dos tipos de propiedades de la realidad a modelar : Estáticas y Dinámicas.
- Estáticas. No varían con el tiempo. Se corresponden con la Componente Estática del modelo, que es el 'conjunto de reglas que nos permiten generar la estructura y se definen mediante el Lenguaje de Definición de Datos:
- conjunto de objetos (entidades con sus atributos)
- conjunto de asociaciones entre objetos (interrelaciones)
- conjunto de restricciones (pueden ser inherentes u opcionales)
- Dinámicas. Varían con el tiempo. Se corresponden con la Componente Dinámica del MD que es el conjunto de operadores que se pueden aplicar sobre la estructura y se definen mediante el Lenguaje de Manipulación de Datos.
Existen diferentes clasificaciones de los modelos de datos, muchas de ellas escapando del alcance de los Sistemas de Gestión de Bases de Datos. Dentro de los modelos de datos que tienen implantación directa en este ámbito, cabe destacar los siguientes:
- Modelo de Datos en Red y Modelo CODASYL.
- Modelo Jerárquico.
- Modelo relacional y modelo relacional extendido.
- Modelo de datos orientado a objetos.
Lenguajes de una base de datos: DDL, DML, lenguaje de control de transacciones, lenguajes de cuarta generación (4G).
Para proporcionar a los usuarios las diferentes facilidades, los SGBD deben ofrecer lenguajes especializados e interfaces apropiadas para cada tipo de usuario: administradores de la base de datos, disenadores, programadores de aplicaciones y usuarios finales.
La interaccion del usuario con la base de datos debe efectuarse a traves de alguna tecnica que haga facil la comunicacion, y que permita al usuario centrarse en el problema que desea solucionar, mas que en la forma de expresarlo. La mejor forma de alcanzar este objetivo, es darle un lenguaje parecido al lenguaje natural, que le permita expresar de forma sencilla los requerimientos.
DDL. Lenguaje de definición de datos.
El lenguaje de definicion de datos esta orientado a la definicion, descripcion y mantenimiento de la estructura de la base de datos. Permite al administrador definir los datos con facilidad y precision, especificando sus distintas estructuras. Debe tener facilidad para describir la estructura del esquema conceptual, hacer las especificaciones relativas al esquema fisico, y declarar las estructuras del esquema externo, requeridas por las aplicaciones.
Para el caso concreto de los SGBD relacionales, se utiliza como estandar el SQL, para crear las bases de datos a partir del esquema relacional. Mediante el DDL del SQL se crean tablas, columnas con los dominios correspondientes, indices, claves, las restricciones de integridad, etc. El SGBD posee un compilador de DDL cuya funcion consiste en procesar las sentencias del lenguaje para identificar las descripciones de los distintos elementos de los esquemas y almacenarlas generalmente en una base de datos especial que contiene los metadatos. Esta base de datos especial, es comunmente llamada diccionario de datos o catalogo del SGBD. Dicho catalogo es el que se consulta, para obtener la estructura de la base de datos, toda vez que se quiere leer, modificar o eliminar los datos de la base de datos.
El Diccionario de Datos es el lugar donde se guarda información acerca de todos los datos que forman la BD: su descripción y la de los objetos que la forman. En una BD relacional, el diccionario de datos proporciona información acerca de:
La estructura lógica y física de la BD. Esquemas externo, conceptual e interno, y correspondencia entre los esquemas.
Las definiciones de todos los objetos de la BD: tablas, vistas, índices, disparadores, procedimientos, funciones, etc.
El espacio asignado y utilizado por los objetos.
Los valores por defecto de las columnas de las tablas.
Información acerca de las restricciones de integridad.
Los privilegios y roles otorgados a los usuarios.
Estadísticas de utilización, tales como la frecuencia de las transacciones y el número de accesos realizados a los objetos de la base de datos.
Se puede tener un historial de los cambios realizados sobre la base de datos.
Las definiciones de todos los objetos de la BD: tablas, vistas, índices, disparadores, procedimientos, funciones, etc.
El espacio asignado y utilizado por los objetos.
Los valores por defecto de las columnas de las tablas.
Información acerca de las restricciones de integridad.
Los privilegios y roles otorgados a los usuarios.
Estadísticas de utilización, tales como la frecuencia de las transacciones y el número de accesos realizados a los objetos de la base de datos.
Se puede tener un historial de los cambios realizados sobre la base de datos.
EL DDL permite especificar:
- Elementos de datos
- Estructura de datos
- Relaciones entre datos
- Reglas de integridad
- Vistas logicas
- Espacio reservado para la base de datos
- Formato de representacion (binario, decimal, …)
- Modo de acceso (punteros, indices, …)
DML: LENGUAJE DE MANIPULACION DE DATOS.
El lenguaje de consulta y manipulacion de datos sirve para obtener, insertar, eliminar y modificar los datos de la base de datos. Al igual que el programador necesita el DML como lenguaje huesped dentro de un lenguaje anfitrion que maneja, el usuario no informatico necesita de un instrumento para comunicarse con la base de datos. Este instrumento suele ser un DML autocontenido, que da facilidades a los usuarios con pocos conocimientos de programacion a acceder y manipular los datos en modo interactivo.
El lenguaje de manipulacion de datos SQL, puede actuar al mismo tiempo como huesped y como autocontenido, cumpliendo la propiedad dual (Codd 1990). En una primera clasificacion de los DML, hay dos tipos lenguajes segun su definicion:
- DML procedural. El programador especifica que datos se necesitan y como obtenerlos. Se deben especificar todas las operaciones de acceso a datos llamando a los procedimientos necesarios para obtener la informacion requerida. Estos lenguajes acceden a un registro, lo procesan y basandose en los resultados obtenidos, acceden a otro registro, que tambien deben procesar. Asi se va accediendo a registros y se van procesando hasta que se obtienen los datos deseados. Las sentencias de un DML procedural deben estar embebidas en un lenguaje de alto nivel. Como ya hemos comentado este es el lenguaje conocido como lenguaje anfitrion.
- DML no procedural. El usuario o programador especifica que datos quiere obtener sin decir como se debe acceder a ellos. El SGBD traduce las sentencias del DML en uno o varios procedimientos que manipulan los conjuntos de registros necesarios. Esto libera al usuario de tener que conocer cual es la estructura fisica de los datos y que algoritmos se deben utilizar para acceder a ellos. A los DML no procedurales tambien se les denomina lenguajes declarativos. El lenguaje DML no procedural mas conocido es el SQL. Los lenguajes no procedurales son mas faciles de utilizar y conocer que los procedurales porque el SGBD oculta al usuario los detalles sobre como se ha realizado la operacion solicitada.
En una segunda clasificacion de los LMD, hay dos tipos de lenguajes segun como recuperan la informacion:
- Navegacionales: Recuperan o actualizan los datos registro a registro, debiendo el programador indicar el camino que se ha de recorrer, a traves de la estructura definida, hasta llegar al registro buscado. Se utilizan estos lenguajes en base de datos en red y jerarquicas.
- No navegacionales: Actuan sobre un conjunto de registros. Una unica sentencia puede dar lugar a recuperar o actualizar todos los registros que cumplan una determinada condicion. El SQL es de este tipo.
En el caso del SQL, asociado al DML se suele encontrar un modulo optimizador que se ocupa de analizar la peticion contra la base de datos y decidir el mejor camino de acceso con el fin de acelerar la ejecucion. Para la toma de decisiones, el optimizador necesita de la informacion contenida en el catalogo o diccionario del SGBD. La manipulacion de datos comprende las siguientes operaciones:
- Recuperacion de Informacion.
- Insercion de nueva Informacion.
- Eliminacion de informacion existente.
- Modificacion de Informacion Almacenada.
LENGUAJE DE CONTROL DE DATOS (DCL)
EL lenguaje de Control de Datos sirve para trabajar en un entorno multiusuario, donde es muy importante la proteccion y la seguridad de los datos y la comparticion de datos por parte de usuarios. Se encarga principalmente de tres actividades sobre la base de datos:
- Control de permisos de acceso
- Control de concurrencia
- Control de transacciones
Bibliografía
1. Jim Hoffer, "Backing Up Business - Industry Trend or Event", Health Management Technology, Jan 2001
2. Adoración de Miguel Castaño, Mario Piattini Velthuis, Esperanza Marcos Martínez. Diseños de bases de datos relacionales, 2000
3. L. Guilera, Introducción a la informática. EDUNSA. 1993.
4. MOTA, L., CELMA, M., y CASAMAYOR, J.C. Bases de datos relacionales: teoría y diseño(1994): . Valencia: Servicio de Publicaciones U.P. Valencia.
: codd : Codd, E.F. (1970). "A Relational Model of Data for Large Shared Data Banks". Association for Computing Machinery SIGIR Forum archive Volume 7 , Issue 4
5. Kim, Won. Introduction to Object-Oriented Databases. The MIT Press, 1990. ISBN 0-262-11124-1
Si te ha gustado esta entrada, suscríbete para recibir las próximas entradas por correo electrónico. Por favor, apoya este blog.
No hay comentarios:
Publicar un comentario