Está en la página 1de 49

DISEÑO DE BASES DE DATOS

MATERIAL DE CLASE

Docente
Rubén Darío Fontecha Sanabria
rfontecha@correo.uts.edu.co

Febrero de 2023
TABLA DE CONTENIDO
1 CONCEPTOS GENERALES ________________________________________________ 1
1.1 Dato __________________________________________________________________ 1
1.2 Sistemas de Información __________________________________________________ 1
1.3 Base de Datos __________________________________________________________ 1
1.3.1 Ventajas de las Bases de Datos ___________________________________________________ 1
1.3.2 Desventajas de las Bases de Datos ________________________________________________ 2
1.4 Sistema de Gestión de Bases de Datos (SGBD o DBMS por sus siglas en inglés) ______ 2
1.4.1 Funciones de un SGBD __________________________________________________________ 2
1.4.2 Ejemplos de Sistemas de Gestión de Bases de Datos _________________________________ 2
1.4.3 Funcionamiento del Sistema de Base de Datos ______________________________________ 3
1.5 Lenguaje de Programación ________________________________________________ 3
1.6 Usuarios de Bases de Datos _______________________________________________ 3
1.6.1 Usuarios Informáticos __________________________________________________________ 4
1.6.2 Usuarios Finales _______________________________________________________________ 4
1.6.3 Niveles de Abstracción de las Bases de Datos _______________________________________ 5

2 MODELOS DE DATOS __________________________________________________ 6


2.1 Tipos de Modelos _______________________________________________________ 6
2.2 Modelo Entidad Relación (MER) ____________________________________________ 6
2.2.1 Entidades ____________________________________________________________________ 6
2.2.2 Relaciones ___________________________________________________________________ 7
2.2.3 Atributos ___________________________________________________________________ 13

2.3 Pasos para Realizar un MER a partir de en Problema del Mundo Real _____________ 16
2.4 Ejercicios de Práctica para la Realización de Modelos Entidad Relación (MER) ______ 16
2.5 Transformación de los Modelos Entidad Relación en Modelos Relacionales ________ 19
2.5.1 Para la Correspondencia Uno a Uno (1:1) _________________________________________ 20
2.5.2 Para la Correspondencia Uno a Muchos (1:M)______________________________________ 21
2.5.3 Para la Correspondencia Muchos a Muchos (M:M) __________________________________ 22
2.6 Normalización de Relaciones _____________________________________________ 23
2.7 Formas Normales _______________________________________________________ 23
2.7.1 Primera Forma Normal ________________________________________________________ 23
2.7.2 Segunda Forma Normal ________________________________________________________ 24
2.7.3 Tercera Forma Normal ________________________________________________________ 27
2.8 Conversión del MER a Modelo Relacional en Relaciones Reflexivas. ______________ 29
2.9 Modelo Entidad Relación Extendido (MERE) _________________________________ 30
2.9.1 Superclase __________________________________________________________________ 30
2.9.2 Subclase: ___________________________________________________________________ 30
2.9.3 Agregación __________________________________________________________________ 30
2.9.4 Especialización _______________________________________________________________ 30
2.9.5 Generalización _______________________________________________________________ 30
2.9.6 Tipos de Especialización _______________________________________________________ 30
2.9.7 Herencia de Atributos _________________________________________________________ 30
2.9.8 Retículas de Especialización ____________________________________________________ 30

2.10 Conversión al Modelo Relacional a partir del MER Extendido ___________________ 31


3 LENGUAJE SQL_______________________________________________________ 33
3.1 Lenguaje de Definición de Datos___________________________________________ 33
3.1.1 Creación de Bases de Datos ____________________________________________________ 33
3.1.2 Definición de un Campo _______________________________________________________ 34
3.1.3 Restricciones en las Bases de Datos ______________________________________________ 35

3.2 Alteración de Relaciones (ALTER TABLE) ____________________________________ 37


3.3 Eliminación de Relaciones (Drop Table) _____________________________________ 37
3.4 Lenguaje de Manipulación de Datos ________________________________________ 38
3.4.1 Consultas de Acción___________________________________________________________ 38
3.4.2 Consultas de Selección ________________________________________________________ 39
3.4.3 Tipos de Operadores __________________________________________________________ 40
3.4.4 Funciones en PostgreSQL ______________________________________________________ 40
3.4.5 Uso de la Cláusula WHERE en el Comando Select ___________________________________ 42
3.4.6 Consultas Multitabla __________________________________________________________ 42
3.4.7 Consultas para Información Agrupada ____________________________________________ 43
3.4.8 Subconsultas ________________________________________________________________ 43

3.5 Lenguaje de Control de Datos _____________________________________________ 45


3.5.1 GRANT _____________________________________________________________________ 45
3.5.2 REVOKE ____________________________________________________________________ 45

3.6 Lenguaje de Control de Transacción ________________________________________ 45


3.6.1 COMMIT ____________________________________________________________________ 45
3.6.2 ROLLBACK __________________________________________________________________ 45
1 CONCEPTOS GENERALES
A continuación, se presentan los conceptos básicos necesarios para un mejor aprendizaje de la
asignatura, de manera inicial se muestran los conceptos teóricos, luego, el concepto de modelos de
datos enfatizando en el modelo Entidad Relación, y, por último, un resumen del lenguaje SQL,
resumen en el cual se muestra, además los distintos operadores y funciones que se utilizan, de
forma particular en el SGBD PostgreSQL, veamos de manera inicial los conceptos teóricos más
importantes:
1.1 Dato1
Un dato es la representación cuantitativa o cualitativa de hechos empíricos, los datos indican un
valor.
1.2 Sistemas de Información2
Los sistemas de información son un conjunto de elementos que cuentan con entrada, proceso,
salida y realimentación, los cuales se encuentran organizados para su posterior uso y sirven para la
administración y el manejo de la información buscando cubrir una necesidad.
1.3 Base de Datos3
A continuación, se presentan dos definiciones básicas de Bases de Datos:
• Es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente
para su posterior uso4.
• Colección de datos interrelacionados y un conjunto de programas para acceder a dichos datos5.
1.3.1 Ventajas de las Bases de Datos6
• Acceso rápido a los datos
• Evitar la redundancia
• Aumento de la productividad
• Ingreso de datos ilimitados
• Compartir datos de manera global
• Centralizar la información
• Reducción del espacio físico
• Fácil mantenimiento
• Hacer copias de seguridad
• Portabilidad
• Son dinámicas
• Seguridad
• Facilidad en el mantenimiento

1
https://concepto.de/dato/
2
http://funcionesticstec.blogspot.com/2015/11/12-sistemas-de-informacion_18.html
3
https://economipedia.com/definiciones/base-de-datos.html
4
https://blog.wearedrew.co/concepts/que-es-una-base-de-datos
5
https://prezi.com/myzhxok9grsm/consiste-en-una-coleccion-de-datos-interrelacionados-y-un-co/
6
https://tecnomagazine.net/2018/11/09/ventajas-y-desventajas-base-de-datos/

1
1.3.2 Desventajas de las Bases de Datos
Entre las desventajas más importantes tenemos las siguientes:
• Los costos
• Los ataques tanto físicos, así como lógicos.
• El robo de Información
• Las actualizaciones.
1.4 Sistema de Gestión de Bases de Datos7 (SGBD o DBMS por sus siglas en inglés)
Son los programas, procedimientos y lenguajes que permiten a los distintos usuarios de una base
de datos describir y manipular los datos almacenados, teniendo en cuenta su seguridad. En
resumen, son los que permiten el almacenamiento, modificación y extracción de la información en
una base de datos.
1.4.1 Funciones de un SGBD8
Las funciones principales de un Sistema de Gestión de Bases de Datos son:

• La creación de bases de datos, sus tablas componentes, y las estructuras.


• Permitir la lectura y escritura de los datos almacenados en una base de datos
• Permitir el mantenimiento a las estructuras de una base de datos
• Forzar el cumplimiento de las reglas de integridad definidas para una base de datos
• Mantener el control de los datos, cuando se presenta la ejecución concurrente de transacciones
a la base de datos.
• Ofrecer los mecanismos de seguridad para el acceso a las bases de datos definidas y mantenidas
en el SGBD.
• Ofrecer las facilidades de respaldo y recuperación de las bases de datos, necesarias para
garantizar la seguridad e integridad de las bases de datos manejadas por el SGBD.
1.4.2 Ejemplos de Sistemas de Gestión de Bases de Datos
Se tiene entre otros los siguientes Sistemas de Gestión de Bases de Datos, Oracle, PostgreSQL, SQL
Server, MySQL, Access, MongoDB, etc.9
Cuál es mejor y por qué. Esto depende de diversas razones, entre otras, la cantidad de usuarios, el
número de transacciones que se deban realizar y la cantidad de información, incluso depende del
sistema operativo que utilicemos, al respecto podríamos decir lo siguiente:

• Oracle y MySQL funcionan en todos los sistemas operativos.


• SQL Server y Access son de Microsoft, por tanto, solo funcionan en Windows.
• PostgreSQL e Informix no funcionan en el sistema operativo de IBM (Z/OS).
También se deben tener en cuenta aspectos como son la compatibilidad con otros aplicativos, su
escalabilidad, e incluso su rentabilidad, otro aspecto a tener en cuenta es si se va a utilizar para
Bases de Datos NoSQL, para las que encontraríamos entre otros SGBD tales como MongoDB y
Cassandra.

7
https://www.hostinger.mx/tutoriales/sgbd
8
https://es.scribd.com/doc/60215144/Funciones-Del-DBMS
9
https://saasradar.net/mejores-gestores-bases-de-datos-relacionales/

2
1.4.3 Funcionamiento del Sistema de Base de Datos10
En la imagen a continuación, y cuya fuente, además del pie de foto se muestra en el pie de página,
se representa un sistema de base de base de datos en donde los usuarios manipulan los aplicativos
desarrollados con un lenguaje de programación, estos aplicativos a su vez tiene conexiones con las
bases de datos, todas las peticiones son interpretadas y ejecutadas con el SGBD (Sistema Manejador
de Base de Datos).

Fuente:
https://www.google.com/search?q=rental+processing+application+dbms&safe=active&rlz=1C1GCEA_enCO900CO900&sxsrf=ALeKk00n
BpyboeNJYeO8-
aaOQwnuEu0qIg:1596986410058&tbm=isch&source=iu&ictx=1&fir=1vL59pax_9xHaM%252CYxXL1vkpL41_ZM%252C_&vet=1&usg=AI4
_-kT9h-mCI5B0nM9i0DCh-
jApMAF3uQ&sa=X&ved=2ahUKEwjSwrr9tY7rAhXonuAKHf_1AkoQ9QEwAHoECAgQBQ#imgrc=1vL59pax_9xHaM

1.5 Lenguaje de Programación11


Un lenguaje de programación se conoce como un programa cuyo objetivo es crear otros
programas12, es un idioma artificial diseñado para expresar instrucciones que pueden ser llevadas a
cabo por máquinas como las computadoras, algunos lenguajes de programación con los que se
puede realizar conexiones con base de datos son: C, Java, C++, C#, PHP, ASP.NET, Visual Basic. NET,
Python, entre otros.
1.6 Usuarios de Bases de Datos13
Un usuario de Bases de Datos es todo aquel que tenga que ver con la base de datos, ya sea en lo
que respecta a su diseño e implementación, así como el uso de éstas en cada uno de los distintos
aplicativos, dichos usuarios se podrían clasificar en usuarios informáticos y usuarios no informáticos.

10
https://www.google.com/search?q=rental+processing+application+dbms&safe=active&rlz=1C1GCEA_enCO900CO900&sxsrf=ALeKk00nBpyboeNJYeO8-
aaOQwnuEu0qIg:1596986410058&tbm=isch&source=iu&ictx=1&fir=1vL59pax_9xHaM%252CYxXL1vkpL41_ZM%252C_&vet=1&usg=AI4_-kT9h-
mCI5B0nM9i0DCh-jApMAF3uQ&sa=X&ved=2ahUKEwjSwrr9tY7rAhXonuAKHf_1AkoQ9QEwAHoECAgQBQ#imgrc=1vL59pax_9xHaM
11
https://es.ccm.net/contents/304-lenguajes-de-programacion
12
https://concepto.de/lenguaje-de-programacion/
13
http://teoriadebd.blogspot.com/p/tipos-de-usuarios-en-bases-de-datos.html

3
1.6.1 Usuarios Informáticos
Son aquellos que están encargados de la creación, el mantenimiento y de realizar los distintos
programas y procedimientos que sean necesarios, estos son:
1.6.1.1 Analistas14
Son los usuarios encargados de analizar los requisitos de los usuarios finales.
1.6.1.2 Diseñadores15
Son los usuarios encargados de diseñar la estructura de las bases de datos, lo que incluye las tablas,
vistas, restricciones, etc.
1.6.1.3 Programadores16
Son los profesionales del área de la informática encargados de escribir el código de las aplicaciones.
1.6.1.4 Administrador de la Base de Datos17
(DBA por sus siglas en inglés. DataBase Administrator), es quien se encarga del control general del
Sistema de Base de Datos, es decir, es el responsable del mantenimiento y la operación de las bases
de datos, los DBA tienen además las siguientes funciones18: Crear la base de datos en sí y poner en
vigor los controles técnicos necesarios para apoyar las políticas dictadas por el administrador de
datos o el Coordinador de Tecnología. El DBA se encarga también de garantizar el funcionamiento
adecuado del sistema y de proporcionar otros servicios de índole técnica relacionados. El DBA
cuenta por lo regular con un grupo de programadores de aplicaciones y otros asistentes técnicos.
El DBA es responsable primordialmente de:
• Administrar la estructura de la Base de Datos
• Administrar la actividad de los datos
• Administrar el Sistema Manejador de Base de Datos
• Definir las verificaciones de seguridad e integridad
• La documentación
• Definir procedimientos de respaldo y recuperación
1.6.2 Usuarios Finales
Son aquellos que acceden a los datos para realizar alguna actividad. Es decir, accede a la Base de
Datos por medio de un lenguaje de consulta o de programas “amigables” de aplicación. Puede tener
o no conocimientos sobre bases de datos.
• Usuarios Habituales: Los usuarios habituales son aquellos que utilizan las bases de datos como
parte habitual de su trabajo.
• Usuarios Esporádicos. Los usuarios esporádicos son aquellos que utilizan las bases de datos de
manera ocasional.

14
https://barcelonageeks.com/diferentes-tipos-de-usuarios-de-bases-de-datos/
15
https://barcelonageeks.com/diferentes-tipos-de-usuarios-de-bases-de-datos/
16
https://keepcoding.io/blog/que-es-un-programador-informatico/
17
https://es.ccm.net/contents/320-administrador-de-bases-de-datos
18
https://www.cessi.org.ar/perfilesit/detalle-de-administrador-de-base-de-datos-dba-12

4
1.6.3 Niveles de Abstracción de las Bases de Datos19
Los niveles de abstracción de las Bases de Datos tienen que ver con la forma en la que se muestran
los datos a cada uno de los diferentes usuarios20, es decir, la visión de los datos a los diferentes
usuarios, los niveles de abstracción están relacionados con su estructura, dichos niveles son los
siguientes:
1.6.3.1 Nivel Externo o de vista
Es el nivel más alto y tiene que ver con la forma como un usuario en particular ve la Base de Datos,
en este nivel se describen los datos o parte de ellos teniendo en cuenta los permisos y restricciones
de los usuarios.
1.6.3.2 Nivel Conceptual
En este nivel se describen las entidades, relaciones y atributos que llevará la Base de Datos, este
nivel representa los requisitos de la base de datos y además las relaciones que hay entre las
entidades involucradas.
1.6.3.3 Nivel Físico o Interno
Este nivel tiene que ver con la forma en la cual se almacenan los datos y los métodos de acceso que
se tienen para estos.
A continuación, en la gráfica, se muestra, y de forma resumida, dichos niveles de abstracción:
Niveles de Abstracción de una Base de Datos

Fuente: https://keepcoding.io/blog/niveles-de-abstraccion-de-una-base-de-datos/

19
https://findtics.fandom.com/es/wiki/Niveles_de_abstraccion_de_una_base_de_datos
20
https://keepcoding.io/blog/niveles-de-abstraccion-de-una-base-de-datos/

5
2 MODELOS DE DATOS21
Los modelos de datos son todos los conceptos que nos permiten realizar la descripción y la
manipulación de los datos que se pretenden almacenar en las diferentes bases de datos. Es un tipo
de modelo que determina la estructura lógica de la base de datos, y el modo de almacenar,
organizar, y manipular los datos.
2.1 Tipos de Modelos22
Hay diferentes tipos de modelos de datos, entre estos tenemos el Modelo Entidad Relación, modelo
que será utilizado a través del semestre, además del modelo jerárquico, modelo codasyl también
llamado modelo en red, modelo orientado a objetos, entre otros.
2.2 Modelo Entidad Relación (MER)23
Se podría describir el Modelo Entidad Relación (MER) como un método o herramienta de modelado
que permite describir las diferentes entidades relevantes que están involucradas en una base de
datos, así como la relación entre ellas, este modelo está compuesto principalmente por entidades,
relaciones y sus propiedades, que también se llaman atributos.
2.2.1 Entidades24
Representan cosas, objetos, personas, eventos, conceptos, etc., real o abstracto, con existencia
propia y distinguibles de otros, que son de interés para el modelo de datos. Es la representación de
un objeto o concepto del mundo real que se describe en una base de datos.25
Gráfico de las Entidades: Las entidades se denotan con un rectángulo dentro del cual se coloca
el nombre que va a tener dicha entidad.

NOMBRE_ENTIDAD

2.2.1.1 Ejemplos de Entidades


Algunos ejemplos de entidades pueden ser los siguientes:

• Personas: ENFERMO, EMPLEADO, ENFERMERO, PACIENTE, USUARIO, MÉDICO


• Lugares: PAÍS, SUCURSAL, SECTOR, BANCO
• Objeto: CASA, AUTOMÓVIL, ARTÍCULO, COMPUTADOR
• Eventos: PRÉSTAMO, COMPRA, ELECCIÓN, PEDIDO, ENTRADA
• Conceptos: CLASE, GRUPO
2.2.1.2 Tipos de Entidades
• Regular o fuerte: Una entidad fuerte no depende de la existencia de otra entidad, es
decir, tiene existencia propia.
• Débil: Una entidad débil depende de la existencia de una entidad fuerte.

21
https://www.lucidchart.com/pages/es/que-es-un-modelo-de-base-de-datos
22
https://ayudaleyprotecciondatos.es/bases-de-datos/modelos/
23
http://contenidos.sucerman.com/nivel2/web1/unidad2/leccion3.html#:~:text=Un%20modelo%20entidad%2Drelaci%C3%B3n%20es,
como%20sus%20interrelaciones%20y%20propiedades.
24
https://informaticosinlimites.com/base-de-datos/entidades/
25
https://www.coursehero.com/file/43223040/BASE-DE-DATOSdocx/

6
Ejemplo: A continuación, se presenta un modelo en el cual se pueden identificar los tipos de
entidades explicados anteriormente:

ESCRITOR LIBRO

Regular o Fuerte: Si no Débil: Porque si


hay escritor no se pudo elimino el libro igual
haber escrito el libro, ya sigue habiendo
que alguien lo debe escritor, solo que por
escribir ahora no ha escrito

2.2.2 Relaciones26
Es el vínculo o asociación entre las diferentes entidades del modelo, las relaciones tienen diferentes
características, entre éstas:
2.2.2.1 Gráfico
Las relaciones en los modelos entidad relación se identifican por un rombo.

Nombre

2.2.2.2 Nombre:
El nombre es la forma de identificar a una relación, dicho nombre se coloca al interior del rombo
que identifica la relación, normalmente es una acción verbal.
2.2.2.3 Grado:
El grado es el número de entidades que están involucradas en la relación, se cuenta con distintos
grados, entre estos tenemos:
• Unario: Es cuando una entidad se involucra consigo misma.

Ejemplos

EMPLEADO ASIGNATURA

dirige requisito

26
https://www.hostingplus.cl/blog/que-es-una-relacion-en-una-base-de-datos-y-que-tipo-de-relaciones-pueden-existir/

7
Es importante tener en cuenta que en un mismo modelo no puede haber dos entidades con el
mismo nombre, por eso este tipo de relación se denomina binaria reflexiva.
• Binaria: Es cuando se involucran dos entidades en la relación, a continuación, se presentan
algunos ejemplos al respecto:

EMPLEADO CARGO
cumple

BANCO SUCURSAL
tiene

• Ternaria: Es cuando hay tres entidades involucradas en la relación como se muestra en el


ejemplo a continuación:

ESCRITOR LIBRO

publica

EDITORIAL

• N_aria: Es cuando hay N entidades involucradas en la relación.


2.2.2.4 Correspondencia27
Es el número máximo de tuplas de una entidad que se pueden involucrar con las tuplas de otra
entidad, se pueden utilizar diferentes tipos de correspondencia entre las entidades.
Nota: es importante aclarar que una tupla28 es cada uno de los registros de las tablas de las Bases
de Datos, tablas que se representan por filas y columnas,
A continuación, se presentan diferentes ejemplos que permitirán comprender cada uno de los tipos
de correspondencia que se pueden encontrar en las Bases de Datos, éstas son la correspondencia
1:1, la correspondencia 1:M y la correspondencia M:M, veamos:

27
https://ikastaroak.birt.eus/edu/argitalpen/backupa/20200331/1920k/es/ASIR/GBD/GBD02/es_ASIR_GBD02_Contenidos/website_22
1_correspondencia_y_cardinalidad.html
28
https://crilcafe.com/es/qu%C3%A9-es-una-tupla-en-la-base-de-datos-cosas-que-debes-saber/

8
Correspondencia 1:1. Es cuando por cada tupla de la primera entidad se involucra como máximo
con una tupla de la segunda entidad y viceversa.

PRESIDENTE dirige PAIS


1 1

9
Correspondencia 1: M. Es cuando por cada tupla de la primera entidad se involucra como máximo
muchas tuplas de la segunda entidad, pero por cada tupla de la segunda entidad se involucra una
y solo una tupla de la primera entidad.

CARGO tiene EMPLEADO


1 m

10
Correspondencia M: M. En la correspondencia M:M por cada tupla de la primera entidad, se
involucran como máximo muchas tuplas de la segunda entidad y viceversa.

ASIGNATURA ve ESTUDIANTE
m m

11
2.2.2.5 Cardinalidad29
Es el número mínimo o máximo de tuplas de una entidad que se pueden involucrar con las tuplas
de otra entidad, Se representa como (mínimo, máximo), y estas pueden ser:
• (0, 1)
• (0, m)
• (1, 1)
• (1, m)
Miremos la cardinalidad para los ejemplos anteriores:

1:1

PAIS tiene PRESIDENTE


(1,1) (1,1)

Un país tiene como máximo un presidente y como mínimo un presidente, a su vez un presidente lo
es como máximo de un país y como mínimo de un país, si quisiéramos conocer los presidentes que
ha tenido un determinado país la correspondencia cambiaría, como se explicó en clase.
1:M

CARGO tiene EMPLEADO


(1,1) (0, m)

Para este ejemplo, un cargo se le puede asignar como máximo a muchos empleados y como mínimo
a ninguno, ya que podría existir el cargo, pero en un momento dado nadie estarlo ejerciendo, por
otro lado, un empleado tiene como máximo y como mínimo un cargo, de lo contrario no sería un
empleado, podríamos cambiar para esta parte la correspondencia a muchos, para el caso, y
teniendo en cuenta el tipo de empresa, un empleado podría ejercer a la vez muchos cargos, por
ejemplo, el aseador podría ser a la vez vigilante o mensajero.

M:M

ASIGNATURA ofrece ESTUDIANTE


(1, m) (0, m)

Por último, para el ejemplo, una asignatura es ofrecida máximo a muchos estudiantes y mínimo a
ninguno (o a uno, depende el contexto), a su vez un estudiante puede ver máximo muchas
asignaturas y mínimo una (o cero, depende del contexto, es decir, si tenemos en cuenta solo
aquellos estudiantes que figuren activos en el sistema y puedan matricular asignaturas, o todos los
que se encuentren registrados en la Base de Datos, como se explicó en clase).

29
https://co.video.search.yahoo.com/search/video?fr=mcafee&ei=UTF-
8&p=qu%C3%A9+es+la+cardinalidad+en+las+bases+de+datos&type=E210CO826G91646#id=1&vid=701a6fde115ba4adb0ec7e5831f00
503&action=click

12
Algo muy importante para tener en cuenta tiene que ver con el hecho que puede haber más de una
relación entre entidades, sin embargo, es importante tener en cuenta el hecho que si con esto se
genera o no redundancia, la cual se debe evitar en las bases de datos:

R1

ENTIDAD_1 R2 ENTIDAD_2

R3

2.2.3 Atributos30
Se denomina atributo a cada una de las diferentes propiedades que pueden tener las entidades o
las relaciones y que son de interés para el modelo.

2.2.3.1 Tipos de Atributos31


• Simples o Compuestos
Los atributos compuestos pueden dividirse en otros atributos que tengan significado propio,
por ejemplo, la fecha de nacimiento como atributo compuesto se puede dividir en atributos
simples tales como el año, el mes y el día, en cambio, los atributos simples no se pueden dividir,
son atómicos, ejemplo de estos podrían ser el peso, el género, etc.
Simples Compuestos
Nombre Día
Apellido Fecha Mes
Peso Año
Género
Salario Calle
Huella Digital Dirección Número
Número de Cédula Código Postal
Estatura

30
https://codigosql.top/bases-de-datos/atributo/
31
https://ikastaroak.birt.eus/edu/argitalpen/backupa/20200331/1920k/es/DAMDAW/BD/BD02/es_DAMDAW_BD02_Contenidos/webs
ite_41_tipos_de_atributos.html

13
• Almacenados o Derivados
Los atributos almacenados son los que se insertan directamente en la base de datos, mientras
que los atributos derivados son calculados a partir de la información almacenada, como ejemplo
tendríamos que podemos insertar la fecha de nacimiento de una persona, éste sería un atributo
almacenado, pero la edad de esa persona se genera como la operación aritmética entre la fecha
de hoy y dicha fecha, por tanto, la edad sería un atributo calculado a partir de dicha fecha, el
salario por ejemplo, podría ser almacenado directamente en la base de datos, lo que lo
convertiría en un atributo almacenado, o podría ser calculado a partir de otros atributos, por
ejemplo a partir de las horas laboradas y el número de horas trabajadas.
Almacenados Derivados
Fecha Edad (la cual, para este caso, se genera de la
Nombre realización de una operación aritmética entre la
Color fecha actual y la fecha de nacimiento.
Ciudad_Nacimiento

• Monovaluados y Multivaluados
Los atributos monovaluados son aquellos que adquieren un solo valor por cada tupla registrada,
en cambio los atributos multivaluados pueden tener diferentes valores para una misma tupla,
como ejemplo de un atributo monovaluada tendríamos el nombre completo para cada persona,
y como atributo multivaluado tendríamos el atributo nacionalidad, ya que una persona puede
tener de manera legal varias nacionalidades.
Monovaluados Multivaluados
Fecha Teléfono
Nombre Nacionalidad
Color
Ciudad_Nacimiento

Es importante anotar que algunos de los atributos de una entidad pueden ser comunes a diferentes
tuplas, estos son el nombre, la dirección, la fecha de nacimiento, etc., otros atributos se utilizan para
identificar de manera única a cada tupla, estos atributos se consideran como los atributos clave o
identificadores y son de gran importancia en la construcción de los modelos como veremos más
adelante.
2.2.3.2 Notación para los Atributos32
Existen diferentes formas de realizar la notación gráfica de los atributos de una entidad o de una
relación, entre éstas están la notación EN2002 y la notación MPM1999 y la notación moderna, estas
serán revisadas a través del tema en una de las clases, se recomienda no colocar tilde al nombre de
cada uno de los atributos, así como al nombre de las entidades, ya que esto podría generar conflicto
en el manejo de la consola de PostgreSQL.
Para el ejemplo, tomaremos la entidad persona con algunos de sus atributos para describir las
diferentes notaciones existentes:

32
https://www.lucidchart.com/pages/es/simbolos-de-diagramas-entidad-relacion

14
MODELO MPM1999

MODELO EN2002

MODELO MODERNO33

PERSONA
Nombre
Fecha_Nacimiento
Telefono
Genero
Nro_Cedula
Huella_Digital
Edad

33
https://jorgesanchez.net/manuales/gbd/entidad-relacion.html

15
2.2.3.3 Dominio34
Se llama dominio a cada uno de los posibles valores que se le pueden dar a los atributos, miremos
algunos ejemplos:
ATRIBUTO DOMINIO
Género Masculino, Femenino
Nacionalidad Colombiano, italiano, peruano, ruso, afgano ……………………
Cargo Aseador, Gerente, Subgerente, Electricista, ……
Tipo A, B, C, D, E, F
Salario 20000, 34000, 16000
Fecha Septiembre 14 de 2019, 15 de agosto de 2020, ……
Peso 65, 45, 78, 87, ……………

2.3 Pasos para Realizar un MER35 a partir de en Problema del Mundo Real36
A continuación, se presentan los pasos para crear un MER a partir de un problema planteado:

1. Identificar todos los objetos relevantes, entidades, generalmente son sustantivos.


2. Identificar las relaciones existentes entre cada una de estas entidades, éstas resaltan cómo
interactúan las entidades entre sí. Se determinan teniendo en cuenta los supuestos semánticos.
3. Añada tanto a las entidades, así como a las relaciones cada uno de los atributos que a estos
pertenecen, los atributos representan las propiedades que tienen las entidades o las relaciones.
(para este ejercicio se obviará esta parte ya que el tema de atributos se revisará a continuación).
4. Añada la correspondencia y/o cardinalidad existente entre las relaciones que surjan entre
entidades.
5. Complete el diagrama teniendo en cuenta los supuestos semánticos necesarios, es posible que
haya información faltante, ésta se debe colocar en el modelo y depende del mundo real.

2.4 Ejercicios de Práctica para la Realización de Modelos Entidad Relación (MER)


Realice cada uno de los Modelos Entidad Relación resultado de los ejercicios a continuación, tenga
en cuenta que puede haber información incompleta es importante detectarla y resolverla:

1. Un club náutico37 desea tener informatizados los datos correspondientes a sus instalaciones, los
empleados, los socios y las embarcaciones que se encuentran en dicho club. El club está organizado
por socios los cuales se definen por sus datos personales y fecha de ingreso al club; todas las
embarcaciones vienen definidas por el número de matrícula, nombre, tipo y dimensiones, los
amarres (sitios donde se guarda un barco) tienen como datos de interés el número de amarre, la
lectura del contador de agua y luz y si tienen o no servicios de mantenimiento contratado. Por otro
lado, hay que tener en cuenta que una embarcación pertenece a un socio, aunque un socio puede
tener varias embarcaciones. Una embarcación ocupará un amarre (lugar donde se estaciona un
barco) y un amarre estará ocupado por una embarcación. Es importante para el sistema la fecha en
la que una embarcación es asignada a un amarre. Todos los socios pueden ser propietarios de

34
https://spiegato.com/es/que-es-un-dominio-de-datos
35
Modelo Entidad Relación
36
https://www.lucidchart.com/pages/es/como-hacer-un-diagrama-entidad-relacion
37
http://ikastaroak.ulhi.net/edu/es/DAM/BD/BD03/es_DAM_BD03_Tarea/

16
amarres, siendo importante la fecha de compra del amarre; hay que tener en cuenta que un amarre
pertenece a un socio y que no hay relación directa entre la fecha en la que se compra un amarre y
en la que una embarcación se asigna a un amarre. En cuanto a los empleados, estos vienen definidos
con los datos personales correspondientes y su especialidad. Un empleado está asignado a varias
zonas y en una zona puede haber más de un empleado, siendo de interés el número de
embarcaciones de los que se encarga cada empleado en cada zona.
2. Un zoológico de la ciudad necesita realizar una base de datos para organizar la información de las
especies que posee38, los empleados y los recorridos de visita que ofrece. La información está
estructurada de la siguiente manera: El zoológico cuenta con diferentes especies de las que nos
interesa saber un código, el nombre, nombre científico y una descripción general. Hay que tener en
cuenta que cada especie proviene de un hábitat en particular y estos pueden ser ocupados por
diferentes especies; las especies se encuentran en distintas zonas del parque de manera que cada
especie está en una zona y en una zona puede haber varias especies, de las zonas nos interesa saber
el nombre el cual no se repite y la extensión que ocupan, de los hábitats es importante saber un
código, el nombre, y el clima. Para el sistema es importante conocer qué animales hay por cada una
de las especies, de los animales es importante conocer un número, su nombre, peso y tamaño. Por
otro lado, se desea almacenar información de los recorridos que discurren por las distintas zonas
del parque. La información de interés para los recorridos es el código, la duración del recorrido, la
longitud del recorrido, el número de visitantes y el número de especies que visita, tenga en cuenta
que un recorrido se realiza por distintas zonas del parque. Nos interesa además saber qué guías
llevan cada uno de los recorridos, los guías se definen por la cédula, el nombre, dirección, teléfono,
salario y especialidad; tenga en cuenta que un guía puede llevar varios recorridos y que un recorrido
puede ser asignado a diferentes guías en diferente fecha y hora, siendo estos datos de interés. Por
último, nos interesa saber las especies que se encuentran a cargo de cada cuidador, los cuidadores
vienen definidos por la cédula, el nombre, dirección, teléfono, género y fecha de ingreso al parque.
Tenga en cuenta que cada especie puede estar a cargo de más de un cuidador en distintas fechas.
3. Se desea recoger en una base de datos la información acerca de los conciertos que se celebran en
Colombia y los datos relacionados con estos. Se desea tener información acerca de cada uno de los
conciertos, los cuales están identificados por un número de concierto, el nombre y la ciudad en la
que se realizó. Es importante tener en cuenta que en cada uno de estos conciertos se presenta una
serie de cantantes de los cuales se desea guardar un identificador, el nombre, la fecha de nacimiento
y cada una de las nacionalidades con las que cuenta, un dato importante para el sistema es la fecha
en la que determinado cantante se presentó en cada uno de los conciertos. Cada cantante puede
tener un representante el cual se encarga de su manejo, a su vez, un representante lo puede ser de
varios cantantes, del representante se desea conocer su número de cédula, el nombre, la fecha de
nacimiento y su número telefónico. También se desea conocer si dicho cantante pertenece o no a
determinado grupo musical, del grupo musical nos interesa conocer un identificador, el nombre y
su procedencia. Cada concierto se celebra en un escenario del que se desea saber su nombre el cual
se supone único, y la ciudad en la que está ubicado, tenga en cuenta, además, que en un mismo

38
https://es.slideshare.net/mluisavel/guia-eejerciciospracticos-14214618

17
escenario se pueden realizar diferentes conciertos. Para efectos de boletería cada uno de los
escenarios está dividido en palcos, de los cuales es importante conocer su código y su nombre, para
el sistema es importante conocer de cada uno de los palcos con que cuentan los escenarios, y para
efectos de asistencia, tanto el aforo, así como la fecha y el valor de la asistencia a los palcos en cada
uno de dichos escenarios. En cada concierto se pueden presentar diferentes canciones, de las que
es importante conocer un identificador, su nombre, la duración de la canción la cual está
determinada en minutos y el idioma en el que se presentó, es importante conocer la fecha en la que
se presentó cada una de las canciones en los diferentes conciertos. Por otra parte, es importante
conocer el género musical de cada una de las canciones, de dicho género queremos almacenar su
código y su nombre; también es importante conocer el álbum al que pertenecen dichas canciones,
del álbum es importante conocer un identificador, el nombre y la fecha en la que se salió al mercado.
Otro dato importante para el modelo es la información de los compositores que crearon cada una
de las canciones, de estos queremos conocer un identificador, el nombre y su nacionalidad, es
importante tener en cuenta que una canción pudo haber sido creada por más de un compositor, un
dato importante para el sistema es la fecha en la cual se el compositor creó cada una de las
canciones. Por último, tenga en cuenta que se deben registrar los premios recibidos por cada uno
de los cantantes en cada uno de los conciertos en los que ha actuado, premio que se entrega el día
de dicha actuación y del que nos interesa conocer el nombre y el tipo de premio. Haga los supuestos
semánticos necesarios para completar el modelo.

4. Se desea diseñar una base de datos para llevar el control de los empleados que trabajan en cierto
renglón de la economía nacional, los datos significativos a tener en cuenta son los siguientes: Cada
uno de los empleados tienen como datos de interés su cédula, el nombre, la fecha de nacimiento,
el correo electrónico y su número telefónico y se encuentran distribuidos en cada una de las
distintas dependencias del renglón económico, siendo importante para cada una de éstas, el
número de dependencia y el nombre, hay que tener en cuenta que un empleado pudo haber
pertenecido a diferentes dependencias a lo largo de su desempeño laboral, es importante para el
sistema almacenar la fecha en la cual un empleado ingresó a determinada dependencia y la fecha
en la cual fue retirado de ésta. Existen en el renglón económico diferentes cargos, cada uno de los
cuales son realizados por cada uno de los empleados, es importante resaltar que un empleado tiene
un único cargo, no habiendo relación directa entre el cargo y la dependencia; del cargo nos interesa
conocer su código y el nombre, tenga en cuenta registrar en el sistema la fecha en la cual el
empleado fue asignado a dicho cargo. Por otro lado, se sabe que los empleados trabajan en distintas
ciudades del país de las que es importante conocer un código, el nombre, el número de habitantes
y el clima, tenga en cuenta que un empleado puede ser trasladado de una a otra ciudad en cualquier
momento, para el sistema es importante saber la fecha del traslado y el motivo por el cual se realizó
dicho traslado. Cabe anotar que cada ciudad está localizada en una región del territorio nacional,
región en la cual puede haber varias ciudades, de las regiones se conoce el nombre, el cual no se
repite, la extensión, y tipo de población. Por otro lado, se sabe que las dependencias manejan
distintos sectores económicos, cada uno de los cuales pertenece a una única dependencia, de dichos
sectores es importante conocer su código, el nombre y una descripción. Para efectos de la hoja de
vida, es necesario llevar un control de las sanciones que ha recibido cada empleado, de las sanciones

18
se conoce el código de la sanción y el nombre de la sanción, hay que tener en cuenta que un
empleado puede recibir distintas sanciones a lo largo de su vida laboral y que una misma sanción se
le puede imponer a distintos empleados; en la hoja de vida debe aparecer la fecha y hora en la que
un empleado recibió la sanción así como el castigo recibido por dicho empleado. Por último, es
importante anotar que nos interesa saber qué servicios presta cada una de las dependencias
sabiendo que cada uno de estos servicios se presta en una única dependencia, de los servicios es
importante conocer, el número del servicio, el nombre del servicio, y una descripción general del
servicio, es importante además conocer la fecha en que dicha dependencia realizó el servicio.
5. Se desea almacenar la información referente al estudio de las mariposas39, tenga en cuenta que se
desea obtener la información sobre los ejemplares capturados, bien sea para su observación o bien
para ser incluidos en una colección; para la representación de este modelo es necesario tener en
cuenta los siguientes supuestos semánticos: Se considera que un ejemplar de mariposa pertenece
a una única especie, las características más importantes de una mariposa son el código, nombre
científico, nombre común, hora y fecha de captura y zona en la que fue capturada, de la especie es
importante conocer un código, su nombre y el nombre científico. De las mariposas capturadas para
colección es importante conocer el precio y los detalles de la preparación de la mariposa para formar
parte de la colección, de las mariposas utilizadas para su observación es importante almacenar la
fecha de liberación y las características encontradas en ella. Ya sea para su observación o para
formar parte de una colección la mariposa debe ser capturada primero, la captura de cada ejemplar
la realiza sólo una persona, de la persona es importante conocer un identificador, nombre, apellido
y profesión la que se supone única. Una determinada persona sólo puede ser propietaria de una
colección de mariposas, y los ejemplares de mariposa que pertenecen a esta colección pueden
haber sido capturadas por otras personas. De la colección es importante anotar un código, el precio
estimado, la fecha de inicio y los detalles de la colección. Tenga en cuenta que una mariposa sólo
puede pertenecer a una colección y ésta estar formada con al menos un ejemplar de mariposa.

2.5 Transformación de los Modelos Entidad Relación en Modelos Relacionales40


Para convertir un modelo entidad relación en un modelo relacional se tiene en cuenta la
correspondencia. Además, es importante tener en cuenta si la entidad es o no débil, si los atributos
son o no multivaluados, y el grado de la relación, es decir, si es unaria, binaria, ternaria, etc. Por otra
parte, y de forma general es importante tener en cuenta que al convertir Modelos Entidad Relación
en Modelos Relacionales cada una de las entidades se convertirá en una tabla, así como cada uno
de los atributos se convierte en campos de dicha tabla y el identificador unívoco se convertirá en la
llave primaria de la tabla a crear. Además de lo anterior revisaremos la transformación de los
modelos entidad relación en modelos relacionales teniendo en cuenta su correspondencia, tema
que se revisó en apartes anteriores, recuerden que las correspondencias son 1:1, 1:M y M: M.

39
https://es.slideshare.net/emim3m/coleccion-de-mariposas
40
https://ikastaroak.birt.eus/edu/argitalpen/backupa/20200331/1920k/es/ASIR/GBD/GBD02/es_ASIR_GBD02_Contenidos/website_4_
paso_del_diagrama_entidadrelacin_al_modelo_relacional.html

19
2.5.1 Para la Correspondencia Uno a Uno (1:1)
Cuando la correspondencia es uno a uno, se toma la llave primaria de una de las entidades y se
coloca como llave foránea en la otra entidad o viceversa.

PAIS PRESIDENTE
Nombre Id_Presidente
Capital 1 1 Nombre
tiene
Extensión Fecha_Nac
Idioma Filiacion_Polit

a) Primera conversión, tomando el país como la entidad fuerte.

En este caso, se crea la tabla país, y la tabla presidente tomará como llave foránea la llave primaria
de la tabla país, veamos:
PAIS (Nombre, Capital, Extensión, Idioma)
PRESIDENTE (Id_Presidente, Nombre, Fecha_Nac, Filiacion_Polit, Nombre)

Nótese que hay un error en la tabla presidente, ya que, por regla, no se pueden colocar dos campos
con el mismo nombre en la misma tabla, para arreglarlo, simplemente cambio el nombre,
preferiblemente en la llave foránea, por ejemplo:
PAIS (Nombre, Capital, Extensión, Idioma)
PRESIDENTE (Id_Presidente, Nombre, Fecha_Nac, Filiacion_Polit, Nom_Pais)

Lo anterior nos permite decir que en lo posible un campo que se llame nombre, aunque funciona,
es mejor evitarlo, para este caso podría ser para la tabla país llamarlo Nom_Pais y para la tabla
presidente llamarlo Nom_Pres, por ejemplo.

b) Segunda conversión, tomando el presidente como la entidad padre.

Si lo hago en viceversa, es decir, tomando el presidente como padre y que heredara el país, esto no
sería conveniente ya que en esta relación el presidente es la entidad débil, y se debe evitar que una
entidad débil sea la entidad padre y que la entidad fuerte sea la que herede, como se explicó en
clase, por lo siguiente la forma más conveniente sería la primera conversión, pues en la segunda
habría una relación débil.
Modelo Relacional Gráfico. Éste quedaría de la siguiente forma:

PAIS PRESIDENTE
Nombre Id_Presidente
Capital Nombre
1 1
Extensión Fecha_Nac
Idioma Filiacion_Polit
Nom_Pais

20
2.5.2 Para la Correspondencia Uno a Muchos (1:M)
Cuando la correspondencia es uno a muchos, se toma la llave primaria de la entidad uno y se coloca
como llave foránea en la entidad muchos, es decir, se toma la entidad uno como la entidad padre y
quien hereda la llave es la entidad muchos.

CARGO EMPLEADO
Cod_Cargo Id_Empl
Nom_Cargo 1 asigna
m Nom_Empl
Cat_Cargo Direccion
Telefono

Para el ejemplo anterior se creará de manera inicial la tabla cargo, la que tiene la correspondencia
1, y la tabla empleado, que tiene la correspondencia M, tomará como foránea la llave primaria de
dicha tabla, recuerde que la llave primaria puede estar conformada por uno o más campos, y puede
o no llevar el mismo nombre en el campo o los campos que la conforman, para este caso, la llave
primaria es un solo campo y lo colocaremos como la llave foránea con el mismo nombre de ésta en
la llave primaria de la tabla padre.

CARGO (Cod_Cargo, Nom_Cargo, Cat_Cargo)


EMPLEADO (Id_Empl, Nom_Empl, Direccion, Telefono, Cod_Cargo)

Modelo Relacional Gráfico.


El modelo relacional de forma gráfica para el ejemplo anterior quedaría de la siguiente forma:

CARGO EMPLEADO
Cod_Cargo Id_Empl
Nom_Cargo 1 m Nom_Empl
Cat_Cargo Direccion
Telefono
Cod_Cargo

21
2.5.3 Para la Correspondencia Muchos a Muchos (M:M)
Cuando la correspondencia es muchos a muchos, se crean tablas con cada una de las entidades
involucradas en la relación, se crea además una tabla con la relación, en ésta se colocan las llaves
primarias de todas las entidades involucradas en la relación, como llaves foráneas, y los atributos
de la relación, si los tuviera.

MATERIA ESTUDIANTE

Cod_Materia Id_Estudiante
m m
Nom_Materia ve Nom_Estudiante
Creditos Nota Telefono

Crearemos inicialmente las tablas que se generan de las entidades padre, éstas son materia y
estudiante, si estas tablas dependieran de otra u otras entidades, se deberían crear primero ésas y
dichas tablas heredarían sus llaves primarias que quedarían como llaves foráneas.

MATERIA (Cod_Materia, Nom_Materia, Creditos)

ESTUDIANTE ( Id_Estudiante, Nom_Estudiante, Telefono)


Ahora crearemos la tabla como resultado de la relación muchos a muchos, la cual llamaremos
Calificaciones y contendrá las llaves primarias de las tablas de las que hereda dichos campos las
cuales se convertirán en sus llaves foráneas, para el ejemplo las llamaremos igual, además, le
colocaremos el atributo nota, el cual pertenece a la relación, además de una llave primaria la que
permitirá identificar cada una de las tuplas que se almacenarán en ésta.

CALIFICACIONES (Id_Calificacion, Cod_Materia, Id_Estudiante, Nota)


Modelo Relacional Gráfico.
El modelo relacional de forma gráfica para el ejemplo anterior quedaría de la siguiente forma:

MATERIA CALIFICACIONES ESTUDIANTE


Cod_Materia Id_Calificacion Id_Estudiante
Nom_Materia 1 m Cod_Materia m 1 Nom_Estudiante
Creditos Id_Estudiante Telefono
Nota

Dicho de otra forma, cuando una relación es M:M, se rompe dicha relación y se convierte en dos
relaciones 1:M mediante el uso de una tercera tabla que es la que permite su unión41, para el
ejemplo, la tabla que permitirá la unión será la tabla denominada calificaciones.

41
https://fmhelp.filemaker.com/help/18/fmp/es/index.html#page/FMP_Help/many-to-many-relationships.html

22
2.6 Normalización de Relaciones42
El proceso de diseño de una base de datos consiste en representar un determinado sistema
mediante los objetos que proporciona el modelo de datos, aplicando para ello las restricciones
impuestas; luego de haber realizado lo anterior es posible que el modelo quede con algunas
propiedades indeseables que es importante detectar y corregir, esto se realiza mediante un proceso
llamado normalización.43 Si tuviéramos que definir normalización diríamos que es una técnica por
medio de la cual se puede detectar y corregir las propiedades que no se desea tener en las
relaciones; con esto se pretende evitar entre otras cosas, la dependencia en la creación y en la
actualización de datos, además mejorar la independencia de datos y reducir la redundancia.44
2.7 Formas Normales45
La teoría de normalización consiste en obtener esquemas relacionales que cumplan determinadas
condiciones y se centra en las formas normales, éstas son:
2.7.1 Primera Forma Normal46
La primera forma normal, la que llamaremos 1FN, consiste en agrupar los datos relacionados entre
sí, de una manera tal que ninguna estructura, en lo posible, tenga datos repetidos. Dicho de otra
forma, una relación (en el modelo relacional se refiere a cada una de las tablas) está en 1FN si todos
los valores en la relación son atómicos, es decir, si en cada una de las celdas hay un sólo valor de
dominio en todo momento. Para entender lo anterior veamos la siguiente tabla la cual tiene cierta
información resumida y a la cual no se la ha aplicado aún el proceso de normalización.
Codigo Nombre Cantidad Departamento Número Nom_Rep Ciudad Peso
1 Super 36 Valle Cali
33 Pistón 20
2 La 15 36 Risaralda Pereira
250
1 Super Valle Cali
250 11 Motor 40
250
2 La 15 140 Risaralda 22 Caja Pereira 25
36
33 Pistón 20
36
3 Motor's Valle Cali
100
100 44 Rines 15
4 El Repuesto Risaralda Pereira
100
1 Super 100 Valle 55 Cigüeñal Cali 40
3 Motor's 40 Valle 22 Caja Cali 25
1 Super 120 Valle 66 Chasís Cali 25
120
3 Motor's Valle 33 Pistón Cali 20
100
55 33 Pistón 20
2 La 15 60 Risaralda Pereira
22 Caja 25
25
5 Repuesters 25 Santander 22 Caja Bucaramanga 25

42
https://openwebinars.net/blog/como-realizar-la-normalizacion-de-bases-de-datos-y-por-que/
43
https://moodle2.unid.edu.mx/dts_cursos_mdl/lic/IEL/DBD/S09/DBD09_Visual.pdf
44
https://programas.cuaed.unam.mx/repositorio/moodle/pluginfile.php/872/mod_resource/content/1/contenido/index.html
45
https://html.rincondelvago.com/diseno-de-bases-de-datos.html
46
https://thedevelopmentstages.com/primera-forma-normal-de-base-de-datos/

23
La tabla anterior se lleva a la 1FN aplicando la atomización de los datos quedando ésta de la
siguiente forma:
Codigo Nombre Cantidad Departamento Número Nom_Rep Ciudad Peso
1 Super 36 Valle 33 Pistón Cali 20
2 La 15 36 Risaralda 33 Pistón Pereira 20
1 Super 250 Valle 11 Motor Cali 40
1 Super 250 Valle 11 Motor Cali 40
2 La 15 250 Risaralda 11 Motor Pereira 40
2 La 15 140 Risaralda 22 Caja Pereira 25
2 La 15 36 Risaralda 33 Pistón Pereira 20
3 Motor's 36 Valle 33 Pistón Cali 20
3 Motor's 100 Valle 44 Rines Cali 15
4 El Repuesto 100 Risaralda 44 Rines Pereira 15
4 El Repuesto 100 Risaralda 44 Rines Pereira 15
1 Super 100 Valle 55 Cigüeñal Cali 40
3 Motor's 40 Valle 22 Caja Cali 25
1 Super 120 Valle 66 Chasís Cali 25
3 Motor's 120 Valle 33 Pistón Cali 20
3 Motor's 100 Valle 33 Pistón Cali 20
2 La 15 55 Risaralda 33 Pistón Pereira 20
2 La 15 60 Risaralda 22 Caja Pereira 25
2 La 15 25 Risaralda 22 Caja Pereira 25
5 Repuesters 25 Santander 22 Caja Bucaramanga 25

Nótese que el proceso para llevar una tabla sin normalización a la 1FN consiste simplemente en el
proceso que llamamos atomización, es decir, dar un único valor de dominio por cada celda en todo
momento, es claro notar además que la relación en 1FN tiene gran cantidad de redundancia la cual
puede generar problemas a posterior, razón por la cual debemos aplicar la segunda forma normal.
2.7.2 Segunda Forma Normal47
Una relación está en segunda forma normal, la que llamaremos 2FN, si además de estar en 1FN
debe reorganizar las relaciones de manera tal que los datos de las tablas que no sean llave primaria
queden completamente dependientes. Toda relación cuya llave primaria esté formada por un sólo
atributo está en 2FN si tiene dependencia funcional con la llave primaria. En el ejemplo anterior
asumiremos un campo cualquiera como la llave primaria, tomemos por ejemplo el campo código y
comparamos todos y cada uno de los valores de dicho campo con todos y cada uno de los valores
de los demás campos de la tabla y tomamos aquellos en los que todos valores tengan dependencia
funcional con la llave primaria, es decir, donde para cada valor del código exista un único valor en
todos y cada uno de los demás campos, veamos por ejemplo que para el código 1 existe un único
valor en el campo nombre (Súper), un único valor para el campo ciudad (Cali), y un único valor para
el campo departamento (Valle), en todo momento, pero no así para el campo cantidad, en éste el
valor del código 1 corresponde a distintas cantidades, 36, 250, 125 entre otros, para el campo
número pasa lo mismo, (33, 11, 55 y 66), sucede igual para los campos nom_rep (Pistón, Motor,
Cigüeñal y Chasís) y Peso (20, 40 y 25), luego tomamos los demás valores del código, en nuestro
ejemplo los valores 2, 3, 4 y 5, y realizamos el mismo procedimiento anteriormente planteado

47
https://naps.com.mx/blog/segunda-forma-normal-en-el-modelo-relacional-2fn/

24
encontrando que cumple para todos y cada uno de los valores de los campos nombre, ciudad y
departamento.
Codigo Nombre Cantidad Departamento Número Nom_Rep Ciudad Peso
1 Super 36 Valle 33 Pistón Cali 20
2 La 15 36 Risaralda 33 Pistón Pereira 20
1 Super 250 Valle 11 Motor Cali 40
1 Super 250 Valle 11 Motor Cali 40
2 La 15 250 Risaralda 11 Motor Pereira 40
2 La 15 140 Risaralda 22 Caja Pereira 25
2 La 15 36 Risaralda 33 Pistón Pereira 20
3 Motor's 36 Valle 33 Pistón Cali 20
3 Motor's 100 Valle 44 Rines Cali 15
4 El Repuesto 100 Risaralda 44 Rines Pereira 15
4 El Repuesto 100 Risaralda 44 Rines Pereira 15
1 Super 100 Valle 55 Cigüeñal Cali 40
3 Motor's 40 Valle 22 Caja Cali 25
1 Super 120 Valle 66 Chasís Cali 25
3 Motor's 120 Valle 33 Pistón Cali 20
3 Motor's 100 Valle 33 Pistón Cali 20
2 La 15 55 Risaralda 33 Pistón Pereira 20
2 La 15 60 Risaralda 22 Caja Pereira 25
2 La 15 25 Risaralda 22 Caja Pereira 25
5 Repuesters 25 Santander 22 Caja Bucaramanga 25

Hecho esto, con la información coincidente creamos una tabla con dichos campos, la que
llamaremos Almacenes.
Codigo Nombre Ciudad Departamento
1 Super Cali Valle
2 La 15 Pereira Risaralda
3 Motor's Cali Valle
4 El Repuesto Pereira Risaralda
5 Repuesters Bucaramanga Santander

Es importante tener en cuenta que los campos que formaron la tabla almacenes ya no se utilizan,
quedando para la continuación del proceso la siguiente información.
Cantidad Número Nom_Rep Peso
36 33 Pistón 20
36 33 Pistón 20
250 11 Motor 40
250 11 Motor 40
250 11 Motor 40
140 22 Caja 25
36 33 Pistón 20
36 33 Pistón 20
100 44 Rines 15
100 44 Rines 15
100 44 Rines 15
100 55 Cigüeñal 40
40 22 Caja 25
120 66 Chasís 25
120 33 Pistón 20
100 33 Pistón 20
55 33 Pistón 20
60 22 Caja 25
25 22 Caja 25
25 22 Caja 25

25
Aplicaremos la 2FN para los campos restantes, tomamos el campo cantidad como la posible llave
primaria y lo comparamos con los campos restantes, notamos que para valores 36, 250 y 140 cumple
pero para el valor 100 en este campo aparecen distintos valores en el campo número (44 y 55), lo
que quiere decir que no hay dependencia funcional entre los campos cantidad y número, si lo
comparamos con los valores del campo nom_rep (aparece Rines y Cigüeñal) y peso (40 y 15) pasa
exactamente lo mismo, es decir el campo cantidad no tiene dependencia funcional con campo
alguno, tomamos ahora el campo número como la posible llave primaria y haciendo el ejercicio
anterior vemos que hay dependencia funcional entre este campo y los campos nom_rep y peso, es
decir, para cada número coincide exactamente el mismo nombre de repuesto y el mismo peso lo
que indica perfectamente la dependencia funcional de estos campos y el campo número.
Cantidad Número Nom_Rep Peso
36 33 Pistón 20
36 33 Pistón 20
250 11 Motor 40
250 11 Motor 40
250 11 Motor 40
140 22 Caja 25
36 33 Pistón 20
36 33 Pistón 20
100 44 Rines 15
100 44 Rines 15
100 44 Rines 15
100 55 Cigüeñal 40
40 22 Caja 25
120 66 Chasís 25
120 33 Pistón 20
100 33 Pistón 20
55 33 Pistón 20
60 22 Caja 25
25 22 Caja 25
25 22 Caja 25

Con estos tres campos creamos otra tabla la que llamaremos Repuestos.
Numero Nom_Rep Peso
11 Motor 40
22 Caja 25
33 Pistón 20
44 Rines 15
55 Cigüeñal 40
66 Chasís 25

La estructura de cada una de las tablas luego de aplicar la 2FN sería la siguiente:

La tabla Almacenes quedaría de la siguiente forma: La tabla Repuestos quedaría así:


Codigo Nombre Ciudad Departamento Numero Nom_Rep Peso
1 Super Cali Valle 11 Motor 40
2 La 15 Pereira Risaralda 22 Caja 25
3 Motor's Cali Valle 33 Pistón 20
4 El Repuesto Pereira Risaralda 44 Rines 15
5 Repuesters Bucaramanga Santander 55 Cigüeñal 40
66 Chasís 25

Como vimos anteriormente, nótese que el atributo cantidad no depende de campo alguno en
particular ni de él depende algún campo, pero debe pertenecer a alguna tabla, por lo tanto, es claro
que depende de las dos tablas en una relación muchos a muchos entre Almacenes y Repuestos.

26
La tabla que se genera de la relación muchos a muchos tendrán como llaves foráneas cada uno de
los campos que son llaves primarias en las tablas Almacenes y Repuestos, adicionando además a
esta tabla el campo cantidad, dicha tabla la que llamaremos Compras, además agregamos un
atributo adicional como llave primaria a la tabla compras, la columna en color gris, y lo llamaremos
Nro_Compra, dicha tabla quedaría de la siguiente forma:
Nro_Compra Codigo_Alm Numero_Rep Cantidad
1 1 33 36
2 2 33 36
3 1 11 250
4 1 11 250
5 2 11 250
6 2 22 140
7 2 33 36
8 3 33 36
9 3 44 100
10 4 44 100
11 4 44 100
12 1 55 100
13 3 22 40
14 1 66 120
15 3 33 120
16 3 33 100
17 2 33 55
18 2 22 60
19 2 22 25
20 5 22 25

2.7.3 Tercera Forma Normal48


La tercera forma normal que llamaremos 3FN no se puede realizar si todas las condiciones de la 2FN
no son satisfactorias y consiste en eliminar aquellos datos que no sean llave primaria y que pueden
derivarse de una combinación de otros datos que tampoco son llave primaria en otra relación; es
decir, eliminamos las dependencias transitivas o dependencias con los campos que no son llave
primaria.
Para el ejemplo nótese que la única tabla que quedaría con redundancia respecto a campos no
primarios sería Almacenes en los campos Ciudad y Departamento, miremos que para el campo
Ciudad donde el valor es Cali siempre estará el valor Valle y para el valor Pereira, siempre dice
Risaralda, por tanto, debemos eliminar la redundancia respecto a los campos no primarios Ciudad y
Departamento.
Codigo Nombre Ciudad Departamento
1 Super Cali Valle
2 La 15 Pereira Risaralda
3 Motor's Cali Valle
4 El Repuesto Pereira Risaralda
5 Repuesters Bucaramanga Santander

Si aplicamos la 3FN sobre esta tabla se generan dos tablas, la que teníamos, Almacenes la cual
quedaría con los campos Código, Nombre y Ciudad, este último campo sería la llave foránea que

48
https://www.ibm.com/docs/es/db2-for-zos/11?topic=ssepek-11-0-0-intro-src-tpc-db2z-thirdnormalform-html

27
heredaría de la tabla Ciudades, la cual a su vez tendrá los campos Ciudad (que será la llave primaria)
y Departamento, a continuación, se muestran las dos tablas en 3FN.

La tabla Ciudades quedaría así: La tabla Almacenes quedaría ahora de la siguiente forma:
Ciudad Departamento Codigo Nombre Ciudad
Cali Valle 1 Super Cali
Pereira Risaralda 2 La 15 Pereira
Bucaramanga Santander 3 Motor's Cali
4 El Repuesto Pereira
5 Repuesters Bucaramanga

Con esto terminaría el proceso de normalización hasta la 3FN; notemos que el campo Ciudad
quedaría como la llave primaría en la tabla Ciudades, esto podría generar problemas ya que podrá
haber ciudades distintas con el mismo nombre, por tal razón colocaremos un campo adicional,
Código de Ciudad, como llave primaria de dicha tabla para solucionar dicho problema, este último
proceso no tiene que ver directamente con la normalización, lo realizo simplemente porque la
ciudad no podría ser llave primaria al poderse repetir, las tablas anteriores quedarían finalmente de
la siguiente forma:

La tabla Ciudades quedaría: La tabla Almacenes quedaría


Cod_Ciudad Ciudad Departamento Codigo Nombre Cod_Ciudad
111 Cali Valle 1 Super 111
222 Pereira Risaralda 2 La 15 222
333 Bucaramanga Santander 3 Motor's 111
4 El Repuesto 222
5 Repuesters 333

Podríamos crear el modelo relacional, este quedaría de la siguiente forma, para el ejemplo se
muestra bajo el sistema de gestión de Bases de Datos SQL Server.

28
Podríamos tomar el Modelo Relacional resultado del proceso de normalización y llevarlo esta vez a
su correspondiente Modelo Entidad Relación, mediante el uso de la ingeniería inversa, es decir,
hacer el proceso inverso al que hemos aprendido en los temas anteriores, el resultado de dicho
proceso sería el siguiente:

En los vínculos a continuación, se debe revisar como parte del trabajo de tiempo independiente, y
de forma más detallada la explicación del tema, incluyendo otros ejemplos prácticos:

• https://guru99.es/database-normalization/
• https://www.computerweekly.com/es/tutoriales/Normalizacion-de-bases-de-datos-en-MySQL-
Cuatro-pasos-faciles-y-rapidos
• https://ewebik.com/base-de-datos/normalizacion-db
• https://bookdown.org/paranedagarcia/database/normalizacion.html

2.8 Conversión del MER a Modelo Relacional en Relaciones Reflexivas49.


Las relaciones reflexivas, las que se explicaron en la parte introductoria de los conceptos generales
como grado uno o unarias, cumplen las mismas reglas de las demás relaciones al momento de crear
con éstas el modelo relacional, solo que en éstas, un mismo atributo puede figurar dos veces en la
misma tabla, la información respecto a la conversión de modelo entidad relación a modelo
relacional que involucra entidades reflexivas se debe tener en cuenta la correspondencia o
cardinalidad; al respecto se puede revisar en los siguientes vínculos y con la suficiente
profundización todos los aspectos relacionados con dicho tema:
Para 1:1: https://www.youtube.com/watch?v=wVqx2s0R1dg&t=22s
Para 1:M: https://www.youtube.com/watch?v=7EJi__Pd-CY
Para M:M: https://www.youtube.com/watch?v=eoXeH4gNg8A

49
https://josejuansanchez.org/bd/unidad-03-teoria/index.html#relaciones-reflexivas-con-cardinalidad-nn

29
2.9 Modelo Entidad Relación Extendido50 (MERE)51
El MERE incluye todos los conceptos del modelo Entidad Relación e incorpora los conceptos de:

2.9.1 Superclase
Una superclase en el MERE es un tipo de entidad que se relaciona con uno o más subtipos.
2.9.2 Subclase:
Las subclases son los subgrupos de entidades que tienen atributos únicos.
2.9.3 Agregación52
La agregación es un tipo de abstracción que permite tratar las relaciones como entidades de nivel
más alto, ya que no es posible expresar relaciones entre relaciones.
2.9.4 Especialización
La especialización es el proceso mediante el cual se definen subtipos de un tipo de entidad.
2.9.5 Generalización
La generalización es el proceso mediante el cual definimos una entidad a partir de las entidades
especializadas.
2.9.6 Tipos de Especialización53
En el MERE se tienen en cuenta dos tipos de especialización, estas son:
2.9.6.1 Disyuntas o Solapadas
• Es el número de subtipos a los que puede pertenecer a la vez cada una de las instancias.
2.9.6.2 Totales o Parciales
• Se refiere a si están o no todos los subtipos que sean pertenecientes a algún supertipo.
2.9.7 Herencia de Atributos54
La herencia de atributos permite que los atributos de una entidad de mayor jerarquía o de nivel más
alto, sean heredados por aquellas entidades de nivel más bajo o de menor jerarquía
2.9.8 Retículas de Especialización
Las retículas de especialización se presentan cuando un subtipo puede participar en varias
relaciones superclase/subclase, es decir un subtipo puede ser a su vez un supertipo de otros
subtipos.

50
https://manuel.cillero.es/doc/metrica-3/tecnicas/modelo-entidad-relacion-extendido/
51
https://www.uv.mx/personal/lizhernandez/files/2013/03/ModeloE-R_LAHG_parte2.pdf
52
https://www.uv.mx/personal/lizhernandez/files/2013/03/ModeloE-R_LAHG_parte2.pdf
53
https://adimen.si.ehu.es/~rigau/teaching/EHU/ABD/Altres%20cursos/mjortin/bd_t03_mere.pdf
54
https://sites.google.com/site/orlandoramirezfbd4sc4a/unidad-i/herencia-de-atributos-restricciones-sobre-las-generalizaciones-
agregacion

30
A continuación, y de forma resumida, se muestra un ejemplo del Modelo Entidad Relación Extendido
(MERE), en el que una persona de forma general se puede especializar tanto en un cliente, así como
en un empleado, cada uno con sus propios atributos, y a su vez, la subclase de nombre empleado
se toma como superclase para las subclases de nombre cajero, aseador y vendedor, la que a su vez
podría ser superclase de los distintos tipos de vendedores.

2.10 Conversión al Modelo Relacional a partir del MER Extendido


Para el ejemplo se tomará como base el modelo Entidad Relación Extendido que se muestra a
continuación:

31
Para la creación del modelo relacional tomando como base un modelo entidad relación extendido
se tienen diferentes opciones, las que dependen del tipo de especialización, veamos:

OPCION A: Se crea una tabla para la superclase, con sus atributos y una tabla para cada una de las
subclases con sus atributos, más la llave primaria de la superclase. Esta opción es válida para
especializaciones parciales o totales y con solapamiento, es decir, se hereda la llave primaria en cada
uno de los subtipos.

PERSONA (Cedula, Nombre, Direccion, Telefono,)

CLIENTE (Cod_Cli, Credito, Cedula)

EMPLEADO ( Id_Emp, Salario, Cedula)

OPCION B: Se crea para cada subclase una tabla con los atributos de la superclase más los atributos
propios. Esta opción sólo es válida para las especializaciones con restricción de totalidad con
solapamiento.

Elimino la superclase

EMPLEADO (Id_Emp, Salario, Cédula, Nombre, Direccion, Telefono)

CLIENTE (Cod_Cli, Credito, Cédula, Nombre, Direccion, Telefono)

OPCION C: Crear una sola tabla con todos los atributos de la superclase más los atributos de las
subclases. Esta opción corresponde una especialización con solapamiento.

PERSONA (Cédula, Nombre, Direccion, Telefono, Id_Emp, Salario, Cod_Cli, Credito)

32
3 LENGUAJE SQL55
SQL (por sus siglas en inglés Structured Query Language), que en español significa Lenguaje de
Consulta Estructurada, es un tipo de lenguaje de programación que ayuda a solucionar problemas
específicos o relacionados con la definición, manipulación e integridad de la información
representada por los datos que se almacenan en las bases de datos relacionales. Es responsable de
hacer consultas y editar la información almacenada en dicha base de datos.

Dicho lenguaje se divide en los siguientes sublenguajes:56

CREATE
DDL
Lenguaje de Definición de Datos ALTER
DROP
INSERT
Consultas de Acción UPDATE
DML Lenguaje de Manipulación de Datos
SQL DELETE
Consultas de Selección SELECT
GRANT
DCL Lenguaje de Control de Datos
REVOKE
COMMIT
TCL Lenguaje de Control de Transacción
ROLLBACK

3.1 Lenguaje de Definición de Datos57


Bases de datos
Tablas
CREATE Usuarios
Lenguaje de Definición de Datos.
DDL ALTER Objetos Trigger
(DDL por sus siglas en inglés Data Definition Language)
DROP Esquemas
Funciones
Etc.

3.1.1 Creación de Bases de Datos

CREATE TABLE tal (


…Definición de campo,
………
………
………
……..
.
.
.
);

55
https://www.um.es/geograf/sigmur/sigpdf/postgresql.pdf
56
http://www.tierradelazaro.com/wp-content/uploads/2016/12/DDL-DML-DCL-TCL.pdf
57
https://www.aulaclic.es/sqlserver/t_8_1.htm

33
3.1.2 Definición de un Campo58
A continuación, y en la tabla resumen se presenta la información necesaria para la definición de
cada uno de los campos.

Nombre_Campo Tipo_Dato (Longitud) Restricciones


Nombre del Campo
Tipo de Dato
Campo Longitud
Restricciones Inherentes al modelo
Restricciones
Restricciones Semánticas
Lo anterior se describe de forma más clara a continuación:
3.1.2.1 Nombre de los Campos59
Antes de asignar el nombre a cada uno de los campos de la tabla es importante tener en cuenta lo
siguiente:

• Los nombres de los campos, al igual que el de las tablas deben ser únicos.
• No se debe incluir los símbolos (la coma), +, -, *, /, ^, &, =, ≠, >, <, ( ), [ ], { }, ", (punto y coma ;),
: (dos puntos), :: (el indicador relacional), $ (ni el indicador de variable).
• Tampoco incluya las palabras AND, OR, NOT, XOR, TRUE, FALSE o el nombre de cualquier
función.
• No pueden ser palabras separadas.
• No comience un nombre de campo para una fórmula de cálculo por un espacio, un punto (.) o
un número.
• Utilice _ (carácter de subrayado) en lugar de un espacio para evitar las restricciones en ODBC
(Open DataBase Connectivity), la exportación, la publicación en la Web y otras operaciones.
3.1.2.2 Tipos de Datos
En bases de datos se utilizan diferentes tipos de datos, en su mayoría tienen el mismo nombre en
los diferentes Sistemas de Gestión de Bases de Datos, en la tabla a continuación encontramos los
vínculos en los que se puede consultar los tipos de datos en cuatro de los diferentes sistemas de
gestión de bases de datos que se utilizan, estos son:

SGBD Vínculo de Consulta


PostgreSQL https://sodocumentation.net/es/postgresql/topic/8976/tipos-de-datos

Oracle https://marincardenas.com/wp-content/resources/archives/Tipos-de-Datos-Oracle.pdf

https://learn.microsoft.com/es-mx/sql/t-sql/data-types/data-types-transact-sql?view=sql-
SQL Server server-ver16

MySQL https://desarrolloweb.com/articulos/1054.php

58
https://estudyando.com/campos-de-base-de-datos-definicion-y-tipos/
59
https://fmhelp.filemaker.com/help/12/fmp/es/html/create_db.8.9.html#509991

34
Ejemplo de tipos de datos
• Numéricos (numeric, int, float)
• Alfanuméricos (Varchar)
• Fecha (Date, Time)
• Serial
De los tipos de datos anteriores es importante tener en cuenta, que los datos almacenar en los tipos
de dato de fecha y alfanuméricos deben ir entre comillas sencillas, los numéricos, no llevan comillas.

3.1.2.3 Longitud del Campo


Es la cantidad de caracteres que se le asigna a un campo, esta longitud depende de cada uno de
ellos, por ejemplo, si se está describiendo nombres completos de personas, de colores, etc., se
determina teniendo en cuenta el máximo número posible de caracteres que estos puedan tener, si
se utilizan para valores numéricos, se determina teniendo en cuenta los valores máximos que se van
a insertar, a continuación, se presentan algunos ejemplos de la definición de la longitud de un campo
para diferentes tipos de datos:

✓ Nombre_Empleado Varchar (25)


✓ Salario Numeric (8,2)
✓ Codigo Numeric(8,0)
✓ Codigo Varchar(8)
Es importante tener en cuenta que tipos de datos como Date, Time e Int (integer) no tienen longitud,
y se describen de la siguiente forma:
✓ Fecha_Pago date
✓ Hora_Clase time
✓ Nro_Factura int
3.1.3 Restricciones en las Bases de Datos60
Al crear las bases de datos se deben tener en cuenta diferentes restricciones, estas restricciones se
clasifican en:

• Restricciones Inherentes61: Son aquellas que se aplican directamente en los esquemas del
modelo de datos.
• Restricciones Semánticas: Son aquellas definidas por el usuario y que dependen del mundo
real.
Restricciones Inherentes al Modelo62
• No puede haber dos tuplas iguales.
• El orden de las tuplas no es significativo.
• El orden de los atributos no es significativo.
• Cada atributo sólo puede tomar un único valor del dominio. Se dice que la relación está
normalizada (en 1FN).

60
https://ocw.unican.es/pluginfile.php/1378/course/section/1726/Tema2.pdf
61
https://barcelonageeks.com/restricciones-del-modelo-de-base-de-datos-relacional/
62
https://elbauldelprogramador.com/diseno-de-bases-de-datos-ii/

35
Restricciones Semánticas63
Son definidas por el usuario, éstas son:
• Llave Primaria (PRIMARY KEY): Permite declarar un atributo o conjunto de atributos como la
llave primaria de una relación, por tanto, dichos valores no se pueden repetir ni ser nulos.
• Unicidad (UNIQUE): Los valores de uno o varios atributos no pueden repetirse en diferentes
tuplas de una relación. Permite definir Llaves alternativas.
• Obligatoriedad (NOT NULL): Permite declarar si uno o varios atributos de una relación deben
tomar siempre un valor, es decir no pueden tomar valores nulos. (No pueden quedar vacíos).
• Integridad Referencial (FOREIGN KEY): Si una relación R2 (relación que referencia) tiene un
campo que es la llave primaria de la relación R1 (relación referenciada) todo valor de dicho
campo debe concordar con un valor de la llave primaria de R1 o ser nulo. El campo entonces es
una llave foránea de la relación R2. Los atributos que son llave foránea en una relación no
necesitan tener los mismos nombres que los atributos de la llave primaria con la cual ellos se
corresponden, pero deben tener su mismo tipo de dato y longitud. En las tablas a continuación,
ésta se cumple, ya que los valores de la llave foránea en Empleados (1, 7, 4), tabla que
referencia, están como llave primaria en almacenes, tabla referenciada, para este caso, los
almacenes de código 2, 5 y 3 no cuentan con empleados.

• Verificación o Chequeo (CHECK): Puede suceder que sea necesario especificar una restricción
que deben cumplir los valores de determinados atributos de una relación de la BD. Para ellos
se definen las restricciones de verificación. Éstas llevan implícito un rechazo en caso de que no
se cumpla la restricción especificada, lo anterior también se comprueba antes una inserción,
borrado o modificación. Se pueden manejar diferentes validaciones utilizando para esto las
diferentes funciones y operadores, ejemplos:
❖ Check (campo in (Valor1, Valor2, Valor3, …………ValorN)
Ejemplo:
✓ Check (color in ('blanco', ' rojo', 'verde')
✓ Check (categoria in ('A','B','C')
✓ Check (categoria not in (1, 2, 3))
❖ Check (campo between Valor1 and Valor2)
Ejemplo:
✓ Check (salario between 1000 and 2000)
✓ Check (descuento not between 50 and 200)

63
https://barcelonageeks.com/restricciones-del-modelo-de-base-de-datos-relacional/

36
❖ Check (campo <, >=, <=, =, != (<>) Valor)
Ejemplo
✓ Check (salario>1000)
✓ Check (salario <=1000)
✓ Check (nombre != 'Juana')
Ejemplos mediante el uso de funciones, A continuación, se presenta el uso de algunas funciones
en las restricciones de validación y chequeo, tema que será visto en la parte referente al DML.
✓ Check (nombre like 'a%')
✓ Check (length(nombre)>8)
✓ Check ((current_date-fecha) /365>=18)
✓ Check (substring (nombre, 1, 1) =substring(reverse(nombre), 1, 1))
✓ Check(fecha<=current_date)
• Valor por defecto (DEFAULT): Permite definir un valor por defecto en la definición de un campo.
3.2 Alteración de Relaciones (ALTER TABLE)64
Para alterar cualquier objeto en una base de datos se utiliza el comando ALTER, seguido de cada
una de las cláusulas correspondientes, a continuación, se presenta dicho comando para su manejo
en el Sistema de Gestión de Bases de Datos PostgreSQL:

Permite renombrar
65
RENAME • Tablas
• Campos determinados
Permite agregar a la tabla:
• Campos determinados
ADD66
ALTER TABLE • Restricciones
(Nombre Tabla) • Campos con restricciones
Permite eliminar:
DROP67 • Campos determinados
• Restricciones
Permite cambiar el tipo de dato o longitud de
ALTER COLUMN68
un campo determinado
3.3 Eliminación de Relaciones (Drop Table)69
DROP es un comando de DDL que sirve para eliminar cada una de las relaciones (tablas), o cualquier
otro tipo de objeto (trigger, índice, etc.) de una base de datos

DROP TABLE if exists Nombre_Tabla;

64
https://www.w3schools.com/sql/sql_alter.asp
65
https://www.postgresqltutorial.com/postgresql-rename-table/
66
https://www.postgresqltutorial.com/postgresql-add-column/
67
https://www.postgresqltutorial.com/postgresql-drop-column/
68
https://www.educba.com/alter-column-in-postgresql/
69
https://www.tutorialspoint.com/sql/sql-drop-table.htm

37
3.4 Lenguaje de Manipulación de Datos70

El lenguaje de Manipulación de Datos es un sublenguaje del lenguaje SQL que permite realizar todo
tipo de consultas ya sean de acción o de selección de los datos que se encuentran almacenados en
las bases de datos. A continuación, y, en resumen, se muestran cada uno de los comandos utilizados
en este lenguaje:

INSERT
Consultas de Acción UPDATE
DML Lenguaje de Manipulación de Datos
(DML por sus siglas en inglés Data Manipulation Language) DELETE
Consultas de Selección SELECT
3.4.1 Consultas de Acción71
Son aquellas que pueden realizar cambios en los datos almacenados en una tabla, no retornan
tuplas, son las siguientes:

3.4.1.1 Inserción de Datos a una Base de Datos


Se utiliza para agregar uno o varios registros, también llamados tuplas, a una base de datos, su
estructura es la siguiente:

INSERT INTO nombre_tabla (Campo1, Campo2, Campo3, … CampoN)

VALUES (Valor1, Valor2, Valor3, …. ValorN);

Si insertamos en el orden de creación de la tabla no es necesario colocar el nombre de los campos,


ejemplo:

INSERT INTO nombre_tabla VALUES (Valor1, Valor2, Valor3, …. ValorN);

3.4.1.2 Actualización de Datos de una Base de Datos


Se utiliza para actualizar la información de una o más campos de una base de datos, dicha
actualización se puede realizar con o sin un filtro, el cual se define en la cláusula WHERE, y tiene la
siguiente estructura.

UPDATE nombre_tabla
SET campo1 = valor1, campo2 = valor2,........................,campoN=valorN
WHERE condiciones;

3.4.1.3 Eliminación de Datos de una Base de Datos


Permite eliminar una o más tuplas de la base de datos teniendo en cuenta o no la aplicación de un
filtro, el cual se define en la cláusula WHERE, y tiene la siguiente estructura.

DELETE FROM nombre_tabla


WHERE condiciones;

70
https://cursos.clavijero.edu.mx/cursos/062_bdI/modulo4/contenidos/tema4.3.html
71
https://desarrolloweb.com/articulos/2318.php

38
3.4.2 Consultas de Selección72
Una consulta de selección, a diferencia de una consulta de acción, permite retornar información
dependiendo del cumplimiento de la, o de las condiciones que se le apliquen, es importante tener
en cuenta que como resultado de una consulta puede no retornar información, si no se cumple con
las condiciones especificadas, o toda la información, si se cumple con dichas condiciones. Para la
realización de este tipo de consultas usamos el comando SELECT con cada una de las diferentes
cláusulas, esto se especifica en la tabla a continuación, además del uso de cada uno de los distintos
operadores que existen, estos son, operadores aritméticos, operadores relacionales o de
comparación y operadores lógicos, y de las distintas funciones existentes.
Las consultas de selección se pueden realizar para retornar información de una o de varias tablas,
para esto último, se deben “unir” dichas tablas mediante la utilización del JOIN, ya sea explícito o
implícito73, para el uso del JOIN es necesario realizar condiciones de combinación de tablas.
La estructura básica de una consulta de selección es la siguiente:
Comando o
Descripción del comando o de la cláusula
Cláusula
En esta parte se describe la información que se quiere retornar, cuando el comando SELECT
se acompaña de la cláusula ALL se devuelven las tuplas sin importar si ésta se repite o no,
cuando se acompaña de la cláusula DISTINCT se eliminan las tuplas repetidas.
Qué se puede colocar en el comando SELECT para que retorne un resultado
Se pueden colocar campos, uno, dos, tres o todos, los cuales se pueden representar con un
SELECT asterisco
Se pueden colocar además las diferentes funciones…
Cuando las funciones de grupo están acompañadas en el SELECT por uno o más campos, se
debe agrupar por dicha información.
Se pueden colocar también distintas operaciones aritméticas sobre los campos.
Se podrían colocar condiciones, pero no retornarían datos, retornaría false o true
dependiendo si cumple o no dicha condición.
En esta cláusula se especifica la o las tablas que se involucran en la consulta, las cuales se
unen para el JOIN Implícito mediante la igualación de la llave primaria y la llave foránea en
FROM la cláusula WHERE; para el JOIN explícito se coloca en el FROM una de las tablas y se van
colocando las otras teniendo en cuenta que dicha tabla esté unida de forma directa a alguna
de las otras tablas involucradas en la consulta.
Esta cláusula permite filtrar el resultado de una consulta teniendo en cuenta las condiciones
que se apliquen, usando para esto los distintos operadores existentes, así como las distintas
WHERE
funciones, en el WHERE no se pueden usar las funciones de agregado, dichas funciones son
Count, Sum, Avg, Max y Min.
GROUP BY Cláusula utilizada para realizar consultas de información agrupada.
Cláusula para indicar las condiciones para las consultas de información agrupada, en esta
HAVING cláusula se puede colocar condiciones sobre las funciones de agregado y para los campos
que aparezcan en el GROUP BY.
Esta cláusula permite ordenar la información resultado de una consulta por uno o más
campos, ya sea de manera ascendente con ASC o de manera descendente con DESC, es
ORDER BY
importante tener en cuenta que solo se puede ordenar por los campos o las funciones de
grupo que aparezcan en el comando SELECT.

72
http://www.maestrosdelweb.com/tutsql2/
73
https://es.stackoverflow.com/questions/52530/cual-es-la-diferencia-entre-joins-impl%C3%ADcitos-y-expl%C3%ADcitos

39
Antes de comenzar el desarrollo del tema es importante revisar los siguientes conceptos:
3.4.3 Tipos de Operadores74
En PostgreSQL se utilizan una serie de operadores dependiendo la necesidad de uso, estos
operadores se clasifican de manera general en tres tipos, estos son, operadores aritméticos
operadores relacionales o de comparación y operadores lógicos como se muestra a continuación:
3.4.3.1 Operadores Aritméticos
Operador Descripción del Operador
* Se utiliza para multiplicar dos expresiones numéricas.
/ Se utiliza para dividir dos expresiones numéricas.
% Determina el residuo de dos expresiones numéricas.
+ Se utiliza para sumar dos expresiones numéricas.
- Se utiliza para restar dos expresiones numéricas.
3.4.3.2 Operadores Relacionales o de Comparación
Este tipo de operadores permiten comparar dos expresiones, entre estos tenemos los siguientes:
Operador Descripción del Operador
Se utiliza para comparar si una expresión es mayor, menor, igual,
>, <, =, !=, >=, <=…<>
diferente, mayor o igual, menor o igual que otra expresión.
IN Se utiliza para comparar una lista de valores.
BETWEEN Se utiliza para comparar un intervalo de valores entre A y B.
LIKE Se utiliza para comparar una cadena de caracteres utilizando un comodín.
3.4.3.3 Operadores Lógicos
Estos operadores se utilizan para evaluar expresiones booleanas y son los siguientes:
Operador Descripción del Operador
AND Retorna verdadero únicamente cuando las dos expresiones son verdaderas.
OR Retorna verdadero cuando al menos una de las expresiones sea verdadera.
NOT Retorna la negación de la expresión booleana de entrada.
A continuación, mediante una tabla de verdad se representa cada uno de los operadores lógicos.

P Q P and Q P or Q Not P
True True True True False
True False False True False
False True False True True
False False False False True
3.4.4 Funciones en PostgreSQL75
Al realizar las consultas se pueden utilizar una serie de funciones, estas permiten realizar diferentes
operaciones con los campos de cada una de las tablas, cabe anotar que para este material se están
mostrando como ejemplo las funciones para el SGBD76 PostgreSQL, en caso de utilizar algún otro

74
http://es.tldp.org/Postgresql-es/web/navegable/user/operators.html
75
http://148.222.142.3/www.fcp3.unach.mx/manuales/download/Postgres-User.pdf
76
SGBD: Sistema de Gestión de Bases de Datos o DBMS, de sus siglas en inglés

40
SGBD algunas funciones cambian en su estructura más no en su funcionamiento, además para el
manejo del lenguaje se tomarán tanto los nombres de las tablas, así como de los atributos sin el uso
de la tilde, a continuación, se presentan algunas de estas funciones las que se considera son de
mayor uso, éstas son:
3.4.4.1 Funciones de Valores Simples
éstas son principalmente las siguientes:
Función Descripción de la Función
ABS (n) Permite retornar el valor absoluto de un número N.
SIGN (Valor) Retorna el signo que tiene el valor en el campo
CEILING (n) Retorna el número entero superior a N .
FLOOR (n) Retorna el número entero inferior a N.
MOD (m, n) Retorna el residuo de dividir M en N.
COALESCE (campo, valor) Sustituye un valor nulo por el valor digitado en la expresión.
POWER (m, n) Retorna la potencia de M elevado a la N.
ROUND (n) Permite redondear un número dependiendo el número de decimales.
SQRT (n) Devuelve la raíz cuadrada del número N.
CBRT (n) Devuelve la raíz cúbica del número N.
TRUNC (n) Permite truncar un número dependiendo el número de decimales.
3.4.4.2 Funciones de Grupos de Valores
Es importante tener en cuenta que estas funciones retornan un único valor.
Función Descripción de la Función
AVG Determina el promedio aritmético sin tener en cuenta los valores nulos.
COUNT Cuenta el número de elementos de una lista de valores.
MAX Determina el máximo valor de una lista de valores.
MIN Determina el valor mínimo de una lista de valores.
SUM Retorna la suma de una lista de valores.
3.4.4.3 Funciones de Cadena
Estas son principalmente las siguientes:
Función Descripción de la Función
CHR(n), n debe ser de tipo entero Retorna el carácter con código ASCII igual a N.
CONCAT (cadena1, cadena2) Realiza la concatenación de las cadenas 1 y 2
LOWER (cadena) Retorna en minúscula la cadena.
UPPER (cadena) Retorna en mayúscula la cadena.
INITCAP (cadena) Retorna la cadena de tipo título.
REVERSE (cadena) Invierte una cadena.
LTRIM (cadena, caracteres) Suprime caracteres por la izquierda de la cadena
RTRIM (cadena, caracteres) Suprime caracteres por la derecha de la cadena
LEFT (cadena, n) Extrae N caracteres por la izquierda de la cadena.
RIGHT (cadena, n) Extrae N caracteres por la derecha de la cadena.
LPAD (cadena, longitud, caracteres) Añade caracteres por la izquierda de la cadena
RPAD (cadena, longitud, caracteres) Añade caracteres por la derecha de la cadena
REPLACE (cadena buscada, cadena reemplazo) Reemplaza caracteres en una cadena
SUBSTRING (cadena, m, n) Obtiene una subcadena de una cadena.

41
3.4.4.4 Funciones que Retornan un Valor Numérico
Entre éstas tenemos:
Función Descripción de la Función
ASCII (cadena) Devuelve el valor ASCII de la primera letra de la cadena.
POSITION (substring IN string) Devuelve la posición de una subcadena dentro de una cadena.
LENGTH (cadena) Devuelve la longitud de una cadena.
Además de las anteriores tenemos además y entre otras, diferentes funciones para el manejo de
fechas tales como CURRENT_DATE, CURRENT_TIME, NOW (), CURRENT_TIMESTAMP, EXTRACT,
DATE_PART, etc., y funciones de conversión como TO_CHAR, TO_DATE y TO_NUMBER, muchas de
las funciones que no se encuentran en esta guía las pueden revisar en el libro que se envió en idioma
inglés, para cada una de éstas se describe un ejemplo en dicho libro.
3.4.5 Uso de la Cláusula WHERE en el Comando Select
Esta cláusula se utiliza para determinar cuáles tuplas retornan al realizar una consulta de selección,
es decir, permite determinar mediante una o más condiciones las tuplas de retorno, esta cláusula
se coloca después de la cláusula FROM, de no colocarse retorna todas las tuplas que contenga dicha
tabla, la cláusula WHERE también se puede utilizar para eliminar o actualizar información de una
tabla bajo ciertas condiciones. Las condiciones de la cláusula WHERE se le aplican a cada uno de los
campos mediante la utilización de cada uno de los operadores y funciones existentes.

3.4.6 Consultas Multitabla77


Para realizar consultas de selección con dos o más tablas se debe realizar el JOIN (es una unión o
combinación), éste permite retornar tuplas de dichas tablas tomando para esto un campo común.

Antes de adentrarnos en el manejo del JOIN es importante conocer lo siguiente

3.4.6.1 Producto Cartesiano78:


Este producto permite retornar una tabla con la suma de los campos de dos tablas y el producto de
la concatenación de sus tuplas.

3.4.6.2 Inner Join79


Este JOIN permite realizar la unión de dos tablas igualando dos campos comunes, uno en cada tabla,
existen dos formas de hacerlo, el JOIN implícito y el JOIN explícito, el INNER JOIN es el JOIN más
utilizado y es una combinación de producto cartesiano y selección, es decir, primero realiza el
producto cartesiano y luego hace una selección teniendo en cuenta la igualación de dos campos
iguales, uno en cada tabla, específicamente la llave primaria con la llave foránea.

77
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx
78
https://www.aulaclic.es/sql/t_3_3.htm
79
https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/inner-join/

42
3.4.7 Consultas para Información Agrupada80
Se utiliza para generar resultados de consultas agrupados y con algunas operaciones de agregación
aplicadas, utilizando para esto las funciones de agregación, las cuales nos permiten efectuar
operaciones sobre un conjunto de resultados, pero devolviendo un único valor agregado para todos
ellos, estas funciones se vieron anteriormente, vamos a recordarlas:81
Función Descripción de la Función
AVG Determina el promedio aritmético sin tener en cuenta los valores nulos.
COUNT Cuenta el número de elementos de una lista de valores.
MAX Determina el máximo valor de una lista de valores.
MIN Determina el valor mínimo de una lista de valores.
SUM Retorna la suma de una lista de valores.
Las funciones anteriores se aplican a un solo campo, que especificaremos entre paréntesis, excepto
la función COUNT, que se puede aplicar a una columna o indicar un “*”. La diferencia entre poner
el nombre de una columna o un “*”, es que en el primer caso no cuenta los valores nulos para dicha
columna, y en el segundo sí lo hace, para este caso el valor no se toma en cuenta.
Tenga en cuenta que para dichas consultas se utiliza en el comando select las cláusulas siguientes:
GROUP BY Cláusula utilizada para realizar consultas de información agrupada.
HAVING Cláusula para indicar las condiciones para las consultas de información agrupada.
3.4.8 Subconsultas82
Una subconsulta es una consulta de selección que aparece dentro de otra consulta que llamaremos
consulta principal, se utiliza para tomar los resultados de una consulta que se encuentra dentro de
otra la cual se denomina consulta principal, para este caso primero se ejecuta la subconsulta y luego
la consulta principal; también se puede utilizar como forma alternativa al Join.
Su sintaxis es la misma de una sentencia select con la diferencia que la consulta interna aparece
encerrada entre paréntesis, cada una de las consultas internas a su vez pueden contener otra
consulta interna y así sucesivamente.
A continuación, se presenta la estructura de una subconsulta:
Select columnas resultado from tabla
where (columna | expresión) operador (
select columna | expresión from tabla
where (columna | expresión) operador (
select columna | expresión from tabla
where (columna | expresión) operador (
select columna | expresión from tabla
where ………………………………………………)) ; )
80
https://elbauldelprogramador.com/consulta-de-datos-clausula-group-by/
81
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Agrupaciones-y-funciones-de-agregacion.aspx
82
https://www.aulaclic.es/sql/t_5_1.htm

43
De forma gráfica una subconsulta se podría ver como se muestra a continuación:

Consulta Principal

Subconsulta

Ejemplo83
A continuación, se pretende retornar la información de los empleados que trabajen en la misma
empresa en la que trabaja otro empleado, para el caso el empleado cuyo código es 12345, sin
embargo, no sabemos en qué empresa trabaja dicho empleado, consulta que se debe realizar
primero y de forma interna como una subconsulta.

Retornar la información de los empleados que trabajan en la misma empresa en la


que trabaja el empleado con código 12345

Pero ¿En cuál empresa trabaja el empleado con código 12345?


(Esto se averigua en la consulta interna, resultado que se toma para
realizar la consulta externa)

83
https://aserracanta.files.wordpress.com/2011/11/les06.pdf

44
3.5 Lenguaje de Control de Datos84
El Lenguaje de Control de Datos (DCL por sus siglas en inglés Data Control Language), permite crear
roles, permisos e integridad referencial, así como el control al acceso a la base de datos, los
comandos que se utilizan son:
3.5.1 GRANT
Usado para otorgar privilegios de acceso de usuario a la base de datos.
3.5.2 REVOKE
Utilizado para retirar privilegios de acceso otorgados con el comando GRANT
3.6 Lenguaje de Control de Transacción85
El Lenguaje de Control de Transacción (TCL por sus siglas en inglés Transaction Control Language),
permite administrar diferentes transacciones que ocurren dentro de una base de datos.
3.6.1 COMMIT
La cláusula COMMIT se utiliza para guardar el trabajo hecho.
3.6.2 ROLLBACK
La cláusula ROLLBACK se utiliza para deshacer la modificación que hice desde el último COMMIT.

84
http://dbadixit.com/data-control-language-dcl-sql/
85
http://dbadixit.com/transaction-control-language-tcl-del-sql/

45
REFERENCIAS BIBLIOGRÁFICAS
BIBLIOGRAFÍA BÁSICA
• Pulido Romero, E. Escobar Domínguez, Ó. y Núñez Pérez, J. (2019). Base de datos. Grupo Editorial Patria.
https://elibro.net/es/lc/uts/titulos/121283
• Nieto Bernal, W. (2017). Diseño de base de datos. Universidad del Norte. https://elibro.net/es/lc/uts/titulos/70030
• Silberschatz, A., Korth, H., & Sudarshan, S. (2014). Fundamentos de Bases de Datos. España. Mcgraw-Hill /
Interamericana De España, S.A.
• Crockett, K., Morris,S y otros. (2020). Database Principles: Fundamentals of Design, Implementation, and Management.
Cengage Learning EMEA.
• Varios autores. (2002) Diseño de Bases de Datos desde CHEN hasta COOD en Oracle. México. Alfaomega Grupo Editor.

BIBLIOGRAFÍA COMPLEMENTARIA
• Martínez López, F. J. y Gallegos Ruiz, A. (2017). Programación de bases de datos relacionales. RA-MA Editorial.
https://elibro.net/es/lc/uts/titulos/106525
• Connoly, T. (2004). Sistemas de Bases de Datos. Pearson. España, Addison Wesley.
• De Miguel, A. (2001). Diseño de Bases de Datos. Colombia. Alfaomega Grupo Editor.
• Korth, H. (2006). Fundamentos de Bases de Datos. España, Editorial Mc Graw Hill.
• Kroenke, David. (2002). Procesamiento de Bases de Datos. España, Pearson. Prentice Hall.

WEBGRAFÍA
Respecto a Modelos de Datos
• Camps, R. y otros. (2005). Bases de Datos. España. UOC. Recuperado de:
https://www.uoc.edu/pdf/masters/oficiales/img/913.pdf
• Coronel, G., Morris, S., & Rob, P. (2011). Bases de datos. España. Cengage. Recuperado de:
• https://latinoamerica.cengage.com/ls/base-de-datos-9a-ed/
• Campusmvp. (s.f.) Diseñando una base de datos en el modelo relacional.
https://www.campusmvp.es/recursos/post/Disenando-una-base-de-datos-en-el-modelo-relacional.aspx Recuperado
en: 6/07/2017

Respecto al Lenguaje SQL


• Keydata. (s.f.) Tutorial de SQL: Curso de SQL. En línea: http://www.1keydata.com/es/sql/ Recuperado Julio 5 de 2017.
• Blanco, C. (s.f). SQL básico. En línea: https://svo.cab.inta-csic.es/docs/files/svo/Public/

VÍNCULOS PARA TEXTOS EN INGLÉS


• Database Fundamentals: http://www.esp.org/db-fund.pdf recuperado en: 08/02/2018
• An Introduction to SQL and PostgreSQL: https://www.doc.ic.ac.uk/lab/labman/postgresql/postgresql.pdf recuperado
en: 08/02/2018
• PostgreSQL Database Managent System. https://www.tutorialspoint.com/postgresql/postgresql_tutorial.pdf
recuperado en: 08/02/2018
• http://www.uoitc.edu.iq/images/documents/informatics-institute/Competitive_exam/Database_Systems.pdf

BIBLIOTECA VIRTUAL UTS


La biblioteca virtual de las UTS se puede encontrar en la plataforma ACADEMUSOFT y desde allí se cuenta con los siguientes
accesos:

• E-Libro
• Virtual Pro
• MultiLegis
• Mc Graw Hill
• Pearson
• Emis
• EuroMonitor International

46

También podría gustarte