Está en la página 1de 33

Bases de datos

relacionales y SQL
Elaborado por: María del Pilar Villamil y Daniel Galindo Ruiz
Algunas referencias de apoyo
* SQL Primer: An Accelerated Introduction to SQL Basics
Rahul Batra
Published by Apress, 2018
Se sugieren para práctica de SQL los capítulos a partir del capítulo 5.
Este libro está disponible de forma digital en la biblioteca de la Universidad. Puede
acceder a él haciendo clic sobre este texto.
* MySQL 8 Cookbook
Karthik Appigatla
Published by Packt Publishing

Este libro está disponible de forma digital en la biblioteca de la Universidad. Puede


acceder a él haciendo clic sobre este texto.
Repaso de Bases de datos
relacionales
Haz clic en cualquiera de los hexágonos para ir al tema que quieras revisar con mayor
detalle. Puedes volver a este menú con el botón que tiene ícono de casa en la parte
inferior de cualquier diapositiva.

Insert,
Generalidades Update, Joins Modelos
Delete E/R
SQL - Group
SQL- DDL DML by -
básico Having
MODELO RELACIONAL:
DEFINICIÓN BÁSICA

Una base de datos relacional es un conjunto de tablas, compuestas por


las y columnas. Cada tabla representa un concepto de la vida real. Por
ejemplo, en una base de datos empresarial, pueden haber tablas de
productos, empleados y clientes.

Cada la de una tabla representa una instancia de la tabla. Es decir, si la


tabla guarda información de clientes, cada la de la tabla representa un Tabla1 Tabla 2
cliente.

Cada columna de una tabla representa una característica de la instancia


Tabla 3
de la tabla. Por ejemplo, en la tabla de clientes, hay una columna para el
nombre del cliente, otra para su correo y otra para su número de teléfono.

Veamos en la siguiente diapositiva un ejemplo de lo anterior.


MODELO RELACIONAL:
EJEMPLO DE TABLA

A la derecha, se muestra una tabla que guarda


información básica de clientes de una empresa. Tabla de clientes
Podemos ver que cada la corresponde a un cliente
individual y que cada columna guarda una
ID Nombre Email Teléfono
característica del cliente, de manera que se sabe el
nombre, email y teléfono de cada cliente.
01 Juan Perez jp@mail.com 734984
En un modelo relacional, las tablas como la del
ejemplo, se pueden crear, actualizar, eliminar y 02 María Paz mp@mail.com 4237789
relacionar entre sí. Esto se hace con un lenguaje
llamado SQL. Este lenguaje se puede categorizar 03 Pepe Rodríguez pr@mail.com 9902354
como DDL (Data De nition Language por sus siglas en
inglés) y DML (Data Manipulation Language por sus
siglas en inglés).

Es decir, con SQL se pueden crear y estructurar la


información guardada en el modelo relacional (DDL) y
a su vez, manipularla (DML).
MODELO RELACIONAL:
SQL, MYSQL, CREATE

Existen varios Sistemas Manejadores de Bases de Datos Relacionales (SMBDR), entre los que se
encuentra MySQL, el cual usaremos en este curso. Un SMBDR es un sistema responsable del manejo de
datos de forma transparente al usuario que permite entre otras funcionalidades crear y manipular la
información almacenada en tablas garantizando, en caso de requerirse, un manejo transaccional.

A continuación, veremos nuestra primera instrucción SQL: "CREATE". Esta instrucción crea una tabla en la
base de datos y de ne restricciones sobre la información que se guardará en dicha tabla. Para crear la
tabla del ejemplo anterior, usaríamos la siguiente instrucción, cuyo resultado es la creación de una tabla
vacía, con las columnas como se ve a la derecha de la instrucción.

CREATE TABLE clientes (


ID INT,
Nombre VARCHAR (50), ID Nombre Email Teléfono
Email VARCHAR (30), ... ... ... ...
Teléfono VARCHAR(7)
);
MODELO RELACIONAL:
CREATE, RESTRICCIONES Y SECUENCIAS
La instrucción anterior crea la tabla llamada "clientes" con 4
columnas: "ID", "Nombre", "Email" y "Teléfono". Al crear una columna,
siempre es necesario acompañarla como mínimo, con el tipo de dato
correspondiente a lo que guarda:
Nombre en
Tipo de dato
CREATE TABLE clientes ( MySQL
ID INT, Cadena de caracteres (o
Nombre VARCHAR (50), VARCHAR
palabra)
Email VARCHAR (30),
Número Entero INT
Teléfono VARCHAR(7)
); Número con punto flotante FLOAT
Booleano BOOL
Por ejemplo, la columna "ID" (para abreviar "identi cador") es de tipo
número entero, INT (por "Integer" en inglés). En las demás columnas, Fecha DATE
los tipos de datos son cadenas de caracteres, que en SQL se llaman Fecha y hora DATETIME
"VARCHAR" seguido de un número entre paréntesis que indica la
longitud máxima de la cadena de caracteres. En el ejemplo, los datos
de la columna "Nombre" tienen máximo 50 caracteres, es decir, los
nombres que se guarden en esta tabla no podrán sobrepasar los 50
caracteres.

En la tabla de la derecha hay más tipos de datos de SQL.


MODELO RELACIONAL:
RESTRICCIONES DE INTEGRIDAD
Antes de continuar, es importante de nir otros conceptos sobre las tablas de una base de datos. Son los
conceptos de restricciones de integridad.

Una restricción de integridad es una regla que se de ne en una o más columnas de una tabla, con el propósito de
que los datos que se guarden en dichas columnas, guarden integridad y con abilidad al cumplir dicha restricción.

En el ejemplo de creación de la tabla de clientes, ya incluímos algunas restricciones o reglas, como lo fueron las
longitudes máximas de las columnas de "Nombre", "Email" y "Teléfono". Pero podemos agregar más restricciones
como las siguientes:

Llave primaria ("PRIMARY KEY" en SQL): La columna que tiene esta restricción contiene el valor que hace de
llave primaria de la tabla. Una llave primaria identi ca una la de manera única. Implícitamente, una llave
primaria es única y no nula.
Llave foránea ("FOREIGN KEY" en SQL): La columna que tiene esta restricción contiene el valor de una llave
única, ya existente en una tabla, típicamente una llave primaria. Una llave foránea por si sola no tiene
restricción de unicidad ni de no nulidad.
No nulo ("NOT NULL" en SQL): Indica que no pueden haber valores vacíos o nulos en la columna.
No duplicado ("UNIQUE" en SQL): Indica que los valores guardados en esa columna son únicos y que no
pueden repetirse en diferentes las.

En la siguiente diapositiva de niremos una secuencia.


MODELO RELACIONAL:
SECUENCIAS
Las secuencias en las bases de datos ayudan a crear números enteros secuenciales para asignarlos a una columna
de tipo "INT". Por lo general, las secuencias se usan en las columnas que guardan llaves primarias de tipo "INT",
generadas por el sistema, como lo es el caso del ejemplo de la tabla "clientes" que hemos venido desarrollando. Para
indicar que una columna tiene una secuencia, se usa "AUTO_INCREMENT" en SQL.

Retomemos el comando CREATE que vimos previamente y agreguemos un par de restricciones y una secuencia
sobre la tabla de clientes, para mejorar la integridad y calidad de datos que vayamos a guardar ahí:

CREATE TABLE clientes ( Mismo comando para CREATE TABLE clientes (


crear una tabla, pero con
ID INT, restricciones ID AUTO_INCREMENT INT PRIMARY KEY,
Nombre VARCHAR (50), Nombre VARCHAR (50) NOT NULL,
Email VARCHAR (30), Email VARCHAR (30) NOT NULL UNIQUE,
Teléfono VARCHAR(7) Teléfono VARCHAR(7) NOT NULL
); );
El nuevo comando para crear la tabla "clientes" ahora indica que la columna "ID" es la llave primaria de la tabla
y tiene una secuencia asociada para su manejo. Además, las columnas "Nombre", "Email" y "Teléfono" no
pueden tener valores vacíos y adicionalmente, la columna "Email" debe tener valores únicos en todas las las
(no admite duplicados).
MODELO RELACIONAL:
RESTRICCIONES

Antes de continuar, mostraremos algunos ejemplos de cómo afectan las restricciones de integridad el
comportamiento de los datos en la tabla de clientes. A la izquierda hay una tabla de clientes creada sin restricciones
y a la derecha hay restricciones, en la tabla con restricciones. Pon el cursor sobre los recuaros de color que hay sobre
las tablas para ver explicaciones breves.

Tabla creada con restricciones en las columnas.


Tabla creada sin restricciones en las columnas.
ID Nombre Email Teléfono ID Nombre Email Teléfono
01 NULL jp@mail.com 734984 PK NN NN, ND NN
02 María Paz mp@mail.com NULL 01 Juan Perez jp@mail.com 734984
03 Pepe Rodríguez mp@mail.com NULL 02 María Paz mp@mail.com 4237789
04 David García dg@mail.com 3678987 03 Pepe Rodríguez pr@mail.com 9902354
04 David García dg@mail.com 3678987
MODELO RELACIONAL:
FOREIGN KEY

Veamos ahora la forma de crear una llave foránea y su signi cado. Queremos representar que en la tabla de ventas
el idCliente es el identi cador de un cliente válido. Esto es, un cliente que previamente se ingresó a la tabla de
clientes. Es así como en la sentencia de creación de la tabla de ventas lo expresamos de la siguiente manera:
CREATE TABLE ventas (
NumVenta INT PRIMARY KEY Esta última la representa la llave foránea (FK)
, IdCliente INT NOT NULL creada sobre el campo IdCliente de la tabla de
, IdProducto INT NOT NULL ventas. De esta forma, todo idCliente de esa tabla
, Valor FLOAT NOT NULL debe existir en el campo ID de la tabla de clientes
, FOREIGN KEY (IdCliente) REFERENCES Clientes(ID); para poder registrar la venta.

Esto funciona, si en la tabla de clientes se de nió en el campo ID la restricción de llave primaria (PRIMARY KEY).
Recuerda que una FK no exige que el campo sea NOT NULL, por eso en este ejemplo lo expresamos
especí camente en la columna IdCliente con la restricción NOT NULL.
Tabla de ventas Tabla de clientes
ID Nombre Email Teléfono
NumVenta IdCliente IdProducto Valor
PK NN NN, U NN
PK FK FK,NN NN
01 Juan Perez jp@mail.com 734984
2345 01 45 100000
02 María Paz mp@mail.com 4237789
2347 02 32 367000
03 Pepe Rodríguez pr@mail.com 9902354
MODELO RELACIONAL:
INSERT
Ahora podemos pasar a realizar otras operaciones sobre tablas: "INSERT" para agregar una nueva la o registro,
"UPDATE" para actualizar valores en las y "DELETE" para eliminar las. Aquí seguiremos trabajando con la tabla
"clientes", más especí camente, con la tabla que creamos con restricciones y secuencia, asumiendo que está
vacía.

Primero vamos a agregar las en la tabla. Para ello usamos INSERT así:

INSERT INTO clientes (Nombre, Email, Teléfono)


VALUES ("Juan Pérez", "jp@mail.com", "734984");

El resultado del comando nos da la siguiente tabla:

ID Nombre Email Teléfono Haz clic en el botón para


PK NN NN, U NN tener más explicación sobre
el comando INSERT
01 Juan Perez jp@mail.com 734984
MODELO RELACIONAL:
UPDATE
Antes de continuar, hemos insertado dos las adicionales en la tabla de clientes. Haz click aquí: para ver los
comandos SQL que usamos para ello. Esto resulta en la siguiente tabla donde el cliente de ID 3 "Pepe Rodríguez"
tiene un correo que no tiene sentido y queremos actualizarlo.
ID Nombre Email Teléfono
PK NN NN, U NN
01 Juan Perez jp@mail.com 734984
02 María Paz mp@mail.com 4237789

03 Pepe Rodríguez correoEjemplo@mail.com 9902354

Para ello usaremos el comando "UPDATE", el cual ID Nombre Email Teléfono


cambia los valores de las columnas de una la que
existe en la la, según una condición dada. Veamos: PK NN NN, U NN
UPDATE clientes
01 Juan Perez jp@mail.com 734984
SET Email = "pr@mail.com"
WHERE ID = 03; 02 María Paz mp@mail.com 4237789
A la derecha tenemos el resultado del cambio.
03 Pepe Rodríguez pr@mail.com 9902354
MODELO RELACIONAL:
DELETE
Ahora veremos cómo eliminar una la de la tabla. Esto se hace con el comando "DELETE". Supongamos que
queremos eliminar al cliente Juan Pérez, pues ya no tiene vínculos con la empresa. Veamos el comando a usar:

DELETE FROM clientes


WHERE ID = 1; Se eliminó al cliente
ID Nombre Email Teléfono Juan Pérez, pues su ID Nombre Email Teléfono
ID era 1,
PK NN NN, U NN coincidiendo con la
condición PK NN NN, U NN
01 Juan Perez jp@mail.com 734984 establecida con
WHERE 02 María Paz mp@mail.com 4237789
02 María Paz mp@mail.com 4237789
03 Pepe Rodríguez pr@mail.com 9902354 03 Pepe Rodríguez pr@mail.com 9902354

Como adición al tema de eliminar datos, también es importante mencionar que puedes eliminar tablas completas.
Esto se hace con "DROP", por ejemplo, para borrar la tabla "clientes", usaríamos:
DROP TABLE clientes;
Este comando funciona si no existen otras tablas que tengan relación con la tabla de clientes.

Un comando similar al "DELETE" es "TRUNCATE TABLE" que internamente hace el drop table y create table, lo que
lo hace más eficiente. Sin embargo, una vez ejecutado no es posible recuperar el contenido con un comando de
ROLLBACK.
TRUNCATE TABLE clientes;
MODELO RELACIONAL:
SELECT
Hasta ahora hemos visto cómo crear una tabla con restricciones y secuencias, también aprendimos a agregar,
actualizar y eliminar las en una tabla. Ahora podemos pasar a aprender cómo hacer consultas sobre una o más
tablas. SQL permite realizar consultas al buscar información basada en proyecciones y selecciones.

Las proyecciones corresponden a lo que se desea como respuesta de la consulta (o query), es decir, las columnas
resultado. Las selecciones son restricciones a aplicar sobre las columnas de las tablas, para así determinar cuáles
las obtener.

Veamos un ejemplo básico para ilustrar lo anterior. Usaremos el comando "SELECT" sobre la tabla de clientes (con
una columna adicional - Fecha), que hemos venido trabajando, de la siguiente manera:

SELECT * FROM clientes;

El resultado de este comando es la siguiente tabla.

ID Nombre Email Teléfono Fecha


01 Juan Perez jp@mail.com 734984 20220220
02 María Paz mp@mail.com 4237789 20200616
Pepe
03 pr@mail.com 9902354 20210505
Rodríguez
MODELO RELACIONAL:
SELECT
El ejemplo que vimos en la diapositiva anterior es una de las muchas maneras de hacer una selección en la
base de datos. Aquí te presentamos algunas otras. Haz clic en los botones con el logo "+" para ver mayor
explicación sobre cada ejemplo.

SELECT * FROM clientes WHERE NOMBRE IS NOT NULL;

SELECT Nombre FROM clientes WHERE Email = "jp@mail.com";

SELECT Nombre, Teléfono FROM clientes WHERE Email LIKE "%@mail.com";

SELECT Nombre FROM clientes WHERE Email LIKE "%mail.com" AND ID > 1;

SELECT Email FROM clientes WHERE ID > 1 OR Nombre LIKE "% Perez";

SELECT Nombre FROM clientes WHERE Fecha BETWEEN STR_TO_DATE("20200601","%Y%m%d")


and STR_TO_DATE("20210601","%Y%m%d");
MODELO RELACIONAL:
SELECT, VISTAS

Hemos visto cómo realizar consultas sobre datos de una tabla, con diferentes operadores en la condición
de selección. Hay otro concepto que complementa las consultas, que es el de vistas. Una vista es una
consulta SQL que retorna una tabla como ya hemos visto en la diapositiva anterior. De entrada, esto parece
no tener ninguna utilidad, porque sería repetir una consulta SQL que ya sabes hacer.

Sin embargo, las vistas tienen sus ventajas. Dos ventajas principales son:
1. Ahorran la necesidad de repetir la misma consulta (o query en inglés) en la base de datos. Esto es
especialmente útil cuando se necesitan hacer consultas complejas.

Mira el siguiente ejemplo:

2. Ayudan a mantener con dencialidad de información, pues hay tablas que tienen datos sensibles y que
no deberían poder verse por ciertas personas. Por ejemplo en una empresa, las tablas de clientes contienen
sus direcciones de residencia, las cuales solo los trabajadores del departamento de Recursos Humanos
deberían poder ver. Con una vista se puede generar una tabla de clientes que no contenga la columna con
las direcciones de residencia y sería esa tabla con la que trabajarían los demás departamentos de la
empresa.
MODELO RELACIONAL:
JOIN

Hemos visto cómo realizar consultas sobre datos de una tabla, con diferentes operadores en la condición
de selección y adicionalmente, hemos visto cómo crear vistas a partir de tablas de la base de datos. Ahora
vamos a ver cómo realizar consultas sobre más de una tabla, aprovechando el hecho de que estamos
usando un modelo relacional, es decir, que relaciona datos varias tablas.

Para ello, usaremos el operador "JOIN" o "INNER JOIN" (son equivalentes pero se acostumbra a usar
INNER JOIN) y algunos de sus derivados: "LEFT OUTER JOIN" y "RIGHT OUTER JOIN". Para ello, vamos a
usar una tabla nueva llamada "ventas", que contiene la información de ventas realizadas por la empresa a
sus clientes. Observa la columna "IdCliente" en la nueva tabla, es una columna de llave foránea que
contiene llaves primarias de clientes en la otra tabla, lo cual permite relacionar una venta con un cliente.

Tabla de clientes Tabla de ventas


ID Nombre Email Teléfono NumVenta IdCliente IdProducto Valor
PK NN NN, U NN PK FK FK,NN NN
01 Juan Perez jp@mail.com 734984 2345 01 45 100000
02 María Paz mp@mail.com 4237789 2347 02 32 367000
03 Pepe Rodríguez pr@mail.com 9902354
MODELO RELACIONAL:
JOIN

Antes de entrar a los detalles del lenguaje, comprendamos de forma grá ca el signi cado de cada uno de
los tipos de JOIN.

Veamos las tablas de clientes y ventas únicamente con la columna relacionada con el cliente en una
representación de conjuntos. Haz clic en el más del tipo de join que quieres entender mejor.

Tabla de clientes
Tabla de ventas

ID (PK) INNER JOIN


IdCli(FK)
01 01
LEFT JOIN
02 02
03 04
RIGHT JOIN
FULL OUTER
ID (PK) IdCliente (FK)
JOIN
03 04
MODELO RELACIONAL:
INNERJOIN

Tabla de clientes
Tabla de ventas
INNER JOIN
ID (PK) IdCli(FK)
01 01
02 ID idCli 02
03 01 01 04
02 02

Tabla de clientes Tabla de ventas

ID (PK) 01 IdCli (FK)


03 02 04
MODELO RELACIONAL:
LEFT OUTER JOIN

Tabla de clientes
Tabla de ventas
LEFT JOIN
ID (PK) IdCli(FK)
01 ID idCli 01
02 01 01
02
03 02 02
03 - 04

ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
RIGHT OUTER JOIN

Tabla de clientes
RIGHT JOIN Tabla de ventas

ID (PK) IdCli(FK)
01 ID IdCli 01
02 01 01
02
03 02 02
- 04 04

ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
FULL OUTER JOIN

FULL OUTER JOIN

Tabla de clientes
Tabla de ventas

ID (PK) ID IdCli
01 01 IdCli(FK)
01 02 02 01
02 03 - 02
03 - 04
04

ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
JOIN
Sabiendo que existe una relación entre las tablas, veamos cómo funcionan en detalle
los tipos de JOIN:

INNER JOIN: Une las columas de las tablas según valores que coincidan en ambas
tablas.
ID idCli
01 01
02 02
03 - LEFT OUTER JOIN: Une todas las columnas de la tabla de la izquierda con las
columnas de la tabla de la derecha según los valores que coincidan. Las las que no
coinciden aparecen como resultado pero los datos de la columnas asociadas a la tabla
donde no existen quedan sin valor(NULL).
ID IdCli
01 01
RIGHT OUTER JOIN: Une todas las columnas de la tabla de la derecha con las columnas 02 02
- 04
de la tabla de la izquierda según los valores que coincidan. Las las que no coinciden
aparecen como resultado pero los datos de la columnas asociadas a la tabla donde no
existen quedan sin valor(NULL).

FULL OUTER JOIN: Une todas las columnas de la tabla de la izquierda con las
columnas de la tabla de la derecha según los valores que coincidan. Las las que no
coinciden en alguna de las tablas, aparecen como resultado pero los datos de la
columnas asociadas a la tabla donde no existen quedan sin valor(NULL).
.
MODELO RELACIONAL:
GROUP BY, HAVING

Ahora, vamos a ver cómo hacer operaciones dentro de las columnas para generar nuevo
conocimiento a partir de los datos guardados en ellas. Para ello, usaremos "GROUP BY" y también
"HAVING". Usaremos una tabla de ventas con una la adicional:

NumVenta IdCliente IdProducto Valor


PK FK FK,NN NN
audio_001

2345 01 45 100000
2347 02 32 367000
2348 04 71 60500
2349 04 72 90000

En la nueva versión de la tabla de ventas, tenemos dos compras realizadas por un mismo cliente (de
id 4).
MODELO RELACIONAL:
GROUP BY, HAVING

Veamos un ejemplo de la función GROUP BY, con el cual obtenemos el total de las ventas de cada
cliente:

SELECT IdCliente, SUM(valor) totalVentas


FROM ventas
GROUP BY idCliente;
audio_002

NumVenta IdCliente IdProducto Valor


PK FK FK,NN NN IdCliente totalVentas

2345 01 45 100000 01 100000


2347 02 32 367000 02 367000
2348 04 71 60500 04 150500
2349 04 72 90000
MODELO RELACIONAL:
GROUP BY, HAVING

Veamos un ejemplo de la función GROUP BY, acompañada de la expresión "HAVING" con la cual
obtenemos los identi cadores de los clientes cuyos gastos en compras suman más de $100.000:

SELECT IdCliente, SUM(valor) totalVentas IdCliente totalVentas


FROM ventas
01 100000
GROUP BY idCliente
HAVING totalVentas > 100000; audio_003
02 367000

04 150500
NumVenta IdCliente IdProducto Valor
PK FK FK,NN NN
2345 01 45 100000 IdCliente totalVentas
2347 02 32 367000
02 367000
2348 04 71 60500
2349 04 72 90000 04 150500
MODELO ENTIDAD/RELACIÓN

Veamos cómo leer el siguiente modelo entidad/relación. En este punto lo más importante son las relaciones
entre las entidades y su forma. En este caso, la terminación en tres líneas signi ca cardinalidad de muchos.
Mientras que una línea simple, signi ca cardinalidad de 1. Así las relaciones que observamos son de 1 a
muchos.
La línea vertical en la relación signi ca que al llevar este modelo conceptual al modelo relacional basado en
tablas, se hereda la FK como parte de la PK de la entidad que tiene múltiplicidad muchos. Hay otro punto
importante que se debe aclarar y es que en un modelo relacional al interior de una tabla, no es permitido
tener atributos multivalor. Esto signi ca que NO es posible tener como atributo una lista o colección de
elementos.
Teniendo esta teoría, ¿cómo queda el modelo de tablas que representa este modelo conceptual? .. Vamos a
verlo en la siguiente página.
Id Id

audio_004

Id
MODELO ENTIDAD/RELACIÓN

Vemos que la entidad HechoPuestaEnMarchaPersonaje al ser representada en una tabla, hereda


como parte de su PK (con 5 columnas), las FK de artista, interpretación, sitio, fecha y espectáculo.
Tabla HechoPuestaEnMarchaPersonaje

IdArtista IdInterpretación IdSitio Fecha idEspectáculo CalPersonaj CostoPersonj


Id Id
PK3-
PK1,Fk Pk2-FK PK4-FK PK5-FK
FK

Id
45 1 01 1 4 1'

47 6 01 19800203 1 5 500.

47 7 01 19851004 2 3 800'

47 8 01 20000101 3 4 2'
audio_005
MODELO ENTIDAD/RELACIÓN

A practicar lo visto !

Objetivo.
Comprender el manejo de las relaciones de un modelo conceptual a un modelo físico.

Tu misión.
Jefe Determinar cuál de las entidades en su representación de tablas, hereda la llave
primaria de la otra entidad.

NO SÉ
EMPLEADO DEPENDENCIA NO SÉ
MODELO ENTIDAD/RELACIÓN

Intenta nuevamente!!
Piensa en el espacio utilizado por esa nueva columna en Empleados -idDependencia- ya que puede tener
muchos valores en Nulo. En este ejemplo, supongamos que Marta Rosas es la jefe de Recursos Humanos y
que los otros empleados no son jefes de ninguna despendencia ya que que en la actualidad no se ha
designado el jefe de mercadeo. Eso lleva a que tenga sentido que Juan Perez y Martina Hernández no tengan
valor en la columna idDependencia.

Empleados
Dependencias
Codigo Nombre FechaNac IdDependencia
Número Nombre
PK NN FK
PK NN
2345 Juan Perez
Jefe 02 RRHH
2347 Marta Rosas 19800203 02
Pedro 04 Mercadeo
2348 19851004
Páramo
Martina
2349 20000101
Hernández
MODELO ENTIDAD/RELACIÓN

Acá tienes una ayuda!


Piensa en colocarla en empleados como se muestra en la impágen. Fíjate que el espacio utilizado por esa nueva
columna en Empleados -idDependencia- ya que puede tener muchos valores en Nulo. En este ejemplo,
supongamos que Marta Rosas es la jefe de Recursos Humanos y que los otros empleados no son jefes de ninguna
despendencia ya que que en la actualidad no se ha designado el jefe de mercadeo. Eso lleva a que tenga sentido
que Juan Perez y Martina Hernández no tengan valor en la columna idDependencia. Haz una re exión similar si
tuvieras una columna adicional en Dependencias llamada idJefe que representa el jefe de dicha dependencia...
¿Donde debería estar entonces esa nueva columna?
Empleados
Dependencias
Codigo Nombre FechaNac IdDependencia
Número Nombre IdJefe
PK NN FK
PK NN FK
2345 Juan Perez
2347 Marta Rosas 19800203 02 02 RRHH 2347
Jefe

Pedro 04 Mercadeo
2348 19851004
Páramo
Martina
2349 20000101
Hernández
MODELO ENTIDAD/RELACIÓN

Correcto. Fíjate que tienes una relación de 1 a 1 y en este caso la Dependencia manejaría el código
del empleado que es Jefe y si aún no lo tiene asignado esa columna no tendrá valor (Null).

Empleados
Codigo Nombre FechaNac Dependencias

PK NN Número Nombre IdJefe


2345 Juan Perez PK NN FK
Jefe 2347 Marta Rosas 19800203
02 RRHH 2347
2348 Pedro Páramo 19851004
04 Mercadeo
2349 Martina Hernández 20000101

También podría gustarte