BBDD.Modelo Relacional.

Ismael Royano Gómez
Enredando con Bases de Datos
7 min readJul 1, 2019

Paso del Modelo E-R al Relacional.

Organigrama.

El modelo relacional es un paso previo para la conversión, en la práctica, de las tablas y atributos que pueda haber en una base de datos.

En esta parte lo que se a intentar lograr es pasar el esquema que hicimos en pasos anteriores a un esquema de tablas previo para luego reflejarlo en la práctica a través de SQL. Empecemos:

Transformación de Entidades.

  • Las entidades pasan a ser tablas directamente.
  • Los atributos pasan ser campos o columnas de la tabla.
  • Los identificadores principales pasan a ser claves primarias.
  • Los identificadores candidados pasan ser claves candidatas o alternativas.
Entidad Fuerte.

Nota: Como no tengo forma de poder subrayar el identificador y las claves foráneas en medium voy a cambiar un poco la leyenda.

  • Negrita claves principales.
  • Cursivas clave foráneas o externas.
  • En las candidatas usaré su propia palabra.

Quedaría de la siguiente forma:

Entidad: Identificador, Atributo1, Atributo2, Candidata.

Relaciones Varios a Varios.

Relaciones de entidades cuya cardinalidad máxima sera n en las dos entidades.

  • Se creará una tabla por cada entidad con sus campos, atributos, identificadores y claves alternativas si las hubiere.
  • En todas las relaciones N:M se genera otra tabla para relación en la que se compondrá de las claves principales de las entidades relacionadas y los atributos de la relación que pudiera haber.
  • En la tabla de relación la clave principal serán los dos campos identificadores y al mismo tiempo serán de forma independiente clave foránea de cada una de las entidades intervinientes.
Relación N:M.

Entidad: Identificador1, Atributo1.
Entidad2: Identificador2,Atributo2.
Relación: Identificador1, Identificador2, Atributo3.

Relaciones de Orden n.

Las relaciones ternarias, cuaternarias…etc, que unen más de dos relaciones se tratarán como las N:M, es decir, se crea una tabla por entidad con todos sus atributos, identificadores y candidatas que hubiere. Y para finalizar se generará otra tabla de relación con todos los identificadores de las entidades intervinientes y los posibles atributos que pudiera haber en la relación.

Relaciones de Orden N.

Entidad1: Identificador1, Atributo1.
Entidad2: Identificador2, Atributo2.
Entidad3: Identificador3, Atributo3.
Relación: Identificador1, Identificador2, Identificador3, Atributo4.

Relaciones 1:N.

En el tipo de relación binaria 1:N, no es necesario generar otra tabla, lo que se hace incluir en la entidad del lado de N el identificador de la otra tabla y los posibles campos de la relación si los hubiere. Veamos como funciona:

Relación 1:N.

Entidad1: Identificador1, Atributo1 Identificador2, Atributo3.
Entidad2. Identificador2, Atributo2.

Relaciones 1:1.

Relaciones donde todas las cardinalidades sean 1 en todas sus entidades. Hay dos formas de proceder:

  • Se crea una tabla por cada entidad con todos sus atributos y se coloca la clave principal de una de ellas en la otra entidad como clave externa, da igual en cual y los posibles campos de la relación si los hubiere, teniendo en cuenta que pasará a ser clave foránea y alternativa.
  • Se crea una única tabla con todos los campos de las entidades intervinientes, incluyendo los atributos de la relación si los hubiere y además una de las dos claves primarias, da igual cual, será la clave principal y la otra alternativa.
Relaciones 1:1.

Primera Solución.

Entidad1: Identificador1, Atributo1, Identificador2, Atributo3.
Entidad2: Identificador2, Atributo2.

Segunda Solución.

Entidad1: Identificador1, Atributo1, Identificador2(candidata), Atributo2, Atributo3.

Relaciones 1:1 cuya cardinalidad máxima sera 1 en las dos entidades pero una de ellas la cardinalidad mínima es 0.

En este caso no conviene generar una única tabla, ya que habría muchos valores nulos en la tabla. Lo que se haría es generar una tabla por cada entidad y en la que la cardinalidad es 0, se coloca la clave principal de la otra tabla.

Relación 1:1

Entidad1: Identificador1, Atributo1, Identificador2(candidata), Atributo3.
Entidad2: Identificador2, Atributo2

En el que caso de que nos encontremos con cardinalidades (0,1) en ambas entidades, la solución es casi la misma, la diferencia está en que la clave alternativa no estará en la Entidad1, pasaría a la Entidad2 pero no sería clave alternativa pero si tendría una restricción de unicidad (Unique).

Relación 1:1.

Entidad1: Identificador1, Atributo1, Atributo3.
Entidad2: Identificador2, Atributo2, Identificador2(unicidad)

Relaciones Recursivas o Reflexivas.

En este tipo de relaciones se trata como una relación normal, la diferencia está es que es posible que al pasarlo al Modelo Relacional se repita dos veces un mismo campo para relacionarlo con sí mismo.

Relación Reflexiva.
  • Se tratará como una relación 1:N. Se generará una única tabla con todos los atributos que pueda tener, incluyendo los posibles campos de relación si los hubiere, haciendo repetición de la clave primaria como clave foránea para relacionarla consigo mismo.

Entidad1: Identificador1, Atributo1, Identificador1, Atributo2.

  • Se tratará como una N:M. Se generará dos tablas, una de la propia entidad y sus atributos y otra de la relación en los que incluirá las dos claves externas y los atributos de la relación si hubiere.

Entidad1: Identificador1, Atributo1.
Relación: Identificador1, Identificador1, Atributo2.

Relaciones de Herencia, Jerárquicas o ISA.

Para transformar al modelo relacional las relaciones ISA se hace teniendo en cuenta la siguientes normas:

  • Se generarán tablas tanto para la superentidad como las subentidades, con sus correspondientes campos o atributos.
  • En el caso de que las subtipos no hereden la clave principal del supertipo, se colocará el identificador de la superentidad como clave secuendaria o alternativa.
Relaciones ISA.

Entidad1: Identificador1, Atributo1, Identificador1.
Entidad2: Identificador2, Atributo2, Identificador1.
Entidad3: Identificador3, Atributo3, Identificador1.

  • En el caso de que hereden la clave principal del supertipo.
Relación ISA.

Entidad1: Identificador1, Atributo1.
Entidad2: Identificador1, Atributo2.
Entidad3: Identificador1, Atributo3.

Creación de usuarios y permisos.

Vamos a hablar ahora de algo que yo creo que es muy importante a la hora de gestionar bases de datos; los usuarios y los permisos. Mysql al ser un administrador y servidor de base de datos, necesitamos tener usuarios y darle permisos a esos usuarios para controlar que puedan hacer, ya que no es muy seguro usar siempre el usuario root para todo, ya que si la cagamos podemos liarla bien.

Crear un usuario.

CREATE USER ‘newuser’@’localhost’ IDENTIFIED BY ‘password’;
  • En este ejemplo con el comando Create se crea el usuario.
  • Newuser. Nombre del usuario nuevo.
  • Localhost. Aquí lo estamos haciendo de forma local, pero en la mayoría de los casos a ser un servidor de base de datos debemos poner la ip del servidor.
  • Identified by. Aquí introducimos la clave del nuevo usuario.

Ahora mismo el usuario que se ha creado no vale para nada, debemos darle permisos para que pueda hacer algo en la base de datos ya que no tiene otorgado nada, está ahí sólo sin poder moverse.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
  • Grant all privileges on *.*. Este comando especifica los permisos que le estamos dando al usuario. Los asteriscos significa “base de datos.tabla”.
  • To. Especifica el usuario al que le estamos dando permisos.
  • Flush privileges. Esto sirve para refrescar los permisos en el servidor, es decir, una especie de actualizar todo para que surjan efectos los cambios que hemos realizado.

En este ejemplo le estamos dando todos los permisos de todas las bases de datos y tablas que haya en el servidor. Esto es una locura porque prácticamente estamos dándole permisos root a este usuario.

Estos son los permisos con los que podemos jugar:

  • ALL PRIVILEGES: Permite dar todos los permisos habidos y por haber al usuario especificado.
  • CREATE: Permite crear nuevas tablas o bases de datos.
  • DROP: Permite eliminar tablas o bases de datos.
  • DELETE: Permite eliminar filas de las tablas.
  • INSERT: Permite insertar filas en las tablas.
  • SELECT: Les permite usar el comando SELECT para realizar consultas.
  • UPDATE: Permite actualizar las filas de las tablas.
  • GRANT OPTION: Permite otorgar o eliminar privilegios de otros usuarios.

¿Entonces como lo hago de forma correcta?

GRANT tipo de permiso ON base de datos.tabla TO 'username'@'localhost';
FLUSH PRIVILEGES;

Normalmente no damos un permiso sólo, para especificar varios permisos sólo hay que separarlos mediante comas.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON base de datos.tabla TO 'username'@'localhost';
FLUSH PRIVILEGES;
  • Siempre debemos especificar lo que realmente queremos que ese usuario pueda o no acceder y que puede hacer.

¿Y si quiero quitar permisos? Pues se hace exactamente igual, salvo que cambia el comando a REVOKE:

REVOKE tipo de permiso ON base de datos.tabla FROM 'username'@'localhost';

Podemos revocar varios permisos a la vez, sólo hay que separarlos mediante comas.

REVOKE SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON base de datos.tabla FROM 'username'@'localhost';

Otras cosas que podemos hacer con los usuarios:

SHOW GRANTS FOR 'username'@'localhost'; Muestra los permisos del usuario.DROP USER 'username'@'localhost'; Borra un usuario.
SELECT User FROM mysql.user; Listado de todos los usuarios.

ahora si queremos probar el nuevo usuario lo que debemos hace es salir del servidor y volver a iniciar sesión en MySql.

quit * Salgo del servidor.mysql -u usuario -p contraseña * Vuelvo a iniciar sesión con el nuevo usuario

Continúa por Normalización.

--

--

Ismael Royano Gómez
Enredando con Bases de Datos

Técnico Informático curioso, lector activo de las nuevas tecnologías, amante de las series de televisión y usuario del respetable mundo del enredo.