Está en la página 1de 9

Actividad No 2.

Actividad No 2 Fecha de entrega:


Nombre y apellidos: Jesus David Guerra Pineda

Presentación y Objetivos
La actividad consta de varias preguntas, la primera de ellas propone convertir algunas
consultas en SQL, mientras que otras consisten en la puesta en práctica de ciertos
conocimientos adquiridos.

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.

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

R// Aquí mismo se incluye el punto a y b. Indicando que para el punto b el orden de
creación es el mismo que se sigue en la presentación de los Create´s.

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.

Create table Speaker


(
speaker_code int not null primary key,
speaker_name varchar(50) not null,
email varchar(50),
birth_date date
constraint ck_email
check(email like '%@%')
constraint ck_birth_date
check(birth_date < current_date)
);

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.

Create table Paper


(
paper_code int not null primary key,
paper_name varchar(50),
topic varchar(40) not null
constraint ck_paper_name
check(length(paper_name)>10)
);

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.

Create table City


(
city_code char(10) not null primary key,
city_name varchar(30) not null,
country varchar(30)
);

Speech (speech_year, location, city_code, web)


{city_code} es clave foránea de City

Create table Speech


(
speech_year char(4) not null primary key,
location varchar(20),
city_code char(10) not null,
web varchar(30),
constraint fk_Speech_City Foreign Key(city_code) 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

Create table Introduce


(
speaker_code int not null,
paper_code int not null,
speech_year char(4) not null,
opening_date_hour date,
duration numeric,
constraint ck_speech_year check(speech_year >= '2000' and speech_year <=
'2015'),
constraint ck_duration check(duration >= 1 and duration <= 120),
constraint ck_opening_date_hour check(opening_date_hour < current_date),
constraint fk_Introduce_Speaker foreign key(speaker_code) references Speaker
(speaker_code),
constraint fk_Introduce_Paper foreign key(paper_code) references Paper
(paper_code),
constraint fk_Introduce_Speech foreign key(speech_year) references Speech
(speech_year)
);

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.

Create table Reference


(
paper_code1 int not null,
paper_code2 int not null,
constraint fk_Reference_Paper_paper_code1 Foreign Key(paper_code1)
references Paper (paper_code),
constraint fk_Reference_Paper_paper_code2 Foreign Key(paper_code2)
references Paper (paper_code),
constraint ck_paper_code_distinct Check(paper_code1 <> paper_code2)
);
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.

Se insertan datos específicos para demostrar que cada consulta retorna un resultado
correcto.

INSERT INTO Speaker


VALUES
(1, 'Jaume Armengol', 'jarmengol@esid.es', '08/01/1969'),
(2, 'Ramon Fornelles', 'ramon_for@hotemail.es', '15/03/1976'),
(3, 'Ingrid Prados', 'ingrid_p@gemail.com', '20/08/1981'),
(4, 'Josep Maria Frenades', 'jmfrenades@tinet.org', '06/05/1979'),
(5, 'Manel Jimenez', 'mjimenez@astroseti.org', '16/09/1976'),
(6, 'Maria Jesus Alabart', 'maalabart@gemail.com', '16/07/1980');
INSERT INTO Paper
VALUES
(1, 'NoSQL Databases', 'DataBases'),
(2, 'New lithium battery', 'Technology'),
(3, 'Grid Computing and DataBases', 'DataBases'),
(4, 'Approximation to MongoDB', 'DataBases'),
(5, 'Solar Cell Tech', 'Technology'),
(6, 'The new fuel; H2O2', 'Technology'),
(7, 'Open Source SGBD', 'DataBases');
INSERT INTO City VALUES (1, 'Barcelona', 'Spain');
INSERT INTO City VALUES (2, 'Hospitalet del Llobregat', 'Spain');
INSERT INTO City VALUES (3, 'Bogota', 'Colombia');
INSERT INTO City VALUES (4, 'Madrid', 'Spain');
INSERT INTO City VALUES (5, 'London', 'United Kingdom');
INSERT INTO Speech VALUES (2012, 'Palau de la Música', 1, 'www.openDB.com');
INSERT INTO Speech VALUES (2011, 'Fira Bcn', 1, 'www.solarcell.com');
INSERT INTO Speech VALUES (2010, 'Drum L''Os', 3, 'www.hidroxidfuel.com');
INSERT INTO Introduce VALUES (1, 1, 2010, '05/02/2010 05:30', 60);
INSERT INTO Introduce VALUES (5, 7, 2010, '05/02/2010 07:00', 60);
--INSERT INTO Introduce VALUES (4, 2, 2011, '30/02/2011 10:15', 45);
INSERT INTO Introduce VALUES (3, 3, 2012, '18/02/2012 12:30', 90);
INSERT INTO Introduce VALUES (2, 4, 2012, '18/02/2012 09:30', 120);
INSERT INTO Reference VALUES (3,1), (4,1), (7, 1), (6,5), (6,2);
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 i.paper_code, p.paper_code, p.topic, i.speech_year, p.paper_name


from introduce i
left join paper p on i.paper_code = p.paper_code
where p.topic = 'DataBases' and i.speech_year = '2012'

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


Select i.paper_code, p.paper_name, p.topic, i.duration
from introduce i
left join paper p on i.paper_code = p.paper_code
where i.duration in (select min(duration) from introduce)
order by i.duration asc

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 s.speaker_name, s.email


from introduce i
left join speaker s on i.speaker_code = s.speaker_code
left join paper p on i.paper_code = p.paper_code
where i.speech_year between '2011' and '2012'
and p.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'

Esta consulta no devuelve nada, ya que no hay artículos presentados antes del año
2010.

Select p.paper_name, p.topic, p.paper_code, i.speech_year


from introduce i
left join paper p on i.paper_code = p.paper_code
left join reference r on i.paper_code = r.paper_code2
where i.speech_year < '2010'
and i.paper_code = r.paper_code2
and p.topic = 'DataBases'
d5) Obtened el nombre de todos los presentadores que consta que no han presentado
ningún artículo.

Select s.speaker_name
from introduce i
right join speaker s on i.speaker_code = s.speaker_code
where i.speaker_code is null

También podría gustarte