Upload
juan-martinez
View
420
Download
7
Embed Size (px)
Citation preview
Ejercicios de
Fundamentos de
base de datos
Por:
López Romero Andrés
8CV3
2
Contenido
1. Relación Uno a Uno ........................................................................................................................4
1.1 Diagrama conceptual................................................................................................................4
1.2 Diagrama de objetos ................................................................................................................4
1.3 Frases .......................................................................................................................................4
1.4 Diseño de la base de datos .......................................................................................................4
1.5 Ejemplo de las tablas ................................................................................................................5
1.6 Instrucciones para crear la base de datos ................................................................................5
1.7 Instrucciones para armar la red ................................................................................................5
2. Relación Uno a Muchos ..................................................................................................................7
2.1 Diagrama conceptual................................................................................................................7
2.2 Diagrama de objetos ................................................................................................................7
2.3 Frases .......................................................................................................................................8
2.4 Diseño de la base de datos .......................................................................................................8
2.5 Ejemplo de tablas .....................................................................................................................9
2.6 Instrucciones para crear las tablas ...........................................................................................9
2.7 Instrucciones para armar la red ................................................................................................9
3. Relación Muchos a Muchos ..........................................................................................................11
3.1 Diagrama conceptual..............................................................................................................11
3.2 Diagrama de objetos ..............................................................................................................11
3
3.3 Frases .....................................................................................................................................11
3.4 Diseño de la base de datos .....................................................................................................12
3.5 Ejemplo de tablas ...................................................................................................................12
3.6 Instrucciones para crear las tablas .........................................................................................13
3.7 Instrucciones para amar la red ...............................................................................................13
4. Herencia .......................................................................................................................................15
4.1 Diagrama conceptual..............................................................................................................15
4.2 Diagrama de objetos ..............................................................................................................15
4.3 Frases .....................................................................................................................................15
4.4 Diseño de la base de datos .....................................................................................................16
4.5 Ejemplo de las tablas ..............................................................................................................16
4.6 Instrucciones para crear la base de datos ..............................................................................17
4.7 Instrucciones para armar la red ..............................................................................................17
4
1. Relación Uno a Uno
1.1 Diagrama conceptual
1.2 Diagrama de objetos
1.3 Frases Un laboratorista clínico tiene asignado un consultorio
Un consultorio se asigna a un laboratorista clínico
1.4 Diseño de la base de datos
LaboratoristaClinico
clave: String
nombre: String
Consultorio
clave: String
ubicacion: String tieneAsignado seAsignaA
Tiene 1..1 0..1
pedro: LaboratoristaClinico
clave = ‘01’
nombre = ‘Pedro’
consultorioA1: Consultorio
clave = ‘cA1’
ubicacion = ‘Baracteriologia’
tieneAsignado seAsignaA
ana: LaboratoristaClinico
clave = ‘02’
nombre = ‘Ana’
juan: LaboratoristaClinico
clave = ‘03’
nombre = Juan’
consultorioB1: Consultorio
clave = ‘cB1’
ubicacion = ‘Hematologia’
consultorioC1: Consultorio
clave = ‘cC1’
ubicacion = ‘Patologia’
seAsignaA
seAsignaA
tieneAsignado
tieneAsignado
LaboratoristaClinico
PK lab_ clave: CHAR(2)
lab_ nombre: VARCHAR(50)
+ <<PK>> lab_clave_pk( )
Consultorio
PK con_ clave: CHAR(4)
con_ubicacion: VARCHAR(50)
FK seAsignaA_lab_clave: CHAR(2)
+ <<PK>> con_clave_pk( )
+<<FK>> con_ seAsignaA_fk( )
1..1 0..1
5
1.5 Ejemplo de las tablas
1.6 Instrucciones para crear la base de datos
CREATE TABLE LaboratoristaClinico(
lab_clave CHAR(2) NOT NULL,
lab_nombre VARCHAR(50) NOT NULL,
CONSTRAINT lab_pk PRIMARY KEY(lab_clave)
);
CREATE TABLE Consultorio(
con_clave CHAR(4) NOT NULL,
con_ubicacion VARCHAR(50) NOT NULL,
seAsignaA_lab_clave CHAR(2) UNIQUE NOT NULL,
CONSTRAINT con_pk PRIMARY KEY(con_clave),
CONSTRAINT con_seAsignaA_fk FOREIGN KEY(seAsignaA_lab_clave)
REFERENCES LaboratoristaClinico (lab_clave)
);
1.7 Instrucciones para armar la red
INSERT INTO LaboratoristaClinico VALUES ('01', 'Pedro');
INSERT INTO LaboratoristaClinico VALUES ('02', 'Ana');
INSERT INTO LaboratoristaClinico VALUES ('03', 'Juan');
INSERT INTO Consultorio VALUES('cA01','Baracteriologia','01');
INSERT INTO Consultorio VALUES('cB01','Hematologia','02');
INSERT INTO Consultorio VALUES('cC01','Patologia','03');
LaboratoristaClinico lab_clave lab_nombre
‘01’ ‘Pedro’
‘02’ ‘Ana’
‘03’ ‘Juan’
Consultorio con_clave con_ubicacion seAsignaA _lab_clave
‘cA01’ ‘Baracteriologia’ ‘01’
‘cB01’ ‘Hematologia’ ‘02’
‘cC01’ ‘Patologia’ ‘03’
6
/* UPDATE */
/* A Ana le quitamos el laboratorio y se lo asignamos a un nuevo laboratorista */
INSERT INTO LaboratoristaClinico VALUES ('04', 'Alberto');
UPDATE Consultorio SET seAsignaA_lab_clave='04' WHERE
seAsignaA_lab_clave='02';
/* DELETE */
/* Se borra a Ana */
DELETE FROM LaboratoristaClinico WHERE lab_clave = '02';
/* SELECT */
SELECT lab_clave, lab_nombre, con_clave, con_ubicacion FROM
LaboratoristaClinico, Consultorio WHERE LaboratoristaClinico.lab_clave =
Consultorio.seAsignaA_lab_clave;
7
2. Relación Uno a Muchos
2.1 Diagrama conceptual
2.2 Diagrama de objetos
LaboratorioDeComputo
clave: String
nombre: String
Computadora
clave: String
marca: String
procesador: String
Pertenece 1..1 0..*
perteneceA constaDe
salaOriente:LaboratorioDeComputo
clave = ‘ldc-ori’
nombre = ‘Sala Oriente’
ipn-com01:Computadora
clave = ‘ipn-com01’
marca = ‘DELL’
procesador = ‘Core i5’
ipn-com02:Computadora
clave = ‘ipn-com02’
marca = ‘Acer’
procesador = ‘Core i7’
ipn-com03:Computadora
clave = ‘ipn-com03’
marca = ‘HP’
procesador = ‘Itanium’
8
2.3 Frases Una computadora pertenece a un laboratorio de cómputo
Un laboratorio cómputo consta de varias computadoras
2.4 Diseño de la base de datos
salaPoniente:LaboratorioDeComputo
clave = ‘ldc-pon’
nombre = ‘Sala Poniente’
ipn-com05:Computadora
clave = ‘ipn-com05’
marca = ‘Toshiba’
procesador = ‘Core i3’
ipn-com06:Computadora
clave = ‘ipn-com06’
marca = ‘Lanix’
procesador = ‘Core 2 Quad’
ipn-com04:Computadora
clave = ‘ipn-com04’
marca = ‘Lenovo’
procesador = ‘Core 2 Duo’
LaboratorioDeComputo
PK ldc_clave: CHAR(7)
ldc_nombre: VARCHAR(50)
+<<PK>> ldc_pk( )
Computadora
PK com_clave: CHAR(9)
com_marca: VARCHAR(50)
com_procesador: VARCHAR(50)
FK perteneceA_ldc_clave: CHAR(7)
+<<PK>> com_pk( )
+<<FK>> com_perteneceA_fk( )
1..1 0..*
9
2.5 Ejemplo de tablas
2.6 Instrucciones para crear las tablas
CREATE TABLE LaboratorioDeComputo(
ldc_clave CHAR(7) NOT NULL,
ldc_nombre VARCHAR(50) NOT NULL,
CONSTRAINT ldc_pk PRIMARY KEY(ldc_clave)
);
CREATE TABLE Computadora(
com_clave CHAR(9) NOT NULL,
com_marca VARCHAR(50) NOT NULL,
com_procesador VARCHAR(50) NOT NULL,
pertenceA_ldc_clave CHAR(7) NOT NULL,
CONSTRAINT com_pk PRIMARY KEY(com_clave),
CONSTRAINT com_pertenceA_fk FOREIGN KEY(pertenceA_ldc_clave)
REFERENCES LaboratorioDeComputo(ldc_clave)
);
2.7 Instrucciones para armar la red
INSERT INTO LaboratorioDeComputo VALUES ('ldc-ori', 'Sala Oriente');
INSERT INTO LaboratorioDeComputo VALUES ('ldc-pon', 'Sala Poniente');
Computadora
com_clave com_marca com_procesador perteneceA_ldc_clave
‘ipn-com01’ ‘DELL’ ‘Core i5’ ‘ldc-ori’
‘ipn-com02’ ‘Acer’ ‘Core i7’ ‘ldc-ori’
‘ipn-com03’ ‘HP’ ‘Itanuim’ ‘ldc-ori’
‘ipn-com04’ ‘Lenovo’ ‘Core 2 Duo’ ‘ldc-pon’
‘ipn-com05’ ‘Toshiba’ ‘Core i3’ ‘ldc-pon’
‘ipn-com06’ ‘Lanix’ ‘Core 2 Quad’ ‘ldc-pon’
LaboratorioDeComputo
ldc_clave ldc_nombre
‘ldc-ori’ ‘Sala Oriente’
‘ldc-pon’ ‘Sala Poniente’
10
INSERT INTO Computadora VALUES ('ipn-com01', 'DELL', 'Core i5', 'ldc-ori');
INSERT INTO Computadora VALUES ('ipn-com02', 'Acer', 'Core i7', 'ldc-ori');
INSERT INTO Computadora VALUES ('ipn-com03', 'HP', 'Itanium', 'ldc-ori');
INSERT INTO Computadora VALUES ('ipn-com04', 'Lenovo', 'Core 2 Duo', 'ldc-pon');
INSERT INTO Computadora VALUES ('ipn-com05', 'Toshiba', 'Core i7', 'ldc-pon');
INSERT INTO Computadora VALUES ('ipn-com06', 'Lanix', 'Core 2 Quad', 'ldc-pon');
/* UPDATE */
/* Pasamos la computadora ipn-com04 a la Sala Oriente */
UPDATE Computadora SET pertenceA_ldc_clave = 'ldc-ori' WHERE
com_clave='ipn-com04';
/* DELETE */
/* Eliminamos la computadora ipn-com03 por presentar demasiadas fallas */
DELETE FROM Computadora where com_clave = 'ipn-com03';
/* SELECT */
SELECT com_clave, com_marca, com_procesador, ldc_clave, ldc_nombre FROM
LaboratorioDeComputo, Computadora WHERE LaboratorioDeComputo.ldc_clave =
Computadora.pertenceA_ldc_clave;
11
3. Relación Muchos a Muchos
3.1 Diagrama conceptual
3.2 Diagrama de objetos
3.3 Frases Un autor escribe varios libros
Un libro es escrito por varios autores
Libro
isbn: String
titulo: String
Autor
registro: String
nombre: String escritoPor escribe
Escribe 0..* 0..*
luis: Autor
registro = ‘01’
nombre = ’Luis’
jose: Autor
registro = ‘02’
nombre = ’Jose’
francisco: Autor
registro = ‘03’
nombre = ’Francisco’
csharp: Libro
isbn = ‘9700000002’
titulo: = ‘Microsoft C#’
jsf: Libro
isbn = ‘9700000001’
titulo: = ‘Java Server Faces’
12
3.4 Diseño de la base de datos
3.5 Ejemplo de tablas
Libro
PK lib_isbn: CHAR(10)
lib_titulo: VARCHAR(50)
+<<PK>> lib_pk()
Autor
PK aut_registro: VARCHAR(2)
aut_nombre: VARCHAR(50)
+<<PK>> aut_pk()
0..*
LibroAutor
FK lib_isbn: CHAR(10)
FK aut_registro: VARCHAR(2)
+<<FK>> libaut_lib_fk( )
+<<FK>>libaut_aut_fk( )
0..*
Libro
lib_isbn lib_titulo
‘9700000001’ ‘Java Server Faces’
‘9700000002’ ‘Microsoft C#’
Autor
aut_registro aut_nombre
‘01’ ‘Luis’
‘02’ ‘Jose’
‘03’ ‘Francisco’
LibroAutor
lib_isbn aut_registro
‘9700000001’ ‘01’
‘9700000001’ ‘03’
‘9700000002’ ‘02’
‘9700000001’ ‘03’
13
3.6 Instrucciones para crear las tablas
CREATE TABLE Libro(
lib_isbn CHAR(10) NOT NULL,
lib_titulo VARCHAR(50) NOT NULL,
CONSTRAINT lib_pk PRIMARY KEY(lib_isbn)
);
CREATE TABLE Autor(
aut_registro CHAR(2) NOT NULL,
aut_nombre VARCHAR(50) NOT NULL,
CONSTRAINT aut_pk PRIMARY KEY(aut_registro)
);
CREATE TABLE LibroAutor(
lib_isbn CHAR(10) NOT NULL,
aut_registro CHAR(2) NOT NULL,
CONSTRAINT libaut_lib_fk FOREIGN KEY(lib_isbn) REFERENCES
Libro(lib_isbn),
CONSTRAINT libaut_aut_fk FOREIGN KEY(aut_registro) REFERENCES
Autor(aut_registro)
);
3.7 Instrucciones para amar la red
INSERT INTO Libro VALUES ('9700000001', 'Java Server Faces');
INSERT INTO Libro VALUES ('9700000002', 'Microsoft C#');
INSERT INTO Autor VALUES ('01', 'Luis');
INSERT INTO Autor VALUES ('02', 'Jose');
INSERT INTO Autor VALUES ('03', 'Francisco');
INSERT INTO LibroAutor VALUES ('9700000001','01');
INSERT INTO LibroAutor VALUES ('9700000001','03');
INSERT INTO LibroAutor VALUES ('9700000002','02');
INSERT INTO LibroAutor VALUES ('9700000002','03');
14
/* UPDATE */
/* Se actualiza la version del jsf */
UPDATE Libro SET lib_titulo='Java Server Faces 2.2' WHERE
lib_isbn='9700000001';
/* DELETE */
/* Francisco se retira del libro Microsoft C# */
DELETE FROM LibroAutor WHERE lib_isbn='9700000002' AND aut_registro='03';
/* SELECT */
SELECT Libro.lib_titulo, Autor.aut_nombre FROM Libro, Autor, LibroAutor
WHERE Libro.lib_isbn=LibroAutor.lib_isbn AND
Autor.aut_registro=LibroAutor.aut_registro ORDER BY Libro.lib_titulo;
15
4. Herencia
4.1 Diagrama conceptual
4.2 Diagrama de objetos
4.3 Frases
Todo luchador puede ser un Boxeador o Karateca
Todo Karateca es un Luchador
Todo Boxeador es un Luchador
Luchador
registro: int
nombre: String
Karateca
colorCinta: String
Boxeador
asaltos: int
categoriaPeso: String
yahir: Luchador
registro = 100
nombre = ‘Yahir’
david: Karateca
registro = 101
nombre = ‘David’
colorCinta = ‘blanca’
luis:Boxeador
registro = 102
nombre = ‘Luis’
asaltos = 10
categoriaPeso = ‘pluma’
16
4.4 Diseño de la base de datos
4.5 Ejemplo de las tablas
Luchador
PK luc_registro: INTEGER
luc_nombre: VARCHAR(50)
+<<PK>> luc_pk( )
Karateca
luc_registro: INTEGER
krt_color_cinta: VARCHAR(8)
+ <<PK>> krt_pk( )
+<<FK>> krt_luc_pk( )
Boxeador
luc_registro: INTEGER
box_asaltos: INTEGER
box_categoria_peso: VARCHAR(12)
+<<PK>>box_pk( )
+<<FK>>box_luc_fk( )
Luchador
luc_registro luc_nombre
100 ‘Yahir’
101 ‘David’
102 ‘Luis’
Karateca
luc_registro krt_color_cinta
101 ‘blanca’
Boxeador
luc_registro box_asaltos box_categoria_peso
102 10 ‘pluma’
17
4.6 Instrucciones para crear la base de datos
CREATE TABLE Luchador(
luc_registro INTEGER NOT NULL,
luc_nombre VARCHAR(50) NOT NULL,
CONSTRAINT luc_pk PRIMARY KEY(luc_registro)
);
CREATE TABLE Karateca(
luc_registro INTEGER NOT NULL,
krt_color_cinta VARCHAR(8) NOT NULL,
CONSTRAINT krt_pk PRIMARY KEY (luc_registro),
CONSTRAINT krt_luc_fk FOREIGN KEY (luc_registro) REFERENCES
Luchador(luc_registro)
);
CREATE TABLE Boxeador(
luc_registro INTEGER NOT NULL,
box_asaltos INTEGER NOT NULL,
box_categoria_peso VARCHAR(12) NOT NULL,
CONSTRAINT box_pk PRIMARY KEY (luc_registro),
CONSTRAINT box_luc_fk FOREIGN KEY (luc_registro) REFERENCES
Luchador(luc_registro)
);
4.7 Instrucciones para armar la red
/* Se crean y se conectan los nodos */
INSERT INTO Luchador VALUES (100, 'Yahir');
INSERT INTO Luchador VALUES (101, 'David');
INSERT INTO Karateca VALUES (101, 'blanca');
INSERT INTO Luchador VALUES (102, 'Luis');
INSERT INTO Boxeador VALUES (102, 10, 'pluma');
18
/* Consulta de la tabla Luchadores */
SELECT * FROM Luchador;
/* Consulta de la tabla Karateca */
SELECT Luchador.luc_registro, Luchador.luc_nombre,
Karateca.krt_color_cinta FROM Luchador, Karateca WHERE
Luchador.luc_registro = Karateca.luc_registro;
/* Consulta de la tabla Boxeador */
SELECT Luchador.luc_registro, luc_nombre, box_asaltos, box_categoria_peso
FROM Luchador, Boxeador WHERE Luchador.luc_registro =
Boxeador.luc_registro;
/* UPDATE */
/* David entrena mucho y se convierte en cinta negra */
UPDATE Karateca SET krt_color_cinta='negra' WHERE luc_registro=101;
/* Yahir se retira de ser luchador */
DELETE FROM Luchador WHERE luc_registro=100;