
Resumen
En este tutorial se describe el uso de MySQL Workbench para el diseño de bases de datos relacionales. Se presentan las principales funcionalidades de MySQL Workbench, como la creación de diagramas relacionales, la generación de scripts SQL, la ingeniería directa e inversa, y la conexión a servidores MySQL. Se describen las tareas principales en MySQL Workbench y se presentan buenas prácticas en el diseño de bases de datos. Se incluye un caso de estudio en el que se aplica el diseño de una base de datos para gestionar atletas y competiciones de atletismo. También se ilustra un caso de migración de una base de datos existente a MySQL. El tutorial está dirigido a estudiantes de bases de datos y a profesionales que deseen aprender a utilizar MySQL Workbench para el diseño de bases de datos.
-
Familiarizarse con MySQL Workbench
-
Aprender a crear diagramas relaciones
-
Obtener el código SQL para la creación de la base de datos a partir de diagramas relacionales
-
Hacer ingeniería directa creando bases de datos MySQL a partir de diagramas relacionales
-
Hacer ingeniería inversa creando diagramas relacionales obtenidos a partir de bases de datos MySQL
1. Descripción de MySQL Workbench
Tal como aparece en la propia web de MySQL Workbench, MySQL Workbench es una herramienta unificada para diseñadores, programadores y administradores de bases de datos MySQL. Si bien existen otras herramientas con estas mismas funcionalidades, o incluso mayores (p.e. Visual Paradigm), lo que destaca en MySQL Workbench es la facilidad con la que nos acostumbramos a manejarlo.
MySQL Workbench proporciona herramientas para modelado de datos, desarrollo con SQL, así como una serie de herramientas de administración, para la configuración de servidores y administración de usuarios, entre otros.
En lo relativo a diseño, MySQL Workbench permite a administradores, programadores y diseñadores de bases de datos diseñar, generar y gestionar bases de datos mediante una interfaz gráfica sencilla e intuitiva. Permite hacer ingeniería directa e ingeniería inversa, así como realizar modificación de esquemas. Con la ingeniería directa se trasladan los cambios desde el modelo a la base de datos. Con la ingeniería inversa se trasladan los cambios desde la base de datos al modelo.
Respecto al desarrollo, MySQL Workbench ofrece herramientas sencillas para crear y ejecutar consultas SQL. El editor SQL destaca la sintaxis y ofrece un historial de ejecución de consultas SQL. Ofrece un panel de administración de conexiones que facilita la tarea de gestionar una serie de conexiones a bases de datos diferentes. Además, un explorador de objetos nos proporciona acceso a los componentes de esquemas de base de datos.
En cuanto a la administración, MySQL Workbench ofrece una consola para administrar de forma sencilla sistemas MySQL. Ofrece herramientas para configuración de servidores, administración de usuarios y conocer el estado de la base de datos.
Por último, MySQL Workbench también facilita la migración de bases de datos populares como por ejemplo Microsoft SQL Server y PostgreSQL, lo que facilita la migración de sistemas a MySQL. Asimismo, también permite migrar de versiones de MySQL antiguas a versiones más recientes.
2. Tareas principales en MySQL Workbench
Al iniciar MySQL Workbench nos aparece una pantalla donde se muestra en la zona de Workspace tres secciones a la izquierda agrupando las tres tareas principales que podemos realizar con MySQL Workbench.
En la zona MySQL Connections
encontramos las opciones para gestionar las conexiones a diferentes bases de datos, manipular datos de tablas y editar código SQL.
En la zona Data Modeling
tenemos las opciones para crear diagramas relacionales, obtener diagramas relacionales de bases de datos existentes, así como a partir de scripts SQL.
En la zona Migration
están las opciones relacionadas con algunas de las tareas de administración de bases de datos como importación y exportación de datos, y administración de usuarios.
La figura siguiente ilustra la pantalla de inicio de MySQL Workbench con los tres botones a la izquierda para acceder a cada una de las zonas mencionadas.

3. Creación de diagramas
En un mismo archivo de MySQL Workbench podemos guardar varios diagramas. En la sección Model Overview
de la pestaña Models
se encuentra el botón para crear nuevos diagramas: Add Diagram
, tal y como se muestra a continuación.

Para crear un diagrama usaremos distintos botones de la barra de herramientas. Principalmente usaremos los de tabla y relación. Con el botón de creación de tablas crearemos únicamente las tablas que corresponden a los conjuntos de entidades de nuestro diagrama. No nos tenemos que preocupar por crear las tablas de relación ni los atributos que forman parte de la clave ajena obtenidos por ejemplo en la transformación en tablas de relaciones 1:1 ó 1:M. De esto se encarga MySQL Workbench en el momento en que se crean las relaciones.
Sólo creamos las tablas que corresponden a los conjuntos de entidades. Después creamos las relaciones. MySQL Workbench crea las tablas de relación y las claves ajenas. |
Dichas relaciones podrán ser de identificación o de no identificación, expresando si la relación transmite la clave primaria o no a la tabla relacionada, además de servir como asociación entre relaciones de identificación cuando definamos relaciones M:N o cuando relacionemos un conjunto de entidades débil con el conjunto de entidades fuerte del que depende.
Las relaciones de identificación se representan con una línea continua, mientras que las relaciones de no identificación se representan con una línea discontinua. En las relaciones de identificación, la clave primaria de la tabla de la parte 1 se traslada a la tabla de la parte M y forma parte de la clave primaria de la tabla de la parte M. En las relaciones de no identificación, se crea una clave ajena en la tabla de la parte M que apunta a la clave primaria de la tabla de la parte 1, pero no forma parte de la clave primaria de la tabla de la parte M. Una regla sencilla para recordar esto es que si la línea es continua, la clave primaria consigue llegar al otro lado y llega identificando (formando parte de la clave primaria), mientras que si la línea es discontinua, la clave primaria no llega al otro lado porque cae entre los huecos de la línea discontinua y por tanto no llega identificando. |
Para crear una relación 1:M y que las claves ajenas se creen automáticamente, primero seleccionamos la tabla de la parte M y después la tabla de la parte 1. Si la relación es de identificación, la clave primaria de la tabla de la parte 1 se trasladará a la tabla de la parte M y llegará formando parte de la clave primaria de la tabla de la parte M. En cambio, si la relación es de no identificación, se creará una clave ajena en la tabla de la parte M que apunta a la clave primaria de la tabla de la parte 1, pero no formará parte de la clave primaria de la tabla de la parte M.
La figura siguiente ilustra un diagrama en MySQL Workbench con una relación 1:M de identificación entre las tablas Atleta
y Sponsor
correspondiente al paso a tablas de un atributo multivaluado sponsor
de los atletas. A la hora de crear la relación, primero seleccionamos la tabla Sponsor
(parte M) y después la tabla Atleta
(parte 1). Esto se traduce en que la clave primaria de la tabla Atleta
se trasladará a la tabla Sponsor
y formará parte de la clave primaria de la tabla Sponsor
, formando una relación de identificación.

MySQL sigue un patrón de denominación de columnas para las claves ajenas. Si no se especifica el nombre de la clave ajena, MySQL Workbench lo generará automáticamente. El patrón es el siguiente: |
A la hora de definir una relación establecemos la cardinalidad máxima eligiendo si es 1:1, 1:M o M:N. No obstante, también es posible indicar la cardinalidad mínima especificando si es 0 ó 1. Esto indica si es necesario relacionarse con una entidad del otro conjunto (obligatorio -cardinalidad mínima 1), o bien es opcional (puede ser nulo -cardinalidad mínima 0). En MySQL Workbench esto se realiza editando la sección de datos relativos a foreign key de la relación. Activar la casilla Mandatory
establece una cardinalidad mínima de 1, mientras que si Mandatory
está desactivada, estamos definiendo una cardinalidad mínima de 0.
La figura siguiente ilustra un diagrama en MySQL Workbench con una relación 1:M de identificación entre las tablas Atleta
y Sponsor
. En la sección de datos de la relación en la parte inferior se ha establecido que la cardinalidad mínima es 0, lo que significa que un atleta puede no tener sponsors.

4. Conexión a un servidor MySQL
Una función interesante que nos ofrece MySQL Workbench es la posibilidad de establecer conexiones con bases de datos MySQL a las que tengamos acceso. Necesitaremos los datos del servidor (nombre o IP), así como nombre de usuario y contraseña. Una vez creada la conexión, la podemos utilizar para lanzar código SQL desde MySQL Workbench, para crear una base de datos a partir de diagramas. O lo contrario, esto es, obtener el diagrama asociado a los objetos de una base de datos a la que tenemos acceso.
En MySQL Workbench las conexiones son creadas desde la sección MySQL Connections
de la pestaña Home
. Después deberemos completar los datos de conexión en un cuadro de diálogo como el de la figura siguiente.

Una vez creada la conexión, podremos abrirla para lanzar código SQL a través de una interfaz con componentes de verdadera utilidad, como el acceso a los componentes de los esquemas (tablas, vistas, índices, claves ajenas y triggers), una consola de edición de comandos, una zona de exploración de resultados, historial de comandos y snippets de código SQL, que nos recuerdan la sintaxis de multitud de construcciones SQL. La figura siguiente ilustra una captura de la ventana de desarrollo SQL de MySQL Workbench.

5. Ingeniería directa e ingeniería inversa
MySQL Workbench nos facilita las tareas de creación de esquemas en dos sentidos. Por un lado, nos permite obtener el script SQL de creación de la base de datos, o su creación directa a partir de una conexión establecida con un servidor MySQL. A esto se le conoce como ingeniería directa, ya que a partir del diagrama obtenemos el código SQL para su construcción. O bien nos construye directamente la base de datos si tenemos definida una conexión a un servidor MySQL. Por otro lado, puede hacer el trabajo en la dirección contraria y permite obtener el diagrama asociado a una base de datos existente o a partir del código SQL de creación de una base de datos. A esto se le conoce como ingeniería inversa.
5.1. Generación de scripts SQL de creación de bases de datos
A partir del diagrama creado en MySQL Workbench es posible obtener el código SQL para la inicialización de la base de datos. Dicho script podrá ser ejecutado contra un servidor MySQL para crear una base de datos MySQL. Para generar dicho script, seleccionamos la opción File | Export | Forward Engineer SQL CREATE Script…
del menú principal. A continuación, se nos presentará un asistente en el que podremos seleccionar las opciones de exportación y los objetos a incluir en el script SQL. En la ventana de generación del script SQL podremos elegir un nombre para el archivo y activar distintas opciones, tal y como muestra la figura siguiente. Por ejemplo, en la figura se han marcado las opciones para eliminar las tablas antes de ser creadas siempre que existiesen previamente, de forma que la base de datos será creada o inicializada cuando se ejecute este script.

A la hora de crear el script podremos indicar para qué objetos queremos que se cree código SQL. Entre estos objetos están las tablas, vistas y triggers del modelo Workbench con el que estamos trabajando.

Finalmente, nos aparecerá el código SQL para la creación de los objetos que hayamos seleccionado tal y como muestra la figura siguiente. Dicho script lo podremos utilizar para crear la base de datos en cualquier servidor MySQL al que tengamos acceso.

5.2. Creación de la base de datos a partir del diagrama de Workbench
Si tenemos definida una conexión a un servidor MySQL es posible crear directamente la base de datos en el servidor a partir del modelo definido sin tener que pasar por el proceso de generar el script SQL y ejecutarlo posteriormente en un servidor MySQL. Además, esta opción ofrece la ventaja de que los cambios que realicemos en el modelo en una operación de modificación de esquemas podrán ser trasladados directamente a la base de datos actualizándola de acuerdo con los cambios introducidos en el modelo. Este proceso de realizar cambios en el esquema Workbench y llevarlos directamente a la base de dato es el que se conoce como ingeniería directa.
El proceso de llevar los cambios directamente desde el modelo a la base de datos es similar al proceso indirecto (vía el script SQL). La diferencia es que se añade un paso al inicio en el que hay que indicar los datos de la conexión a la base de datos en la que queremos realizar los cambios. Para ello, seleccionamos la opción Database | Forward Engineer…
del menú principal. A continuación, se nos presentará un asistente en el que comenzaremos indicando los datos de conexión al servidor MySQL en el que queremos crear la base de datos. La figura siguiente ilustra la pantalla de ese paso en el asistente. Ahí seleccionamos una conexión definida previamente, o bien especificamos los datos de conexión directamente.

Una vez creada la base de datos en el servidor MySQL podríamos ver los objetos creados. Para ello, desde la pestaña de inicio del modelo Workbench hay que establecer una conexión con la base de datos. Una vez abierta la conexión podremos ver los distintos objetos creados. La figura siguiente ilustra una captura de una base de datos generada desde un diagrama Workbench mostrando las distintas tablas creadas.

5.3. Creación del esquema Workbench a partir de una base de datos existente
Otra función interesante de MySQL Workbench es la posibilidad de crear un diagrama Workbench a partir de los objetos existentes en una base de datos MySQL a la que tengamos acceso. Este proceso, conocido como ingeniería inversa, importará tablas y vistas definidas en la base de datos, y podrá crear relaciones entre ellas siempre que haya definidas claves ajenas en las tablas de la base de datos. Una vez importados los objetos del diagrama, sólo tendremos que reorganizarlos en la zona de trabajo. Posteriormente, podremos realizar cambios sobre el modelo y trasladarlos a la base de datos. Al igual que en la ingeniería directa, necesitamos tener los datos de conexión al servidor al que nos vamos a conectar para importar los objetos.
Para realizar la ingeniería inversa, seleccionamos la opción Database | Reverse Engineer…
del menú principal. A continuación, se nos presentará un asistente en el que comenzaremos indicando los datos de conexión al servidor MySQL en el que queremos importar los objetos. La figura siguiente ilustra la pantalla de ese paso en el asistente. Después de haber especificado los parámetros de conexión, debemos indicar desde qué esquema queremos importar los objetos. La figura siguiente ilustra la selección de un esquema de artículos deportivos.

Una vez seleccionada la base de datos, podremos continuar y tras un informe del progreso nos permitirá seleccionar qué objetos queremos importar. De forma predeterminada, se importarán todos los objetos existentes en la base de datos. No obstante, se puede indicar al asistente que excluya algunos objetos de la importación. La figura siguiente ilustra una captura del asistente en el que se pueden excluir algunos objetos de importación.

La figura siguiente ilustra los objetos importados al diagrama. Si las tablas importadas de la base de datos tienen claves ajenas definidas, éstas se representarán en el diagrama mediante relaciones de identificación o no identificación, según corresponda.

Si las tablas importadas de la base de datos no tienen claves ajenas definidas, MySQL Workbench no podrá establecer relaciones entre ellas. Sin embargo, las columnas sí quedarán creadas. Para establecer las relaciones en el diagrama de forma manual utilizaremos el botón de creación de relaciones utilizando columnas existentes. En este proceso de creación de relaciones, primero seleccionaremos las columnas origen que establecen la referencia. Después seleccionaremos las columnas referenciadas o de destino de la foreign key. En el caso de relaciones 1:M esto se traduce en que primero seleccionaremos los atributos de la parte M y después seleccionaremos los atributos de la parte 1. Si en lugar de elegir la creación de relación entre columnas existentes, elegimos la creación de relación entre tablas, MySQL Workbench creará las tablas de relación y las claves ajenas automáticamente sin tener en cuenta las columnas existentes para ello previamente. |
6. Buenas prácticas en el diseño de bases de datos
El diseño de bases de datos es una tarea crucial para asegurar el rendimiento y la mantenibilidad de una aplicación. A continuación, se presentan algunas buenas prácticas y recomendaciones para diseñar bases de datos de manera eficiente y evitar errores comunes.
6.1. Nombres de tablas y columnas
-
Utilizar nombres descriptivos y consistentes para tablas y columnas.
-
Seguir un convenio de nombres claro y coherente (por ejemplo,
snake_case
,camelCase
, …). -
Evitar el uso de palabras reservadas del SGBD como nombres de tablas o columnas.
6.2. Tipos de datos
-
Seleccionar el tipo de datos adecuado para cada columna para optimizar el almacenamiento y el rendimiento.
-
Evitar el uso de tipos de datos más grandes de lo necesario (por ejemplo, utilizar
INT
en lugar deBIGINT
si los valores no superan el rango deINT
). -
Utilizar tipos de datos específicos para fechas, horas y valores monetarios.
6.3. Uso de claves primarias y ajenas
-
Definir claves primarias para cada tabla que identifiquen de manera única cada registro.
-
Utilizar claves ajenas para establecer relaciones entre tablas y asegurar la integridad referencial.
-
Evitar el uso de datos propensos a cambios como claves primarias (por ejemplo, números de teléfono, direcciones de correo electrónico).
6.4. Integridad de los datos
-
Definir restricciones de integridad (por ejemplo,
NOT NULL
,UNIQUE
,CHECK
) para asegurar la validez de los datos. -
Utilizar transacciones para asegurar que las operaciones de múltiples pasos se completen de manera atómica.
-
Implementar procedimientos de validación y limpieza de datos para mantener la calidad de los datos.
6.5. Índices
-
Crear índices en columnas que se utilizan frecuentemente en cláusulas
WHERE
,JOIN
yORDER BY
. -
Evitar la creación de demasiados índices, ya que pueden afectar el rendimiento de las operaciones de inserción, actualización y eliminación.
-
Utilizar índices únicos para columnas que deben tener valores únicos.
6.6. Documentación
-
Documentar el esquema de la base de datos, incluyendo la descripción de tablas, columnas, relaciones y restricciones.
-
Mantener un registro de cambios en el esquema de la base de datos.
-
Proporcionar ejemplos de consultas comunes y explicaciones sobre el uso de índices y optimización de consultas.
Siguiendo estas buenas prácticas, se puede diseñar una base de datos eficiente, fácil de mantener para satisfacer las necesidades de una aplicación.
7. Caso de estudio
En este apartado se presenta un caso de estudio en el que se aplican los conceptos y técnicas descritos anteriormente para el diseño de una base de datos utilizando MySQL Workbench.
7.1. Descripción del problema
Nos han encargado crear una base de datos relacional para gestionar los atletas y sus resultados en las competiciones oficiales de atletismo. Contamos con los datos siguientes:
-
De cada atleta se guarda un identificador, que es único en toda la base de datos, nombre, país de nacimiento, fecha de nacimiento, estatura y peso. También se guarda una lista de los distintos sponsors que le patrocinan.
-
Cada atleta sólo puede estar federado en un único país. De cada país guardaremos su código ISO internacional de 3 letras, que es único en toda la base de datos, y su nombre.
-
Se guardan los distintos campeonatos de la federación mundial de atletismo. De cada campeonato se guarda un identificador, que es único en toda la base de datos, nombre, fecha de inicio, fecha de fin, así como su país y ciudad de celebración.
-
Se guardan las distintas competiciones deportivas de cada campeonato (p.e. 100 m lisos, 110 metros vallas, 400 m, lanzamiento de jabalina, 100 m estilos de natación, …). De cada competición se guarda un id, que es único en toda la base de datos, el deporte al que corresponde (p.e. carrera de atletismo, lanzamiento de jabalina, natación, …), la modalidad (p.e. 100 m lisos, 110 m vallas, 400 m, …) y la categoría (masculino o femenino).
-
De cada competición deportiva se almacenan cada una de las series que se celebran. De cada serie se almacena un número de serie, que es único en toda la base de datos, fecha y hora.
-
Se almacenan cada uno de los atletas inscritos a cada campeonato. A cada atleta inscrito en un campeonato se le asigna un dorsal para ese campeonato.
-
También se almacena el puesto final y el tiempo o marca final de cada atleta en cada una de las competiciones deportivas, así como en cada una de las series en las que participa.
-
La base de datos también almacenará los records de cada país en cada modalidad deportiva. Para cada record se guarda el deporte asociado, modalidad, marca o record, el campeonato en el que se obtuvo, un indicador de si es record olímpico, la categoría (masculino o femenino) y la persona atleta que lo obtuvo. No se guarda ningún identificador artificial ni generado para los records.
-
Por último, en la ceremonia de inauguración de algunos campeonatos, se designa a una persona atleta como abanderada por país. Se almacenará este dato en la base de datos.
7.2. Diagrama relacional en MySQL Workbench
A partir de la descripción del problema, obtenemos lo siguiente:
-
Conjuntos de entidades fuertes:
Atleta
,País
,Campeonato
,Competición
ySerie
-
Conjuntos de entidades débiles:
Record
respecto aPaís
-
Atributos de los conjuntos de entidades:
-
Atleta (id (PK), nombre, fechaNacimiento, estatura, peso)
-
País (codigoISO (PK), nombre)
-
Campeonato (id (PK), nombre, fechaInicio, fechaFin, ciudad)
-
Competición (id (PK), deporte, modalidad, categoria)
-
Serie (numSerie (PK), fechaHora)
-
Record (deporte (PK), modalidad (PK), marca, olimpico, categoria (PK))
-
-
Atributos multivaluados:
Sponsor
respecto aAtleta
-
Relaciones:
Relación Cardinalidad Participantes Atributos NacidoEn
M:1
Atleta, País
FederadoEn
M:1
Atleta, País
InscritoEn
M:N
Atleta, Campeonato
dorsal
SeCelebraEn
M:1
Campeonato, País
Tiene
M:N
Campeonato, Competición
Incluye
M:N
Competición, Serie
CompiteEnSerie
M:N
Atleta, Serie
puesto, tiempo
CompiteEnCompetición
M:N
Atleta, Competición
puestoFinal, tiempoFinal
ObtenidoPor
M:1
Record, Atleta
TieneRecord
1:N
País, Record
ObtenidoEn
M:1
Record, Competición,
Abanderado
1:1:M
Campeonato, Atleta, País
A partir de esta descripción, podemos crear un diagrama en MySQL Workbench que represente la estructura de la base de datos.
Hay que tener en cuenta que MySQL Workbench crea automáticamente las claves ajenas y tablas de relación, con sus claves primarias y claves ajenas en el momento en que se definen las relaciones entre tablas. Para ello, habrá que seleccionar correctamente si se trata de una relación 1:1, M:N, una M:1 de identificación (como la que ocurre entre los conjuntos de entidades débiles con su fuerte), o una M:1 de no identificación (como la que ocurre en una relación 1:M entre conjuntos de entidades fuertes). |
Para ilustrar algunos de los puntos importantes, mostraremos algunas capturas de pantalla del proceso de diseño de la base de datos en MySQL Workbench.
Comenzamos creando una tabla para el conjunto de entidades Atleta
con todos sus atributos. Como el atributo sponsor
es multivaluado, lo almacenamos en una tabla independiente y creamos una relación 1:M de identificación entre Atleta
y Sponsor
. La relación será de identificación porque la clave primaria de Atleta
se trasladará a Sponsor
y formará parte de la clave primaria de Sponsor
. En cuanto a la cardinalidad mínima, la establecemos a 0 para permitir que un atleta no tenga sponsors. Para cambiar esa cardinalidad y hacer que sea mínima, editamos la relación y desactivamos la casilla Mandatory
.
Para crear la relación 1:M de identificación, primero seleccionamos la tabla Sponsor
(parte M) y después la tabla Atleta
(parte 1). La figura siguiente muestra la creación de la tabla Atleta
y la relación con la tabla Sponsor
.

A continuación creamos la tabla para País
y establecemos las relaciones con Atleta
. Inicialmente, crearemos dos relaciones de no identificación, una para la relación NacidoEn
y otra para la relación FederadoEn
. Se trata de relaciones de no identificación porque no queremos que la clave primaria de País
forme parte de la clave primaria de Atleta
. Para crear la relación de no identificación, primero seleccionamos la tabla Atleta
(parte M) y después la tabla País
(parte 1). En cuanto a la cardinalidad mínima de la relación, por un lado la establecemos a 1 con País
para indicar que un atleta debe estar federado en un país y haber nacido en un país. Por otro lado, la establecemos a 0 con Atleta
para permitir que un país no tenga atletas federados o nacidos en él. La figura siguiente muestra la creación de la tabla País
y las relaciones con la tabla Atleta
.

Otra parte importante de la creación de este diagrama es la relacionada con el conjunto de entidades débiles Record
. En este caso, la relación entre Record
y País
es de identificación, ya que la clave primaria de País
se trasladará a Record
y formará parte de la clave primaria de Record
. Para la creación de la relación 1:M de identificación, primero seleccionamos la tabla Record
(conjunto de entidades débiles al que le llegará la clave y está en el extremo M
) y después la tabla País
(conjunto de entidades fuertes del que depende y está en el extremo 1
). En cuanto a la cardinalidad mínima, la establecemos a 1 con País
para indicar que un record debe estar asociado a un país y a 0 con Record
para permitir que un país no tenga records asociados. La figura siguiente muestra la creación de la tabla Record
y la relación con la tabla País
.

Para ilustrar la creación de una relación M:N ilustraremos la relación entre Atleta
y Campeonato
. En este caso, la relación es de M:N porque un atleta puede estar inscrito en varios campeonatos y un campeonato puede tener varios atletas inscritos. Para crear la relación M:N, el orden en este caso no es importante. Como consecuencia de la relación M:N, se creará una tabla de relación InscritoEn
que contendrá las claves primarias de Atleta
y Campeonato
. Como esta relación además tiene atributos descriptivos (atributos de relación), en este caso el dorsal, éste se añadirá como columna en la tabla de relación. Desde el punto de vista de la cardinalidad mínima a la tabla de relación, la establecemos a 0 indicando que un atleta no tiene por qué estar inscrito en un campeonato y un campeonato no tiene por qué tener atletas inscritos. La figura siguiente muestra la creación de la relación M:N entre las tablas Atleta
y Campeonato
.

Así, continuamos creando las tablas y relaciones necesarias para el resto de conjuntos de entidades y relaciones. La figura siguiente muestra el diagrama completo obtenido en MySQL Workbench.

7.3. Forward Engineering
Una vez creado el diagrama en MySQL Workbench, podemos generar el script SQL para la creación de la base de datos. Otra opción es crear directamente la base de datos en un servidor MySQL a partir del diagrama. Sin embargo, antes de continuar debemos hacer un par de operaciones.
En primer lugar, hay que cambiar el nombre del esquema, ya que por defecto es mydb
. Para cambiar el nombre del esquema, nos situamos en la pestaña MySQL Model
, y en la sección Physical Schemas
cambiamos el nombre del esquema haciendo doble clic sobre el nombre de esquema actual (mydb
). El nuevo nombre del esquema será CompeticionesAtletismo
. La figura siguiente muestra el cambio de nombre del esquema. Si no se cambia el nombre del esquema, el script SQL generará la base de datos con el nombre mydb
en lugar de CompeticionesAtletismo
.

Otra operación a realizar es sobre la configuración de MySQL Workbench, ya que pueden producirse problemas en la generación del código SQL o en la operacion de creación directa de la base de datos. El problema tiene su origen en que el código SQL que genera (y que intenta ejecutar en el servidor MySQL si nos decantamos por esta opción) incluye una opción en los índices relativos a su visibilidad. Esta opción no es soportada por versiones de MySQL anteriores a la 8.0, ni por MariaDB. Para evitar este tipo de problemas, indicaremos que la versión de MySQL de destino es la 5.7, una de las versiones más populares. Esto hará que el código generado sea compatible con versiones anteriores de MySQL y con MariaDB. Para ello, seleccionamos la opción Edit | Preferences
del menú principal. A continuación, seleccionamos la opción Modeling
y en la sección MySQL
cambiamos la versión de MySQL a 5.7. La figura siguiente muestra la configuración de MySQL Workbench para la versión 5.7.

7.4. Generación del script SQL
A partir del diagrama de MySQL Workbench, podemos generar el script SQL para la creación de la base de datos. Para ello, seleccionamos la opción File | Export | Forward Engineer SQL CREATE Script…
del menú principal. A continuación, seleccionamos las opciones de exportación (p.e. si se quiere eliminar el esquema previo, si se desea omitir la creación de claves ajenas, …). La figura siguiente ilustra estas opciones y muestra que no activamos ninguna en este ejemplo. Especificaremos un nombre de archivo con las instrucciones SQL (p.e. CompeticionesAtletismo.sql
).

En el paso siguiente seleccionamos los objetos a incluir en el script SQL. En este caso, seleccionamos todas las tablas del diagrama. La figura siguiente muestra la selección de los objetos a incluir en el script SQL.

Finalmente, obtenemos el script SQL que podemos ejecutar en un servidor MySQL para crear la base de datos.
...
CREATE SCHEMA IF NOT EXISTS `CompeticionesAtletismo` DEFAULT CHARACTER SET utf8 ; (1)
USE `CompeticionesAtletismo` ;
-- -----------------------------------------------------
-- Table `CompeticionesAtletismo`.`Pais`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CompeticionesAtletismo`.`Pais` (
`codigoISO` VARCHAR(3) NOT NULL,
`pais` VARCHAR(45) NULL,
PRIMARY KEY (`codigoISO`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `CompeticionesAtletismo`.`Atleta`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CompeticionesAtletismo`.`Atleta` (
`idAtleta` INT NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(100) NULL,
`fechaNacimiento` DATETIME NULL,
`estatura` INT NULL,
`peso` INT NULL,
`nacidoEn` VARCHAR(3) NOT NULL,
`federadoEn` VARCHAR(3) NOT NULL,
PRIMARY KEY (`idAtleta`),
INDEX `fk_Atleta_Pais1_idx` (`nacidoEn` ASC), (2)
INDEX `fk_Atleta_Pais2_idx` (`federadoEn` ASC),
CONSTRAINT `fk_Atleta_Pais1`
FOREIGN KEY (`nacidoEn`)
REFERENCES `CompeticionesAtletismo`.`Pais` (`codigoISO`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Atleta_Pais2`
FOREIGN KEY (`federadoEn`)
REFERENCES `CompeticionesAtletismo`.`Pais` (`codigoISO`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
...
1 | Creación del esquema CompeticionesAtletismo |
2 | Si no se hubiera cambiado la versión de destino de MySQL a 5.7, el script SQL incluiría la visibilidad de los índices (p.e. VISIBLE ). Como se ha indicado, esto podría producir errores en versiones anteriores de MySQL o en MariaDB. |
Si no se hubiese cambiado el nombre de la base de datos, el script SQL generaría la base de datos con el nombre |
7.5. Creación directa de la base de datos
Si tenemos una conexión a un servidor MySQL, podemos crear directamente la base de datos a partir del diagrama en MySQL Workbench. Para ello, y tras haber cambiado el nombre del esquema a CompeticionesAtletismo
(ver principio de la sección), seleccionamos la opción Database
→ Forward Engineer…
del menú principal. A continuación, seleccionamos la conexión a la base de datos y las opciones de exportación. Aparecerá el script SQL que se ejecutará en el servidor MySQL si continuamos adelante.
Finalmente, MySQL Workbench creará la base de datos en el servidor MySQL con los objetos definidos en el diagrama. La figura siguiente muestra el paso de selección de la conexión a la base de datos.

Tras esta opción se creará la base de datos en el servidor MySQL informando del éxito. La figura siguiente muestra el progreso satisfactorio de la creación de la base de datos.

Si ahora abirmos una conexión a la base de datos desde pantalla de inicio de MySQL Workbench, podremos ver los objetos creados. La figura siguiente muestra una captura de la base de datos creada en el servidor MySQL.

8. Migración de una base de datos existente
En el caso de que tengamos una base de datos existente y queramos llevarla a MySQL, MySQL Workbench nos ayuda a realizar esa operación. La base de datos de origen no tiene por que ser MySQL, puede ser cualquier otro SGBD. Es decir, podríamos usar el asistente de migración para migrar una base de datos SQL Server a MySQL. Pero también se puede migrar una base de datos de un servidor MySQL a otro servidor MySQL. En este caso vamos a migrar una base de datos de Microsoft Access a MySQL. Además, utilizaremos MySQL Workbench para que nos asista a crear el diagrama asociado. Para ello, necesitaremos tener acceso a la base de datos de origen y a la base de datos de destino. En este caso, la base de datos de origen es un archivo de Microsoft Access y la base de datos de destino es un servidor MySQL al que tengamos acceso. La base de datos de origen es la de datos académicos que se utilizó en un tutorial anterior. Está disponible en la carpeta de Recursos complementarios de Aula Virtual con el nombre de Academica.accdb
.
Es importante contar con la versión 64 bits de Microsoft Access para poder acceder a la base de datos desde MySQL Workbench. |
La conexión a la base de datos de origen se realizará a través del driver ODBC (Open Database Connectivity). ODBC proporciona una capa de abstracción que permite a las aplicaciones acceder a bases de datos de forma independiente del SGBD. En el caso de Microsoft Access, el driver ODBC de Microsoft Access nos permitirá acceder a la base de datos de origen. Para ello, necesitaremos tener instalado el driver ODBC de Microsoft Access. En el caso de Windows, el driver ODBC de Microsoft Access viene instalado por defecto. Si no lo tuviéramos instalado, podríamos descargarlo de Microsoft.
8.1. Creación de la entrada DSN para la base de datos de origen
Comenzaremos el proceso de migración de la base de datos creando una entrada DSN para la base de datos de origen. Todo el proceso lo realizaremos mediante el Asistente de migración de MySQL Workbench. Para ello, seleccionamos la opción Database | Migration Wizard …
del menú principal. Esto iniciará el asistente, que se muestra en la figura siguiente.

En el primer paso crearemos el DSN, invocando al Administrador de origen de datos ODBC (64 bits)
de Windows pulsando el botón Open ODBC Administrator
en la parte inferior del asistente. Un DSN (Data Source Name) es una entrada de configuración que especifica la información necesaria para conectarse a una base de datos a través de un driver ODBC. En el caso de Microsoft Access, necesitaremos crear una entrada DSN para la base de datos de origen Academica.accdb
. Para ello, desde el Administrador de origen de datos ODBC (64 bitd)
de Windows de la figura siguiente seleccionamos la pestaña DSN de usuario
y hacemos clic en el botón Agregar…
.

A continuación, seleccionamos el driver ODBC de Microsoft Access y hacemos clic en el botón Finalizar
.

En la ventana de configuración de la entrada DSN, especificamos un nombre para la entrada DSN (p.e. Academica
) y la ruta al archivo de la base de datos de origen, tal y como muestra la figura siguiente.

Tras esto, la entrada DSN para la base de datos de origen estará creada, como muestra la figura siguiente. A partir de ahora, podremos utilizarla para conectarnos a la base de datos de origen desde cualquier aplicación que soporte ODBC. En nuestro caso, la utilizaremos para la migración de la base de datos de origen a MySQL con MySQL Workbench.

Si la base de datos de Access está abierta en el momento de creación del DSN, es posible que se produzca un error al intentar conectarse a la base de datos de origen informando de |
8.2. Migración de la base de datos de origen a MySQL
Una vez creada la entrada DSN para la base de datos de origen, volvemos al asistente de migración de MySQL Workbench para comenzar con el proceso en sí de migración de la base de datos. Comenzamos seleccionado la configuración de la base de datos de origen. En este caso consiste en la selección del SGBD de origen (Microsoft Access
), del método de conexión (ODBC Data Source
) y de la entrada DSN que acabamos de crear (Academica
), tal y como muestra la figura siguiente.

Puedes encontrar información más detallada sobre este proceso en la documentación oficial de MySQL Workbench sobre la migración de bases de datos Microsoft Access con el Database Migration Wizard. |
En el paso siguiente seleccionamos los parámetros de conexión del destino, en este caso un servidor MySQL. Para ello, seleccionamos el método de conexión (TCP/IP), el host (p.e. localhost
), el puerto (p.e. 3306
), el usuario y la contraseña, tal y como muestra la figura siguiente. Si ya tuviéramos creada previamente una conexión a un servidor MySQL, podríamos seleccionarla en lugar de especificar los parámetros de conexión. La figura siguiente muestra la configuración del destino.

A continuación, el asistente se conectará al sistema de origen, comprobará la conexión al sistema de destino y recuperará los objetos de la base de datos de origen. Si todo es correcto podremos continuar al paso siguiente en el que se obtendrán los objetos del sistema de destino, por si hubiera que realizar alguna adaptación. La figura siguiente muestra el resultado. A pesar de informar de un error, éste no es relevante y podemos continuar.

En el paso siguiente, seleccionamos los objetos que queremos migrar. En este caso, seleccionamos todas las tablas de la base de datos de origen. La figura siguiente muestra la selección de los objetos a migrar.

Finalmente, el asistente generará el script SQL para la creación de la base de datos en MySQL y el asistente informará del proceso (pasos Migration
y Manual Editing
del asistente). En un paso posterior (Target Creation Options
) se nos permitirá seleccionar las opciones de creación de la base de datos en MySQL (p.e. si se quiere crear un esquema nuevo, si se desea generar un archivo SQL, …). La figura siguiente muestra la opciones de creación de la base de datos en MySQL.

Tras esto, el asistente iniciará el proceso de migración de la base de datos de origen a MySQL. Una vez finalizado, se mostrará un informe con el resultado de la migración. La figura siguiente muestra el informe del progreso.

En el paso siguiente el asistente nos muestra todos los objetos que ha creado en el destino e informa que se han llevado a cabo con éxito. La figura siguiente muestra el resultado de la migración.

Finalmente, mostrará algunos pasos más informando que todo ha ido bien. Tras esto, podremos conectarnos a la base de datos de destino y ver los objetos creados. La figura siguiente muestra una captura de la base de datos creada en el servidor MySQL.

8.3. Ingeniería inversa
Tras realizar la migración, sería interesante obtener un diagrama de la base de datos de destino. Para ello, seleccionamos la opción Database | Reverse Engineer…
del menú principal. A continuación, seleccionamos la conexión a la base de datos de destino y las opciones de importación. Se creará un diagrama de la base de datos de destino con todas las tablas que lo forman. Podemos apreciar que las tablas fueron llevadas correctamente de la base de datos MySQL al modelo. Sin embargo, en este caso no se crearon las relaciones entre las tablas. Esto se debe posiblemente a que las tablas de la base de datos de origen no tenían claves ajenas definidas. La figura siguiente muestra el diagrama de la base de datos de destino.
Las relaciones que se se creen deben ser con la opción de crear relaciones entre columnas existentes. Si se selecciona la opción de crear relaciones entre tablas, se crearán las relaciones pero se añadirán las columnas de las claves ajenas a las tablas, lo que no es correcto, ya que en este caso las columnas de las claves ajenas ya existen en las tablas. Lo único que falta es la restricción de clave ajena y eso se realiza con la opción de crear relaciones entre columnas existentes. |

Para crear las relaciones entre las tablas, podemos hacerlo de forma manual utilizando el botón de creación de relaciones a partir de columnas existentes. En este proceso de creación de relaciones, primero seleccionaremos las columnas de la clave ajena y después seleccionaremos las columnas de la clave primaria a la que hacen referencia. Tras realizar este proceso, obtendremos un diagrama de la base de datos de destino con las relaciones entre las tablas. La figura siguiente muestra el diagrama de la base de datos de destino con las relaciones creadas.

8.4. Sincronización de la base de datos
Una vez creado el diagrama de la base de datos de destino, sería interesante sincronizarlo con la base de datos de destino para aplicar los cambios realizados en el diagrama a la base de datos. Este proceso es necesario porque hasta ahora se han realizado una serie de cambios en el modelo añadiendo las relaciones entre las tablas, y por tanto añadiendo las restricciones de clave ajena. Sin embargo, esta modificación ha ocurrido en el modelo pero no se ha trasladado a la base de datos de destino. Para ello realizaremos lo que se conoce como sincronización de la base de datos. El proceso de sincronización, como su nombre indica, sincroniza el modelo de la base de datos con la base de datos de destino. Es decir, por un lado, aplica los cambios realizados en el diagrama a la base de datos de destino; y por otro lado, si se han realizado cambios en la base de datos de destino, los aplica al diagrama.
Para ello, con el modelo abierto, seleccionamos la opción Database | Synchronize Model…
del menú principal. A continuación, seleccionamos la conexión a la base de datos de destino y las opciones de sincronización. Se aplicarán los cambios realizados en el diagrama a la base de datos de destino. La figura siguiente muestra el proceso de sincronización a realizar sobre la base de datos de destino (en concreto, en las tablas Estudia
, Imparte
y Personal
).

Los botones |
Tras la sincronización, se mostrará una previsualización del script SQL generado para aplicar los cambios en la base de datos de destino. El script incluirá las instrucciones SQL para añadir las claves ajenas que faltan en la base de datos de destino. La figura siguiente muestra el script SQL generado.

Finalmente, se aplicarán los cambios en la base de datos de destino. Tras esto, la base de datos de destino estará sincronizada con el diagrama y se habrán aplicado las relaciones entre las tablas. Si ahora comprobamos las propiedades de alguna de las claves ajenas de la base de datos de destino, veremos que se han creado correctamente. La figura siguiente muestra las propiedades de una clave ajena de la base de datos de destino.

Esto finalizaría el proceso de migración de una base de datos de Microsoft Access a MySQL y la sincronización de la base de datos de destino con el diagrama. Ahora se contaría con la base de datos en MySQL, el modelo de la base de datos y la base de datos actualizada con las relaciones entre las tablas. Y tanto el modelo como la base de datos estarían sincronizados.
Conclusiones
MySQL Workbench es una herramienta unificada para diseñadores, programadores y administradores de bases de datos MySQL. Permite diseñar, generar y gestionar bases de datos mediante una interfaz gráfica sencilla e intuitiva. Con MySQL Workbench se pueden crear diagramas relacionales, obtener el código SQL para la creación de la base de datos a partir de diagramas relacionales, hacer ingeniería directa e inversa, y conectar a servidores MySQL. En este tutorial se han presentado las tareas principales en MySQL Workbench y se han descrito buenas prácticas en el diseño de bases de datos. Se ha incluido un caso de estudio en el que se ha aplicado el diseño de una base de datos para gestionar atletas y competiciones de atletismo. Asimismo, se ha mostrado cómo migrar una base de datos de Microsoft Access a MySQL y cómo sincronizar la base de datos de destino con el diagrama de la base de datos. En resumen, MySQL Workbench es una herramienta muy útil para estudiantes de bases de datos y profesionales que deseen aprender a utilizar MySQL Workbench para el diseño de bases de datos.
Licencia
Licencia CC BY-NC-ND 4.0
Copyright (c) 2025 [Manuel Torres - Departamento de Informática - Universidad de Almería]
Este proyecto está licenciado bajo la Licencia CC BY-NC-ND 4.0. Esto significa que puedes compartir el proyecto siempre que cites al autor, no lo uses para fines comerciales y no realices obras derivadas.