Está en la página 1de 6

Actividad 2

Ejercicio 1

a. Según las relaciones detalladas en la parte posterior se detallan a


continuación, indicar las instrucciones SQL (para PostgreSQL) para la
creación de las tablas y proponed los tipos de cada atributo según sus
posibles valores. Añadid restricciones adicionales, si lo cres conveniente.

INDICACIONES: No utilicéis herramientas de generación automática de


código. No declaréis las restricciones a posterirori (no utilicéis ALTER
TABLE para añadir restricciones después de la creación de las tablas). Dad
nombre a todas las restricciones.

Speaker (speaker_code, speaker_name, email, birth_date)


{birth_date} tiene formato YYYY-MM-DD (por ejemplo: '1985-02-28').
Restricciones mínimas obligatorias a considerar:
- speaker_name no puede ser nul.
- email debe tener un formato mínimo.
- birth_date no puede ser superior a la fecha del sistema.

Se crean las restricciones


create table speaker(speaker_code integer ,speaker_name varchar(40),email
varchar(40),birth_date date,CONSTRAINT validaciones CHECK (email like
'%@%' and birth_date <= current_date ) ,primary key (speaker_code));

Paper (paper_code, paper_name, topic)


Restricciones mínimas obligatorias a considerar:
- paper_name debe contener más de 10 caracteres.
- topic no puede ser nul, contiene datos tipo carácter y debe tener tamaño de 40.

Se crean las restricciones

create table paper(paper_code integer,paper_name varchar(30),topic


varchar(40) not null , primary key (paper_code),
constraint validar check (char_length(paper_name)>10 AND topic <> ''));

City (city_code, city_name, country)


Restricciones mínimas obligatorias a considerar:
- city_code es tipo carácter fijo y debe tener un tamaño de 10 carácteres.
- city_name no puede ser nul.

Se crean las restricciones

create table city(city_code varchar(10),city_name varchar(20) not


null,country varchar(20), primary key(city_code) );

Speech (speech_year, location, city_code, web)


{city_code} es clave foránea de City

Se crean las restricciones

create table speech(speech_year integer, location varchar(30),city


varchar(20),web varchar(40),
primary key(speech_year),FOREIGN KEY(city) REFERENCES
city(city_code) );

Introduce (speaker_code, paper_code, speech_year, opening_date_hour, duration)


{speaker_code} es clave foránea de Speaker
{paper_code} es clave foránea de Paper
{speech_year} es clave foránea de Speech
Restricciones mínimas obligatorias a considerar:
- speech_year debe estar en el rango 2000-2015
- duration es un campo tipo numérico y contendrá únicamente valores entre 1 y 120
- opening_date_hour no será superior a la fecha del sistema

Se crean las restricciones


create table Introduce(speaker integer,paper integer,speech integer,
opening_date_hour date,duration integer,
FOREIGN KEY(speaker) REFERENCES speaker(speaker_code),
FOREIGN KEY(paper) REFERENCES paper(paper_code),
FOREIGN KEY(speech) REFERENCES speech(speech_year),
constraint validar check (speech >=2000 and speech <=2015 and duration
>=1 and duration <= 120 and opening_date_hour <= current_date) );

Reference (paper_code1, paper_code2)


{paper_code1} es clave foránea de Paper
{paper_code2} es clave foránea de Paper
Restricciones mínimas obligatorias a considerar:
- Un Paper no se puede referenciar a si mismo.

Se crean las restricciones

create table reference (paper_code1 integer,paper_code2 integer,


FOREIGN KEY(paper_code1) REFERENCES paper(paper_code),
FOREIGN KEY(paper_code2) REFERENCES paper(paper_code),
constraint validar check (paper_code1 <> paper_code2) );

b. Indicad el orden en que se han tenido que crear las tablas, según las relaciones
que existen entre ellas.

Las tablas se deben crear en el siguiente orden:


speaker,paper,city,speech,introduce,reference.

c. Ejecutad las inserciones de datos que se adjuntan seguidamente, corrigiendo los


posibles errores que pudieran haber. En caso de existir errores en los datos que
relacionan distintas tablas, considerad como válido el primero. Los posibles datos
incorrectos que no tengan relevancia para las consultas se pueden corregir libremente.
Al momento de insertar los registros nos aparece un error el cual corresponde que cuando
se va a insertar el 5 registro le falta una coma.

Aparece error al guardar el tercer registro ya que en la cadena de caracteres aparece una
comilla de más.
Al insertar el registro número 3 en la fecha aparece un valor fuera de rango ya que el mes
de febrero no tiene dia 30.

d. Indicad las instrucciones SQL que resuelven las consultas siguientes y mostrad
para cada una de ellas una captura de pantalla con los datos resultantes:

d1) Obtened el código y el nombre de los artículos con tema 'DataBases' presentados en la
conferencia del año 2012, que posteriormente nunca han sido referenciados.

SELECT paper_code,paper_name from paper INNER JOIN introduce on


paper.paper_code=introduce.paper where topic='DataBases' and
speech=2012

d2) Obtened el nombre y el tema de los artículos de menor duración.

SELECT paper_name,topic from paper INNER JOIN introduce on


paper.paper_code=introduce.paper where duration =(select MIN(duration)
from introduce )
d3) Obtened el nombre y email de las personas que han presentado algún artículo el año 2011 y
el año 212 sobre el tema 'DataBases'.

SELECT speaker_name,email from speaker INNER JOIN introduce on


speaker.speaker_code=introduce.speaker INNER JOIN paper on
introduce.paper=paper.paper_code where (speech=2011 or speech=2012)
and topic='DataBases'
d4) Obtened el nombre de los artículos presentados antes del año 2010 y que han sido
referenciados como artículos del tema 'DataBases'

SELECT paper_name from paper INNER JOIN introduce on


paper.paper_code=introduce.paper where speech<2010 and
topic='DataBases'

d5) Obtened el nombre de todos los presentadores que consta que no han presentado ningún
artículo.

SELECT speaker_name from speaker LEFT JOIN introduce on


speaker.speaker_code=introduce.speaker where speaker is null

También podría gustarte