Plantilla:PHP/ConceptosGeneralesBaseDatos

BASES DE DATOS: Introducción
Una muy breve introducción sobre lo que es una base de datos. Es éste un concepto conocido, pues es un término que habitualmente usamos de forma coloquial.

center

Sería inimaginable buscar un libro en una biblioteca si no hubiera una organización u orden para localizarlo o a la hora de añadir un libro nuevo (en una sección, en una estantería concreta y no en cualquiera.

center

Igualmente si voy a tener libros pequeños, los pondré en estanterías pequeñas, si voy a almacenar libros grandes necesitaré tener estanterías grandes.

Siguiendo esta lógica, las bases de datos han de estar preparadas para almacenar el tipo de información que nos pueda venir, para ello habrá que hacer un diseño correcto de las tablas y atributos para poder almacenar toda la información de nuestro sistema.

Esto implica tener que realizar un análisis detallado del sistema, buscando de alguna forma todos los posibles casos que se pueden producir para tener la base de datos preparada para que esa situación se pueda almacenar en forma de datos dentro de mi sistema

Ciclo en el desarrollo de una base de datos
Hay tres niveles como podemos ver en la imagenive

imagen:ciclo_vida_bd.png

Nivel Conceptual
Grupo de personas que saben mucho de su negocio, pero seguramente poco de tecnologías de desarrollo Persona/s que tienen (deben tener) un alto conocimiento de desarrollo técnico, pero seguramente saben poco del negocio que han de automatizar Qué el grupo técnico tenga un conocimiento detallado del negocio y puedan desarrollar una aplicación que satisfaga las necesidades del cliente Imagen:especificacion1.png
 * Corresponde a obtener las especificaciones del cliente
 * En este nivel debemos establecer comunicación con el cliente y técnicos.
 * Cliente
 * Técnico
 * Objetivo

Modelado conceptual

 * Serán los datos que queremos almacener de un determinado universo del discurso.
 * Usaremos el Modelo Entidad/Relación
 * también conocido como modelo Entidad interrelacion o modelo de chen}}

Modelo Entidad/Relación

 * Es un modelo que nos va a permitir mostrar la parte estática del sistema
 * Solo va a mostrar los elementos o entidades y las relaciones que ocurren ente ellos

Entidades

 * Las entidades son esos elementos de los cuales queremos guardar información

Imagen:concepto_entidad.png Imagen:entidad.png Imagen:entidad_conjunto.png
 * Representación gráfica
 * Su representación es un rectángulo
 * El nombre se especifica dentro del rectángulo
 * Se suelen poner en singular
 * Una entidad va a representar un conjunto de elementos, por ejemplo la entidad Alumno representará varios alumnas
 * Tipos de entidades

{{MRM_Definicion|Title=Tipos de debilidades| {{MRM_Ejemplo|Title=Debilidad en existencia| En una empresa que tiene empleados se quiere saber los familiares de los empleados para por ejemplo tener acceso a las instalaciones o acceder a determinadas promociones Si un empleado dejara de serlo, claramente los familiares de ese empleado ya no serían datos que a la empresa le interesara conocer Aquí vemos la debilidad en existencia }} {{MRM_Ejemplo|Title=Debilidad en identificación| En un hotel tenemos plantas (primero, segunda, ...) cada planta tiene unas características y más atributos que nos interesa guardar Las plantas tienen habitaciones que se identifican por un número (de la 1 hasta el número de habitaciones que haya. Está claro que para saber de qué habitación hablamos en un momento dado, no podemos decir la habitacion 10, habrá que decir la habitación 10,  de la planta 2  o la que sea  Aquí vemos la debilidad en identificación ya que para identificar un elemento de la entidad habitación, previamente necesitamos conocer el elemento de la entidad  Planta con el que está relacionado. Por supuesto que también es una debilidad en existencia,  ya que si desapareciera una planta, desaparecerían también las habitaciones. }}
 * Debilidad en existencia
 * Para que exista un elemento de la entidad tiene que existir el elemento de la entidad con el que está relacionado
 * Supongamos el siguiente ejemplo
 * Debilidad en identificación
 * Son entidades que dependen de otra para que existan o incluso para poderse identificar
 * Se representan con un doble cuadrado
 * Es una debilidad más fuerte
 * En ella para poder identificar un elemento de una entidad, necesitamos identificar previamente el elemento de la entidad con el que está relacionado
 * Supongamos un ejemplo

{{MRM_Definicion|Title=Jerarquia| {{MRM_Ejemplo|Title=Jerarquía con atributos individuales| Una editorial realiza publicaciones. Estas publicaciones pueden ser libros en cuyo caso necesitamos conocer el autor principal o también revistas, en cuyo caso necesitamos la tirada (número de ejmplares de esa publicación) Imagen:jerarquia_1.png
 * Jerarquía entre entidades
 * Como ya hemos estudiado en la herencia dentro de la programación orientada a objetos, puede ocurrir que una entidad se pueda especializar.
 * Es decir que una entidad pueda ser de diferentes tipos, y ademas, cada uno de esos subtipos tengan atributos o relaciones de forma individual (no compartidos).
 * En este caso podremos establecer una jerarquía
 * Es una estructura de datos en la cual tenemos entidades que se especializan en subtimos
 * Cada subtipo a de tener atributos y/o relaciones de forma individual (Si no fuera así sería suficiente con tener un atributo llamado tipo)

}} {{MRM_Ejemplo|Title=Jerarquía con relaciones individuales| En el ejemplo anterior además una publicaciones tiene subscriptores Imagen:jerarquia_2.png }} {{MRM_Ejemplo|Title=Entidad con un atributo tipo, pero sin jerarquía| Imagen:jerarquia_3.png }}

}}
 * Concepto de agregación

Atributos

 * Qué son


 * Tipos de atributos

{{MRM_Definicion|Title=Atributo Derivado {{MRM_Ejemplo|Title=Representación| De un alumno se quiere saber su fecha de nacimiento y su edad La edad la podremos calcular a partir de la fecha de nacimiento y de la fecha actual que siempre podremos obtener del sistema
 * Es aquel atributo cuyo valor no necesitamos almacenarlo, ya que lo podemos calcular a partir de los valores de otro/s atributos y/o valores del sistema.
 * Se representa con líneas discontinuas en el círculo

}} {{MRM_Definicion|Title=Atributo de la relación| {{MRM_Ejemplo|Title=Atributos de la relación| Un programador trabaja en un proyecto con un determinado cargo el programador puede desempeñar diferentes cargos: (analista, programador, diseñador de software, maquetador) Este atributo toma valor cuando un programador trabaja en un proyecto Lo hace con undeterminado cargo. Imagen:atributo_relacion.png {{Nota;: Los atributos pueden ser también de la relación}} }} }}
 * Atributos de la relación
 * Hay muchas ocasiones en las cuales las propiedades o características se establecen entre dos entidades que se relacionan
 * Pero en realidad no pertenecen en particular a ninguna de ellas, sino que son características que toman valor cuando se establece la relación entre dos elementos relacionados
 * En este caso diremos que el atributo es de la relación.

Interrelaciones o vínculos

 * Pueden ser débil si relacionan una entidad fuerte con una débil
 * Cardinalidad
 * Qué es
 * 1) Cardinalidad de la entidad
 * 2) Cardinalidad de la relación
 * Relaciones

Nivel Lógico

 * A este nivel vamos a usar el modelo relacional
 * Es importante tener claro que lo que queremos realizar a este nivel es aplicar una serie de reglas para transformar el modelo entidad/interrelación o modelo de Chen en un modelo relacional


 * En este nivel hay que estudiar una serie de conceptos sencillos, que convienen dejar claros

Nivel Físico
<!--

Normalización
Las bases de datos han de estar construidas de una forma normal, de manera que evitemos redundancias innecesarias, y sólo las mantengamos cuando las consideremos necesarias y seamos conscientes de que existen.
 * Si hacemos nuestros diseños usando el modelo de chen, garantizamos hasta la 3FN

Usar BD desde un lenguaje de programación
Una de las principales características que tiene la programación del back-end o programación al lado del servidor es acceder a bases de datos. Esta parte sí que es intrínseca y propia del lado del servidor. Nosotros accederemos a la base de datos desde nuestro programa. Desde él de manera habitual, realizaremos las siguientes acciones :

Para realizar estas acciones disponemos de diversas Funciones/Clases específicas dentro de PHP, Nos referiremos a ellos como extensiones de PHP.

Bases de datos y PHP
PHP tiene un API especifico para trabajar directamente con mysql mysqli, el cual incorpora el driver y conector necesario para trabajar con ella de forma nativa. Que el driver sea nativo implica que está implementado utilizando un framework de extensiones de php.

También vamos a disponer de la extensión PDO, la cual se independiza del gestor concreto de bases datos que vayamos a utilizar.

Extensiones de php

 * Por lo tanto en este tema vamos a ver dos extensiones:
 * 1) mysqli usar una extensión nativa con su SGBD en concreto mysql que viene con el propio lenguaje
 * 2) PDO usar una extensión genérica que permite conectarse con cualquier gestor de BD, sin necesidad de cambiar nada de código, salvo los parámetros de la construcción del objeto.

Ciclo en el desarrollo de una base de datos
Hay tres niveles como podemos ver en la imagenive

Nivel Conceptual
Grupo de personas que saben mucho de su negocio, pero seguramente poco de tecnologías de desarrollo Persona/s que tienen (deben tener) un alto conocimiento de desarrollo técnico, pero seguramente saben poco del negocio que han de automatizar Qué el grupo técnico tenga un conocimiento detallado del negocio y puedan desarrollar una aplicación que satisfaga las necesidades del cliente Imagen:especificacion.png
 * Corresponde a obtener las especificaciones del cliente
 * En este nivel debemos establecer comunicación con el cliente y técnicos.
 * Cliente
 * Técnico
 * Objetivo

Normalización
Las bases de datos han de estar construidas de una forma normal, de manera que evitemos redundancias innecesarias, y sólo las mantengamos cuando las consideremos necesarias y seamos conscientes de que existen.
 * Si hacemos nuestros diseños usando el modelo de chen, garantizamos hasta la 3FN

Usar BD desde un lenguaje de programación
Una de las principales características que tiene la programación del back-end o programación al lado del servidor es acceder a bases de datos. Esta parte sí que es intrínseca y propia del lado del servidor. Nosotros accederemos a la base de datos desde nuestro programa. Desde él de manera habitual, realizaremos las siguientes acciones :

Para realizar estas acciones disponemos de diversas Funciones/Clases específicas dentro de PHP, Nos referiremos a ellos como extensiones de PHP.

Bases de datos y PHP
PHP tiene un API especifico para trabajar directamente con mysql mysqli, el cual incorpora el driver y conector necesario para trabajar con ella de forma nativa. Que el driver sea nativo implica que está implementado utilizando un framework de extensiones de php.

También vamos a disponer de la extensión PDO, la cual se independiza del gestor concreto de bases datos que vayamos a utilizar.

Extensiones de php

 * Por lo tanto en este tema vamos a ver dos extensiones:
 * 1) mysqli usar una extensión nativa con su SGBD en concreto mysql que viene con el propio lenguaje
 * 2) PDO usar una extensión genérica que permite conectarse con cualquier gestor de BD, sin necesidad de cambiar nada de código, salvo los parámetros de la construcción del objeto.

Ciclo en el desarrollo de una base de datos
Hay tres niveles como podemos ver en la imagen [imagen:ciclo_vida_bd.png]
 * 1) Nivel conceptual
 * 2) Nivel Lógico
 * 3) Nivel Físico

Nivel Conceptual
Grupo de personas que saben mucho de su negocio, pero seguramente poco de tecnologías de desarrollo Persona/s que tienen (deben tener) un alto conocimiento de desarrollo técnico, pero seguramente saben poco del negocio que han de automatizar Qué el grupo técnico tenga un conocimiento detallado del negocio y puedan desarrollar una aplicación que satisfaga las necesidades del cliente [Imagen:especificacion.png]
 * Corresponde a obtener las especificaciones del cliente
 * En este nivel debemos establecer comunicación con el cliente y técnicos.
 * Cliente
 * Técnico
 * Objetivo

Normalización
Las bases de datos han de estar construidas de una forma normal, de manera que evitemos redundancias innecesarias, y sólo las mantengamos cuando las consideremos necesarias y seamos conscientes de que existen.
 * Si hacemos nuestros diseños usando el modelo de chen, garantizamos hasta la 3FN

Usar BD desde un lenguaje de programación
Una de las principales características que tiene la programación del back-end o programación al lado del servidor es acceder a bases de datos. Esta parte sí que es intrínseca y propia del lado del servidor. Nosotros accederemos a la base de datos desde nuestro programa. Desde él de manera habitual, realizaremos las siguientes acciones :

Para realizar estas acciones disponemos de diversas Funciones/Clases específicas dentro de PHP, Nos referiremos a ellos como extensiones de PHP.

Bases de datos y PHP
PHP tiene un API especifico para trabajar directamente con mysql mysqli, el cual incorpora el driver y conector necesario para trabajar con ella de forma nativa. Que el driver sea nativo implica que está implementado utilizando un framework de extensiones de php.

También vamos a disponer de la extensión PDO, la cual se independiza del gestor concreto de bases datos que vayamos a utilizar.

Extensiones de php
-->
 * Por lo tanto en este tema vamos a ver dos extensiones:
 * 1) mysqli usar una extensión nativa con su SGBD en concreto mysql que viene con el propio lenguaje
 * 2) PDO usar una extensión genérica que permite conectarse con cualquier gestor de BD, sin necesidad de cambiar nada de código, salvo los parámetros de la construcción del objeto.