04 - Diseño de Bases de Datos II aaaaaaaa

gptjorgito 1 views 78 slides Oct 11, 2025
Slide 1
Slide 1 of 78
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78

About This Presentation

Diseño de base de datos ll


Slide Content

Bases de Datos
Clase4: Diseñode Bases de DatosII

Diseñode base de datos
Análisis de requisitos
Diseño conceptual de bases de datos
Diseño lógico de bases de datos
Usuarios Requisitos
Requisitos Modelo entidad-relación
Modelo entidad-relación Modelo relacional

Hasta ahora
Sabemoscomotransformarrequisitosde usuarioen
modeloentidadrelación(E/R), pero…
¿Quéhacemoscon esto?
Hoy veremoscómotransformarelmodeloE/R al
modelorelacional

Llaves
ModeloRelacionaly Llaves

ModeloRelacional
Los datosse almacenancomotablas:
ID Película Nombre Película Año CategoríaCalificación (IMDB)
1 Interstellar 2014 Fantasía 8.6
2 The Revenant 2015 Drama 8.1
3 The Imitation Game 2014 Biografía 8.1
4 The Theory of Everything2014 Biografía 7.7
Distinguimos:
•Relaciones: a cadatablale llamamosrelación
•Atributos: son las columnasde la relación
•Tuplas: son las filasde la relación
Películas

ModeloRelacional
UnaRelaciones un conjuntode tuplas!!!
-Quieredecir; no hay filasrepetidas
ID Película Nombre Película Año CategoríaCalificación (IMDB)
1 Interstellar 2014 Fantasía 8.6
2 The Revenant 2015 Drama 8.1
3 The Imitation Game 2014 Biografía 8.1
4 The Theory of Everything2014 Biografía 7.7
4 The Theory of Everything2014 Biografía 7.7

ModeloRelacional
UnaRelaciones un conjuntode tuplas, no hay filas
repetidas
ID Película Nombre Película Año CategoríaCalificación (IMDB)
1 Interstellar 2014 Fantasía 8.6
2 The Revenant 2015 Drama 8.1
3 The Imitation Game 2014 Biografía 8.1
4 The Theory of Everything2014 Biografía 7.7
4 The Theory of Everything2014 Biografía 7.7

Llaves
Ejemplo: Una tablacon informaciónde vinos.
Esquema:
Vinos(Productor, Cepa, Gama, Año, Grados, Orígen)
Productor Cepa Gama AñoGradosOrígen
Perez-CruzCabernet Sauvignon Reserva 201413.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 201513.5 Maipo
Tarapaca Merlot Reserva 2011 14
San
Pedro
Viu Manent Carmenere Gran Reserva 2014 12
Colchagu
a
Perez-CruzCabernet SauvignonEdición Especial2014 14 Maipo
… … … … …

Llaves
Son restriccionesque imponemosa un esquemaque todas
las instanciasdebensatisfacer
La restricciónmásimportanteson las llaves
Intuitivamenteunallavepermiteidentificar, de manera
única, unatuplade la relación
Hay distintascategoríasde llaves!
Restriccionesde integridad

Super llave
La super llavepara unarelaciónR es:
un conjunto de atributosde R talque no puedenexistirdos
tuplasenRcon losmismosvaloresde estosatributos
Intuitivamente: siconozcolosvaloresde atributosde la
super llave, puedoidentificarde forma únicaa la tuplade
la relación
Llaves

Superllave
El conjunto de TODOSlosatributosde la relaciónsiempre
formanunasuper llave!
Otrassuper llaves: (Productor, Cepa, Gama, Año, Grados)
(Productor, Cepa, Gama, Año, Orígen)
Productor Cepa Gama AñoGradosOrígen
Perez-CruzCabernet Sauvignon Reserva 201413.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 201513.5 Maipo
Tarapaca Merlot Reserva 2011 14
San
Pedro
Viu Manent Carmenere Gran Reserva 2014 12
Colchagu
a
Perez-CruzCabernet SauvignonEdición Especial2014 14 Maipo
… … … … …
Llaves

Superllave
Como (Productor, Cepa, Gama, Año, Orígen)es
superllave. lo siguienteno estápermitidoenunainstancia:
Productor Cepa Gama AñoGrados Orígen
Perez-CruzCabernet Sauvignon Reserva 2014 13.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 2015 13.5 Maipo
Tarapaca Merlot Reserva 2011 14 San Pedro
Viu Manent Carmenere Gran Reserva 2014 12 Colchagua
Perez-CruzCabernet Sauvignon EdiciónEspecial2014 14 Maipo
Perez-CruzCabernet Sauvignon Edición Especial2014 13 Maipo
Llaves

Llavecandidata
La llave(o llavecandidata) para unarelaciónR es:
un conjunto de atributosde R que es unasuper llavede R,
y no existeun subconjuntopropiode estosatributosque es
unasuper llave
Intuitivamente: unasuper llaveque no se puedeachicar!
Llaves

Llave
(Productor, Cepa, Gama, Año)
Productor Cepa Gama AñoGrados Orígen
Perez-CruzCabernet Sauvignon Reserva 2014 13.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 2015 13.5 Maipo
Tarapaca Merlot Reserva 2011 14 San Pedro
Viu Manent Carmenere Gran Reserva 2014 12 Colchagua
Perez-CruzCabernet Sauvignon Edición Especial2014 14 Maipo
… … … … …
Llaves

Llaveprimaria
La llaveprimariaes unallavecandidataque queremos
destacar, y la subrayamosenelesquema.
Llaves

Llaveprimaria
Vinos(Productor, Cepa, Gama, Año, Grados, Orígen)
Productor Cepa Gama AñoGradosOrígen
Perez-CruzCabernet Sauvignon Reserva 201413.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 201513.5 Maipo
Tarapaca Merlot Reserva 2011 14
San
Pedro
Viu Manent Carmenere Gran Reserva 2014 12
Colchagu
a
Perez-CruzCabernet SauvignonEdición Especial2014 14 Maipo
… … … … …
Llaves

Si definomal la llaveprimariahabráproblemas!
Vinos(Productor, Cepa, Gama, Año, Grados, Orígen)
Un productor no puedeproducirvino de mismacepa y gamaendistintos
años!
Productor Cepa Gama AñoGradosOrígen
Perez-CruzCabernet Sauvignon Reserva 201413.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 201513.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 2014 14 Maipo
… … … … …
Llaves

Si definomal la llaveprimariatendréproblemas!
Vinos(Productor, Cepa, Gama, Año, Grados, Orígen)
Un productor no puedeproducirvinos de distintacepa o gamaenun año!
Productor Cepa Gama AñoGradosOrígen
Perez-CruzCabernet Sauvignon Reserva 201413.5 Maipo
Perez-Cruz Carmenere Reserva 201413.5 Maipo
Perez-CruzCabernet Sauvignon Gran Reserva 2014 14 Maipo
… … … … …
Llaves

Llaves
Super llave(superkey): cualquierconjunto de atributos
quédeterminaa todoelresto
Llave(candidata): cualquierconjunto de atributosqué
determinaa todoelresto, y ningunode sus subconjuntos
es unasuper llave
Llaveprimaria: unallavecandidataque queremos
destacar(la subrayadaenelesquema)
Terminología

ModeloRelacional
Mejortipode llave: ID únicode la tupla!!!!
Llaves
Enla tablaVinos no
existía!
Surrogate key (llavesustituta): unallavegenérica
que simplificacosas. -> id
Vinos(id, Productor, Cepa, Gama, Año, Grados,
Orígen)
Hay que tenercuidadocon la lógicade la
relación!

Llaves
Persona(id, rut, nombre)
Llaveprimaria: id
Ejemplo:
Númerode cliente
Númerode servicio
SKU

Llaves
Persona(id, rut, nombre)
Llaveprimaria: id
Llavescandidatas:
•id
•rut
Ejemplo

Llaves
Persona(id, rut, nombre)
Llaveprimaria: id
(Surrogate key)
Llavescandidatas:
•id
•rut
Superllaves:
•id
•rut
•id,rut
•id,nombre
•rut,nombre
•id,rut,nombre
Personas

Llaves
Nombre Tipo Grados Ciudad-Origen
Austral Lager Lager 4.6 Punta Arenas
Austral Yagan Ale 5.0 Punta Arenas
Kross5 Ale 7.2 Curacavi
KuntsmannTorobayo Ale 5.0 Valdivia
Cervezas(Nombre, Tipo, Grados, Ciudad-Origen)
Nombre Tipo Año GradosCiudad-Origen
Tarapacá Carmenere 2014 13.5 Maipo
Tarapacá Merlot 2014 13.5 Maipo
Gato Merlot 2016 14.0 Maule
Vinos(Nombre, Tipo, Año, Grados, Ciudad-Origen)
En-Stock(Nombre, Cantidad,
Precio-unitario)
Nombre Cantidad
Precio
unitario
¿Cuáles la llave
primariamás
natural?

Llaves
Otroejemplo
Nombre Tipo Grados Ciudad-Origen
Austral Lager Lager 4.6 Punta Arenas
Austral Yagan Ale 5.0 Punta Arenas
Kross 5 Ale 7.2 Curacavi
Kuntsmann Torobayo Ale 5.0 Valdivia
Cervezas(Nombre, Tipo, Grados, Ciudad-Origen)
Nombre Tipo Año GradosCiudad-Origen
Tarapacá Carmenere 2014 13.5 Maipo
Tarapacá Merlot 2014 13.5 Maipo
Gato Merlot 2016 14.0 Maule
Vinos(Nombre, Tipo, Año, Grados, Ciudad-Origen)
En-Stock(Nombre, Cantidad,
Precio-unitario)
Nombre Cantidad
Precio
unitario

Llaves
Nombre Tipo Grados Ciudad-Origen
Austral Lager Lager 4.6 Punta Arenas
Austral Yagan Ale 5.0 Punta Arenas
Nombre Tipo AñoGradosCiudad-Origen
Tarapacá Carmenere2014Carmenere201413.5 Maipo
Tarapacá Merlot 2014 Merlot201413.5 Maipo
Nombre Cantidad Precio-Unitario
Tarapacá Carmenere 2014 600 2000
Cervezas(Nombre, Tipo, Grados, Ciudad-Origen)
Vinos(Nombre, Tipo, Año, Grados, Ciudad-Origen)
En-Stock(Nombre, Cantidad, Precio-unitario)
Otroejemplo--Alternativa 1: nombremas especificopara vinos

Llaves
Otroejemplo--Alternativa 2: crearun id
id Nombre Tipo GradosCiudad-Origen
CauL00 Austral LagerLager 4.6 Punta Arenas
CauY00 Austral Yagan Ale 5.0 Punta Arenas
id Nombre Tipo Año GradosCiudad-Origen
VTTC14 TarapacáCarmenere 2014 13.5 Maipo
VTTM14 Tarapacá Merlot 2014 13.5 Maipo
id Cantidad Precio-Unitario
CAuL00 600 2000
VTTC14 200 6000
Cervezas(id, Nombre, Tipo, Grados, Ciudad-Origen)
Vinos(id, Nombre, Tipo, Año, Grados, Ciudad-Origen)
En-Stock(id, Cantidad, Precio-unitario)

Llaves
Otroejemplo–Alternativa 3: tablasEn-Stock separadas
Nombre TipoGradosCiudad-Origen
Austral LagerLager4.6 Punta Arenas
Austral YaganAle 5.0 Punta Arenas
… … … …
Cervezas(Nombre, Tipo, Grados, Ciudad-Origen)
Cerveza-En-Stock(Nombre, Cantidad, Precio-Unitario)
Nombre Cantidad Precio-Unitario
Austral Lager 600 2000
Nombre Tipo AñoGradosCiudad-Origen
TarapacaCarmenere20144.6Punta Arenas
Tarapaca Merlot20145.0Punta Arenas
Gato Merlot201614.0 Maule
Vinos(Nombre, Tipo, Año, Grados, Ciudad-Origen)
Vino-En-Stock(Nombre, Tipo, Año, Cantidad, Precio-Unitario
Nombre Tipo AñoCantidadPrecio-Unitario
TarapacaMerlot2014 200 6500

Llaves
Otroejemplo–Alternativa 4: combinarlas tablas
Nombre TipoGradosCiudad-Origen Cantidad Precio-Unitario
Austral LagerLager 4.6 Punta Arenas 300 2000
Austral YaganAle 5.0 Punta Arenas 600 ?
Cervezas(Nombre, Tipo, Grados, Ciudad-Origen, Cantidad, Precio-Unitario)
Nombre Tipo AñoGradosCiudad-Origen CantidadPrecio-Unitario
TarapacaCarmenere20144.6Punta Arenas 200 6000
Tarapaca Merlot20145.0Punta Arenas ? 6500
Gato Merlot201614.0 Maule 150 ?
Vinos(Nombre, Tipo, Año, Grados, Ciudad-Origen, Cantidad, Precio-Unitario)

Del DiagramaE/R al
ModeloRelacional

Diseñode base de datos
Análisis de requisitos
Diseño conceptual de bases de datos
Diseño lógico de bases de datos
Usuarios Requisitos
Requisitos Modelo entidad-relación
Modelo entidad-relación Modelo relacional

M. E/R →M. Relacional
Producto(nombre: string, precio: int, categoría: string)
Compañía(nombre: string, valor-acción: int)
Fabrica(Producto.nombre: string, Compañia.nombre, desde: date)
Compañía
nombre
valor-acción
nombre
precio
categoría
desde
fabricaProducto
Las llaves de las entidades
involucradas forman una
super llave para la relación

M. E/R →M. Relacional
Producto(nombre: string, precio: int, categoría: string)
CREATETABLEproducto(
nombrevarchar(30),
precioint,
categoriavarchar(30),
PRIMARYKEY(nombre)
)
nombre
precio
categoría nombre valor-acción
desde
Producto fabrica Compañía

M. E/R →M. Relacional
Compañía(nombre: string, valor-acción: int)
CREATETABLEcompania(
nombrevarchar(30),
valor_accionint,
PRIMARYKEY(nombre)
)
nombre
precio
categoría nombre valor-acción
desde
Producto fabrica Compañía
¿Como relacionamosla tabla
companiacon la tabla
producto?

M. E/R →M. Relacional
CREATETABLEfabrica(
p_nombrevarchar(30),
c_nombrevarchar(30),
desdedate,
PRIMARYKEY(p_nombre, c_nombre),
FOREIGNKEY(p_nombre) REFERENCES producto(nombre),
FOREIGNKEY(c_nombre) REFERENCES compania(nombre)
)
Fabrica(Producto.nombre: string, Compañia.nombre, desde: date)
Llavesforáneas!
nombre
precio
categoría nombre valor-acción
desde
Producto fabrica Compañía
¡Usandollaves
foraneas!

Paréntesis:
Llavesforáneas

LlavesForáneas
Cuandolareferenciaalatablaesunallave:
Y B
1,...,B
nson llavepara S
La relaciónR contienela llavede la relaciónS
¿Que es unallaveforanea?
Pero hay que tenercuidado, porejemplo:

Llavesforáneas
¿Quépasaaquí?
pid nombre precio
1 SonyXZ89 $100.000
2 SonyXperia1 $1.000.000
3 Huawei23 $1000
cid nombre
C1 Sony
C2 Apple
pid cid
1 C1
2 C1
3 C8
89 C2
fabrica
producto compania
Compañía
nombre
nombre
pid
fabricaProducto
precio
cid

Llavesforáneas
¿Quépasaaquí?
pid nombre precio
1 SonyXZ89 $100.000
2 SonyXperia1$1.000.000
3 Huawei23 $1000
cid nombre
C1 Sony
C2 Apple
pid cid
1 C1
2 C1
3 C8
89 C2
fabrica
producto compania
???
C8 No existeenla
tablacompania!
Compañía
nombre
nombre
pid
fabricaProducto
precio
cid

Llavesforáneas
¿Quépasaaquí?
pid nombre precio
1 SonyXZ89 $100.000
2 SonyXperia1$1.000.000
3 Huawei23 $1000
cid nombre
C1 Sony
C2 Apple
pid cid
1 C1
2 C1
3 C8
89 C2
fabrica
producto compania
???
C8 No existeenla
tablacompania!
???
89 No existeenla
tablaproducto!
Compañía
nombre
nombre
pid
fabricaProducto
precio
cid

¿CómorepresentarE/R
con llavesforáneas?

M. E/R →M. Relacional
Producto fabrica Compañía
nombre
precio
categoría nombre
valor-acción
desde
Producto(nombre: string, precio: int, categoría: string)
Compañía(nombre: string, valor-acción: int)
Fabrica(Producto.nombre: string, Compañia.nombre, desde: date)
¿Que hacemosenestecaso?

M. E/R →M. Relacional
Producto(nombre: string, precio: int, categoría: string)
Compañía(nombre: string, valor-acción: int)
Fabrica(Producto.nombre: string, Compañia.nombre, desde: date)
¿Que hacemosenestecaso?
No se necesita que
Compañia.nombre sea llave
Producto.nombre forma una llave
candidata
Producto fabrica Compañía
nombre
precio
categoría nombre
valor-acción
desde

M. E/R →M. Relacional
Producto(nombre: string, precio: int, categoría: string,
Compañía.nombre: string, desde: date)
Compañía(nombre: string, valor-acción: int)
¿Y ahora?
Sólo necesitamos una llave foránea
en Producto.
Agregamos también el atributo de la
relación.
Producto fabrica Compañía
nombre
precio
categoría nombre
valor-acción
desde

M. E/R →M. Relacional
Producto(nombre: string, precio: int, categoría: string,
Compañía.nombre: string, desde: date)
Compañía(nombre: string, valor-acción: int)
Un mejordiagrama…
Sólo necesitamos una llave foránea
en Producto.
Agregamos también el atributo de la
relación.
Producto fabrica Compañía
nombre
precio
categoría nombre
valor-acción
desde

M. E/R →M. Relacional
¿Y enestecaso?
Producto(nombre: string, precio: int, categoría: string)
Compañía(nombre: string, valor-acción: int)
Fabrica(Producto.nombre: string, Compañia.nombre, desde: date)
Podemos hacer llave a Producto.nombre o
a Compañía.nombre
Producto fabrica Compañía
nombre
precio
categoría nombre
valor-acción
desde

M. E/R →M. Relacional
modelo
dirección
categoría
id
año
Auto
Arrendar
Local de
Autos
Persona
cliente cajero
fecha
nombre
rut
Auto(modelo: string, año: int, categoría: string)
Local de Autos(id: int, dirección: string)
Persona(rut: string, nombre: string)
Arriendo(A.modelo: string, A.año: int, Pr.rut-cl: string, Pr.rut-ca: string, L.id: int, fecha: date )
¿Que hacemosenestecaso?

¿Cómorepresentarun M.
E/R enun M. Relacional
con jerarquiade clases?

Ejemplo
Bebida
Vino
nombre
origen
Cerveza
isA isA
año
Jerarquíade clases

M. E/R →M. Relacional
Vino(nombre: string, origen: string, año: string)
Cerveza(nombre: string, origen: string)
Bebida
Vino
nombre
origen
Cerveza
isA isA
año
Jerarquíade clases
Opción1: Tablassolo para las subclases
Bebida(nombre: string, origen: string)
Vino(nombre: string, año: string)
Cerveza(nombre: string)
Opción2: Tablapara la superclase
¿Cuáles mejor?
Si hay muchosolapamiento: opción2.
De lo contrariotendríamosmucharepeticiónde datos.
Se requierenjoins para acceder a
todoslosdatos

Si no hay cobertura: opción2.
No hay otraopcióno no podríamosguardarelwhisky :(
M. E/R →M. Relacional
Vino(nombre: string, origen: string, año: string)
Cerveza(nombre: string, origen: string)
Jerarquíade clases
Opción1: Tablassolo para las subclases
Bebida(nombre: string, origen: string)
Vino(nombre: string, año: string)
Cerveza(nombre: string)
Opción2: Tablapara la superclase
¿Cuáles mejor?
Se requierenjoins para acceder a
todoslosdatos
Bebida
Vino
nombre
origen
Cerveza
isA isA
año

M. E/R →M. Relacional
Vino(nombre: string, origen: string, año: string)
Cerveza(nombre: string, origen: string)
Jerarquíade clases
Opción1: Tablassolo para las subclases
Bebida(nombre: string, origen: string)
Vino(nombre: string, año: string)
Cerveza(nombre: string)
Opción2: Tablapara la superclase
¿Cuáles mejor?
Si hay muchasconsultaspornombre: opción2.
Con la opción1 tendríamosque consultardos tablas.
Se requierenjoins para acceder a
todoslosdatos
Bebida
Vino
nombre
origen
Cerveza
isA isA
año

M. E/R →M. Relacional
Bebida
nombre
origen
año
Jerarquíade clases
Opción3: Quitarla jerarquía
Bebida(nombre: string, origen: string, año: string, tipo: string)
•Muchasrepeticionesde la columnatipo.
•Puedeque no se conozcaeltipo(nulls).
•Pero mássencillo(y comprimible)
tipo

¿Cómorepresentarun M.
E/R enun M. Relacional
con entidadesdébiles?

Ejemplo
Evaluación de Curso
fecha
código
nombre
nombre
Entidadesdébiles

M. E/R →M. Relacional
Entidadesdébiles
Evaluación de Curso
fecha
código
nombre
nombre
Curso(codigo: string, nombre: string)
¿Quétablasnecesitamos?
¿Estábien esto?
La tablaDe es redundante(1-a-algo)
(ymal nombrepara unatabla)
De(E.nombre: string, C.código: string)
Evaluación(nombre: string, C.código: string, fecha: date)

M. E/R →M. Relacional
Entidadesdébiles
Curso(codigo: string, nombre: string)
Evaluación(nombre: string, C.código: string, fecha: date)
¡Ahorasí!
CREATETABLEevaluacion(
nombrevarchar(30) NOTNULL,
codigovarchar(30) NOTNULL,
fechadate,
PRIMARYKEY (nombre, codigo)
FOREIGNKEY(codigo) REFERENCES curso(codigo) ONDELETECASCADE
)
Evaluación de Curso
fecha
código
nombre
nombre

M. E/R →M. Relacional
Entidadesdébiles
Evaluación
de Curso
fecha
código nombrenombre
Nota eval
Alumno
rut
nombre
autor
preguntavalor
¿Y las relaciones?
Curso(codigo: string, nombre: string)
Evaluación(nombre: string, C.código: string, fecha: date)
Nota(pregunta: int, E.nombre: string, C.código: string, A.rut: string, valor: float)
Alumno(rut: string, nombre: string)

¿Cómorepresentarun M.
E/R enun M. Relacional
con agregacion?

Ejemplo: Arrendarun auto
Dirección
desde
categoría
modelo
precio
hasta
disponibilidad

modelo
dirección
categoría
codigo
Auto
Arrendar
Local de
Autos
Persona
desde
nombre
rut
tiene
precio_por_dia
hasta

M. E/R →M. Relacional
Agregación
Auto(categoria: string, modelo: string) as A
LocalDeAutos(codigo: string, direccion: string) as L
Tiene(A.categoría: string, L.código: string, precio_por_dia: int) as T
Persona(rut: string, nombre: string) as P
Arrendar(T.a.categoría: string, T.l.código: string, P.rut, desde: date, hasta: date)
modelo
codigo
categoría
direccion
Auto
Arrendar
Local de
Autos
Persona
desde
nombre rut
tiene
precio_por_dia
hasta
Falta …..
Multiplicidades
Entrega en dirección diferente

Principiosbásicosdel
diseño

Principiosbásicosdel diseño
1. Fidelidadal problema
Producto compra Persona
País Presidente Persona
Las relacionesno tienennada que verentre si

Principiosbásicosdel diseño
Elatributoproducido_poresredundanteypuede
generaranomalías
2. Evitarredundancia
¿Quéestámal?

Principiosbásicosdel diseño
3. Elegirentidadesy relaciones
correctamente
Seriamejorcrearunaentidadpersonalacualrelacione
elproductoatravesdelacompra

Principiosbásicosdel diseño
4. No complicarmásde lo necesario
¿Quéestámal?
Fechapuedeserunatributodecompra

Principiosbásicosdel diseño
5. Buena elecciónde llaveprimaria.
Al momentode diseñarsiemprequeremosidentificartodaslos
atributosde las entidadesque son candidatosa ser llavede la tabla,
a estosles llamamosnatural key, porqueson columnasque
naturalmentetienenelcomportamientode unallave. Por ejemplode
la siguientetabla:
Usuario(email, rut, username, nombre, tipo, fecha_de_inscripcion)
rut, email y username son posiblesnatural keys.
...peroenla prácticael99% de las veceses mejorusar unacolumna
inventada, sin significadoque sea autogeneradaporelRDBMS. A
estole llamamossurrogate key.

Principiosbásicosdel diseño
Elecciónde llaveprimaria.
Bueno enrealidades algo medio opinionado...

Principiosbásicosdel diseño
Elecciónde llaveprimaria.
Bueno enrealidades algo medio opinionado...
Pero enla prácticalosframeworks de desarrolloweb modernos
esperanunasurrogate key llamadaid comollaveprimariae inclusola
generanpordefecto.
La tablaanterior deberíamosgenerarlaasí:
CREATETABLEusuario(
id SERIAL,
email nombrevarchar(30) UNIQUE NOT NULL,
RUTvarchar(30) UNIQUE NOT NULL,
fechadate,
PRIMARYKEY(id)
)

Restriccionesde
integridad

Restriccionesde integridad
Sonrestriccionesformalesqueimponemosaunesquemaque
todassusinstanciasdebensatisfacer.Algunasson:
•Devaloresnulos:Elvalorpuedeonosernulo.
•Unicidad:Dadounatributo,nopuedenhaberdostuplas
conelmismovalor.
•Dellave:elvaloresúnicoynopuedesernull.
•Dereferencia:sisetrabajaenunacompañía,estadebe
existir(Llavesforáneas).
•Dedominio:laedaddelaspersonasdebeestarentre0y
150años.

M. E/R →M. Relacional
Curso(codigo: string, nombre: string)
Evaluación(nombre: string, C.código: string, fecha: date)
CREATETABLEevaluacion(
nombrevarchar(30)NOTNULL,
codigovarchar(30) NOTNULL,
fechadate DEFAULT NOW(),
PRIMARYKEY (nombre, codigo)
FOREIGNKEY(codigo) REFERENCES curso(codigo) ONDELETECASCADE
)
fecha
código
nombr
e
nombre
deEvaluación Curso
¿Que restricciones
vesaquí?

M. E/R →M. Relacional
Curso(codigo: string, nombre: string)
Evaluación(nombre: string, C.código: string, fecha: date)
CREATETABLEevaluacion(
nombrevarchar(30)NOTNULL,
codigovarchar(30) NOTNULL,
fechadate DEFAULT NOW(),
PRIMARYKEY (nombre, codigo)
FOREIGNKEY(codigo) REFERENCES curso(codigo) ONDELETECASCADE
)
No puede ser nulo
Tiene que tener a lo más 30 caracteres
No puede ser nulo
Tiene que ser una fecha, y su valor
por defecto es la fecha actual
La llave son “nombre” y “código”
“codigo” es una llave foránea a la tabla curso
Borrar las tuplas de evaluación que dependan de
un código en la tabla curso que fue eliminado.
fecha
código
nombr
e
nombre
deEvaluación Curso
¿Que restricciones
vesaquí?

Restriccionesde integridad
Integridadde la entidad
Unejemplodetabladeprofesorconalgunas
restricciones:
CREATETABLEProfesor(
idintPRIMARYKEY,
nombrevarchar(30) NOTNULL,
apellidosvarchar(30) NOTNULL,
telefonovarchar(30) NOTNULL,
id_universidadint,
nivelvarchar(20) DEFAULT'Pregrado'
FOREIGNKEY(id_universidad) REFERENCES Universidad(id)
)
Profesor trabaja Universidad

Restriccionesde integridad
Participación
Cadaprofesornecesariamentetrabajaenunaúnica
universidad:
Cadaprofesorpuedetrabajarenunaúnicauniversidad
(peropuedeestarsintrabajo!):
Profesor trabaja Universidad
Profesor trabaja Universidad

Restriccionesde integridad
Participación
Cadaprofesornecesariamentetrabajaenunaúnica
universidad
CREATETABLEProfesor(
idintPRIMARYKEY,
nombrevarchar(30) NOTNULL,
apellidosvarchar(30) NOTNULL,
telefonovarchar(30) NOTNULL,
id_universidadintNOTNULL,
nivelvarchar(20) DEFAULT'Pregrado'
FOREIGNKEY(id_universidad) REFERENCES Universidad(id)
)
Profesor trabaja Universidad

Restriccionesde integridad
Dominio
Queremosrestringireldominiodelascolumnas.Una
formasimpledehacerestoenSQLesconCHECK:
CREATETABLEFestival(
idintPRIMARYKEY,
nombrevarchar(30) NOTNULL,
fecha_iniciodateNOTNULL,
fecha_findateNOTNULL,
preciointNOTNULL,
CHECK( precioBETWEEN10000AND1000000),
CHECK( fecha_fin> fecha_inicio)
)
Tags