Header

domingo, 27 de mayo de 2007

SQL: Tablas

CREATE TABLE pilotos (
nombre VARCHAR(15),
apellido VARCHAR(15),
nacimiento DATE,
pais VARCHAR(15),
ciudad VARCHAR(15),
peso INT,
altura NUMERIC,
debut VARCHAR(20),
estatus tipo_piloto,
retiro DATE,
foto VARCHAR(500) UNIQUE,
casco VARCHAR(500) UNIQUE,

CONSTRAINT cp_pilotos PRIMARY KEY (nombre,apellido)
);


CREATE TABLE escuderias (
esc_nombre VARCHAR (25),
creacion VARCHAR(4),
web VARCHAR (500) UNIQUE,
logo VARCHAR (500) UNIQUE,

CONSTRAINT cp_escuderias PRIMARY KEY (esc_nombre)
);


CREATE TABLE monoplazas (
mono_nombre VARCHAR (15),
temporada VARCHAR (5),
esc_nombre VARCHAR (25),
motor VARCHAR (20),
cilindrada VARCHAR (15),
potencia NUMERIC (4),
chasis VARCHAR (300),
suspension VARCHAR (300),
amortiguacion VARCHAR (20),
transmision VARCHAR (50),
electronica VARCHAR (20),
ruedas VARCHAR (7),
frenos VARCHAR (50),
lubricante VARCHAR (15),
combustible VARCHAR (30),
longitud NUMERIC (5,1),
altura NUMERIC (5,1),
ancho NUMERIC (5,1),
peso NUMERIC (5,1),
via_trasera NUMERIC (5,1),
batalla NUMERIC (5,1),
foto VARCHAR(500) UNIQUE,

CONSTRAINT cp_monoplazas PRIMARY KEY (mono_nombre,temporada),
CONSTRAINT ce_monoplazas FOREIGN KEY (esc_nombre) REFERENCES escuderias (esc_nombre)
);


CREATE TABLE patrocinadores (
patro_nombre VARCHAR (30),
web VARCHAR (500) UNIQUE,
logo VARCHAR (500) UNIQUE,

CONSTRAINT cp_patrocinadores PRIMARY KEY (patro_nombre)
);


CREATE TABLE mundiales (
temporada VARCHAR (5),
N_GPs INT,

CONSTRAINT cp_mundiales PRIMARY KEY (temporada)
);


CREATE TABLE circuitos (
cir_nombre VARCHAR (25),
pais VARCHAR (15),
aforo INT,
direccion VARCHAR (500),
web VARCHAR (500),

CONSTRAINT cp_circuitos PRIMARY KEY (cir_nombre)
);


CREATE TABLE GPs (
gp_nombre VARCHAR (25),
fecha_mundial DATE,
cir_nombre VARCHAR (25),
temporada VARCHAR (5),

CONSTRAINT cp_GPs PRIMARY KEY (gp_nombre, fecha_mundial),
CONSTRAINT ce_GPs FOREIGN KEY (cir_nombre) REFERENCES circuitos (cir_nombre)
);



CREATE TABLE trazado (
cir_nombre VARCHAR (25),
temporada VARCHAR (5),
n_vueltas NUMERIC (2),
carga_aerodinamica esp_circuito,
desgaste_frenos esp_circuito,
desgaste_neumaticos esp_circuito,
agarre esp_circuito,
consumo NUMERIC (2,1),
n_cambios_marcha INT,
aceleracion_max INT,
max_tramo_aceleracion VARCHAR (6),
velocidad_max NUMERIC (4,1),
web VARCHAR (500),

CONSTRAINT cp_trazado PRIMARY KEY (temporada)
);



CREATE TABLE curvas (
n_curva INT,
cir_nombre VARCHAR (25),
temporada VARCHAR (5),
nombre_propio VARCHAR (500),
velocidad NUMERIC (3),
fuerza_G NUMERIC (2,1),
marcha NUMERIC (1),
tipo izqder,

CONSTRAINT cp_cuvas PRIMARY KEY (n_curva, cir_nombre),
CONSTRAINT ce_curvas FOREIGN KEY (temporada) REFERENCES trazado (temporada)
);


CREATE TABLE I_TIENEN_2 (
esc_nombre VARCHAR (25),
pil_nombre VARCHAR (15),
pil_apellido VARCHAR (20),
temporada VARCHAR (5),

CONSTRAINT cp_I_TIENEN_2 PRIMARY KEY (esc_nombre, pil_nombre,pil_apellido)

);


CREATE TABLE I_TIENEN_3 (
esc_nombre VARCHAR (25),
patro_nombre VARCHAR (30),
temporada VARCHAR (5),

CONSTRAINT cp_I_TIENEN_3 PRIMARY KEY (esc_nombre, patro_nombre)

);


CREATE TABLE I_PARTICIPAN (
pil_nombre VARCHAR (15),
pil_apellido VARCHAR (20),
temporada VARCHAR (5),

CONSTRAINT cp_I_PARTICIPAN PRIMARY KEY (pil_nombre,pil_apellido, temporada)

);


CREATE TABLE I_POSICION (
pil_nombre VARCHAR (15),
pil_apellido VARCHAR (20),
gp_nombre VARCHAR (25),
fecha_mundial DATE,
parrilla INT,
llegada INT,
VR TIME,

CONSTRAINT cp_I_POSICION PRIMARY KEY (pil_nombre,pil_apellido, gp_nombre, fecha_mundial)

);


CREATE TABLE I_TIENEN_4 (
temporada VARCHAR (5),
gp_nombre VARCHAR (25),
fecha_mundial DATE,


CONSTRAINT cp_I_TIENEN_4 PRIMARY KEY (temporada, gp_nombre, fecha_mundial)

);



CREATE TABLE I_TIENEN_5 (
cir_nombre VARCHAR (25),
temporada VARCHAR (5),


CONSTRAINT cp_I_TIENEN_5 PRIMARY KEY (cir_nombre, temporada)

);

SQL: Dominios

CREATE DOMAIN tipo_piloto AS VARCHAR(1)
CHECK (VALUE IN ('O','P','R'));

CREATE DOMAIN esp_circuito AS VARCHAR(8)
CHECK (VALUE IN ('bajo','medio','alto', 'muy alto','maximo','unknown')
);

CREATE DOMAIN izqder AS VARCHAR(9)
CHECK (VALUE IN ('izquierda','derecha')
);

SQL "El comienzo"

Ya estamos en la recta final del trabajo, nos queda lo que en principio, parece lo más sencillo: el código SQL.
Eso sí, este camino no ha estado exento de problemas los cuales enumero aquí por si os sirve de ayuda:

  1. El primero que me surgió fue el que ningún atributo puede contener espacios.
  2. El tipo de datos INT no lleva especificación de longitud como lo hace NUMERIC ().
  3. Y por último debo aprender a escribir FOREIGN jejeje y no FOREINGN.

Ahora tengo una duda que aún no he solucionado, ¿cómo hacer que un dominio que tengo coloque por defecto un valor determinado? (ej: El "esp_circuito" me gustaría que pusiese unknown cuando no se especificase ninguno valor en el atributo donde esté colocado)


Por lo demás, no tengo mucho más que añadir, únicamente que ya tengo perfilado la forma de meter datos de forma casi automática lo cual me ahorrará mucho tiempo en la etapa final del trabajo. En las próximas entradas iré colocando el código utilizado en el trabajo para que puedan echarle un vistazo.

Esquema Relacional

Ya falta poco para empezar la programación con SQL, el último paso para conseguirlo es la creación del Esquema Relacional. Con él, tendremos el eslabón que une las ideas conceptuales de la base de datos con lo que serán las tablas que realmente la conformarán. Aqui esta desarrollado todo el esquema Relacional y en él podemos ver como se han visto modificadas las entidades y como se han solucionado las interrelaciones y la jerarquía que teníamos.

Esquema Relacional (ER)

Nota:

Tras el nombre de cada entidad (tabla), aparecerán sus correspondientes atributos entre paréntesis, sin embargo, algunas de estas se verán afectadas por las interrelaciones. Por ello los atributos que estas puedan introducir no se ponen el los paréntesis iniciales pero si en los detalles de atributos.

1 pilotos: (nombre, apellidos, nacimiento, país, ciudad, peso, altura, debut, tipo de piloto, retiro, foto, casco)

Para esta entidad se creará un dominio “tipo_piloto” que regulará si este es oficial, probador o retirado, para lo cual sólo permitirá a través de un CHECK los valores “O”, ”P”, ”R”. Con esta solucionamos la jerarquía que teníamos en esta entidad ya que eliminamos los subtipos.

Detalles de atributos

· nombre.- Varchar de longitud 15.

· apellidos.- Varchar de longitud 20.

· nacimiento.- Tipo de dato fecha con formato Mes/Día/Año.

· país.- Varchar de longitud 20.

· ciudad.- Varchar de longitud 20.

· peso.- Un entero su unidad serán kilogramos.

· altura.- Un entero medido en centímetros.

· debut.- Varchar de longitud (25).

· tipo de piloto.- Dominio tipo_piloto.

· retiro.- Varchar (4) contendrá el año en que se retira en piloto.

· foto.- Varchar (500) contiene la dirección de la foto del piloto.

· casco.- Varchar (500) toma la dirección de la imagen del casco del piloto.

2 escuderías: (esc_nombre, creación, web y logo)

Detalles de atributos

· esc_nombre.- Varchar (25) de longitud 25

· creación.- Varchar (4) con el año de creación (2004)

· web.- Varchar (500) contiene la dirección de la escudería.

· logo.- Varchar (500) toma la dirección de la imagen del equipo.

3 monoplazas: (mono_nombre, temporada, motor, cilindrada, potencia, chasis, suspensión, amortiguación, transmisión, electrónica, ruedas, frenos, lubricante, combustible, longitud, altura, ancho, peso, vía trasera, batalla y foto)

Detalles de atributos

· mono_nombre.- Varchar (15).

· temporada.- Varchar (5) la temporada deberá introducirse de la siguiente forma año/año (ej: 05/06).

· esc_nombre.- Varchar (25) se define clave extranjera como consecuencia de la interrelación “I_TIENEN 1”.

· motor.- Varchar (20).

· cilindrada.- Varchar (15) medida en cc.

· potencia.- Numeric (4) medida en CV.

· chasis.- Varchar (300) constará de una pequeña descripción del mismo.

· suspensión.- Varchar (300) descripción del tipo de suspensión del monoplaza.

· amortiguación.- Vachar (20).

· transmisión.- Varchar (50) Enumeración de las marchas.

· electrónica.- Varchar (20)

· ruedas.- Varchar (7)

· frenos.- Varchar (50) descripción del tipo de frenos.

· lubricante.- Varchar (15) marca del sumistrador.

· combustible.- Varchar (30) Tipo de combustible utilizado.

· longitud.- Numeric (5,1)

· altura.- Numeric (5,1)

· ancho.- Numeric (5,1)

· peso.- Numeric (5,1)

· vía trasera.- Numeric (5,1)

· batalla.- Numeric (5,1)

· foto.- Varchar (500) contiene la dirección de la foto del monoplaza.

4 patrocinadores: (patro_nombre, escudería, temporada, logo y web)

Detalles de atributos

· patro_nombre.- Varchar (30).

· escudería.- Varchar (25).

· temporada.- Varchar (5).

· logo.- Varchar (500) contiene la dirección de la foto de la empresa.

· web.- Varchar (500) contiene la dirección de la web del patrocinador.

5 mundiales: (temporada, N_GPs)

Detalles de atributos

· temporada.- Varchar (5).

· N_GPs.- INT (2), contiene el número de Gp´s que conforman el campeonato.

6 GPs: (gp_nombre y fecha en el mundial).

Detalles de atributos

· gp_nombre.- Varchar (25).

· fecha en el mundial.- Date, el formato de la misma será Mes/Día/Año.

· cir_nombre (CE).- Varchar (25). se define clave extranjera como consecuencia de la interrelación “TIENE/ES…”.

· temporada.- Varchar (5). Consecuencia de la mencionada interrelación.

7 circuitos: (cir_nombre, país, inauguración, aforo, dirección y web).

Detalles de atributos

· cir_nombre.- Varchar (25).

· país.- Varchar (15).

· inauguración.- Varchar (4) año de la inauguración del circuito.

· aforo.- INT, recoge el número de personas que caben en el circuito.

· dirección.- Varchar (500) contiene la calle del circuito.

· web.- Varchar (500) contiene la dirección de la web.

8 trazado: (cir_nombre, temporada, nº de vueltas, longitud, nº de curvas, carga aerodinámica, desgaste de frenos, desgaste de neumáticos, agarre, consumo, aceleración máxima, máximo tramo de aceleración, número de cambios de marcha, velocidad máxima y foto).

Detalles de atributos

· cir_nombre.- Varchar(25).

· temporada.- Varchar(5).

· nº de vueltas.- Numeric (2)

· longitud.- Numeric (5,1), aquí se recoge la longitud de una vuelta del trazado.

· nº de curvas- INT (2)

· carga aerodinámica.- Esp_circuito, se creará un dominio (Esp_circuito) que sólo permita los siguientes valores: Bajo, medio, alto muy alto y máximo.

· desgaste de frenos.- Esp_circuito.

· desgaste de neumáticos.- Esp_circuito.

· agarre.- Esp_circuito.

· consumo.- Numeric (2,1)

· número de cambios de marcha.- INT (2)

· aceleración máxima.- INT (2), corresponde a un valor porcentual del acelerado máximo del circuito.

· máximo tramo de aceleración.- Varchar (6), se introducirá con el siguiente formato seg/metros (ej:10/220)

· velocidad máxima.- Numeric (4,1)

· foto.- Varchar (500) contiene la dirección de la foto del trazado del circuito en dicha temporada. Puede repetirse asi que NO será UNIQUE

9 curvas: (número de curva, circuito, temporada, nombre propio, velocidad, fuerza G, marcha y tipo)

Detalles de atributos

· nº de curva.- INT (2).

· cir_nombre.- Varchar(25).

· temporada.- Varchar(5). Aparece como consecuencia de la interrelación I_TIENEN 6. es pues clave extranjera.

· nombre propio.- Varchar (20).

· velocidad.- NUMERIC (3).

· fuerza G.- NUMERIC (2.1).

· marcha.- NUMERIC (1).

· tipo.- ID, dominio que sólo permita introducir si la curva es a derechas o a izquierdas.

10 I_TIENEN_1 pasa a formar parte de monoplazas e introduce en la misma y como clave extranjera el atributo esc_nombre, que a su vez es clace principal de la entidad escudería. (mono_nombre+temporada (CP), esc_nombre (CE)). NO FORMA TABLA.

Detalles de cambios en atributos de tabla monoplaza

· mono_nombre (CP) .- Varchar (15).

· temporada (CP).- Varchar (5).

· esc_nombre (CE).- Varchar (25).

11 I_TIENEN_2 (esc_nombre, pil_nombre+pil_apellido (CP),temporada)

Detalles de atributos

· esc_nombre (CP).- Varchar (25).

· pil_nombre (CP).- Varchar (15).

· pil_apellido (CP).- Varchar (20).

· temporada.- Varchar (5).

12 I_TIENEN_3 (esc_nombre, patro_nombre, temporada)

Detalles de atributos

· esc_nombre.- Varchar (25).

· patro_nombre.- Varchar (30).

· temporada.- Varchar (5).

13 I_PARTICIPAN (pil_nombre+pil_apellido, temporada)

Detalles de atributos

· pil_nombre.- Varchar (15).

· pil_apellido.- Varchar (20).

· temporada.- Varchar (5).

14 I_POSICION (pil_nombre+pil_apellido, gp_nombre+fecha en el mundial, parrilla, llegada, VR)

Detalles de atributos

· pil_nombre.- Varchar (15).

· pil_apellido.- Varchar (20).

· gp_nombre.- Varchar (25).

· fecha en el mundial.- Date.

· parrilla.- INT (2). Posición de salida del piloto en el GP.

· llegada.- INT (2). Posición de llegada del piloto en el GP.

· VR.- TIME, se introducirán los tiempos de las vueltas rápidas de cada GP.

15 I_TIENEN_4 (temporada, gp_nombre+fecha en el mundial)

Detalles de atributos

· temporada.- Varchar (5).

· gp_nombre.- Varchar (25).

· fecha en el mundial.- DATE.

16 I_TIENE/ES… Pasa a formar parte de la tabla GPs en la que se introducirán en consecuencia los atributos cir_nombre como clave extranjera y temporada (gp_nombre+fecha en el mundial, cir_nombre, temporada)

Detalles de la modificación en tabla GPs

· gp_nombre (CP).- Varchar (25).

· fecha en el mundial (CP).- DATE.

· cir_nombre (CE).- Varchar (25).

· temporada.- Varchar (5).

17 I_TIENEN_5 (cir_nombre, temporada)

Detalles de atributos

· cir_nombre.- Varchar (25).

· temporada.- Varchar (5).

18 I_TIENEN_6 Esta interrelación introduce en curvas una clave extranjera denominada temporada, de esta forma se identifica de forma única cada ocurrencia y eliminamos la última interrelación de nuestro esquema E/R (cir_nombre, nº_curva + cir_nombre, temporada)

Detalles de atributos

· nº_curva.- INT (2)

· cir_nombre.- Varchar (25).

· temporada.- Varchar (5).

sábado, 26 de mayo de 2007

+ esquema E/R V4.0

Bueno, ya adelante que el esquema se ha visto modificado, según hice el análisis de las entidades e interrelaciones.

En las primeras versiones que no tengo en formato digital existían más interrelaciones y entidades que se fueron eliminando según se analizaban con un poco de detenimiento. Para los que sean novatos como yo primera nota mental a la hora de hacer un esquema E/R.

Los datos tipo estadísticas y demás seguramente puedan sacarse con operaciones que toman como base, valores que tenemos en alguna entidad, por ello no deben existir Entidades que tengan datos que se obtengan de otro sitio de nuestra base.


Este factor eliminó de mis primeros esquemas tablas como: puntos por piloto, puntos por escudería y cosas así.

También desaparecieron interrelaciones que duplicaban datos como fue la de posición y VRs que acabaron formando una única interrelación. Estos cambios que he mencionado se pueden ver en los siguientes escaneos



De la versión 3.0 a la 4.0 se han añadido algunos atributos a tablas como la de patrocinadores, donde para poder especificar de forma correcta las distintas ocurrencias que podían darse en la misma introduje temporada y escudería, ya que pueden darse casos en los que una empresa sea al mismo tiempo patrocinadora de varios equipos o lo sea de distintos en distintas temporadas. (Bridgestone o Vodafone).
A su vez las entidades especificaciones de trazado y circuitos que en los primeros esquemas eran entidades normales, han pasado a ser de tipo débil. En esta versión les he modificado el nombre pasando a denominarse Trazado y Curvas.
Por último sólo añadir que curvas tiene un nuevo atributo, a saber: tipo que nos informará de si la curva es a derechas o a izquierdas.






Análisis de Entidades.

Siguiendo con el tema del trabajo le ha tocado el turno a las entidades. Para variar, haciendo este paso me he dado cuenta junto con el anterior análisis (interrelaciones) que el esquema debe variar un poco para perder redundancia. Asi que en la siguiente publicación modificaré el esquema generándose asi la versión 4.0.

Ya se va viendo que según avanza uno, que lo que en un principio parece adecuado, con un estudio más detenido ya no nos lo parece tanto y se debe modificar.


Análisis de Entidades.


1 Tipo de Entidad Pilotos: Representa al objeto del mundo real “pilotos” tal y como su nombre nos indica. Para ella, vamos a considerar los atributos: nombre, apellidos, fecha de nacimiento, país, ciudad, peso, altura debut, tipo de piloto, el cual quedará recogido en un dominio donde se especificará si es oficial, probador o si está retirado y en ese caso, se añadirá la fecha del retiro por último foto del piloto y de su casco.

Los atributos que harán que cada ocurrencia de la entidad sea única son nombre + apellidos los cuales por tanto definen nuestra clave principal. Además de que añadiremos restricciones de unicidad a los atributos de foto y casco los cuales almacenarán las direcciones de las fotografías. Así, ante una posible integración de la base a una página web mediante PHP los vínculos a los archivos gráficos necesarios estarán listos para su utilización.

2 Tipo de Entidad Escuderías: Representa al objeto del mundo real “escuderías” definiéndose estas por los siguientes atributos. esc_nombre, creación, web y logo, los cuales recogen el nombre de la misma, la fecha de creación de la escudería, su página web y el logotipo de la misma.

Se entiende, que para definir la clave principal de dicha entidad, con esc_nombre será suficiente, ya que cuando una de ellas cambia de dueño o principal patrocinador el nombre de la misma se modifica también. Como ejemplo de esto, tenemos a la escudería Minardi, comprada por Red-Bull para formar en 2006 la squadra que hoy conocemos como Toro Rosso.

Como en el caso anterior y en algunos que siguen, existen atributos destinados a almacenar direcciones de imágenes de interés como son los logotipos. Por esto, dichos atributos se definirán con restricciones de unicidad.

3 Tipo de Entidad Monoplazas: Representa al objeto del mundo real de los coches fabricados por las escuderías. Para esta entidad recogeremos los siguientes atributos: mono_nombre, temporada, motor, cilindrada, potencia, chasis, suspensión, amortiguación, transmisión, electrónica, ruedas, frenos, lubricante, combustible, longitud, altura, ancho, peso, vía trasera, batalla y foto.

Se tomará como clave principal el conjunto de mono_nombre y temporada. Quedando de esta forma cada tupla identificada de forma inequívoca. Como atributos con restricción de unicidad tendremos la foto.

4 Tipo de Entidad Patrocinadores: Representa al objeto del mundo real “patrocinadores” entendiéndose como tales a las entidades que financian eventos con fines publicitarios. Para esta entidad se tomarán los atributos siguientes: patro_nombre, logo, web, escudería y temporada. Esto recoge el nombre de la empresa, la dirección de la foto del logotipo, su página web y la escudería y temporada que patrocina.

Los atributos que forman la clave principal de esta entidad son patro_nombre + escudería + temporada.

Esta vez el logo no tendrá la restricción de unicidad para evitar que tengamos problemas a la hora de introducir un mismo patrocinador para distintas escuderías, ya sea en una misma temporada o en distintas como por ejemplo Bridgestone.

5 Tipo de Entidad Mundiales: Esta representa al objeto del mundo real “mundial” dicha entidad tendrá como atributos temporada y número de grandes premios que se disputan en el mismo.

Temporada es el atributo que define cada tupla de forma única por tanto será clave principal.

6 Tipo de Entidad GPs: Representa al objeto del mundo real “grandes premios”. Los grandes premios son las carreras que se disputan en un mundial. Estas varían en cada campeonato y es por ello que se hace distinción entre GP y circuito. Ya que, aunque se ha indicado en el enunciado, un GP no siempre se corre en el mismo circuito.

Los atributos relacionados con esta entidad son: gp_nombre y fecha en el mundial, siendo el conjunto de ambos la clave principal.

7 Tipo de Entidad Circuitos: Representa al objeto del mundo real “circuitos”. Como atributos que definen a esta entidad tenemos: cir_nombre, país, inauguración, aforo, dirección y web.

La clave principal es cir_nombre y con restricciones de unicidad tendremos a web.

8 Tipo de Entidad Trazado: Representa al objeto del mundo real “especificaciones de trazado” en ella se recopilan valores característicos del trazado del circuito por temporada.

Los atributos de los que consta la entidad son: cir_nombre, temporada, nº de vueltas, longitud, nº de curvas, carga aerodinámica, desgaste de frenos, desgaste de neumáticos, agarre, consumo, aceleración máxima, máximo tramo de aceleración, número de cambios de marcha, velocidad máxima y foto.

La clave principal será cir_nombre + temporada. Y unicidad tendrá sólo el atributo foto.

9 Tipo de Entidad Curvas: Representa al objeto del mundo real “especificaciones de curvas”. Aquí se plasma la información referente a cada curva, su nombre, si es a derechas o a izquierdas, etc.

Los atributos que encontramos en la entidad son: número de curva, circuito, temporada, nombre propio, velocidad, fuerza G, marcha y tipo. La clave principal la forman nº de curva + circuito + temporada.

jueves, 24 de mayo de 2007

Análisis de Interrelaciones.

Falta aún introducir en el enunciados los diferentes supuestos en los que me baso para la creación del esquema E/R. No obstante, como no los he redactado pero si me he puesto con el análisis de las interrelaciones para poder asi pasar al esquema relacional ya os lo adelanto.

1 Interrelación (escuderías, coches) I_TIENEN_1

Esta interrelación se encarga de unir la entidad escuderías con la de coches de forma que sabiendo que cada escudería tiene un monoplaza por temporada y que un coche sólo puede pertenecer a una escudería durante la misma temporada, obtenemos que las cardinalidades de las entidades son:

escuderías (1,N)

coches (1,1)

Quedando la de la interrelación con una cardinalidad, uno a muchos.

I_TIENEN_1 (1,N)

2 Interrelación (escuderías, pilotos) I_TIENEN_2

Esta interrelación afecta a las entidades escuderías (1,N) y pilotos (1,N), lo cual hace que la cardinalidad de la misma sea muchos a muchos, posee un atributo temporada.

escuderías (1,N)

pilotos (1,N)

I_TIENEN_2 (N,N)

3 Interrelación (escuderías, patrocinadores) I_TIENEN_3

Como en el segundo caso, esta interrelación es de muchos a muchos afectando a escuderías y patrocinadores.

escuderías (1,N)

patrocinadores (1,N)

I_TIENEN_3 (N,N)

4 Interrelación (pilotos, mundiales) I_PARTICIPAN

Esta interrelación actúa sobre las entidades pilotos y mundiales con cardinalidades (0,N) (N,N), respectivamente. Esto se explica por el hecho de que los pilotos probadores puede que no participen activamente en un mundial, mientras que los oficiales lo harán como mínimo en uno y como máximo en “N”

pilotos (0,N)

mundiales (N,N)

I_PARTICIPAN (N,N)

5 Interrelación (pilotos, GPs) I_POSICION

Esta interrelación de uno a muchos actúa sobre las entidades pilotos (0,N) y GP´s (N,N). Conteniendo tres atributos que son parrilla, llegada y VR en la que se introducirán los puestos de salida y llegada de cada piloto, pudiendo este no terminar lo cual se recogerá con el valor “OUT”. Esto se realiza mediante la creación de un dominio (domin_posicion). Además de recogerse en el último atributo el tiempo de la vuelta rápida del GP.

pilotos (0,N)

GPs (N,N)

I_POSICION (1,N)

6 Interrelación (mundiales, GPs) I_TIENEN_4

Esta interrelación ejerce sobre las entidades mundiales (7,N) y GP´s (1,N) quedando la cardinalidad de esta en: muchos a muchos (N,N)

mundiales (1,N)

GPs (N,N)

I_TIENEN_4 (N,N)

7 Interrelación (GPs, circuitos) I_TIENE/ES…

Aquí relacionamos las entidades grandes premios con los circuitos donde se pueden realizar. Sabiendo que un gran premio puede disputarse en distintos circuitos pero que sólo se realiza en uno por temporada y que un circuito pertenece como mínimo y máximo a uno por temporada, la cardinalidad resultante aparece resumida en las siguientes líneas:

GPs (1,N)

circuitos (1,1)

I_TIENE/ES… (N,1)

Esta interrelación posee además un atributo denominado temporada.

8 Interrelación (circuitos, trazado) I_TIENEN_5

Estas dos últimas interrelaciones son débiles por identificación y la cardinalidad de las entidades que unen y la suya, son las siguientes:

circuitos (1,N)

trazado (1,N)

I_TIENEN_5 (N,N)

Como en la anterior interrelación, ésta contiene un atributo que es también temporada

9 Interrelación (trazado, curvas) I_TIENEN_6

La última interrelación es como ya se adelantaba en la anterior, débil por identificación.

trazado (N,N)

curvas (1,N)

I_TIENEN_6 (N,N)

En resumen tenemos tres tipos de interrelaciones en nuestra BDr las 0,N, las 1;N y las N,N. Para el paso del esquema E/R al Relacional debemos optar por transformar dichas interrelaciones en tablas o bien integrarlas en las de las entidades existentes mediante los métodos vistos en la clases de la asignatura.

Soluciones elegidas:

I_TIENEN_1 (mono_nombre+temporada (CP), esc_nombre (CE))

I_TIENEN_2 (esc_nombre, pil_nombre+pil_apellido (CP),temporada)

I_TIENEN_3 (esc_nombre, patro_nombre +temporada (CP))

I_PARTICIPAN (pil_nombre+pil_apellido, temporada (CP))

I_POSICION (pil_nombre+pil_apellido, gp_nombre+fecha en el mundial (CP), parrilla, llegada, VR)

I_TIENEN_4 (temporada, gp_nombre+fecha en el mundial (CP))

I_TIENE/ES… (gp_nombre+fecha en el mundial (CP), cir_nombre (CE), temporada)

I_TIENEN_5 (cir_nombre, temporada (CP))

I_TIENEN_6 (cir_nombre+ nº_curva (CP), temporada (CE))