Modelo relacional

Estructura. Filas. Columnas. Tablas. Atributos. Dominios. Tuplas. Claves. Consultas. Operaciones. SQL (Structured Query Language). DDL. Bases de Datos relacionales

  • Enviado por: Castañeda Sepúlveda
  • Idioma: castellano
  • País: Chile Chile
  • 30 páginas
publicidad
publicidad

MODELO RELACIONAL

MODELO RELACIONAL

Definido en 1970 por E.F. Codd.

Este modelo utiliza tablas para representar las entidades y relaciones existentes entre ellas.

Estructura del Modelo

La organización de las tablas se realiza de la siguiente manera

Columnas

Filas

Para que una tabla cumpla con los requisitos de la estructura relacional debe cumplir las siguientes condiciones:

  • Debe tener un solo tipo de filas dándole un formato que debe mantenerse durante todo su trabajo y con la misma cantidad de filas.

  • Cada fila debe ser única y no pueden existir filas duplicadas.

  • Cada columna debe ser única y no deben existir columnas duplicadas.

  • Cada columna debe ser definida con un nombre específico.

  • El valor de una columna para una fila debe ser único, no pueden existir múltiples valores en una posición de la columna.

  • Los valores de cada columna deben pertenecer al dominio que representan y este dominio puede utilizarce en varias columnas.

Las tablas que cumplan con esta condición se denominan Tablas Relacionales y este concepto se utiliza para definir que este tipo de tablas puede asociarse a otras que cumplan con la misma condición, además se le asocian las siguientes propiedades:

  • Las filas pueden estar en cualquier orden.

  • A una fila se la hace referencia mediante todos los valores que la forman.

  • Las columnas pueden estar en cualquier orden.

  • Se hace referencia a una columna mediante el nombre que la identifica.

Pero se utilizan otros términos para referirnos a las filas y columnas. Se conocerá como tuplas a cada una de las filas y atributos a cada una de las columnas.

Atributos

CODFRUTA

NOMFRUTA

PRECIO

Tuplas

123

Manzana

300

236

Peras

250

Se denomina Grado de una tabla relacional al número de atributos que la componen, G(frutas) = 3.

Se denomina Cardinalidad de una tabla relacional al número de tuplas que la conforman, C(frutas) = 2.

Dominios

Es el conjunto de los posibles valores para una o más columnas de la tabla relacional, luego los valores contenidos en una columna pertenecen a un dominio que previamente se define y para ello se distinguen dos tipos de dominios:

  • Dominios generales o continuos: Aquellos que contienen todos los posibles valores entre un máximo y un mínimo predefinido:

Peso de un material : números reales y positivos

Saldo de cuantas : números reales negativos y positivos.

Fechas de nacimiento : todas aquellas desde que se tiene noción hasta hoy.

  • Dominios restringidos o discretos: Aquellos que contiene ciertos valores entre un máximo y un mínimo predefinido:

Estado civil : Casado, soltero, viudo, anulado.

Regiones de Chile : 13 regiones.

Sexo : Femenino , masculino.

Claves

Para accesar la información en las tablas relacionales se debe elegir una clave que distinga a una tupla en particular.

La clave se forma tomando un atributo o un conjunto de ellos.

Como condición de que exista una tabla relacional no pueden existir filas duplicadas lo que implica que siempre debe existir al menos una clave (en el peor de los casos estará formada por varios atributos).

Para encontrar la clave adecuada se deben buscar en los dominios de los atributos junto con los enlaces conceptuales que existen entre ellos de manera tal de encontrar valores determinados que identifiquen la tupla de la tabla.

No se debe buscar la clave en los valores concretos de las tuplas sino que en todos los posibles valores de los atributos, es decir su dominio.

Ejemplo:

Sea la siguiente tabla para el personal de una empresa

“PERSONAL”

IDENTIFI

NOMBRE

DIRECCION

TELEFONO

493

Pedro

Gomez Carreño 1380

441327

181

Luis

Pedro Prado 2903

441850

830

María

Amunátegui 3020

410029

341

Ana

Manuel Rodríguez 1727

415674

679

Juan

Sargento Aldea 1584

384566

911

Pilar

Vivar 1211

412369

Se observa que el atributo IDENTIFI es el que engloba de mejor manera a la tabla “PERSONAL” ya que cualquier valor del dominio de dicho atributo identifica a una única tupla, luego no puede aparecer un mismo valor de IDENTIFI en dos tuplas diferentes, por lo tanto IDENTIFI pasa a ser la clave de esta tabla.

Supongamos que el personal puede utilizar automóviles que pertenecen a la empresa y los datos de dichos automóviles se encuentran en la tabla denominada “AUTOS-PERSONAL”.

“AUTOS-PERSONAL”

IDENTIFI

MATRICULA

MARCA

MODELO

COLOR

KM

723

KZ-1264

Ford

Fiesta

Blanco

579

181

LS-3490

Opel

Corsa

Blanco

3991

524

AA-2020

Opel

Corsa

Negro

86754

524

CD-2478

BMW

318

Azul

38805

181

AA-1635

Renault

R-21

Negro

64483

911

AA-2411

Opel

Corsa

Negro

48805

308

AA-2020

Opel

Corsa

Negro

86754

En esta tabla se representan los diferentes autos que puede utilizar un empleado determinado, el auto se identifica por el número de matrícula, que podría ser la clave para esta tabla, pero el auto puede ser utilizado por distintos empleados en distintos momentos, por lo tanto el número de matrícula no podría ser una clave única (debe existir una clave tal que se relacionen ambas tablas).

Tampoco sirve la MARCA, el MODELO o el COLOR del automóvil, tampoco los KM pues estos varían siempre.

Luego la clave no tiene más remedio que ser compuesta, es decir una combinación entre MATRICULA e IDENTIFI. Se sabe que en la tabla “PERSONAL” los valores de las tuplas no se repiten, es decir no existen dos personas con los mismos atributos

(Recordar claves candidatas, clave primaria o principal, clave ajena).

Para elegir la clave principal nos debemos basar en el dominio, ya que luego la B.D. utilizará las claves principales para acceder y relacionar a todas las tablas. Se deben tener en cuenta las siguientes consideraciones para saber si la clave escogida es la correcta:

  • Sus valores deben ser diferentes de nulos.

  • La cantidad de memoria que ocupen debe ser mínima.

  • Debe de ser fácil su codificación.

  • El contenido de sus valores no debe variar.

  • Se pueden utilizar como claves ajenas en otras tablas para permitir la interrelación.

Las claves se utilizan para más adelante definir índices sobre ellas (formas de acceso, donde los índices primarios están formados por las claves principales y los índices secundarios formados por las claves secundarias).

Se da el caso que en algún momento se necesita acceder a la información o tenerla agrupada mediante atributos que no son claves se generan índices secundarios múltiples ya que los atributos que lo forman no son claves y sus valores se repiten dentro de la tabla índice.

Las claves ajenas son muy importantes ya que la integridad da la B.D. se mantiene en gran parte mediante las transacciones que se realizan con dichas claves

ALGEBRA Y CÁLCULO RELACIONAL

Las operaciones definidas sobre las tablas están basadas en el álgebra relacional. Cada operación tomará como operandos una o varias tablas y como resultado se genera otra tabla la que puede volverse a utilizar para otras operaciones.

Se distinguirán dos tipos de operaciones: “básicas”, independientes del resto de las operaciones y “derivadas”, realizan en un proceso llamadas a las operaciones básicas.

Entre las operaciones básicas se distinguen las que las que utilizan una sola tabla de entrada para obtener resultados, operaciones unarias; existen también las que utilizan dos tablas como entradas, operaciones binarias.

Operaciones Básicas:

Operaciones Unarias:

  • Selección

  • Proyección

Operaciones Binarias:

  • Unión

  • Producto cartesiano

  • Diferencia

Operaciones Derivadas:

  • Intersección

  • Cociente (división)

  • Join

Selección: Extrae las tuplas especificadas de una relación dada (es decir restringe la relación solo a las tuplas que satisfagan una condición dada). Utiliza el símbolo S.

Proyección: Extrae los atributos especificados de una relación dada (las columnas). Utiliza el símbolo P.

Unión: Construye una relación formada por todas las tuplas que aparecen en cualquiera de las dos relaciones especificadas. Utiliza el símbolo U.

Producto: O producto cartesiano, construye a partir de dos relaciones dadas una relación que contenga todas las combinaciones posibles de tuplas, una de cada una de las dos relaciones. Utiliza el símbolo x.

A

X

A

X

B

x

Y

A

Y

C

=

B

X

B

Y

C

X

C

y

Diferencia: Construye una relación con las tuplas de la primera relación que no aparezcan en la segunda relación. Utiliza el símbolo --.

Intersección: Construye una relación con aquellas tuplas que aparezcan en las dos relaciones especificadas. Utiliza el símbolo ".

Cociente: (División) Toma dos relaciones, una binaria una unaria y construye una relación formada por todos los valores de un atributo de la relación binaria que concuerdan (en el otro atributo) con todos los valores en una relación unaria. Utiliza el símbolo /.

A

X

X

A

A

Y

/

Y

A

Z

Z

=

B

X

C

Y

Join: (Reunión, Unión natural, Yunción) Construye a partir de dos relaciones especificadas una relación que contiene todas las posibles combinaciones de tuplas, una de cada una de las dos relaciones tales que las dos tuplas participantes en una combinación dada satisfagan alguna condición especificada. Utiliza el símbolo *.

A1

B1

B1

C1

A1

B1

C1

A2

B2

*

B2

C2

=

A2

B2

C2

A3

B3

B3

C3

A3

B3

C3

LENGUAJE DE CONSULTAS COMERCIALES

En 1981 IBM comercializó el SQL (Structured Query Language, Lenguaje de Consulta Estructurado) el que actualmente es ocupado en la mayoría de las bases de datos relacionales.

SQL es un lenguaje que utiliza el usuario para el manejo de las B.Ds. y puede darse de dos formas:

1.- Usando un lenguaje de programación (lenguaje anfitrión) como Fortran, C, C++, Visual, etc., donde las sentencias SQL están formando parte de las sentencias propias del programa anfitrión (embebida).

2.- Usando directamente el SQL través de programas de consultas como QMF, QBF, QMF, SPUFI.

Además se puede decir que SQL está formado por dos sublenguajes:

  • El DDL encargado de permitir la descripción de los objetos que conforman la B.D.

  • El DML capaz de suministrar las operaciones necesarias para manejar los datos (modificaciones, consultas, eliminación, inserción).

El formato de las sentencias SQL es libre, no sigue ninguna regla de tabulación y se puede escribir en cualquier número de líneas y en cualquier parte de ellas. Para separar una sentencia SQL de otra se utiliza, comúnmente, el carácter “ ; ” (su utilización no es obligatoria en el caso de ejecutar una única sentencia).

Para trabajar con las sentencias SQL se tendrán en cuenta ejemplos que se basarán en las tablas VUELOS, AVIONES y RESERVAS.

VUELOS

NUM_VUELO

ORIGEN

DESTINO

HORA_SALIDA

TIPO_AVION

IB600

MADRID

LONDRES

10.30.00

320

BA467

MADRID

LONDRES

20.40.00

73S

IB0640

MADRID

BARCELONA

06.45.00

320

IB3742

MADRID

BARCELONA

09.15.00

72S

LH1349

COPENHAGUE

FRANCFORT

10.20.00

320

AF577

BILBAO

PARIS

10.10.00

737

IB3709

DUBLIN

BARCELONA

14.35.00

D9S

IB778

BARCELONA

ROMA

09.45.00

72S

IB721

BARCELONA

SEVILLA

16.40.00

72S

IB327

MADRID

SEVILLA

18.05.00

72S

IB023

MADRID

TENERIFE

21.20.00

72S

IB368

MALAGA

BARCELONA

22.25.00

D9S

IB610

MALAGA

LONDRES

15.05.00

73S

IB510

SEVILLA

MADRID

07.45.00

72S

IB318

SEVILLA

MADRID

10.45.00

72S

RESERVAS

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

IB600I

2000-06-20

46

IB600I

2000-06-21

80

IB600I

2000-06-22

91

BA467

2000-06-20

32

BA467

2000-06-21

49

BA467

2000-06-22

79

IB0640

2000-06-20

15

IB0640

2000-06-21

21

IB0640

2000-06-22

39

IB3709

2000-06-20

60

IB3709

2000-06-21

72

IB3709

2000-06-22

85

IB510

2000-06-20

19

IB510

2000-06-21

31

IB510

2000-06-22

40

AVIONES

TIPO

CAPACIDAD

LONGITUD

ENVERGADURA

VELOCIDAD CRUCERO

D9S

110

38,80

28,50

815,0

320

187

42,15

32,60

853,0

72S

160

36,20

25,20

820,0

73S

185

44,10

30,35

815,0

737

172

38,90

29,00

793,0

LENGUAJE DE DEFINICIÓN DE DATOS (DDL)

  • Creación de base de datos (también la abre):

CREATE DATABASE [Nombre B.D]

Ejemplo:

CREATE DATABASE AEROPUERTO

  • Creación de tablas:

CREATE TABLE | DBF [Nombre tabla]

(NombreCampo TipoCampo…. )

[NULL | NOT NULL]

[CHECK | ERROR]

[DEFAULT]

[PRIMARY KEY | UNIQUE]

.

.

Ejemplo:

CREATE TABLE VUELOS

(NUM_VUELO CHAR(6) NOT NULL

ORIGEN CHAR(15) NOT NULL

DESTINO CHAR(15) NOT NULL

HORA_SALIDA TIME NOT NULL

TIPO_AVION CHAR(3) );

LENGUAJE DE MANIPULACIÓN DE DATOS (DML)

Sintaxis genérica

SELECT …..

FROM …..

[WHERE …..]

[GROUP BY ……]

[HAVING …….]

[ORDER BY …..]

……..

  • Selección de todas las columnas:

SELECT *

FROM AVIONES;

Ejemplo

AVIONES

TIPO

CAPACIDAD

LONGITUD

ENVERGADURA

VELOCIDAD CRUCERO

D9S

110

38,80

28,50

815,0

320

187

42,15

32,60

853,0

72S

160

36,20

25,20

820,0

73S

185

44,10

30,35

815,0

737

172

38,90

29,00

793,0

  • Selección de una columna específica:

SELECT FECHA_SALIDA

FROM RESERVAS;

Ejemplo

FECHA_SALIDA

2000-06-20

2000-06-21

2000-06-22

2000-06-20

2000-06-21

2000-06-22

2000-06-20

2000-06-21

2000-06-22

2000-06-20

2000-06-21

2000-06-22

2000-06-20

2000-06-21

2000-06-22

  • Selección de múltiples columnas:

SELECT NUM_VUELO, ORIGEN, DESTINO

FROM VUELOS;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

IB600

MADRID

LONDRES

BA467

MADRID

LONDRES

IB0640

MADRID

BARCELONA

IB3742

MADRID

BARCELONA

LH1349

COPENHAGUE

FRANCFORT

AF577

BILBAO

PARIS

IB3709

DUBLIN

BARCELONA

IB778

BARCELONA

ROMA

IB721

BARCELONA

SEVILLA

IB327

MADRID

SEVILLA

IB023

MADRID

TENERIFE

IB368

MALAGA

BARCELONA

IB610

MALAGA

LONDRES

IB510

SEVILLA

MADRID

IB318

SEVILLA

MADRID

  • Reordenamiento de las columnas durante la selección:

SELECT TIPO, ENVERGADURA, LONGITUD

FROM AVIONES;

Ejemplo

TIPO

ENVERGADURA

LONGITUD

D9S

28,50

38,80

320

32,60

42,15

72S

25,20

36,20

73S

30,35

44,10

737

29,00

38,90

SELECT LONGITUD, TIPO, ENVERGADURA

FROM AVIONES;

Ejemplo

LONGITUD

TIPO

ENVERGADURA

38,80

D9S

28,50

42,15

320

32,60

36,20

72S

25,20

44,10

73S

30,35

38,90

737

29,00

Luego, el orden de selección determina el orden del despliegue.

  • Selección de filas:

Si no se especifica la cláusula WHERE se mostrarán todas las filas.

SELECT DESTINO

FROM VUELOS;

Ejemplo

DESTINO

LONDRES

LONDRES

BARCELONA

BARCELONA

FRANCFORT

PARIS

BARCELONA

ROMA

SEVILLA

SEVILLA

TENERIFE

BARCELONA

LONDRES

MADRID

MADRID

Si se especifica la cláusula WHERE sólo se mostrarán las filas indicadas

SELECT DESTINO

FROM VUELOS

WHERE ORIGEN = “MADRID”;

Ejemplo

DESTINO

LONDRES

LONDRES

BARCELONA

BARCELONA

SEVILLA

TENERIFE

SELECT ORIGEN,DESTINO,HORA_SALIDA

FROM VUELOS

WHERE NUM_VUELO = IB721;

Ejemplo

BARCELONA, SEVILLA, 16.40.00

  • Ordenamiento de filas:

Como se explicó anteriormente las filas en el modelo relacional no tienen un orden particular.

Un orden predeterminado en SQL es ascendente (A a Z, 0 a 9), entonces si se desea otro orden se debe utilizar el comando ORDER BY el cual es el único que asegura que las filas serán desplegadas de acuerdo a especificaciones dadas por el usuario.

SELECT NUM_VUELO

FROM VUELOS

ORDER BY NUM_VUELO;

Ejemplo

Atributos de NUM_VUELO antes del orden

NUM_VUELO

IB600

BA467

IB0640

IB3742

LH1349

AF577

IB3709

IB778

IB721

IB327

IB023

IB368

IB610

IB510

IB318

Atributos de NUM_VUELO después del orden

NUM_VUELO

AF577

BA467

IB023

IB0640

IB318

IB327

IB368

IB3709

IB3742

IB510

IB600

IB610

IB721

IB778

LH1349

Para ordenar en sentido descendente (de Z a A y de 9 a 0), se debe agregar la palabra reservada DESC al final de cada campo por el que se desea ordenar en sentido descendente.

SELECT NUM_VUELO

FROM VUELO

ORDER BY NUM_VUELO DESC;

Ejemplo

Atributos de NUM_VUELO antes del orden descendente

NUM_VUELO

IB600

BA467

IB0640

IB3742

LH1349

AF577

IB3709

IB778

IB721

IB327

IB023

IB368

IB610

IB510

IB318

Atributos de NUM_VUELO después del orden descendente

NUM_VUELO

LH1349

IB778

IB721

IB610

IB600

IB510

IB3742

IB3709

IB368

IB327

IB318

IB0640

IB023

BA467

AF577

  • Ordenamiento de filas para criterios múltiples:

Cuando se ordena utilizando criterios múltiples se siguen ciertos criterios para llevar un orden adecuado y sin enredarse al momento de utilizar los comandos de SQL.

Se denomina orden primar al elemento colocado en primer lugar, luego de la sentencia ORDER BY el cual puede llevar o no las sentencias DESC o ASC según se requiera. Luego viene el elemento de orden secundario, terciario, etc.

SELECT *

FROM VUELOS

ORDER BY NUM_VUELO DESC, ORIGEN;

NUM_VUELO

ORIGEN

DESTINO

HORA_SALIDA

TIPO_AVION

LH1349

COPENHAGUE

FRANCFORT

10.20.00

320

IB778

BARCELONA

ROMA

09.45.00

72S

IB721

BARCELONA

SEVILLA

16.40.00

72S

IB610

MALAGA

LONDRES

15.05.00

73S

IB600

MADRID

LONDRES

10.30.00

320

IB510

SEVILLA

MADRID

07.45.00

72S

IB3742

MADRID

BARCELONA

09.15.00

72S

IB3709

DUBLIN

BARCELONA

14.35.00

D9S

IB368

MALAGA

BARCELONA

22.25.00

D9S

IB327

MADRID

SEVILLA

18.05.00

72S

IB318

SEVILLA

MADRID

10.45.00

72S

IB0640

MADRID

BARCELONA

06.45.00

320

IB023

MADRID

TENERIFE

21.20.00

72S

BA467

MADRID

LONDRES

20.40.00

73S

AF577

BILBAO

PARIS

10.10.00

737

OPERADORES LÓGICOS EN LA SELECCIÓN DE REGISTROS

  • Igual a, = :

SELECT ORIGEN,DESTINO,HORA_SALIDA

FROM VUELOS

WHERE NUM_VUELO = “IB721”;

Ejemplo

BARCELONA, SEVILLA, 16.40.00

  • Distinto a, != (<>) :

SELECT NUM_VUELO, DESTINO,HORA_SALIDA

FROM VUELOS

WHERE ORIGEN != “MADRID”;

Ejemplo

NUM_VUELO

DESTINO

HORA_SALIDA

LH1349

FRANCFORT

10.20.00

AF577

PARIS

10.10.00

IB3709

BARCELONA

14.35.00

IB778

ROMA

09.45.00

IB721

SEVILLA

16.40.00

IB368

BARCELONA

22.25.00

IB610

LONDRES

15.05.00

IB510

MADRID

07.45.00

IB318

MADRID

10.45.00

  • Mayor que, > :

SELECT TIPO, CAPACIDAD

FROM AVIONES

WHERE VELOCIDAD CRUCERO > 820;

Ejemplo

TIPO

CAPACIDAD

320

187

737

172

  • Mayor e igual que, >= :

SELECT TIPO, CAPACIDAD

FROM AVIONES

WHERE VELOCIDAD CRUCERO > 820;

TIPO

CAPACIDAD

320

187

72S

160

737

172

  • Menor que (<) y Menor e igual que (<=) se ocupan de la misma manera.

  • Igual a cualquier miembro de la lista, IN :

El operador IN permite seleccionar las filas cuyos valores corresponden a los de una lista (utiliza el conectivo “or”).

SELECT *

FROM RESERVAS

WHERE NUM_VUELO IN (“IB600I”, “IB510”);

Ejemplo

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

IB600I

2000-06-20

46

IB600I

2000-06-21

80

IB600I

2000-06-22

91

IB510

2000-06-20

19

IB510

2000-06-21

31

IB510

2000-06-22

40

  • Rango de valores, BETWEEN….AND :

Permite seleccionar filas cuyos valores o atributos se encuentran en un rango determinado

SELECT *

FROM RESERVAS

WHERE PLAZAS_LIBRES BETWEEN 60 AND 86;

Ejemplo

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

IB600I

2000-06-21

80

BA467

2000-06-22

79

IB3709

2000-06-20

60

IB3709

2000-06-21

72

IB3709

2000-06-22

85

SELECT *

FROM RESERVAS

WHERE PLAZAS_LIBRES NOT BETWEEN 60 AND 86;

Ejemplo

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

IB600I

2000-06-20

46

IB600I

2000-06-22

91

BA467

2000-06-20

32

BA467

2000-06-21

49

IB0640

2000-06-20

15

IB0640

2000-06-21

21

IB0640

2000-06-22

39

IB510

2000-06-20

19

IB510

2000-06-21

31

IB510

2000-06-22

40

  • Uso de patrones de búsqueda, LIKE :

Se utiliza para buscar cadenas de caracteres.

Para utilizar este operador se necesitan otros que ayudan a realizar las operaciones:

% se utiliza para cadenas de caracteres (cero o más), _ se utiliza para cadenas de un carácter (guión bajo).

SELECT NUM_VUELO, ORIGEN, DESTINO

FROM VUELOS

WHERE ORIGEN LIKE “C%”;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

LH1349

COPENHAGUE

FRANCFORT

SELECT NUM_VUELO, ORIGEN, DESTINO

FROM VUELOS

WHERE DESTINO LIKE “P____”;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

AF577

BILBAO

PARIS

SELECT NUM_VUELO, ORIGEN, DESTINO

FROM VUELOS

WHERE ORIGEN NOT LIKE “MA%”;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

LH1349

COPENHAGUE

FRANCFORT

AF577

BILBAO

PARIS

IB3709

DUBLIN

BARCELONA

IB778

BARCELONA

ROMA

IB721

BARCELONA

SEVILLA

IB510

SEVILLA

MADRID

IB318

SEVILLA

MADRID

  • Valores nulos, IS NULL :

Se debe tener en cuenta que un valor NULL es distinto de cero o blanco.

SELECT *

FROM VUELOS

WHERE NUM_VUELO IS NULL;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

HORA_SALIDA

TIPO_AVION

SELECT *

FROM VUELOS

WHERE NUM_VUELO IS NOT NULL;

Ejemplo

NUM_VUELO

ORIGEN

DESTINO

HORA_SALIDA

TIPO_AVION

IB600

MADRID

LONDRES

10.30.00

320

BA467

MADRID

LONDRES

20.40.00

73S

IB0640

MADRID

BARCELONA

06.45.00

320

IB3742

MADRID

BARCELONA

09.15.00

72S

LH1349

COPENHAGUE

FRANCFORT

10.20.00

320

AF577

BILBAO

PARIS

10.10.00

737

IB3709

DUBLIN

BARCELONA

14.35.00

D9S

IB778

BARCELONA

ROMA

09.45.00

72S

IB721

BARCELONA

SEVILLA

16.40.00

72S

IB327

MADRID

SEVILLA

18.05.00

72S

IB023

MADRID

TENERIFE

21.20.00

72S

IB368

MALAGA

BARCELONA

22.25.00

D9S

IB610

MALAGA

LONDRES

15.05.00

73S

IB510

SEVILLA

MADRID

07.45.00

72S

IB318

SEVILLA

MADRID

10.45.00

72S

  • Inversión de valores, NOT :

Como se ha demostrado anteriormente el operador NOT invierte el valor de alguno de l.os operadores anteriores, NOT BETWEEN, NOT LIKE, IS NOT NULL.

CONDICIONES MÚLTIPLES

Existe la posibilidad de ordenar todas estas condiciones (y las que vendrán más adelante) en una misma sentencia ocupando los paréntesis y operadores como AND y OR.

Lo que se debe tener en cuenta es la precedencia de ellos y respetar por lo tanto dichas normas.

SELECT *

FROM RESERVAS

WHERE NUM_VUELO = “IB0640”

AND FECHA_SALIDA BETWEEN “2000-06-21” AND “2000-06-22”;

Ejemplo

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

IB0640

2000-06-21

21

IB0640

2000-06-22

39

SELECT *

FROM RESERVAS

WHERE NUM_VUELO = “IB0641”

OR FECHA_SALIDA = “2000-06-21”

AND PLAZAS_LIBRES < 50;

NUM_VUELO = “IB0641” OR FECHA_SALIDA = “2000-06-21” AND PLAZAS_LIBRES < 50;

Ejemplo

NUM_VUELO

FECHA_SALIDA

PLAZAS_LIBRES

BA467

2000-06-21

49

IB0640

2000-06-21

21

IB510

2000-06-21

31

EXPRESIONES NUMÉRICAS

En SQL se pueden usar operadores aritméticos los que permiten realizar cálculos numéricos, éstos son: add (+), substract (-), multiply (*) y divide (/).

Al igual que en matemáticas, estas operaciones tienen un orden de precedencia:

División 1er orden

Multiplicación

Adición 2do orden.

Sustracción

Si se tienen operaciones del mismo orden juntas se comienza por la que está más a la izquierda.

Los paréntesis rompen la precedencia y ellos mismos se pueden utilizar para controlar el orden de evaluación, luego no es lo mismo

12 * (SALARIO + PRECIO) != 12 * SALARIO + PRECIO

Se utilizará la siguiente tabla para entregar los ejemplos

MEDIDAS

PAQUETE

ANCHO

ALTURA

LARGO

PESO

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3459

15

15

22

18

A3460

10

10

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

SELECT PAQUETE, PESO

FROM MEDIDAS

WHERE (ANCHO * ALTURA) > “143”;

Ejemplo

A3457 10

A3458 20

A3459 18

A3460 40

A3461 22

SELECT PAQUETE, PESO, ANCHO*ALTURA*LARGO “Volumen = ”

FROM MEDIDAS

WHERE ANCHO > “14”;

Ejemplo

A3458 20 Volumen = 6800

A3459 18 Volumen = 4950

A3460 40 Volumen = 4000

A3461 22 Volumen = 6800

FUNCIONES

Se pueden utilizar diversas funciones en las expresiones SQL, siendo las más importantes: COUNT, MIN, MAX, AVG y SUM.

  • COUNT

Permite obtener la cantidad total de atributos que cumplen con una cierta condición.

Si existe un valor NULL en alguna columna esta función opera de dos formas, si se ocupa COUNT (*) la función cuenta los elementos con valor NULL, en otros casos no los toma en cuenta COUNT(ALTURA).

En el caso de que se encuentre con argumentos vacíos, la función devuelve un valor nulo.

SELECT COUNT(*)

FROM MEDIDAS;

Ejemplo

8

SELECT COUNT(*)

FROM MEDIDAS

WHERE ALTURA > “12”;

Ejemplo

4

SELECT COUNT(PESO)

FROM MEDIDAS

WHERE PESO = “20”;

Ejemplo

1

  • MIN

Permite obtener el valor más pequeño de un atributo.

SELECT MIN(PESO)

FROM MEDIDAS;

Ejemplo

4

  • MAX

Permite obtener el valor más grande de un atributo.

SELECT MAX(PESO)

FROM MEDIDAS;

Ejemplo

40

  • AVG

Permite obtener el promedio de los valor de un atributo. En este caso los atributos deben ser numéricos.

SELECT AVG(PESO)

FROM MEDIDAS;

Ejemplo

22,375

  • SUM

Permite obtener la suma de los atributos de una columna. En este caso los atributos deben ser numéricos.

SELECT SUM(PESO)

FROM MEDIDAS;

Ejemplo

179

Para utilizar las funciones SUM, AVG y COUNT es preferible utilizar la palabra reservada DISTINCT la cual permitirá, cuando se desee, sumar o contar los elementos de la tabla sin que se produzcan repeticiones, sobretodo cuando se está sacando un promedio.

SELECT COUNT(DISTINCT ANCHO)

FROM MEDIDAS;

Ejemplo

6

OTRA FUNCIÓN IMPORTANTE

  • Alias de columnas

El encabezado de una columna que se despliega normalmente es el especificado por la tabla, pero es posible desplegar en pantalla un encabezado de columnas distinto especificando un Column Alias en la cláusula SELECT.

Para especificar un alias, debe dejarse un espacio en blanco después del nombre del atributo y después de éste escribir el alias que se eligió.

SELECT PESO MASA

FROM MEDIDAS

WHERE LARGO > 28;

Ejemplo

MASA

40

30

35

OPERACIONES DE ACTUALIZACIÓN

SQL incluye tres operaciones de actualización UPDATE (actualización en el sentido de alterar o modificar), DELETE (eliminar) e INSERT (insertar elementos).

  • UPDATE (Actualizar).

Todos los registros de la tabla serán modificados o actualizados.

UPDATE tabla

SET campo = expresión

[campo = expresión]

[WHERE condición];

Modificación de un solo registro:

UPDATE MEDIDAS

SET ANCHO = “25”

ALTURA = “25”

WHERE PESO = “40”;

Ejemplo

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3459

15

15

22

18

A3460

25

25

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

Modificar varios registros:

UPDATE MEDIDAS

SET LARGO * 2;

Ejemplo

A3456

4

3

52

4

A3457

12

12

40

10

A3458

10

20

68

20

A3459

15

15

44

18

A3460

10

10

80

40

A3461

10

20

68

22

A3462

5

10

30

30

A3463

8

14

88

35

Se debe tener mucho cuidado al modificar los datos de las tablas, pues se debe estar seguro de lo que se realiza, ya que la información se pierde a medida que se modifican los datos.

Existe la posibilidad de trabajar actualizando varias tablas a la vez, si estas tablas están relacionadas con otras se debe tener en cuenta si la modificación afecta o no las tablas relacionadas con la modificada, sí así ocurre se deberán, tal vez, modificar todas las tablas en cuestión.

UPDATE VUELOS

SET NUM_VUELO = “IB0647”

WHERE NUM_VUELO = “IB0640”

UPDATE RESERVAS

SET NUM_VUELO = “IB0647”

WHERE NUM_VUELO = “IB0640”;

  • DELETE (Eliminar)

DELETE

FROM tabla

[ WHERE condición];

Eliminación de un solo registro:

DELETE

FROM MEDIDAS

WHERE PAQUETE = “A3459”;

Ejemplo

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3460

10

10

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

Eliminar varios registros:

DELETE

FROM MEDIDAS

WHERE LARGO > “30”;

Ejemplo

A3456

4

3

26

4

A3457

12

12

20

10

A3459

15

15

22

18

A3462

5

10

15

30

Eliminar toda la tabla:

DELETE

FROM MEDIDAS;

Esto no quiere decir que desaparece la tabla, sino que desaparecen los datos de la tabla

Ejemplo

De la misma forma que la sentencia UPDATE, la sentencia DELETE modifica los datos en forma irreparable por lo que se debe tener mucho cuidado al eliminar datos, tuplas, etc.

  • INSERT (Insertar)

INSERT

INTO tabla [ ( campo [ , campo ] …. ) ]

VALUES ( literal [ , literal ] …. );

Inserción de un solo registro:

INSERT

INTO MEDIDAS ( PAQUETE, ANCHO, ALTURA, LARGO, PESO)

VALUES (“A3455”, “12”, “14”, “23”, “30” );

Ejemplo

A3455

12

14

23

30

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3459

15

15

22

18

A3460

10

10

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

En este caso se ingresan valores en todos los campos, si se sabe que esto siempre será así se puede reducir la sentencia a

INSERT

INTO MEDIDAS (“A3455”, “12”, “14”, “23”, “30” );

Para insertar registros la tabla debe estar creada de antemano (de lo contrario se produce un error).

El valor a insertar debe hacerlo en un lugar específico. El dominio debe ser igual ya sea para el dato a insertar y el campo donde se insertará.

Inserción de datos NULL:

INSERT

INTO MEDIDAS (“A3455”, “10”, “10”, “12”, NULL);

Ejemplo

A3455

10

10

12

NULL

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3459

15

15

22

18

A3460

10

10

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

Si no se incluye un atributo (columna) en la cláusula INSERT el valor asumido por defecto para ese atributo es NULL.

Si al crear la tabla se indicó que un atributo tiene un dominio NOT NULL, ese atributo no puede recibir un valor NULL mediante la sentencia VALUES de INSERT.

INSERT

INTO MEDIDAS ( PAQUETE, ALTURA, LARGO)

VALUES (“A3464”, “18”, “17”,);

Ejemplo

A3456

4

3

26

4

A3457

12

12

20

10

A3458

10

20

34

20

A3459

15

15

22

18

A3460

10

10

40

40

A3461

10

20

34

22

A3462

5

10

15

30

A3463

8

14

44

35

A3464

NULL

18

17

NULL

GUÍA DE EJERCICIO

PERSONAL

CLAVE

APELLIDO

NOMBRE

EDAD

SEXO

PROFESIÓN

123

PEREZ

CARLOS

27

M

PROFESOR

124

PORTALES

MARÍA

19

F

DOCTOR

125

ALFARO

CECILIA

35

F

CONTADOR

122

COLLAO

JUAN

27

M

DOCTOR

119

FLORES

EDUARDO

45

M

INGENIERO

180

PINTO

JOSÉ

33

M

PROFESOR

100

VERA

MIRIAM

28

F

CONTADOR

126

OLIVARES

JAVIER

43

M

INGENIERO

101

PINTO

JORGE

29

M

ABOGADO

111

PALLARÉ

PATRICIA

32

F

PROFESOR

  • Ordenar la tabla por apellido en forma ascendente y descendente.

  • Seleccionar sólo al personal femenino.

  • Seleccione las tuplas donde la profesión no sea contador.

  • Seleccionar las tuplas donde la clave se encuentre entre 119 y 130.

  • Busque las tuplas donde el apellido comience con la letra P.

  • Ubique el nombre de los empleados que tengan edades entre 25 y 35 años.

  • Inserte una tupla con los datos: 176, Espejo, Paulina, 29, F.

  • Elimine las tuplas con profesión abogado.

  • Modifique las tuplas que contengan apellidos que comiencen con la letra C y coloque en su lugar su apellido.

  • NORMALIZACIÓN DE LAS BASES DE DATOS RELACIONALES

    La normalización es uno de los elementos más importantes del trabajo que se bebe realizar para crear y utilizar las B.Ds. Como se explicó anteriormente, el hecho de que durante el uso de los sistemas tradicionales comenzaran a aparecer problemas de rendimiento de las B.Ds. llevó a los ingenieros informáticos a crear diferentes formas de accesar información de una manera ordenada, segura y con un fácil acceso, pero para poder realizar todo esto los datos insertos en la B.Ds. debían estar ordenados por lo que se tuvo que crear un método que permitiera esto, es aquí que nace la NORMALIZACIÓN.

    Definición: La normalización es el proceso de transformación de las complejas representaciones de los usuarios y de los almacenamientos de datos, en conjuntos estables de menor tamaño, sencillos, confiables y fáciles de mantener.

    Historia: Este proceso fue creado por E.F. Codd en 1970 (quien también es el creado de las B.D.s relacionales). Al principio sólo experimentaba tres formas normales, Primera Forma Normal (1F.N.), Segunda Forma Normal (2 F.N.) y Tercera Forma Normal (3 F.N.).

    Con el paso de los años estas tres formas comenzaron a tener algunos problemas, debido a la gran cantidad de datos existentes, por lo que se tuvo que refinar la 3 F.N. dando origen a la Forma Normal de Boyce y Codd (F.N.B.C [en inglés B.C.N.F.]). Posteriormente Fagin definió la Cuarta Forma Normal (4 F.N.) y la Quinta Forma Normal (5 F.N.).

    Se estimó que en el caso de llegar a utilizar la Quinta Forma Normal, luego de aplicarla la tabla ya estaría lista para ser usada.

    PRESENTACIONES DEL USUARIO

    Informes

    Relaciones sin estructura definida

    RELACIONES NO NORMALIZADAS

    Paso 1: Eliminar grupos repetidos

    RELACIONES NORMALIZADAS

    Paso 2: Eliminar dependencias parciales

    RELACIONES EN 2° FORMA NORMAL

    Paso 3: Eliminar dependencias transitivas

    RELACIONES EN 3° FORMA NORMAL

    Ejemplo

    Se tiene el siguiente documento

    Compañía de Equipos Hidráulicos Mirmidón

    Vendedor # : 3462

    Nombre : Waters

    Área de ventas : Occidente

    N° CLIENTE

    NOMBRE CLIENTE

    N° ALMACEN

    DIRECCIÓN ALMACEN

    VENTAS

    18765

    Delta Service

    4

    Fargo

    13540

    18830

    Clery and Soto

    3

    Bismasseles

    10600

    :

    :

    :

    :

    :

    De acuerdo a este documento podemos observar algunas asociaciones (luego se podrían pasar a un modelo de entidad y relación):

    Se tiene la siguiente tabla (sin normalizar):

    NÚMERO VENDEDOR

    NOMBRE VENDEDOR

    ÁREA VENTAS

    NÚMERO CLIENTE

    NOMBRE CLIENTE

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    VALOR VENTA

    3462

    Waters

    OCCIDENTE

    18765

    Delta Systems

    4

    Fargo

    13540

    3462

    Waters

    OCCIDENTE

    18830

    A Levy and S

    3

    Bismarels

    10600

    3462

    Waters

    OCCIDENTE

    19242

    Raniers Comp

    3

    Bismarels

    9700

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    3593

    Dryne

    ORIENTE

    18841

    RW Flood

    2

    Superior

    11560

    3593

    Dryne

    ORIENTE

    18899

    Seward Syst

    2

    Superior

    2590

    3593

    Dryne

    ORIENTE

    19565

    Stodols Inc

    1

    Plymauth

    8800

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    :

    Existen grupos repetitivos, por lo tanto no está normalizada por lo tanto la base de datos no es relacional, es una simple tabla.

    Utilizando las formas normales se tiene (como es un ejemplo se muestra parte del proceso final, para llegar a lo que se ve deben realizarse varios pasos).

    VENDEDOR-CLIENTE

    NÚMERO VENDEDOR

    NÚMERO CLIENTE

    NOMBRE CLIENTE

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    VALOR VENTAS

    VENTAS CUENTA-ALMACÉN

    NÚMERO VENDEDOR

    NÚMERO CLIENTE

    VALOR VENTAS

    NÚMERO CLIENTE

    NOMBRE CLIENTE

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    3462

    18765

    13540

    18765

    Delta System

    4

    Fargo

    3462

    18830

    10600

    18830

    A Levy and S

    3

    Bismarels

    3462

    19242

    9700

    19242

    Ranier Com

    3

    Bismarels

    3593

    18841

    11560

    18841

    RW Flood

    2

    Superior

    :

    :

    :

    18899

    Seward Syst

    2

    Superior

    :

    :

    :

    19565

    Stodols Inc

    1

    Plymauth

    :

    :

    :

    :

    :

    :

    :

    CLIENTE-ALMACÉN

    NÚMERO CLIENTE

    NOMBRE CLIENTE

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    CLIENTE ALMACÉN

    NÚMERO CLIENTE

    NOMBRE CLIENTE

    NÚMERO ALMACÉN

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    18765

    Delta System

    4

    1

    Plymauth

    18830

    A Levy and S

    3

    2

    Superior

    19242

    Ranier Com

    3

    3

    Bismarels

    18841

    RW Flood

    2

    4

    Fargo

    18899

    Seward Syst

    2

    19565

    Stodols Inc

    1

    :

    :

    :

    El objetivo de la normalización es obtener el mayor número posible de tablas, pero dejando en cada una de ellas los atributos que se necesitan para representar al objeto (entidad) y la relación entre las entidades a la que se refiere la tabla utilizando las claves.

    Ventajas que se obtienen por el uso de la normalización:

    • Facilidad al usarla, ya que al estar los datos en tablas se identifican claramente los objetos y relaciones.

    • Flexibilidad, pues la información que necesita el usuario se obtienen de las tablas o mediante el uso del álgebra relacional (unión, proyección, selección, etc.) .

    • Poca redundancia, ya que la información no se duplica (aunque existen casos especiales).

    • Precisión, ya que se consigue la información correcta mediante la relación de las tablas.

    • Máximo rendimiento, se ocupa la información que sirve para la aplicación.

    • Fácil de implementar, las tablas se almacenan físicamente como archivos planos.

    • Independencia de datos, lo que permite agregar atributos o tablas sin que se afecte la B.Ds.

    • Claridad, ya que la representación de la información es sumamente clara y sencilla para el usuario.

    Este proceso, el de normalización, lo debe realizar el analista de sistemas luego de enterarse de todo lo que requiera el usuario; esta información la recolecta mediante varias reuniones con el usuario, interiorizarse de la situación de su entorno y todo ésto debe recopilarse y documentarse.

    PRIMERA FORMA NORMAL (1 F.N)

    Una tabla se encuentra normalizada en 1F.N. si los valores que componen el atributo de una tupla son atómicos, esto quiere decir que no deben aparecer valores repetidos.

    Ejemplo

    Si observamos la siguiente tabla, ésta no se encuentra en 1F.N. ya que el atributo MEDIDAS tiene varios valores en una misma tupla:

    MATERIALES

    COD_MAT

    DESCRIPCION

    MEDIDAS

    039

    Tornillo

    3,5 - 5 - 7

    067

    Arandela

    2 - 5

    461

    Broca

    2,5 - 3 - 3,5

    Este es un problema típico lo que trae consigo varios problemas:

    • Falta de espacio en el campo para los valores que tienen o el desaprovechamiento del espacio cuando algunos campos tienen pocos valores.

    • Se hace más difícil las actualizaciones (MIE o MIB, modificar-insertar-eliminar (borrar)).

    Entonces se procede a normalizar de la siguiente manera:

  • Se localizan los atributos que conforman la clave principal, para el ejemplo COD_MAT.

  • Se descompone la tabla utilizando la PROYECCIÓN.

  • La clave con los atributos que contiene valores únicos se dejan en una tabla más pequeña continuando con el nombre inicial

    MATERIALES

    COD_MAT

    DESCRIPCION

    039

    Tornillo

    067

    Arandela

    461

    Broca

    Se crea otra tabla con la clave y los atributos que tienen valores múltiples y esta tabla debe llevar un nombre distinto a la tabla anterior.

    MATER_MEDIDA

    COD_MAT

    MEDIDAS

    039

    3,5

    039

    5

    039

    7

    067

    2

    067

    5

    461

    2,5

    461

    3

    461

    3,5

    Si deseamos ser aún más minuciosos podemos descomponer aún más esta tabla para acceder a una medida determinada y que cada medida tenga su propia clave:

    TAB_MEDIDA

    COD_MED

    MEDIDAS

    01

    3,5

    02

    5

    03

    7

    04

    2

    05

    2,5

    06

    3

    y MATER_MEDIDA quedaría

    MATER_MEDIDA

    COD_MAT

    COD_MED

    039

    01

    039

    02

    039

    03

    067

    04

    067

    02

    461

    05

    461

    06

    461

    01

    Luego conociendo la clave COD_MAT y COD_MED se puede conocer el tipo de material y la medida que tiene.

    CONCEPTO DE DEPENDENCIA FUNCIONAL

    Se dice que un atributo (o conjunto de atributos) DEPENDE FUNCIONALMENTE de otro atributo (o conjunto de atributos) si y sólo si cada valor del segundo atributo se corresponde., a nivel conceptual, con un único valor del primer atributo.

    Su representación es la siguiente:

    A B o A DF B

    Ejemplo

    Se sabe que entre los atributos RUT y NOMBRE existe una DEPENDENCIA FUNCIONAL ya que el valor de RUT le corresponde a un solo NOMBRE (a una sola persona).

    RUT NOMBRE

    En el caso de que no existan dos nombres “completamente iguales” se cumple también la dependencia

    NOMBRE RUT

    En este caso se tendría

    RUT NOMBRE

    Siendo el primer atributo el más significativo.

    No siempre se cumple esta DEPENDENCIA FUNCIONAL como se puede ver en el ejemplo donde se deben relacionar DIRECCIÓN y RUT ya que varias personas pueden vivir en una misma dirección.

    PROPIEDADES DE LAS DEPENDENCIAS FUNCIONALES

    Supongamos que tenemos la tabla relacional T, que tiene como atributos W, X, Y, Z. Entonces podemos definir las siguientes propiedades:

    • Reflexividad

    Si los valores del atributo Y están incluidos o son iguales a los atributos X, entonces se cumple que Y DEPENDE FUNCIONALMENTE de X,

    (Y " X) ! (X Y)

    Ejemplo

    (CODPROV " CDPOST) ! (CDPOST CODPROV)

    Siendo CODPROV código de provincia y CDPOST el código postal.

    • Aumentación

    Si el conjunto de atributos Y DEPENDE FUNCIONALMENTE de X, entonces dicha dependencia se mantiene aunque se añada un atributo a ambos conjuntos,

    (Z Y) ! (X.Z Y.Z)

    Ejemplo

    (RUT NOMBRE) ! (RUT.EMPRESA NOMBRE.EMPRESA)

    • Transitividad

    Si Y DEPENDE FUNCIONALMENTE de X, y Z DEPENDE FUNCIONALMENTE de Y, entonces se verifica que Z DEPENDE FUNCIONALMENTE de X,

    (X Y) y (Y Z) ! (X Z)

    Ejemplo

    (RUT NOMBRE) y (NOMBRE DIRECCION) ! (RUT DIRECCION)

    Utilizando estas tres propiedades se puede establecer:

    • Unión

    Si Y DEPENDE FUNCIONALMENTE de X y también Z DEPENDE FUNCIONALMENTE de X, implica que Z e Y DEPENDEN FUNCIONALMENTE de X,

    Ejemplo

    (RUT NOMBRE) y (RUT DIRECCION) ! (RUT NOMBRE.DIRECCION)

    • Pseudo-transitividad

    Si se cumple

    (X Y) y (W.Y Z) ! (W.X Z)

    Ejemplo

    (NOMBRE RUT) y (RUT.EMPRESA SUELDO) ! (NOMBRE.EMPRESA SUELDO)

    • Descomposición

    Si el conjunto de atributos Y DEPENDE FUNCIONALMENTE de X y también se cumple que los valores del conjunto de atributos Z están incluidos en los valores de Y, entonces se tiene que cumplir que Z DEPENDE FUNCIONALMENTE de X,

    (X Y) y (Z " Y) ! (X Z)

    Ejemplo

    (RUT CDPOST) y (CDPROV CDPOST) ! (RUT CDPROV)

    GRÁFICO DE LAS DEPENDENCIAS FUNCIONALES

    El gráfico de las DF es una forma clara de tener una visión general de los datos y de la cohesión existente entre ellos. La clave que se obtiene al tratar todas las DF se representa dentro de una caja con sus atributos primarios. El resto de los atributos se representa fuera de la caja y también sus dependencias entre ellos.

    Si existe dependencia entre varios atributos que no son claves éstos irán dentro de la caja como un subconjunto representado por una caja de líneas discontinuas y así no se confunden con la clave de la tabla.

    Ejemplo

    A.B.C M | N | S

    M N

    B.C O | P | R

    O P

    C Q

    SEGUNDA FORMA NORMAL (2 F.N)

    Una tabla relacional se encuentra en 2 F.N. si cumple con las siguientes condiciones:

    Se encuentra en 1 F.N.

    Todo atributo secundario (los que no pertenecen a la clave principal, fuera de la caja) dependen de la clave completa y por lo tanto no de una parte de ella.

    Esta forma normal sólo se utiliza si la clave principal es compuesta (formada por varios atributos), si la clave principal de la tabla está formada por un solo atributo la tabla ya está en 2 F.N.

    Si la tabla T posee los atributos A, B, C, D y la clave es A.B y se cumplen las dependencias:

    A.B C

    B D

    Como se puede ver la tabla no está en 2 F.N. ya que el atributo D no tiene una dependencia funcional con la clave A.B

    T

    Para convertir esta tabla relacional a 2F.N. se realiza una proyección de ella y se crean:

  • Una tabla con la clave y todas sus dependencias totales con los atributos secundarios afectados.

  • T1

  • Otra tabla con la parte de la clave que tiene dependencias y los atributos secundarios implicados.

  • T2

    La clave de la nueva tabla será la antigua parte de la clave

    Ejemplo

    Las personas que trabajan en varias empresas con el sueldo correspondiente, los atributos que se tienen son:

    RUT

    NOMBRE

    EMPRESA

    SUELDO

    Existen las siguientes dependencias

    RUT NOMBRE

    RUT.EMPRESA SUELDO

    El gráfico sería

    EMPLEADOS

    Se puede observar que esta tabla no se encuentra en 2 F.N., entonces luego de normalizarla se tendría

    EMPLEADOS

    PERSONAS

    2

    1

    NÚMERO VENDEDOR

    +

    NÚMERO CLIENTE

    UBICACIÓN ALMACÉN

    N° ALMACÉN

    NOMBRE CLIENTE

    UBICACIÓN ALMACÉN

    N° ALMACÉN

    NOMBRE CLIENTE

    CLIENTE

    NOMBRE VENDEDOR

    ÁREA DE VENTAS

    N° VENDEDOR

    VALOR VENTAS

    NÚMERO VENDEDOR

    NÚMERO CLIENTE

    NOMBRE VENDEDOR

    NOMBRE CLIENTE

    AREA VENTAS

    NÚMERO ALMACÉN

    UBICACIÓN ALMACÉN

    VALOR VENTAS

    S

    R

    Q

    P

    O

    N

    M

    B

    C

    A

    C

    A

    B

    D

    A

    B

    C

    D

    B

    NOMBRE

    RUT

    EMPRESA

    SUELDO

    SUELDO

    RUT

    EMPRESA

    NOMBRE

    RUT