Sunteți pe pagina 1din 47

Guía

didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.


Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
INTRODUCCIÓN A LAS BASES DE DATOS

PERSISTENCIA DE INFORMACIÓN SOBRE BASE DE DATOS.

Las bases de datos o BD son tecnologías ampliamente utilizada para persistir información gran cantidad
de información, el termino persistir en BD se refiere a la capacidad que poseen estos sistemas para
guardar, consultar, modificar y eliminar la información que en ella se encuentra.
Una BD no es más que un conjunto de archivos especiales denominados tablas, las cuales están diseñados
para almacenar grandes cantidades de información almacenada en formatos apropiados (llamados
Columnas o Campo y Filas o Registros) para facilitar y agilizar las operaciones de persistencia de
información o CRUD (Create. Read, Update y Delete) que traducidas al español significan Insertar o Crear,
Leer o Consultar, Actualizar o Modificar y Eliminar o Borrar.

Los elementos básicos y mas importantes de un sistema de Base de datos son:

1. LA BASE DE DATOS es un conjunto de archivos especiales llamados Tablas, en las cuales almacenamos
la información en forma de filas y columnas.
2. LAS TABAS representan archivos lógica y estructuralmente formateados en Columnas y Filas donde se
guarda información importante. Generalmente una BD consta de un conjunto de tablas relacionadas
entre si, de tal manera que la información contenida en su interior mantenga su lógica propia y su
integridad. En el mundo practico de la informática, una tabla puede presentar y almacenar información
concerniente a cualquier ente o entidad del mundo real o imaginario, como por ejemplo, los [Alumnos]
y [Docentes] de una [Universidad], los cuales poseen sus propios atributos y cualidades, pero también
puede representar y almacenar información correspondiente a entidades abstractas o intangibles
como por ejemplo, las [Matriculas] de los [Alumnos] de dicha [Universidad], o las [Compras] de una
[Tienda] o las [Transacciones] de un [Banco], etc. A cada fila de la tabla se le llama Entidad, es decir,
una Entidad es el conjunto horizontal de los valores en las columnas de la tabla, un ejemplo de entidad
pueden ser los datos de un Alumno (codigo:123, Nombre: Sebastián, Apellidos: Arrieta, Genero:
Masculino, Fecha de Nacimiento: 09-02-2002, Teléfono: Null, Email: secarvi@hotmail.com, Semestre:
4), para explicar mejor el concepto las tablas están encerradas entre [ ] dado poseen cualidades o
atributos propios, los cuales a su ves poseen datos o valor para cada una de las entidades que se
pueden almacenar en dichas tablas. La siguiente imagen muestra como podría ser el modelo de una
tabla para almacenar las entidades (los datos) de los alumnos en una universidad.

Las columnas o campos, representan los datos (campos, propiedades,


cualidades) o atributos de las Entidades de una Tabla, los cuales contienen
datos atómicos o indivisibles propios de dichas entidades, por ejemplo, una
entidad de la tabla [Alumnos] podría tener las siguientes propiedades o
columnas: Código, Nombre, Apellidos, Genero, Fecha_Nacimiento, Teléfono,
Email y Semestre, mientras que las columnas de en cuyo caso la primera podría
tener campos, atributos o columnas como el código, nombre, apellidos,
genero, fecha_nacimiento, email, teléfono, semestre, mientras que la segunda
podría tener atributos o columnas como por el código, el nombre, apellidos,
profesión, fecha de nacimiento, escalafón.


8
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

si tiene o no postgrado y años de experiencia, por otro lado podríamos pensar como ejemplo de
entidades lógicas e intangibles las entidades [Carreras], [Asignaturas] y [Matriculas] de una
[Universidades], cuyos atributos o columnas para el caso de la tabla [Carreras] sus columnas o
atributos podrían ser el cogido, nombre, facultad y decano, mientras que para el caso de la tabla
[Asignaturas] podrían ser el código, nombre, la facultad y el decano, de igual forma podríamos
pensar en la entidad [Matriculas], como un ejemplo mas de una Entidad Intangible en esta BD
ejemplo, podríamos citar la tabla [Matriculas], para cuyos atributos o columnas podríamos
identificar el código, la fecha de matricula, el semestre, el código del [Alumno], el código de la
[Carrera].

La siguiente imagen muestra un ejemplo de cómo podría verse o modelarse las tablas Alumnos,
Docentes, Asignaturas y Carreras.



3. LAS FILAS O REGISTROS de la tabla están formadas por la intersección horizontal de todas las columnas
(atributos) de dicha tabla, estas filas realizar consultas simples y complejas vinculadas varias tablas al
mismo tiempo. La siguiente imagen muestra las entidades de una tabla Alumnos:




En esta tabla podemos apreciar 5 Filas, cada una representa una entidad diferente para dicha tabla, cada
entidad posee valores propios para cada atributo o columna de la tabla, los cuales son: Código, Nombre,
Apellidos, Genero, Fecha_Nacimiento, Teléfono, Email y Semestre.

4. LAS LLAVES PRIMARIAS son restricciones que se le asignan a una o varias columnas de una tabla,
esta restricción tiene como objetivo marcar a dicha o dichas columnas como identificador
9
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
inequívoco y único de cada fila (registro o entidad) almacenado en la tabla, es decir, el valor de una
llave primaria no se puede repetir dentro la o las columnas marcadas como llave primaria, tampoco
puede recibir valores vacíos (NULL), esto significa que es necesario ingresarle un valor al momento
de agregar una entidad (fila o registro) en la tabla. Ejemplo de llave primara para la tabla [Alumnos]
puede ser el numero de su documento de identidad, o el código que le asigna la Universidad, pues
estos dato no se pueden repetir y no puede ser vacío. Un mal ejemplo de llave primaria para la
tabla Alumnos es la columna nombre, dado que pueden existir varios alumnos con el mismo
nombre, lo que implica la posibilidad de que el valor de la columna nombre se repita, característica
que no se puede permitir en una clave. Podremos estar tentados a pensar que la columna email
puede ser clave primaria, pero recordemos todos los alumnos no poseen email necesariamente,
por lo tanto, es muy posible que esta columna pueda tener valores vacíos o NULL en algún
momento, otra cualidad que no se permite en una llave primaria.

RELACIONES ENTRE TABLAS Y LLAVES FORÁNEAS:

Una base de datos es un conjunto de información que se relaciona entre si, esta información esta
almacenada en Tablas de datos, por ende, las las relaciones entre tablas son muy comunes en una base
de datos, esta relaciones puede ser de tres tipos:

• RELACIÓN DE UNO A UNO ENTRE TABLA [A] Y TABLA [B], se presentan cuando una y solo una entidad
(fila) de una tabla [A] se asocia o relaciona con una y solo una entidad de otra tabla [B].
Este tipo de relación se representa mas o menos así [A] (0,1)---<>---(0,1)[B].
Un ejemplo puede ser la relación que existe entre la tabla [Departamentos] y la tabla [Capitales], donde
una entidad de la tabla [Departamentos] por ejemplo Bolívar esta relacionada con una y solo una
entidad de la tabla [Capitales] como lo es Cartagena, y una entidad de la tabla [Capitales] se relaciona
con una y solo una entidad de la tabla [Departamentos]. Es decir, en un país como Colombia, un
departamento solo puede tener una sola capital y una capital solo puede pertenecer a un solo
departamento.
La siguiente imagen muestra como podría modelarse una relaciona Uno a Uno entre las tablas
Departamentos y Capitales.



• RELACIONES DE UNO A MUCHOS ENTRE TABLA [A] Y TABLA [B]: se presentan cuando una entidad de
una tabla [A] se relaciona con ninguna o muchas entidades de la tabla [B] y una entidad de la tabla [B]
se relaciona con 0 o una y solo entidades de la tabla [A].

10
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Esta de relación se representa mas o menos así [A] (0,1)---<>---(*)[B], el * significa 0 o cualquier otra
cantidad positiva.

Un ejemplo de puede ser la relación que existe entre la tabla [Alumnos] y la tabla [Carreras], donde
una entidad de la tabla [Alumnos] se relaciona con una y solo una entidad de la tabla [Carreras] y una
entidad de la tabla [Carrera] se relaciona con cero o muchas (*) entidades de la tabla [Alumnos]. Es
decir, en una universidad un alumno estudia una y solo una carrera y una carrera es estudiada por
ninguno cero o muchos (*) alumnos.
La siguiente imagen muestra como podría modelarse una relación de Uno a Muchos entre las tablas
Alumnos y Carreras.



• RELACIONES DE MUCHOS A MUCHOS ENTRE TABLA [A] Y TABLA [B]: se presentan cuando una entidad
de la tabla [A] se asocia o relaciona con cero o muchas (*) entidades de la tabla [B], una entidad de la
tabla [B] se asocial o relaciona con coro o muchas (*) entidades de la tabla [A]. Las relaciones de este
tipo generan una tercera tabla [C], la cual tendrá una llave primaria formada por la columna llave
primara en tabla [A] y la columna llave primara en la tabla [B], además de cualquier otra columna que
se requiera adicionar a tabla [C] para poder asegurar la integridad y características de columna
identificadora en la llave primaria de tabla [C].
Esta de relación se representa mas o menos así [A] (0,1)---<>---(*)[B], el * significa 0 o cualquier otra
cantidad positiva.
Un ejemplo de este tipo de relación puede ser la asociación que existe entre la tabla [Alumnos] y la
tabla [Asignaturas], donde una entidad de la tabla [Alumnos] puede tener una relación con cero o
muchas (*) entidades de la tabla [Asignaturas] y una entidad de la tabla [Asignaturas] puede tener una
relación con cero o muchas (*) entidades de la tabla [Alumnos]. Es decir, en una universidad un alumno
puede tener cualquier cantidad de asignaturas matriculadas, y una asignatura puede ser matriculada
por cualquier cantidad de alumnos, esto daría como resultado una tercera tabla al que podríamos
llamar [Matricula], dado que un alumno matricula muchas asignaturas y una asignatura es matriculada
por muchos alumnos, cuyas columnas podrían ser alumno_codigo, asignatura_codigo, año, periodo,
semestre, fecha.
Es pertinente resaltar que toda relación de Muchos a Muchos entre dos tablas [A] y [B], siempre
podemos representarla como una relación Uno a Muchos entre tabla [A] y [C] y una relación de Uno a
Muchos entre tabla [B], en este caso podríamos representarla así [A] (1)---<>---(*)[C](*)---<>---(1)[B].

11
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)



• LLAVE FORÁNEA ENTRE TABLA [A] Y TABLA [B]: El concepto de llave foránea esta directamente
relacionado con el concepto de relación o asociación entre tablas, y se puede definir así:
Dada dos tablas [A] y [B] que están relacionadas Uno a Uno o relacionadas Una a Muchos, entonces,
solo en la tabla [A] debe existir una columna que haga referencia a los datos almacenados en la
columna que actúa como llave primaria en la tabla a[B], a esta columna en la tabla [A] se le conoce
como llave foránea. Una tabla [A] puede tener tantas llaves foráneas como relacionas Uno a Muchos
tenga con otras tablas [B], [C], … , [Z]. Se recomienda que a la columna que actúa como llave foránea
en la tabla [A] la llamaremos con el nombre de la tabla [B].

Para explicar esto mejor, observemos la relación de uno a uno entre las tablas [Capitales] y
[Departamentos], siendo [Capitales] la tabla [A] y [Departamentos] la tabla [B], tal como se aprecia en
la siguiente imagen:



Observemos que en la tabla [Capitales] existe una columna (campo o atributo) llamada
Departamento_codigo, esta columna referencia a la llave primaria de la tabla [Departamentos], por lo
tanto, la columna Departamento_codigo de la tabla [Capitales] actua como llave foranea hacia la tabla
[Departamentos], por lo tanto, cada entidad en la tabla [Capitales] debe tener el codigo de una entidad en
la tabla [Departamentos] a con la que se relaciona. En palabras mas comunes, esto queire decir que una
Capital debe tener un Departamento. En las relaciones Uno a Uno podemos decidir cual de las dos tablas
[A] o [B] debe tener la llave foranera que las relaciona entre si, pero una pista que nos ayuda a decidir esto
puede ser identificando cual de las dos tablas depende una de la otra, en nuestro ejemplo, cada entidad
en la tabla [Capitales] depende de la existencia de una entidad en la tabla [Departamentos], por tal motivo,
la tabla [Ciudades] debe tener la llave foranea hacia la tabla [Departamentos].

12
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Para el caso de las relaciones Uno a Muchos entre tablas [A] y [B] podemos tomar como ejemplo la relacion
que existe entre las tablas [Alumnos] y [Carreras], donde la primera representa a la tabla [A] y la segunda
a la tabla [B].



Observemos que en la tabla [Alumnos] existe una columna (campo o atributo) llamada
Carreras_codigo, esta columna referencia a la llave primaria de la tabla [Carreras], por lo tanto, la
columna Carreras_codigo de la tabla [Alumnos] actua como llave foranea hacia la tabla [Carreras],
entonces, cada entidad en la tabla [Alumnos] debe tener el codigo de una entidad en la tabla [Carreras]
con la cual se relaciona. En palabras mas comunes, esto queire decir que un Alumno debe tener una
Carrera. En las relaciones Uno a Muchos la tabla [A] debe tener la llave foranera que las relaciona con
la tabla [B], dato que la tabla [A] es la que depende de la existencia de la tabla [B], en nuestro ejemplo,
cada entidad en la tabla [Alumnos] depende de la existencia de una entidad en la tabla [Carreras], por
tal motivo, la tabla [Alumnos] debe tener la llave foranea hacia la tabla [Carreras].

6. SQL: EL LENGUAJE ESTRUCTURADO DE CONSULTAS por sus siglas en inglés, es el lenguaje estándar
utilizado para realizar operaciones sobre una base de datos, cada elemento de los anteriormente
descritos y otros igualmente importantes sobre cualquier base de datos, se puede construir y debe
construir escribiendo instrucciones con este lenguaje, por ejemplo, para el ejemplo anterior veremos
las instrucciones SQL necesarias para crear cada elemento de la Base de datos. Las siguientes
instrucciones SQL están clasificadas como instrucciones DDL (Lenguaje de Definición De Datos), dato
que permiten definir, modificar o eliminar la estructura de los elementos de la Base de datos. La
sintaxis y compatibilidad de estas instrucciones sobre una base de datos generalmente dependen del
software Motor de Bases de Datos en la que este construida la base de datos sobre la cual deseamos
ejecutar dichas instrucciones.
a. Una buena referencia sobre SQL la podemos obtener aquí https://goo.gl/4uh1dZ

Crear la base de datos
CREATE DATABASE gestion_recursos_universidad;

O bien podemos utilizar


CREATE SCHEMA gestion_recursos_universidad;

13
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Borrar la Base de datos
DROP DATABASE IF EXISTS gestion_recursos_universidad;

Podemos utilizar este otro comando


DROP SHEMA IF EXISTS gestion_recursos_universidad;

Mostrar una lista de las bases de datos


SHOW DATABASES;

Utilizar una Base de datos:


USE gestion_recursos_universidad;

Escribir comentarios en el código SQL


-- Un comentario SQL que se puede utilizar para explicar el código

Crear las tabla Carreras.


-- Código SQL para crear la tabla Carreras

CREATE TABLE Carreras (

código INT NOT NULL PRIMARY KEY,

nombre VARCHAR(70) NOT NULL,

facultad VARCHAR(100) NULL,

decano VARCHAR(70) NULL);

De la anterior sentencia SQL podemos observemos las siguientes características:


b. Los campos o columnas de la tabla están definidos dentro de ().
c. Cada definición de columna esta separada una de la otra por (coma),
d. Cada columna se define primero con el nombre (estos no pueden iniciar con numero ni pueden
tener caracteres diferentes a números, letras o _ (guion de bajo), luego con el tipo de datos
que puede aceptar (en algunos casos es necesario indicar el tamaño o de caracteres o valores
que se pueden ingresar en ese campo), luego las restricciones de columna o campo.
e. La columna código es de tipo entero, no acepta valores vacíos o nulos y es la llave primara de
la tabla.
f. La columna nombre puede guardar texto hasta de 70 caracteres alfanuméricos, tampoco
acepta valores vacíos
g. La columna facultad puede guardar hasta 100 caracteres alfanuméricos, pero puede incluir
valores vacíos o nulos.
h. La columna decano al igual que las dos anteriores acepta texto, pero en este caso solo puede
guardar hasta 70 caracteres alfanuméricos
14
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Tipos de datos en SQL:
i. Texto: Varchar(tamaño) o Text
j. Números: Integer, Float, Double, decimal, Numeric, Byte
k. Lógico: Bool
l. Fecha: Date, DateTim, Time, Year.
m. Objeto Binario Largo: BLOB.
n. Las restricciones

-- Código SQL para crear la tabla Alumnos

CREATE TABLE Alumnos (

código INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,

nombre VARCHAR(70) NOT NULL,

apellidos VARCHAR(100) NOT NULL,

genero VARCHAR(20) NOT NULL,

fecha_nacimiento DATE NULL DEFAULT NULL,

email VARCHAR(100) NULL UNIQUE DEFAULT NULL,

teléfono VARCHAR(20) NULL DEFAULT NULL,

semestre INT(2) NULL DEFAULT 0,

estado VARCHAR(20) NULL,

Carreras_codigo INT INDEX NOT NULL,

FOREIGN KEY (Carreras_codigo) REFERENCES Carreras (código));

En el ejemplo anterior podemos observar lo siguiente:


o. La columna código es entera y es la llaves primera, pero también vemos que ella misma agrega
sus propios valores de forma autoincremental, es decir, por cada registro que sea agregado a
la tabla, la columna código ira guardando un numero consecutivo partiendo del valor del
anterior registro, por ejemplo, esta columna se auto agregara el valor 1 para el primer alumno
insertado en la tabla, luego para el segundo tomara el valor de 2, para el tercero de 3 y así
sucesivamente, podemos deducir que las llaves primarias no pueden aceptar valores vacíos o
nulos.
p. Las columnas nombre, apellidos, genero, email, teléfono pueden guardar un conjunto limitado
texto, y según el valor en la palabra Varchar así mismo será el tamaño máximo de caracteres
alfanuméricos que pueden guardar.
q. Las columnas nombre, apellidos, genero y Carreras_codigo no aceptan valores vacíos, pero en
cambio las columnas restantes si lo aceptan y este es su valor por defecto o por omisión.

15
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
r. La columna fecha_nacimiento es de tipo FECHA, esto quiere decir que solo puede guardar
valores validos para fechas en formato AÑO_MES_DIA o un valor nulo en caso de que esta fecha
no sea proporcionado por el usuario final.
s. La columna email esta marcada como Única, esto quiere decir que sus valores no se pueden
repetir o duplicar.
t. La columna semestre es de tipo entero y solo puede almacenar valores numéricos enteros de
dos dígitos o cifras, lo cual puede dar posibilidad de ingresar en ella números entre 0 hasta 99,
pero almacena por defecto o por omisión un valor 0 en caso de que este numero no sea
suministrado por el usuario final.
u. La columna Carreras_codigo es de tipo entero (el mismo tipo de la llave primaria código de la
tabla Carreras), no acepta nulos y esta marcada como Índice.
v. Por ultimo, notemos que la tabla posee una instrucción para definir una llave foránea, en este
caso se trata de la columna Carreras_codigo, la cual debe referenciar a la columna código de la
tabla Carreras, quien actúa como llave primaria, esto quiere decir que la tabla Alumnos se
relaciona con la tabla Carreas, para ello utiliza la llave foránea que haga referencia al llave
primaria de la tabla Carreras.

En el ejemplo anterior la tabla Alumnos define la columna Carreras_codigo como una llave foránea que
referencia a la llave primaria código de la tabla Carreras, pero en el caso en que la tabla Alumnos no tenga
definida la llave foránea, podemos primero crear la tabla y luego agregarle la o las llaves foráneas con la
siguiente instrucción:
ALTER TABLE Alumnos
ADD FOREIGN KEY (Carreras_codigo) REFERENCES Carreras (código);

En caso que por algún motivo nos interese modificar o alterar la estructura de una tabla, lo podemos hacer
usando la instrucción ALTER TABLE, por ejemplo para cambiarle el nombre, agregarle o quitarle una una
columna, cambiarle el nombre o el tipo de dato a una columna, agregar o quitar una restricción de llave
primaria, llave foránea, índice, validación, etc.

Posibles ejemplos que alterarían la estructura de la tabla Alumnos:
Agregar la una columna llamada dirección para que pueda recibir hasta 180 caracteres alfanuméricos.
ALTER TABLE Alumnos ADD dirección VARCHAR(180);

Cambiarle el nombre a la columna fecha_nacimiento por cumpleaños


ALTER TABLE Alumnos CHANGE fecha_nacimiento cumpleaños DATE

Cambiarle el tipo de datos a la columna teléfono para que ahora reciba solo números
ALTER TABLE Alumnos MODIFY teléfono INTEGER;

Quitar o eliminar la columna dirección de la tabla Alumnos


ALTER TABLE Alumnos DROP dirección;

Agregar una columna y luego definirla como clave primaria,


16
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
ALTER TABLE Alumnos ADD cedula VARCHAR(180);

ALTER TABLE Alumnos ADD PRIMARY KEY (cedula)

Elimina de la base de datos la tabla Alumnos


DROP TABLE Alumnos;

Muestra las tablas de la Base de datos


SHOW TABLES;

Muestra información sobre la estructura de la tabla Alumnos (solo funciona en Bases de datos hechas con
el software MySQL)
DESCRIBE Alumnos;

Cambiar el nombre a la tabla Alumnos por el nombre Estudiantes (solo funciona en Bases de datos hechas
con el software MySQL)
RENAME TABLE Alumnos TO Estudiantes

Las bases de datos pueden ser utilizadas por varias personas, a estas personas se les conoce como Usuarios
de la Base de datos, los cuales pueden realizar operaciones DDL (definir, consultar y modificar la estructura
de la base de datos) o DML (insertar, consultar, modificar y eliminar información sobre las tablas) sobre
las bases de datos. Es muy importante definir usuarios y los roles (acceso, privilegios o permisos) que estos
pueden tener sobre las bases de datos, para ello SQL ofrece un par de instrucciones que permiten crear,
modificar y eliminar usuarios y sus privilegios sobre las bases de datos.

Crear un usuario llamado johnarrieta con password de acceso la clave7, solo puede usar la base de datos
si esta conectado desde el mimos PC local donde esta dicha base de datos.
CREATE USER 'johnarrieta'@'localhost' IDENTIFIED BY 'la clave7';

Asignar al usuario johnarrieta todos los permisos o privilegios posibles sobre la base
gestion_recursos_universidad. A los usuarios que poseen todos los permisos posibles sobre una base de
datos se les llama Administradores de la BD.
GRANT ALL PRIVILEGES ON gestion_recursos_universidad.* TO
'johnarrieta'@'localhost';

En el ejemplo anterior asignamos todos los permisos posibles al usuario johnarrieta sobre todas (*) las
tablas de la base de datos gestion_recursos_universidad.
Los permisos posibles depende del motor de base de datos utilizado, por ejemplo en el motor MySQL
Server podemos disponer de los siguientes permisos:

o ALL PRIVILEGES: es un usuario administrador
17
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
o CREATE: puede crear elementos sobre una base de datos, incluyendo otras bases de datos.

o DROP: puede eliminar elementos de una base de datos, incluyendo otras bases de datos.

o DELETE: puede eliminar registros (filas) de tablas en una base de datos especifica.

o INSERT: puede insertar registros (filas) de tablas en una base de datos especifica.

o SELECT: puede consultar registros (filas) de tablas en una base de datos especifica

o UPDATE: puede consultar registros (filas) de tablas en una base de datos especifica.

o GRANT OPTION: solo permite agregar o remover usuarios y privilegios



En caso de que solo queramos asignar unos cuantos permisos a un usuario y no todos, podemos hacerlo
indicando cuales son dichos permisos:

GRANT SELECT, UPDATE ON gestion_recursos_universidad.* TO johnarrieta
IDENTIFIED BY 'la clave7';

Otro tipo de sentencias SQL que se pueden ejecutar sobre las bases de datos son las denominadas
sentencias DML (Lenguaje de Manipulación de Datos), cuyo objetivo es permitir realizar operaciones CRUD
(Create, Read, Update y Delete) sobre las filas o registros almacenados en las tablas de una base de datos,
es decir, nos permiten Insertar, Consultar, Eliminar y Actualizar información que contienen las filas o
registros de las tablas en de una base de datos.

Las instrucciones DML se clasifican en las siguientes 4 categorías:

• SELECT: Consultar o buscar información
• INSERT: Insertar o agregar información
• UPDATE: Actualizar o modificar información.
• DELETE: Eliminar o borrar información

Las siguientes instrucciones son ejemplos de operaciones DML sobre la base de datos
gestion_recursos_universidad.

Consultar todos los registros o filas de la tabla Carreras y ordenar el resultado por el nombre de las
carreras:
SELECT * FROM Carreras ORDER BY nombre;

Consultar solo el código, nombre y decano de las Carreras:


SELECT código, nombre, decano FROM Carreras;

Consultar las Carreras cuyo nombre inicie con la palabra ingeniería:

18
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
SELECT * FROM Carreras WHERE nombre LIKE ‘Ingenieria%’;

Consultar las Carreras cuyo nombre finalice con las letras logia:
SELECT * FROM Carreras WHERE nombre LIKE ‘%logia’;

Consultar las Carreras cuyo nombre contenga la palabra Tecnología:


SELECT * FROM Carreras WHERE nombre LIKE ‘%Tecnología%’;

Consultar los Alumnos que hayan cursado la mitad de su carrera:


SELECT * FROM Alumnos WHERE semestre > 5;

Consultar los Alumnos que hayan cursado la mitad de su carrera:


SELECT * FROM Alumnos WHERE semestre > 5;

Consultar los Alumnos primíparos:


SELECT * FROM Alumnos WHERE semestre = 1;

Contar cuanto alumnos hay en la base de datos


SELECT COUNT(código) FROM Alumnos WHERE ORDER BY código;

Consultar los Alumnos finalizando su carrera pero que aun no estén en ultimo semestre
SELECT * FROM Alumnos WHERE semestre BETWEEN 8 AND 9;

Consultar el nombre de los decanos pero sin que aparezca repetido ninguno de ellos:
SELECT DISTINCT decano FROM Carreras;

Consultar los Alumnos que estén estudiando Ingenieria


SELECT A.nombre, A.apellidos, A.semestre

FROM Alumnos A, Carreras C

WHERE A.Carreras_codigo = C.codigo

AND C.nombre LIKE ‘%Ingenieria%’ AND A.estado = ‘Activo’;

En la instrucción anterior necesitamos cruzar cruzar la información de las tablas Alumnos y Carreras, es
aquí donde se hace tremendamente útil el uso de las llaves foráneas, dado que contienen información de
la llave primaria de otra tabla, por eso su nombre de foráneas, esto permite conectar o relacionar los
registros de una tabla A (Alumnos) con otra tabla C (Carreras).
19
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Insertar o agregar una nueva Carrera en la base de datos:
INSERT INTO Carreras VALUES(1719,’Ingeniera del Software’, ‘Facultad
de Ingenierias’, ‘John Carlos Arrieta Arrieta’);

Insertar o agregar un nuevo Alumno que estudie ingeniería del software:


INSERT INTO Alumnos

(genero, código, apellidos, nombre, Carreras_codigo)

VALUES(‘Masculino’, 189154,‘Arrieta Villarreal’, ’Sebastián Camilo’,


1719);

Observemos que existen dos formas o sintaxis para la instrucción INSERT INTO, la primera exige que
debamos ingresar los valores para todas las columnas de la tabla, en caso que aun no tengamos claro cual
es el valor que debemos ingresar en X columna, podemos colocar la palabra NULL, siempre y cuando la
definición o estructura de la tabla permita que dicha columna X admita valores vacíos o nulos, es
importante ingresar los valores en el mismo orden que se encuentran las columnas en la tabla Alumnos,
de lo contrario puede insertar los datos en columnas equivocadas. Disponemos de una segunda forma
mas flexible de la instrucción INSERT INTO, la cual nos permite escoger las columnas y el orden en que
deseamos ingresar los datos, los valores de cada columna deben estar dentro de la instrucción VALUES y
estos deben estar en el mismo orden en el que declaramos las columnas entre () después del nombre de
la tabla. Las columnas a las que no queramos ingresar datos, simplemente las omitimos en la lista de
columnas y su respectivo valor de la instrucción INSERT INTO.
Modificar, editar o actualizar el email, el teléfono y el estado del alumno Sebastián Camilo Arrieta
Villarreal. (La operación UPDATE no puede ser reestablecida o cancelada)
UPDATE Alumnos

SET email = ‘secarvi@gmail.com’, teléfono = ‘3017344697’, estado =


‘Activo’

WHERE código = 189154;

Cambiar el estado actual de todos los Alumnos a estado a activo:


UPDATE Alumnos SET estado = ‘Activo’

Eliminar el alumno cuyo código es 189154. (La operación DELETE no puede ser reestablecida o
cancelada)
DELETE FROM Alumnos WHERE código = 189154

Eliminar todos los alumnos de la base de datos.


DELETE FROM Alumnos

20
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
ACTIVIDAD PRACTICA No. 1

DISEÑAR, MODELAR E IMPLEMENTAR UNA BASE DE DATOS
Tal como se indica en la secciona anterior, con el objetivo de generar dinamismo y hacer mas didáctica la
lectura de este libro, vamos a desarrollar una aplicación ejemplo en la cual podamos poner en practica
cada tema y concepto aquí descrito, de esta manera el aprendizaje será mas efectivo y ameno.

El ejercicio propuesto tiene que ver con un desarrollar un pequeño sistema que permita facilitar los
procesos de registro, control, reserva, préstamo y devolución de recursos de apoyo educativo
(Proyectores, PC, Tablets, DVD, Parlantes, Lectores de código, Impresoras, Dispositivos de red,
Apuntadores laser, Impresoras 3d, Drones, Placas electrónicas, etc.) de una universidad por parte de sus
Docentes, Alumnos, Egresados y Funcionarios. Por lo tanto claramente podemos identificar algunos
usuarios del sistema, también llamados Actores y una serie de acciones que ellos realizan sobre los
recursos de la universidad, estas operaciones pueden ser, Reservar, Prestar, Devolver, Cancelar Reserva
de recursos, a estas operaciones las vamos a llamar Casos de Uso, los cuales pueden ser ejecutados por
Alumnos, Docentes, Egresados y Funcionarios. Algunos funcionarios de la U serán los responsables de
registrar los datos de estas operaciones en el sistema, estos usuarios son los Auxiliares de cada
departamento encargado de administrar dichos recursos, también existen otros funcionarios que se
encargan de solicitar estadísticas y reportes sobre todos los registros y movimientos que se han hecho
sobre dichos recursos, estos reportes puede ser solicitados en X momento y sin previo aviso, bien sea a
diarios, semanales, quincenales, mensuales, semestrales, o anuales, algunos ejemplos son: Listado
Recursos reservados para X fecha, listado de recursos actualmente en uso o préstamo, listado de recursos
disponibles, Reporte estadístico de Reservas y uso de Recurso por categoría de usuarios, por ejemplo, cual
es el usuario que mas reservas satisfactorias realiza, cual es el usuario que mas incumple con la entrega o
devolución del recurso asignado, la frecuencia de préstamo, etc. Teniendo en cuenta lo anterior podemos
intuir que es necesario guardar información sobre Usuarios, Recursos, Prestamos, Reservas y
Devoluciones, estas serien las tablas de nuestro sistema, por lo tanto deberían poseer columnas (campos,
cualidades o atributos), para el caso de la tabla Usuarios estas columnas podrían se:

o Usuarios(id, password, cedula, nombre, apellidos, fecha_nacimiento, genero, email, teléfono,
dirección, tipo y foto), de los cuales podremos definir como llave primara el id y hacerlo
autoincremental, la cedula y el email podrían ser únicos y con posibilidad de ser nulos, el password,
el genero, teléfono dirección, la fecha de nacimiento y foto podrían tener valores nulos en algún
momento dado, los 4 primero podrían ser de tipo Varchar, mientras que la fecha_nacimiento podría
ser Date y la foto de tipo Blob.

o Para el caso de la tabla Recursos, esta podría estar definida de la siguiente forma:
Recursos(id, nombre, nro_serie, tipo, estado foto, descripción y fecha_ingreso), siendo el id la llave
primaria autoincremental, el nro_serie seria entero, único y aceptar nulos, el tipo podría ser varchar
sin nulos, el estado y la descripción podrían ser varchar y aceptar nulos, la fecha de ingreso serie de
tipo Datetime y la foto seria Blob.

Para el caso de las tablas Prestamos, Reservas y Devoluciones podríamos pensar en una sola tabla dado
que un Reserva es en realidad un Préstamo para una fecha especifica futura, mientras que un Prestamos
es la consolidación o cumplimiento de una Reserva y por ultimo las Devoluciones son Prestamos que

21
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
finalizan en una fecha determinada. Este análisis nos permite poder diseñar una tabla común para las tres,
la cual podría tener los siguientes atributos:

Reservas(id, fecha_reg, fecha_inicio, fecha_fin, fecha_entrega, estado y descripción), siendo el id la
llave primaria de tipo entero autoincremental, las fechas de registro, inicio, fin y entrega pueden ser
de tipo Datetime, el estado y la descripción podrían ser de tipo varchar con posibles valores nulos,
además, la fecha de registro podría ser un tipo especial de fecha llamada TimeStamp, la cual captura
automáticamente la fecha actual del sistema, en caso de que se trate de una Reserva la fecha de inicio
y fin se tendrían que suministrar de forma obligatoria, mientras que la fecha de entrega podría ser
nulo, porque depende de si se efectuá o no el Préstamo de dicha Reserva y de la fecha real en la que
el usuario devuelve el Recurso prestado, igual sucede con los Prestamos, cuando el usuario devuelva
o entregue formalmente el Recurso prestado, entonces es cuando la propiedad fecha_entrega debe
tomar un valor obligatorio, de lo contrario será nulo. Existe una relación entre las tablas Usuarios y
Reservas, puesto que un Usuario realiza 0 o muchas Reservas, es decir * veces, mientras que un
Reserva es hecha por 1 y solo 1 Usuario, esto quiere decir que la relación es del tipo Uno a Muchos,
ósea, [A]1----*[B], donde [A] representa la tabla Usuarios y [B] representa la tabla Reservas, lo cual
implica que la tabla Reservas debe tener una llave foránea que referencie a la columna id (clave
primaria) de la tabla Usuarios. También existe una relación de Uno a Michos [A]1----*[B] entre las tablas
Recursos y Reservas, donde [A] representa a la tabla Recursos y [B] representa a la tabla Reservas, eso
es así porque un Recurso es reservado 0 o muchas veces, es decir * veces, mientras que una Reserva
se realiza para un único Recurso, por lo tanto, la tabla Reservas debe tener una llave foránea que
referencie a la columna id (llave primaria) de la tabla Recursos. Rediseñando la tabla Reservas según
las relaciones que pose con Usuarios y Recursos esta podría tener la siguientes columnas:

Reservas(id, fecha_reg, fecha_inicio, fecha_fin, fecha_entrega, estado y descripción, Usuario_id,
Recurso_id), siendo las dos ultimas las llaves foráneas hacia las tablas Usuarios y Recursos
respectivamente.

A continuación podríamos definir el código SQL de de cada tabla de la siguiente manera:

22
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)




Teniendo claro lo anterior, procederemos a descargar e instalar las herramientas de software necesarias
para poder dar forma y realidad a nuestra base de datos, estas herramientas son:

Un motor de base de datos tipo servidor:

El motor de bases de datos es un software que nos permite trabajar y hacer real las operaciones sobre
bases de datos descritas hasta ahora y muchas mas, todo usando lenguaje SQL, estos software
comprenden, interpretan y ejecutan perfectamente el código SQL realizando las operaciones exactamente
como las indicamos con nuestras instrucciones SQL, es decir, crear, eliminar, consultar y modificar Bases
de datos, tablas y Usuarios con privilegios sobre las BD, nos permite igualmente realizar operaciones DML
sobre las bases de datos, como el es caso de las operaciones SELECT, INSERT, UPDATE y DELETE.
Existen muchos motores de BD en la actualidad, algunos son propiedad de grandes, poderosas y famosas
empresas como Microsoft, Oracle, Google, IBM, entre otras, a los cuales debemos pagar grandes
cantidades de dinero solo para tener el derecho y permiso de utilizar sus productos, pero
afortunadamente también existen motores de BD con licencias de uso menos restrictivas, como las
licencias OpenSource (de Código Abierto) o Free Software (Software Libre), las cuales nos permiten utilizar
dichos productos siempre y cuando sigamos respetando su cualidad de Código Abierto o sus 4 libertades
principales (código fuente disponible, se puede obsequiar, instalar o modificar y el producto que
construyamos usando estos motores libres o de código abierto, también debe ser libre o de código
abierto). Los motores de BD privativos con licencia comercial mas famosos son Oracle, SQL Server y DB2,
mientas que los motores de BD de código abierto o de Software libre mas populares son PostgreSQL,
23
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
MySQL y SQLite. En nuestro ejemplo y en todo este libro usaremos el Motor de bases de dato MySQL, por
su simplicidad, gran rapidez, es software libre y es uno de los mas populares y extendidos a nivel mundial,
pero además MySQL también es un Servidor, esto quiere decir que permite que varios usuarios realicen
multitud de operaciones SQL sobre diversas BD al mismo tiempo, controlando muy bien los problemas de
seguridad, operaciones simultaneas sobre la misma BD y sobre todo ofreciendo gran rapidez.

Sistema Administrador o de Gestión de Bases de Datos:

Mas conocido por sus siglas como SGBD, son son software especial mente construidos para facilitarnos las
labores mas comunes e importantes al momento de trabajar con Motores de Bases de datos, estos
generalmente se conecta a dichos motores y le envían las instrucciones SQL producto de un conjunto de
acciones que nosotros realizamos en ellos, estas acciones pueden ser seleccionar, arrastrar y soltar
elementos, ingresar datos en formularios, solicitar consultas, modificaciones, eliminaciones e inserciones
de información sobre la base de datos, así como solicitar crear, modificar, ver y eliminar bases de datos,
sus usuarios y tablas, todo de una forma muy transparente al usuario, pero también nos permite escribir,
editar, compilar directamente las instrucciones SQL y enviarlas al servidor con el fin de obtener una
respuesta del mismo.
Existen muchos software del tipo SMBD, muchos de ellos son de uso privado y licencia comercial, la
mayoría de ellos se pueden utilizar para trabajar con cualquier motor de bases de datos, aunque los mas
eficientes son los que se especializan en un solo motor de bases de datos, algunos ejemplos muy populares
de SMBD con licencia de uso por pagar son Navicat, SQL Power Architect, SQLYog, TheFront, SQLTools,
Jailer, RazonSQL, otros igualmente pagos pero son mejores que los anteriores dado que se especializan en
trabajar muy bien con un único motor de bases de datos, esto son Oracle Enterprise Manager (es el SGDB
por excelencia del motor BD Oracle), SQLServer Management Studio (es el SGBD por excelencia del Motor
SQLServer de Microsoft), DB2 Connect (es el SGBD por excelencia del Motor DB2 de IMB) y Access (es
SGBD y motor todo en uno, dado que no es un Servidor), mientras que los motores de Bases de datos de
software libre y de código abierto poseen un mayor numero de alternativas para su administración, tal es
el caso de MSQL WorkBench y MySQL Administrator que en la actualidad ya son un solo software (es el
SGBD por excelencia para el motor MySQL, permite modelar bases de datos visualmente, es el que
utilizaremos a continuación), PHPMyAdmin (es un SGBD escrito en PHP+HTML+CSS+JavaScript
especialmente pensado para el motor MySQL), PgAdmin III (es el SGBD por excelencia para el motor
PostgreSQL), PgDesigner (como MySQL WorkBench pero solo para el motor PostgreSQL), PHPPgAdmin
(igual que PHPMyAdmin pero esta vez pensado para el motor PostgreSQL), SQLiteAdmin (es un SGBD muy
popular para el motor SQLite) y existen muchos mas.

MANOS A LA OBRA, MEJOR DICHO MANOS AL DISEÑO DE LA BD

1. Para iniciar siga los siguientes pasos representados muy gráficamente en esta sección:
2. Descargue el MySQL Server desde su pagina oficial (https://dev.mysql.com/downloads/mysql/)
3. Opcional pero recomendado: si desean una instalación mas simple y limpia les recomiendo descargar
e instalar XAMPP desde su pagina oficial (https://www.apachefriends.org/es/index.html)
4. Descargar el MySQL WorkBench desde pagina (https://www.mysql.com/products/workbench/)
5. Instalar el MySQL Server ya sea de forma individual o usando otro instalador como XAMPP o WAMP o
MAMP o AppServer.

24
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
6. Instalar el MySQL WorkBench, si usas Microsoft Windows este software requiere de un complemento
llamado Microsoft .NET Framework 4.5 y de la distribución de C++, el instalador tiene opciones que
nos ayudan realizar estas descargas e instalaciones de forma muy simple.
7. Lo primero que debemos hacer es iniciar el MySQL WorkBench, luego dar clic en el icono + como se
muestra en la siguiente imagen , tambien podemos dar clic en el menu File /
New Model.

• Un buen curso del motor MySQL lo podemos encontrar aquí https://goo.gl/3WCkAo
• Un video curso sobre el uso básico de MySQL Workbench https://goo.gl/oPFSgY

Nos aparece la pantalla principal para diseñar Modelos de
BD, esta pantalla ofrece multitud de opciones y
herramientas para modelar fácilmente nuestras bases de
dato. Seguidamente damos clic en el icono con el + que
dice Add Diagrama, esto con el fin de poder agregar un
nuevo modelo de BD al proyecto.
Un modelo consta de una Base de datos Lógica, es decir,
aun no esta creada o implementada en el Motor de base
de datos, este modelo nos muestra los elementos mas
importantes de la BD como lo son sus tablas, columnas,
relaciones y restricciones de columnas.

En nuestro ejemplo
vamos como lo vimos
anteriormente, vamos
a diseñar una base para
guardar los Usuarios,
Recursos y Reservas de
los mismos hechos por
el personal de una
Universidad, en
nuestro caso debemos
escoger un nombre y
una ruta para guardar
el modelo de la base de
datos.
Al agregar el nuevo
diagrama EER (Entidad
Relación) nos aparece
el panel de diseño de
tablas y relaciones,
luego damos clic en el
icono de guardar o dar
clic en Menú File / Save
Model, y
seleccionamos el lugar
25
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

El lugar que vamos a escoger
puede ser cualquiera, siempre y
cuando recordemos la ruta que
escogimos para guardarlo. En
nuestro ejemplo
seleccionaremos una carpeta
llamada base_de_datos, si esta
no aparece simplemente la
creamos dando clic en el icono
Nueva Carpeta de la ventana
Guardar Modelo, luego le
asignamos un nombre en nuestro
caso lo llamaremos
app_reservas, para evitar
perdidas y enredarte en el
desarrollo de estos pasos
didácticos, recomiendo seguir las
instrucciones tal y como
aparecen en las imágenes de
muestra, así seguiremos siempre
al mismo paso.




El siguiente paso es cambiar el nombre al
esquema, para ello seleccionamos con doble
clic el nombre del esquema o base de datos
que se encuentra en el árbol de catalogo, el
que se llama mydb.
Realizar doble clic en esta parte para poder
cambiar el nombre por defecto que se le da a
la base de datos, de forma inmediata nos
aparece otro panel en la parte inferior, este
panel se llama edición de esquemas, en el
podemos ingresar el nombre que le queremos
dar a nuestro modelo y posteriormente a
nuestra base de datos MySQL.

26
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

En el panel de edición y propiedades del
esquema (base de datos) podemos incluso
agregar información adicional sobre nuestra
base de datos, por ejemplo podemos indicar el
tipo de codificación, en este caso dejamos la
que esta por defecto UTF8, también podemos
ingresar un comentario mas completo sobre lo
que hace y para que servirá nuestra base de
datos, por ejemplo.

Al cambiar el nombre del esquema o base de datos, podemos apreciar que este ya fue actualizado en el
panel de Catalogo de la Base de datos.

El siguiente paso es utilizar las opciones de diseño de base de datos que están disponibles en la barra de
componentes de base de datos, esta barra la podemos ver en posición vertical y no horizontal como se
parecía a continuación.



Esta barra posee varios objetos, el primero (fecha blanca) se utiliza para cambiar el modo de selección de
elementos en el modelo, y se utiliza mas que todo para escoger o seleccionar objetos como relaciones,
tablas, etc.

El segundo es una manito que podemos
utilizar para desplazarnos sobre todo el lienzo
del panel de Diseño, el tercer elemento (un
borrador) lo podemos utilizar para eliminar o
borrar un elemento cualquiera del panel de
diseño, el cuarto, quinto y sexto son para
colocar notas e insertar imágenes
respectivamente.

Los siguientes iconos son los mas utilizados,
se trata de las opciones para agregar tablas,
vistas de consultas SQL y agregar funciones y/o procedimientos SQL al modelo de base de datos que
estamos diseñando, de estos tres elementos nos interesa solo el primero (la tablita que esta debajo
del icono con la imagen de árbol), el cual ser seleccionado nos permite agregar una nueva tabla de datos
al panel de diseño de modelo relacional (ver imagen a continuación), los otros iconos restantes (los que
tienen forma de línea con números 1 o n y forma de patica de pollo) hacen referencia a los tipos de relación
entre tablas de los que hablamos en el apartado anterior.

27
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Este icono representa una relación 1 a 1 entre


una tabla [A] y otra tabla [B].

Este icono representa una relación de 1 a


Muchos (* o n) entre una tabla [A] y otra tabla [B].

Este icono representa una relación de Muchos (*


o n) a Muchos (* o n) entre ) entre una tabla [A] y otra
tabla [B].
Agregar una Tabla a modelo Relacional de
nuestra Base de datos:
Seleccionamos y hacemos clic sobre el icono de
Nueva Tabla y hacer clic en el panel de diseño, tal
como se aprecia en la imagen al costado.


Para configurar las propiedades de la tabla
(Nombre, columnas, índices, etc.) debemos
dar doble clic sobre el icono de la nueva
tabla agregada al panel de diseño y
aparecerá un nuevo panel en la parte
inferior del IDE, este panel se llama
Propiedades de la Tabla, en este lugar
podemos encontrar opciones para cambiar
el nombre, agregar columnas y seleccionar
su respectivo tipo, tamaño y restricciones
como llaves primarias, índices, no nulos,
autoincrementales entre otras
propiedades.


Una vez configuremos la tabla Usuarios con las propiedades deseadas, esta podría quedar como aparece
en la siguiente imagen. Notemos las columnas y su definición, por ejemplo la columna Password es
Varchar(16) no es clave primaria (PK), no acepta nulos(NN), no es única(UQ), no es binaria(BIN), acepta
números con símbolos negativos o positivos (UN), no se rellenara con 0 (ZF), no es autoincremental (AI) y
por ultimo sino recibe valores por defecto le será asignado el valor 1234567890 como password por
omisión al usuario insertado en la tabla. Al seguir analizando podemos observar que la columna
nacimiento es de tipo Date, es decir almacena solo fechas validas, estas fechas en bases de datos deben
tener el formato AAAA-MM-DD hh:mm:ss, por otro lado, la columna dirección es de tipo TEXT, esto nos
permite guardar una cantidad amplia de texto, hasta 65kb aproximadamente, mientras que las columnas
de tipo VARCHAR nos permiten guardar solo 256 caracteres alfanuméricos como máximo, por lo que es
necesario indicar el numero máximo que deseamos almacenar en caso de que 256 sea una cantidad muy
grande, por ejemplo para columnas como el nombre, cedula, apellidos, genero, teléfono, email, tipo y
foto, cuyos posibles valores son relativamente pequeños.

28
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)



Las dos imágenes siguientes muestran como podrían quedar el diseño de las tablas Recursos y Reservas,
para mayor entendimiento es recomendable observar detalladamente cada tabla y sus respectivas
propiedades, por ejemplo, la tabla Recursos tiene ocho columnas, una es llave primaria (id) entera y
autoincremental, tres columnas no aceptan valores nulos (id, nombre y tipo), una es única (nro_serie),
cinco aceptan texto corto (nro_serie, nombre, tipo, estado y foto), una acepta una cantidad grande de
texto (descripción) y por ultimo una solo permite el ingreso automático de la fecha actual del PC,
(fecha_registro), esta fecha no hay que ingresarla en la instrucción SQL INSERT, dado que al ser definida
de tipo TIMESTAMP, aceptar valores nulos e incluir como valor por defecto la captura de la fecha actual
(CURRENT_TIMESTAMP), el motor de bases de datos en este caso MySQL asigna o llena de forma
automática el registro de esta columna con la fecha actual del sistema operativo sobre el cual se esta
ejecutando MySQL Server.

29
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Ejemplo de posible configuración de la tabla Reservas, en este caso sin las llaves foráneas que
referencian hacia la tabla Usuarios y la tabla Recursos.




La siguiente imagen es un ejemplo de cómo quedaría la configuración inicial de las tres tablas que
conforman nuestro modelo relacional para la base de datos del ejemplo que tomaremos como guia
practica de este libro.

30
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
El siguiente paso (opcional) es eliminar la
rejilla de líneas cuadriculas que aparecen en
el panel del diseño, estas rejillas son de gran
utilidad al momento de alinear los elementos
(tablas y relaciones) en el panel de diseño,
dado que nos facilitan la ubicación,
organización y por ende mejor presentación
de los elementos dentro del panel. Si por
algún motivo para algunos pueda resultar
fastidioso o molesto el tener que observar
estas líneas en su pantalla, la siguiente
imagen muestra un ejemplo de cuales serian
los pasos a seguir para poder desaparecer
dichas líneas del panel de diseño libro.



El siguiente paso es modelar las relaciones entre las tres tablas, para ello es recomendable reorganizar las
tablas para que luzcan como se aprecia en la imagen que se muestra a continuación (la tabla Reservas en
el medio de las tablas Recursos y Usuarios), de tal manera se nos pueda facilita realizar el proceso de
relacionar de uno a muchos la tabla Reservas con la tabla Recursos y relacionar uno a muchos la tabla
Reservas y la tabla Usuarios en este mismo orden.



Modelar la Relación entre Reservas y Recursos:

Para realizar la primera relación de uno a muchos entre las tablas Reservas y Recursos, procederemos a
ubicar el puntero del ratón en la barra de operaciones comunes, la cual se aprecia en la siguiente imagen

31
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Luego identificaremos el icono de relaciones uno a muchos en dicha barra hacemos clic sobre el,
damos clic sobre la tabla Reservas y luego sobre la tabla Recursos, nos debería aparecer una línea que
conecta ambas tablas (ver la siguiente imagen de ejemplo)



Observemos que la relación anterior
ha agregado una nueva columna
llamada Recursos_id en la tabla
Reservas, tal como aprendimos en el
capitulo pasado, esta nueva columna
corresponde a la Llave Foránea de la
tabla Reservas y representa su
conexión asociación con la tabla
Recurso, eso es así porque la tabla
Reservas es la que tiene un Recurso
asignado, por ende, debe tener una
llave foránea que le indique cual es el
Recurso que se ha Reservado,
recordemos que las llaves foráneas
de una tabla [A] referencian a las
llaves primarias de otra tabla [B], lo
que quiere decir, que las llaves foráneas almacenan los valores que se encuentran en la llave primara de
otra tabla, mientras tanto, la tabla Recursos en dicha relación es la que posee muchas o ninguna Reserva,
por lo que no es necesario que posea una llave foránea que referencie a la llave primara de la tabla
Reservas, ya que seria imposible determinar cuantas Reservas puede podría tener un Recurso durante el
tiempo.

Cambiar la notación de las líneas o aristas que representan la relación entre tablas en el modelo
relacional:

Existen varios tipos de notaciones
para representar una relación o
asociación entre tablas de un
modelo de bases de datos, este
IDE Misal Workbench nos permite
escoger una de varias notaciones
disponibles, para ello siga los
pasos de la imagen anterior, en la
que se puede apreciar las
diferentes alternativas de
notación que podemos utilizar.

32
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Por ejemplo a mi
personalmente me gusta
mucho la notación Clásica,
pues fue la notación que
utilizaba el docente que me
introdujo en el mundo del
modelado de bases de datos.
Recomiendo que realicen el
ejercicio de probar todas las
notaciones y puedan
quedarse con la que la que
mas les guste.
En la imagen al costado se
puede apreciar una relación
de uno a muchos usando
notación Clásica de BD.




Sigamos continuaremos configurando la relación de uno a muchos entre la tabla Reservas y la tabla
Recurso, ahora indicaremos que en la relación no es dependiente la tabla Recursos pero si lo es la tabla
Reservas, esto es necesario debido a que en la vida real no todos lo Recursos son Reservados, pero una
reserva si requiere necesariamente de un Recurso.



El primer paso es seleccionar
con el puntero del ratón la
arista o línea de la relación
entre las dos tablas, como
vemos esta queda resaltada de
color naranja, ahora damos
doble clic sobre ella para que
nos aparezca el panel de
propiedades de la relación,
esta panel aparece en la parte
inferior del panel de diseño, tal
como se aprecia en la siguiente
imagen


En este panel podemos entre otras cosas, indicar si las dos tablas son necesarias en la relación, o si lo es
una sola o simplemente ninguna es necesaria en la relación, el ultimo caso es muy poco frecuente, debido
33
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
a que no tiene mucha lógica que dos tablas se relacionen entre si y que ninguna de las dos sea dependiente
o necesaria en la relación, lo cual quiere decir que es muy poco probable que dada la tabla tabla [A] esta
este relacionada 0 o Muchos o 0 o 1 registros de la tabla [B o y o viceversa.



Tal como se puede apreciar en la imagen anterior, podemos ver que el panel de relaciones entre las tablas
Reservas y Recursos no existe la opción Madatory (Obligatoria en español) no esta activada en la parte de
la tabla Reservas, esto quiere decir que un Recurso no necesariamente requiere de alguna Reserva, pero
no podemos decir lo mismo de esta cualidad en la tabla Recursos, la cual si posee activada la opción
Madatory (Obligatoria), esto de debe a que para que pueda existir una Reserva esta debe tener al menos
un Recurso relacionado, al liberar el Reserva de la obligatoriedad de la relación, la tabla Recursos puede
recibir (podemos insertar) datos sin necesidad que pasamos el id una reserva..



Notemos como quedo la relación
ahora después de haber marcado
la tabla Reservas como un tabla
no obligatoria entre la relación
que posee con la tabla Recursos.
Se puede en la imagen que la
tabla relación ahora posee 0 o *
(cero 0 cualquier cantidad) de
Reservas, por el contrario la
relación pose 1 y solo 1 (uno y
solo uno) Recursos.





34
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Modelar la Relación entre Reservas y Usuarios:

Para modelar la relación que existe entre Reservas y Usuarios podemos seguir los mismos pasos que para
el caso de Reservas y Recursos, es decir, seleccionamos el icono de Relación Uno a Muchos en la barra de
Operaciones Comunes, luego damos clic en la tabla Reservas y luego sobre la tabla Usuarios.



Analicemos cual seria el caso para la
relación entre Reservas y Usuarios:
Esta imagen muestra una relación
dependiente tanto del lado de Reservas
como del lado de Usuarios, observemos que
la relación posee al menos 1 elemento en
cada uno de sus lados, cuando la situación
real para la relación entre estas dos tablas
debería ser así:
Una Reserva se realiza para 1 y solo 1
Usuario y un Usuario reserva 0 o muchas
veces.
Notemos como le fue agregada una nueva
columna tipo Llave Foránea a la tabla
Reservas, esta se llama Usuarios_id


Ahora para poder modelar o
indicar que un Usuario realiza 0 o
muchas Reservas, podemos seguir
los mismos pasos que hicimos para
hacer lo propio en la relación entre
Reservas y Recursos, esto es:
1). Damos doble clic sobre la línea
que representa la relación entre
las dos tablas.
2). En la parte inferior del IDE debe
aparecer el panel de Relaciones, el
el cual desactivamos la opción
Mandatory (obligatorio) que esta
debajo de la parte de la Reservas y
observamos los cambios en la
relación.



35
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Panel de configuración de Relaciones entre Tablas




La siguiente imagen muestra el resultado de la relación final entre la tabla Reservas y la tabla Recursos, en
ella se puede apreciar que después de configurar la no obligatoriedad de la tabla Reservas en esta relación,
el modelo muestra que un Usuario puede realizar 0 o muchas (cualquier cantidad) de Reservas, mientras
que una Reserva solo puede ser hacha por uno y solo un Usuario. Es muy importante modelar las bases de
datos lo mas cercano posible a la situación real que estamos tratando de sistematizar, puesto que de ello
depende en gran medida el éxito o fracaso de nuestra aplicación Software.




El Modelo completo de la base de datos que hemos tomado como ejemplo seria al siguiente:

36
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)



Pasar del modelo lógico de la Base de datos a su implementación física sobre un Motor.

Una vez estemos seguros de haber modelado todos los detalles de nuestra base de datos, podemos pasar
del modelo lógico o Modelo Entidad Relación o Modelo Relacional convertirlo en un sistema realmente
implementable dentro de un motor de bases de datos adecuado para nuestras necesidades, recordemos
que en nuestro ejemplo el motor de bases de datos que escogimos fue Misal Server.


Los paso para poder
implementar la base de datos a
partir de un modelo lógico en
cualquier motor son los
siguientes:
• Escribir la sentencia de SQL
para crear y dar nombre a la
base de datos (o esquema de
base de datos), recordemos
que esta sentencias SQL son
de tipo DDL y varíen un poco
según el Motor de BD que
estemos utilizando.

2. Escribir el código SQL DDL necesario para crear o establecer cual será el o los usuarios que tendrán
privilegios o permisos para trabajar con la base de datos.





37
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

3). Definir el SQL DDL necesario para crear las tablas del modelo relacional que no demandan de una
relación, es decir, que tengan una relación 0 a muchos. En nuestro ejemplo dichas tablas serian Recursos
y Usuarios

4). Escribir el código SQL
para crear las tablas
dependientes de las
relaciones en el Modelo, es
decir, aquellas tablas que
poseen una relación 1 a
muchos o 1 a 1.
Ósea la tabla Reservas

5). El ultimo paso es
ingresar en el motor de la
bases de datos todas las
sentencias de código SQL
DLL necesarias para poder
construir la base de datos,
en el orden descrito
anteriormente.
Afortunadamente
podemos contar con
herramientas avanzadas
como el IDE Misal WorkBench o PHPMyAdmin o Navicat, entre otros, los cuales no proporcionan una serie
de herramientas que nos facilitan y simplifican enormemente las tareas y pasos para pasar del modelo
lógico relacional a implementar una base de datos físicamente relacional en algún dispositivo de
almacenamiento propio del PC donde esta instalado y ejecutando el Motor de bases de datos de nuestra
preferencia.

Las dos imágenes anteriores muestran los dos primeros pasos a seguir para poder generar el código SQL a
partir del modelo relacional lógico que hemos diseñado para nuestra base de datos ejemplo usando el IDE
MySQL Workbench, estos pasos que consisten en:

• Guardar el modelo un dispositivo de almacenamiento y le asignarle un nombre.
• Hacer clic en la siguiente ruta menú File / Export / File Engineer SQL Create Script.
• Aparecerá una ventana en la que debemos indicar el nombre y ruta del archivo donde será
almacenado el código SQL de nuestra base de datos, en ella también podemos escoger algunas
opciones para personalizar las sentencias DDL que se deben ingresar en dicho archivo.
• Damos continuar y nos aparecerá un conjunto de opciones para visualizar los elementos del
modelo a los cuales se les generara las sentencias SQL de tipo DDL Create Table

38
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

39
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Al dar clic en continuar, el asistente de MySQL WorkBench para generar código SQL a partir del modelo
relacional nos muestra las instrucciones SQL que ha generado como resultado del proceso de
transformación del modelo lógico al modelo físico, este proceso es conocido como Normalización de Bases
de datos, el cual consta de un conjunto de 5 reglas ampliamente documentadas en los libros sobre bases
de datos o el los cursos y tutoriales que se encuentran en internet al respecto. El proceso termina cuando
pulsamos el botón Finish, entonces todo el código SQL generado queda almacenado el el archivo que
indicamos en el tercer paso.

Alternativa II para pasar del modelo lógico a la base de datos física.



Una segunda pero mas cómoda y eficiente forma de implementar una base de datos física sobre el motor
de bases de datos MySQL Server a partir del modelo lógico diseñado en el IDE WorkBench es la siguiente:
Establecer una conexión entre el IDE modelador de BD y el Motor de BD, para ello debemos dar clic en la
siguiente ruta Menú Database / Manager Connections…



Nos aparecerá una ventana como la que se aprecia en la siguiente imagen, en ella damos dar clic en el
botón New que esta en la esquina inferior izquierda para poder crear una nueva conexión y darle un
nombre personalizado a la misma, luego debemos configurar los datos y parámetros de conexión con el
motor de BD MySQL Server, los cuales por defecto son (a menos que se cambien por otros después de la
instalación), la dirección IP y el puerto de red del PC donde esta instalado y en ejecución del Motor MySQL
Server, como todo (IDE modelador y Motor de BD) están instalados y ejecutándose en un mismo PC (donde
estamos trabajando) la dirección IP debe ser 127.0.0.1 y el numero de puerto que utiliza por defecto
MySQL es el 3306, el usuario por omisión es root y no tiene password por defecto, por lo que el campo de
password debe quedar vacío.

40
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)




Luego probamos la conexión pulsando clic en el botón Test Connection, si el servidor MySQL esta iniciado
y en ejecución en el mismo PC donde estamos diseñando la base de datos y los parámetros de conexión
son los adecuados (como se aprecia en la imagen anterior), podremos ver el mensaje de notificación
siguiente


Este es el mensaje que nos
indica que MySQL Workbench
nos se ha conectado
satisfactoriamente al Motor
MySQL Server, en este caso no
dice que los parámetros de
conexión son correctos:
Dirección IP, Puerto, Usuario y
Password.




Transformar el modelo relación a sentencias SQL y enviarlo al motor de bases de datos MySQL, para ellos
seguimos la siguiente ruta Menú Databases / Forward Engineer (ver la siguiente imagen)

41
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)



Nos aparece la ventana de Asistente de Envió del Modelo al Motor, en ella como primer paso debemos
seleccionar el nombre de la conexión previamente establecida (en el paso 1 a 3), damos siguiente:



• Luego debemos seleccionar las opciones de
migración que deseamos para transformar
nuestro modelo relacional a sentencias SQL, en
este paso podemos escoger por ejemplo las
opciones para Generar las sentencias SQL inserta
para cada tabla, el nombre de la Base de datos o
esquema de BD e incluir un archivo adjunto con
el Script del condigo SQL generado a partir del
modelo, entre otras opciones, tal como se
parecía en la siguiente imagen.
Tener cuidado y leer muy detalladamente cada
opción, dado que según escojamos o no una,
varias, todas o ninguna, así mismo dependerá el
código SQL generado al final.

El siguiente paso nos permite escoger cuales
elementos u objetos del modelo relacional
vamos a transformar en sentencias SQL, en
nuestro ejemplo nos aparecen 3 objetos, los

42
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
cuales corresponden la las 3 tablas Recurso, Reservas y Usuarios, en el botón Show filter podemos elegir
cuales si y no.



En este otro paso del asistente de Migración de Modelo Relacional a Base de datos Relacional, podemos
observar e incluso editar el código SQL generado a partir de los objetos del Modelo relacional que hayamos
seleccionado. En nuestro ejemplo podemos observar que:

• La línea 16: DROP SCHEMA IF EXISTS app_reservas; indica al motor de bases de datos
MySQL Server que lo primero que debe hacer es eliminar una base de datos llamada app_reservas
en caso de que esta exista previamente en dicho motor.

• La línea 25: CREATE SCHEMA IF NOT EXISTS app_reservas; indica al motor que cree la
base de datos app_reservas en caso de que esta no exista.

• La línea 26: USE app_reservas; indica al motor que utilice las base de datos app_reservas creada
anteriormente, de tal manera que todas las sentencias que siguen se apliquen o ejecuten sobre
dicha base de datos.

• La línea 31 a 41: indica al motor de bd que en caso de que no exista debe crear una tabla llamada
Recursos, la cual contiene una columna llamada ID de tipo entero que no acepta nulos, una
columna llamada nro_serie que puede tener máximo 15 caracteres y acepta nulos, otra llamada
nombre de máximo 15 caracteres que acepta nulos, otra llamada nombre de tipo varchar de
máximo 100 caracteres y no acepta nulos, tres columnas llamadas tipo, estado y foto de máximo
30 caracteres las dos primeras y 17 la tercera, las cuales aceptan valores nulos, otra llamada
descripción que que acepta nulos y su valor es textual con capacidad variable y una ultima columna
llamada fecha_ingreso de tipo fecha actual automática, la tabla posee como llave primaria la
columna id y como índice de tipo único la columna nro_serie.

43
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

Al desplazarnos hacia abajo por el panel de edición de código SQL que se aprecia en esta ventana, podemos
revisar el resto de código SQL que será enviado al motor como parte de las instrucciones con las que este
construirá la base de datos, todo partiendo de un diseño o modelo lógico previamente elaborado. Para
seguir con los pasos pulsamos en el botón continuar.

El próximo y ultimo paso para migrar el modelo lógico relacional a una base de datos física y real dentro
del motor MySQL, consiste en enviar dicho código SQL al motor de bases de datos, si todo va bien, el SGBD
MySQL Workbench que estamos utilizando se comunica con el motor MySQL enviándole instrucción SQL
por instrucción, el motor procede a ejecutarlas una a una con el fin de construir la estructura de la base
de datos y todos sus elementos según el modelo lógico relacional que diseñamos de forma visual
previamente, al terminar el proceso el motor entrega un informe diagnostico al SGBD, el cual podemos
revisar pulsando en el botón Show log o Hidden Log, en nuestro ejemplo todo salió a muy bien, ya que el
motor muestro un reporte que dice “Ejecución de Script SQL finalizado: 12 sentencias satisfactorias con 0
fallas.”

En este momento ya el motor de bases
de datos MySQL contiene en su interior
una nueva base de datos llamada
app_reservas, la cual esta compuesta de
3 tablas y 2 relaciones de uno a muchos
entre ellas, justo como lo diseñamos en
nuestro ejemplo guía. Para finalizar
pulsamos en Close.

Finalizado el proceso de transformación
del modelo lógico al modelo físico, solo
nos queda verificar que la base de datos
exista dentro del motor MySQL Server,
para ello simplemente utilizamos el
SGBD para conectarnos a dicha base de
datos y poder gestionarla de forma muy
cómoda y sencilla.


Este fabuloso IDE a parte de servir como
sistema modelador lógico de bases de
datos, también se puede utilizar como
Sistema de Gestión de Bases de datos en
modelo físico, lo cual nos permite realizar
tareas muy comunes como por ejemplo
ver un listado de todas las bases de datos
dentro del Motor, observar todos los
objetos o elementos dentro de una
determinada base de datos, como lo son
sus tablas, columnas, registros, llaves
primarias y foráneas, índices, etc. Pero
44
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
también nos permite modificar o alterar la estructura de una base de datos, esto puede ser porque
deseemos o nos interese por ejemplo cambiarle el nombre a la BD, agregar o eliminar una tabla,
renombrarla, o modificar su estructura agregando, eliminando o modificando sus columnas, igualmente
nos permite realizar operaciones de mantenimiento sobre el motor o alguna de sus bases de datos,
mediante operaciones como la de realizar un respaldo (backup) o restaurar (restore) la o las bases de
datos, optimizar el rendimiento del motor, entre otras operaciones. Para poder utilizar este IDE como
SGBD solo debemos seguir la siguiente ruta: Clic en el menú Database / Connection Database…, tal como
se muestra en la imagen anterior, observemos que de inmediato nos aparece una nueva pestaña dentro
del IDE, esta pestaña tiene como nombre Sin conexión (unconnected), esto se puede verificar en al
siguiente imagen



Para establecer conexión física con el motor MySQL solo debemos dar clic en el botón Conexión a
SMDB, como reacción el IDE nos pide que seleccionemos un nombre de conexión o ingresemos los
parámetros de una nueva conexión, en nuestro ejemplo ya habíamos creado una conexión llamada
conexión_bd_reservas, la cual será la que seleccionaremos y seguidamente pulsamos el botón OK, o
conectar de la parte inferior, observar la siguiente imagen:

Con esta operación el
IDE MySQL WorkBench
se conecta al Motor de
Base de datos MySQL,
usando para ellos los
parámetros de conexión
por defecto que se
generan al instalar el
servidor MySQL, tales
como Nombre de Host:
127.0.0.1, Puerto: 3306,
usuario: root y
password: vacío o
ninguno.

45
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Un vez el IDE establece conexión con el
servidor, automáticamente muestra
información sobre las bases de datos
dentro del Motor, sus tablas, sus
columnas, índices, llaves primaria y llaves
foráneas, etc.

























Al seleccionar una alguna de las bases de datos en el panel de Esquemas, el IDE muestra dos nuevas
pestañas o paneles en la parte superior, uno de ellos se llama Query o consulta, y otro con el nombre de
la base de datos.

46
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)



Al dar clic en la pestaña o panel de consultas, se nos presenta editor de consultas SQL, en el cual podemos
ingresar las sentencias SQL que necesitemos ejecutar sobre el Motor de bases de datos para la base de
datos seleccionada.
En la siguiente imagen podemos observar dos consultas a ejecutar sobre el motor de bases de datos, la
primera (línea 1) indica que deseamos utilizar la bases de datos de nuestro ejemplo, la segunda instrucción
SQL (línea 2) solicita realizar una consulta de todos los registros (filas) en la tabla Recursos perteneciente
a dicha base de datos. Para ejecutarlas las sentencias SQL podemos seleccionar la línea deseada y pulsar
el botón , en caso de que queramos ejecutar todas las sentencias SQL solo tenemos que pulsar el icono
. Al final del IDE aparecerá un panel llamado Action Output o Salida de acciones, en la cual podemos
apreciar un resumen de la salida de las sentencias SQL que hemos ejecutado sobre el Motor de bases de
datos.




Entre el Panel de Edición de Sentencias SQL y el Panel de Salida de Acciones podemos encontrar un panel
llamado Rejilla de Resultados (Result Grid), el cual contiene información real generada por las el resultado
de las sentencias SQL ejecutadas anteriormente.

47
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
El panel Result Grid contiene un conjunto de iconos muy útiles para trabajar con el resultado de las
sentencias, en especial si se trata de sentencias SQL del tipo SELECT, las cuales realizan consultas de
registros o filas que se encuentran en las tablas incluidas en la clausula FROM de la base de datos.


SINCRONIZAR LOS CAMBIOS EN EL MOTOR CON EL MODELO RELACIONAL

En caso de que realicemos algún cambio en la base de datos afectando directamente el modelo físico
dentro del motor de base de datos pero sin utilizar el IDE MySQL WorkBench, entonces deseamos reflejar
dichos cambios en el modelo lógico, para ello debemos realizar los siguientes pasos:

1. Ir a la siguiente ruta Database / Synchronize Model.. (Observar la siguiente imagen)



Seguir los pasos del asistente de sincronización entre el motor de bases de datos y el modelo lógico de la
base de datos que deseamos actualizar.

Guardar el proyecto del modelo de la base de datos.

Es necesario guardar el modelo de la base de datos en archivos que posteriormente podemos utilizar para
reutilizar para poder observar o modificar dicho modelo lógico y por ende el modelo físico.

48
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

BACKUP DE LA ESTRUCTURA DE LA BASE DE DATOS


A continuación se pude apreciar el script con el código de sentencias SQL que conforman la base de datos
que hemos diseñado durante la lectura de este capitulo. Recordemos que el script de la base de datos lo
podemos generar desde el la ruta Menú File / Export / File Engineer SQL Create Script.

49
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)

50
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
PHPMyAdmin un SGBD online para MySQL escrito en PHP

Tal como lo vimos en el capitulo anterior, existe un amplio numero de herramientas de tipo SGBD (Sistema
de Gestión de Bases de Datos), unos son compatibles con varios Motores de bases de datos y otros
especializados en uno solo, alguno con licencia de uso privativa comercial y otros con menos restricciones
de uso como los de licencia de software libre y licencias de código abierto. Una de estas herramientas es
PHPMyAdmin, el cual es un SGBD bajo licencia de software libre GPL (Global Public Licence) escrito en los
lenguajes PHP, HTML, CSS, JavaScript y XML, es uno de los mas utilizados por los desarrolladores quizás
por su simpleza, rapidez, rendimiento, estabilidad e intuitividad.

Se puede utilizar al descargar e instalar alguna de las siguientes herramientas:
a. XAMPP (Apache, MySQL, PHP, Perls y Python),
b. WAMP (Windows, Apache, MySQL y PHP),
c. MAMP (Mac, Apache, MySQL y PHP),
Al escoger e instalar una de estas herramientas podemos iniciar el servidor web Apache y el servidor de
bases de datos MySQL, luego desde la barra de dirección de nuestro navegador web preferido ingresamos
la esta dirección URL: http://localhost /phpmyadmin, La siguiente imagen muestra un ejemplo de la
interfaz principal de PhpMyAdmin, en la cual podemos apreciar opciones como un listado de bases de
datos (a la izquierda), panel de operaciones sobre las bases de datos (parte superior) , etc.



Para crear una Base de datos debemos dar clic en el panel Base de Datos, ingresamos el nombre de la
base de datos y pulsamos el botón crear.

51
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)
Las base de datos creadas aparecen en el listado que se encuentra en el panel de la izquierda, este panel
contiene opciones que igualmente nos permiten crear una nueva base de datos, explorar la estructura
(tablas, columnas, índices, etc.) de las bases de datos existentes.

El siguiente paso es crear las tablas de la base de datos, para ello se nos pide ingresar el nombre y el
numero de columnas de dicha tabla (datos que podremos modificar mas adelante) y pulsamos el botón
continuar, observemos las siguientes imágenes que nos permiten guiarnos en el proceso:

El ultimo paso es configurar las
columnas de las tablas, indicando
aspectos importantes como su
nombre, tipo, tamaño, restricciones
como si permitirá o no datos nulos, o
si será llave primaria o foránea, o
índice, etc.
Una vez culminemos con la creación y
definición de las tablas de nuestra
base de datos, podremos observar
como quedaría su estructura
explorando sus componentes desde
el panel de Bases de datos o desde el
panel Diseñador que se encuentra en
las opciones de la parte superior, o
simplemente ingresar sentencia SQL
desde el panel SQL, un ejemplo lo
podemos apreciar en las dos
imágenes siguientes.

52
Guía didáctica para desarrollar aplicaciones web con PHP y el patrón MVC.
Autor: John Carlos Arrieta Arrieta. Licencia: CC (BY – NC – ND)




Aquí podemos ver (imagen
izquierda) una lista de las bases
de datos, al seleccionar una
podemos apreciar sus
elementos y sobre ella
podemos realizar las
operaciones explicadas
anteriormente.
Existe incluso un panel (imagen
inferior central) para editar
consultas SQL y otro panel (imagen superior central) para diseñar la base de datos de forma visual.
53

S-ar putea să vă placă și