-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbase_de_datos.tex
722 lines (617 loc) · 43.1 KB
/
base_de_datos.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
\documentclass[12pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{enumerate}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{graphicx}
\usepackage{algpseudocode}
\usepackage{stackrel}
\renewcommand{\theequation}{\arabic{equation}}
\newcounter{neq}
\providecommand{\abs}[1]{\lvert#1\rvert}
\newcommand{\QED}{\hfill \textit{\textbf{Q.E.D.}}}
\author{Agustin Curto, [email protected]}
\title{Resumen de teórico \\ Base de Datos}
\date{2016}
\begin{document}
\maketitle
\tableofcontents
\chapter{Modelado Entidad - Relación}
\section{Conjuto de Entidades}
\begin{itemize}
\item Una \textbf{entidad} es un objeto que existe y es distinguible de los otros objetos. Las entidades tienen atributos.
\par \underline{Ejemplo:} una persona tiene nombres y direcciones.
\item Un \textbf{conjunto de entidades} es un conjunto de entidades del mismo tipo (i.e. con los mismos atributos) que comparte las mismas propiedades.
\par \underline{Ejemplo:} conjunto de todas las personas con los atributos del ejemplo anterior.
\item Un \textbf{dominio} es el conjunto de valores permitidos para cada atributo.
\item Tipos de atributos:
\begin{itemize}
\item Atributos simples y compuestos.
\item Atributos uni-valorados y multi-valorados
\item Atributos derivados, pueden computarse de otros atributos.
\end{itemize}
\end{itemize}
\subsubsection{Notaciones de diagrama}
\begin{figure}[htb]
\centering
\includegraphics[width=6cm, height=4cm]{./imagenes/entidad.png}
\caption{Entidad de nombre E, Atributo simple A1, Atributo compuesto A2, Atributo multivalorado A3, Atributo derivado A4, Clave primaria A1.}
\end{figure}
\section{Claves}
\begin{itemize}
\item Una \textbf{superclave} de un CE es un conjunto de uno o más atributos cuyos valores unívocamente determinan cada entidad.
\item Una \textbf{clave candidata} de un CE es una superclave minimal (i.e. si se quita atributo dejamos de tener superclave, por lo general los ID).
\item Una \textbf{clave primaria} es aquella seleccionada de entre todas las claves candidatas que puedan existir.
\end{itemize}
\section{Correspondencia de cardinales}
\par Sea R un conjunto de relaciones de conjunto de entindades E1 a conjunto de entidades E2.
\begin{itemize}
\item \textbf{Conjuntos de relaciones uno-uno:} una entidad de \textbf{E1} está asociada con a lo más una entidad de \textbf{E2} vía la relación \textbf{R}. Una entidad de \textbf{E2} está asociada con a lo más una entidad de \textbf{E1} vía \textbf{R}.
\item \textbf{Conjuntos de relaciones uno-varios / varios-uno:} una entidad de \textbf{E1} está asociada con ninguna o varias entidades de \textbf{E2} vía la relación \textbf{R}. Una entidad de \textbf{E2} está asociada con a lo más una entidad de \textbf{E1} vía \textbf{R}.
\item \textbf{Conjuntos de relaciones varios-varios:} una entidad de \textbf{E1} está asociada con ninguna o varias entidades de \textbf{E2} vía \textbf{R}. Una entidad de \textbf{E2} está asociada con a lo más una entidad de \textbf{E1} vía \textbf{R}.
\end{itemize}
\begin{center}
\includegraphics[width=10cm, height=4cm]{./imagenes/correspondencia.png}
\end{center}
\section{Formas de participación}
\begin{itemize}
\item \textbf{Participación total:} toda entidad en el conjunto de entidades participa en al menos una relación en el conjunto de relaciones. Es indicada por una línea doble.
\par \underline{Ejemplo:} participación de caja de ahorro en cliente es total. Toda caja de ahorro debe tener clientes asociados.
\item \textbf{Participación parcial:} algunas entidades no participan en alguna relación en el conjunto de relaciones.
\par \underline{Ejemplo:} participación de instructor en supervisor es parcial.
\end{itemize}
\section{Conjunto de entidades débiles}
Un CE que no tiene una clave primaria en el conjunto de sus atributos, se llama \textbf{conjunto de entidades débiles}. La existencia de un CE débiles depende de la existencia de un CE fuertes llamado \textbf{CE identificador}.
\vspace{5mm}
\par \underline{Ejemplo:} ¿En el caso de un libro, con solo su número de inventario como atributo, y una biblioteca cuál sería el CE identificador?
\vspace{2.5mm}
\par Hay un CR varios-uno entre CE débil y CE identificador, donde el CE débil tiene participación total, a este CR se le llama \textbf{CR de identificación}. El mismo se representa con un diamante doble.
\par El \textbf{discriminador} de un CE débiles es un conjunto de atributos que permite distinguir entre todas las entidades de un CE débiles asociadas a la misma entidad fuerte.
\par Para identificar las entidades débiles se forma la clave primaria del CE con la clave primaria del CE identificador más el discriminador del CE débiles.
\section{Diseño de una DB de calidad}
\subsection{Eliminacion de información redundante}
Una vez que se han decidido los CE del problema y los atributos de los CE se pasa a definir los CR, esos CR pueden señalar que algunos atributos en CE son redundantes y por lo tanto necesitan ser removidos.
\vspace{5mm}
\par \underline{Ejemplo:}
\begin{itemize}
\item CE \textbf{aula} con atributos (edificio, número y capacidad)
\item CE \textbf{sección} con atributos (idCurso, idSec, semestre, año, edificio, número)
\item CR \textbf{sec-aula} que relaciona secciones con aulas
\end{itemize}
\par ¿Qué pasa con esta propuesta?
\begin{itemize}
\item edificio y número aparecen en ambos CE pero son clave primaria de aula
\item Luego edificio y número son redundantes en \textbf{sección} y deben ser removidos de allí
\end{itemize}
\subsection{Uso de CE vs Atributos}
A veces tenemos dos alternativas para modelar un objeto perteneciente a un CE E, como un CE o como un atributo de E.
\begin{itemize}
\item Cuando el CE E tiene un solo objeto que tiene un solo valor (atómico), conviene modelar al objeto como un atributo simple.
\item Cuando el CE E tiene cero o más objetos que tienen un solo valor (atómico), se puede modelar al objeto como un atributo multivalorado.
\item Cuando el objeto tiene varios atributos y es poseído por una sola entidad del CE E, conviene modelar el objeto como CE. La razón es que “ser poseído por una sola entidad” no se puede representar usando un atributo.
\item Cuando el objeto tiene varios atributos algunos de los cuales no son de clave primaria del objeto y es poseído por varias entidades del CE E, conviene modelar el objeto como CE. La razón es que los atributos del objeto que no se usan para identificarlo generan redundancia de información, cosa que no pasa cuando el objeto se representa un como CE.
\end{itemize}
\subsection{Errores comunes}
\par Un error muy común es usar la clave primaria de un CE como atributo de otro CE en lugar de usar un CR. La forma correcta sería usar un CR que vincule los dos CE, ya que hace la conexión entre los dos CE explícita, en lugar de implícita vía atributos de la clave primaria de uno de los CE.
\subsection{Uso de CEs vs uso de CR}
\par Muchas veces son posibles dos alternativas para modelar un asunto, como un CE o como un CR.
\begin{itemize}
\item Si CR es \textbf{uno-varios} o \textbf{varios-uno}: si hay atributos, no de clave primaria en el CE A, entonces los atributos de A que no son de clave primaria dan lugar a redundancia de información si se usa alternativa CE. Por lo que conviene usar la opción CR en lugar de CE.
\item Si el CR es \textbf{varios – varios}: si en al menos un CE hay atributos que no son de clave primaria, entonces ocurre igual que antes, los atributos del CE que no son de clave primaria dan lugar a redundancia de información si se usa la opción CE. Por lo que conviene usar CR en lugar de CE.
\end{itemize}
\subsection{CR de grado $>$ 2 vs CR binarias}
\par A veces tenemos las alternativas de modelar una situación como un CR de grado $>$ 2 o como varios CR binarios. Si con los CR binarios puedo capturar los datos del CR de grado $>$ 2 y puedo expresar más restricciones de integridad que con el CR de grado $>$ 2, entonces usar los CR binarios.
\subsection{CE débiles vs Atributo multivalorado compuesto}
\par A veces para modelar una situación tenemos dos alternativas un CE débiles o un atributo multi-valorado compuesto. Si el objeto contemplado tiene su complejidad e involucra varios atributos y es de suma importancia para la organización, es poco conveniente tenerla como un atributo de un CE fuerte, por lo tanto, conviene modelarlo como un CE débiles.
\par Si los objetos siendo considerados están relacionados con entidades de un CE fuerte que no es de identificación, entonces es necesario modelar dichos objetos como CE débiles.
\section{Especialización - Generalización}
Cuando en un diseño ER hay varios CE que son bastante similares en el sentido que comparten varios atributos en común, que tienen las mismas claves primarias y que participan en los mismos CR, aparecen problemas de repetición.
\par Esto es malo ya que estos modelos ocupan demasiado espacio. Muchos CR hacen el diagrama más intrincado, esto se ve agravado cuando el esquema de la BD tiene muchos CE y CR. Al cambiar un CE o CR muchas veces hay que propagar el cambio a otros CE o CR.
\vspace{5mm}
\par La solución a este problema es utilizar especialización-generalización.
\begin{itemize}
\item \textbf{Especialización:} hace referencia a un proceso de diseño \textit{top-down} donde designamos subgrupos dentro de un CE que son distintivos de otras entidades en el CE. Estos subgrupos son CE de más bajo nivel que tienen atributos específicos o participan de CR que no aplican al CE de más alto nivel. Una especialización se denota con un triángulo etiquetado ISA. La relación ISA se llama también relación de superclase – subclase.
\begin{center}
\includegraphics[width=9cm, height=9cm]{./imagenes/especializacion.png}
\end{center}
\item \textbf{Herencia de atributos:} un CE de más bajo nivel hereda:
\begin{itemize}
\item todos los atributos
\item la clave primaria
\item participaciones en CR
\end{itemize}
\par del CE de más alto nivel con el cual está relacionado.
\item \textbf{Generalización:} hace referencia a un proceso de diseño \textit{bottom-up} que generaliza unos cuantos CE que comparten las mismas propiedades en un CE de más alto nivel.
\item \textbf{Restricciones de integridad:}
\par Para indicar si una entidad pertenece o no a más de un CE de nivel más bajo dentro de la generalización.
\begin{itemize}
\item \underline{Disjunto:} una entidad puede pertenecer a solo un CE de nivel más bajo. Usar palabra reservada \textit{disj}.
\item \underline{Solapado:} una entidad puede pertenecer a más de un CE de nivel más bajo.
\end{itemize}
\item \textbf{Restricciones de completitud:}
\par Para indicar si una entidad en el CE de nivel más alto debe pertenecer a al menos uno de los CE de nivel más bajo en la generalización.
\begin{itemize}
\item \underline{Total:} una entidad debe pertenecer a un CE de nivel más bajo. Usar línea doble.
\item \underline{Parcial:} una entidad puede no pertenecer a un CE de nivel más bajo.
\end{itemize}
\end{itemize}
\section{Esquemas e instancias relacionales}
\underline{Definiciones:}
\begin{itemize}
\item A1, A2, …, An son \textbf{atributos}
\item R = (A1, A2, …, An ) es un \textbf{esquema de relación}
\par Dado un enunciado en lenguaje natural, se puede identificar atributos primero, y luego se pueden proponer esquemas de relación para distintos conceptos del problema actual.
\item Dados conjuntos $D_{1}, D_{2}, \dotsc D_{n}$ una \textbf{relación r} es un subconjunto de $D_{1}, D_{2}, \dotsc D_{n}$. Las relaciones son conjuntos (el orden entre las tuplas no importa).
\item Se puede pensar una relación como una tabla con columnas para los dominios $D_{1}, D_{2}, \dotsc D_{n}$ respectivamente.
\item Un \textbf{elemento} \textit{t} $\in$ r es una tupla representado mediante una fila de la tabla.
\end{itemize}
\par Notar que el concepto de relación en el modelo relacional no tiene nada que ver con el concepto de relación en el modelo ER. Es más bien como están acostumbrados a trabajar en matemática.
\par Se puede expresar la información manejada por una organización como un conjunto de relaciones o tablas, en cada columna se deciden los dominios con los que se trabaja para los valores.
\vspace{5mm}
\par \underline{\textbf{Notación:}} r(R) significa r es una relación con esquema de relación R, es decir, las columnas de r tienen como nombres los atributos de R.
\begin{itemize}
\item Los conceptos del problema que se asociaban a esquemas de relación ahora se terminan asociando también a relaciones o tablas de la BD.
\item Los dominios de las tablas pasan a ser los dominios de los atributos del esquema relacional.
\item Además es más fácil de comprender una tabla donde las columnas tienen los nombres de un esquema de relación.
\end{itemize}
\section{Tipos de atributos}
\par El conjunto de valores permitidos para cada atributo se llama \textbf{dominio del atributo}. Se requiere que los valores de los atributos sean atómicos; esto es, indivisibles.
\par A veces no sabemos el valor de un atributo o el mismo aún no existe, para poder reflejar esto en la base de datos se utiliza el valor especial \textbf{null}, el cual es un miembro de todo dominio y significa que el valor es desconocido o no existe. Si para una tupla no tenemos el valor de un atributo por algun motivo, podemos poner null como valor para ese atributo.
\section{DB relacionales}
\underline{Definiciones:}
\begin{itemize}
\item Un \textbf{esquema de una BD relacional} es un conjunto de esquemas de relación $R_{1}, R_{2} \dotsc R_{n}$.
\item \textbf{Una base de datos relacional} consiste de múltiples relaciones $r_{1}(R_{1}), r_{2}(R_{2}) \dotsc r_{n}(R_{n})$
\par Primero definimos los conceptos del problema mediante esquemas de relación, luego definimos los datos como tablas asociadas a esos esquemas, por último podemos poblar las tablas, consultarlas y alterarlas.
\item nombre de relación, expresado en minúscula, r, s, u, r1, r2, ….
\item nombre de esquema de relación, expresado en mayúscula R, S, U, R1, R2, …
\item sea t $\in$ r, r(R), A $\in$ R . t[A] es el valor de t en A.
\item ea t $\in$ r, r(R). t[i] es el valor de t en atributo i-ésimo de R.
\end{itemize}
\subsection{Superclaves}
\underline{Definición:} Sea K $\subseteq$ R , R esquema de relación; K es una \textbf{superclave} de R si los valores para K son suficientes para identificar una tupla única en cada posible relación r(R). Observar que se habla de relaciones para el problema o situación del mundo real que está siendo considerando.
\subsection{Claves candidatas y primarias}
\par Una superclave K es una \textbf{clave candidata} si K es minimal, es decir, para todo atributo de K si se lo quito dejo de tener una superclave.
\par No confundir clave candidata con superclave de cardinalidad mínima. Una de las claves candidatas es elegida para ser la clave primaria.
\vspace{5mm}
\par \underline{Notación:} Se indican los atributos de una clave primaria para un esquema de relación R subrayando los atributos de R que forman la clave primaria.
\subsection{Claves foráneas}
\par Sea $R_{1}$ una \textbf{relación referenciante} y $R_{2}$ una \textbf{relación referenciada}, entonces:
\begin{itemize}
\item \underline{Restricción de clave foránea:} Los valores de uno o más atributos en una tupla de $R_{1}$ aparecen en uno o más atributos de una tupla en $R_{2}$.
\item Los atributos referenciados en $R_{1}$ suelen formar una \textbf{clave primaria} del esquema de $R_{2}$.
\item Los atributos referenciados de $R_{1}$ suelen formar una \textbf{clave candidata }del esquema de $R_{2}$.
\vspace{5mm}
\textbf{Representación gráfica:}
\item Los esquemas se representan con rectángulos conteniendo nombre de esquema y nombres de atributos.
\item Los atributos de clave primaria se subrayan.
\item Las restricciones de clave foránea se representan mediante flechas que van de atributos referenciantes (de esquema referenciante) a atributos referenciados (de esquema referenciado).
\end{itemize}
\section{Diseño de una DB relacional}
\par Existen dos formas de diseñar una buena base de datos:
\begin{itemize}
\item Aprovechar un buen diseño de esquema ER: si se tiene un buen diseño de ER, se lo puede transicionar a un buen diseño relacional.
\item Obtener un buen diseño relacional a partir de los atributos y las restricciones de integridad del problema. La \textbf{teoría de normalización} trabaja con esta idea y trata con cómo diseñar buenos esquemas de BD relacionales.
\end{itemize}
\section{Reducción a esquemas relacionales}
\par Se tiene un buen diseño de esquema de BD usando modelado-ER que se va a
traducir a un conjunto esquemas relacionales con claves primarias y restricciones de clave foránea. Hay reglas de traducción que suelen resolver un porcentaje alto del problema pero esas reglas no contemplan todos los casos.
\par Una propiedad de la traducción de diagramas ER a tablas que se debe respetar es que para cada CE y CR hay un esquema relacional único al cual se asigna el CE / CR.
\vspace{5mm}
\par Además de los equemas de relación obtenidos por la traducción automática se debe obtener:
\begin{itemize}
\item Claves primarias de esquemas de relación: para esto se usa la información de claves primarias de CE.
\item Restricciones de clave foránea: para esto se usa el tipo de elemento de modelo ER a mapear (p.ej. CR, CE débiles, atributo multivalorado, etc.).
\end{itemize}
\subsection{Regla CEF1}
\par Un CE fuerte que no involucra atributos compuestos ni atributos multivalorados se mapea a un esquema relacional con los mismos atributos. La clave primaria del CE se convierte en la clave primaria del esquema relacional.
\begin{center}
\includegraphics[width=7cm, height=3cm]{./imagenes/cef1.png}
\end{center}
\subsection{Regla CEF2}
\par Un CE fuerte que no involucra atributos/subatributos multivalorados se mapea a un esquema relacional con los mismos atributos simples y los subatributos hoja de los atributos compuestos.
\begin{center}
\includegraphics[width=9cm, height=5cm]{./imagenes/cef2.png}
\end{center}
\subsection{Regla CEF3}
\par Un atributo multivalorado M simple de un CE E es representado por un esquema separado EM. EM tiene atributos correspondientes a la clave primaria de E y un atributo correspondiente al atributo multivalorado M. Todos los atributos de EM forman su clave primaria. Se pone una restricción de clave foránea desde EM que referencia a la clave primaria de E.
\begin{center}
\includegraphics[width=8cm, height=7cm]{./imagenes/cef3.png}
\end{center}
\underline{\textbf{Aclaración:}} Cada valor del atributo multivalorado mapea a una tupla separada en la tabla del esquema EM.
\par Por ejemplo un libro con ISBN 970-17-0256-5 y autores con DNIs: 11122256 y 15345678 se mapea a dos tuplas: (970-17-0256-5, 11122256 ) y (970-17-0256-5, 15345678)
\vspace{7mm}
\underline{\textbf{Decisión:}} Los atributos derivados no son explícitamente representados en el modelo de datos relacional. Se verá que si se los necesita una forma de computarlos es por medio de consultas.
\subsection{Regla CR1}
\par Un CR \textbf{varios a varios} es representado con un esquema con atributos para las claves primarias de los dos CE participantes y todos los atributos descriptivos del CR (que no son multivalorados). La clave primaria del esquema del CR es la unión de las claves primarias de los CE que participan en el CR. Para cada CE que participa en el CR se crea restricción de clave foránea que referencia clave primaria de CE.
\begin{center}
\includegraphics[width=8cm, height=5cm]{./imagenes/cr1.png}
\end{center}
\subsection{Regla CR2}
\par Un CR \textbf{varios a uno} o \textbf{uno a varios} que es total en el lado varios puede ser representado agregando atributos extra en el CE del lado varios, conteniendo la clave primaria del lado uno. La clave primaria del CR es la clave primaria del CE del lado varios. Se crea restricción de clave foránea de CR que referencia a clave primaria de CE de lado varios.
\begin{center}
\includegraphics[width=9cm, height=5cm]{./imagenes/cr2.png}
\end{center}
\par Si la participación es parcial en el lado varios, aplicar la regla anterior puede resultar en valores nulos. Esto sucede cuando a una entidad del CE del lado varios no le corresponde ninguna entidad del CE del lado uno.
\subsection{Regla CR3}
\par Un CR \textbf{uno a uno} puede ser mapeado agregando al esquema resultante de traducir uno de los CE participantes los atributos de la clave primaria del otro CE. La clave primaria de cualquier CE puede ser elegida como la clave primaria del CR. Se crea restricción de clave foránea de esquema relacional asociado al CR que referencia clave primaria de otro CE (el que no se tomo de base para hallar el esquema asociado al CR).
\begin{center}
\includegraphics[width=8cm, height=5cm]{./imagenes/cr3.png}
\end{center}
\subsection{Regla CED}
\par Un CE débiles se mapea a una tabla que incluye columnas para la clave primaria del CE identificador más los atributos (no multi-valorados) del CE débiles (achatando jerarquías de atributos compuestos si es necesario). La clave primaria del CE identificador más el discriminador del CE débil forman la clave primaria del esquema relacional de la traducción. Para atributos de esquema de CE débil que provienen de CE identificadora se agrega restricción de clave foránea desde esquema de CE débil a CE identificador. El CR identificador no se mapea.
\begin{center}
\includegraphics[width=8cm, height=5cm]{./imagenes/ced.png}
\end{center}
\subsection{Reducción de generalización}
\par Para traducir generalización iremos proponiendo y evaluando ideas de traducción. Al final decimos bajo qué circunstancias las ideas de traducción son reglas a usar.
\subsubsection{Idea G1:} Traducción de generalización a tablas.
\begin{itemize}
\item Formar una tabla para el CE de nivel más alto (la generalización).
\item Formar una tabla para cada CE especialización que incluye la clave primaria del CE generalización y los atributos locales.
\end{itemize}
\begin{center}
\includegraphics[width=12cm, height=7cm]{./imagenes/g1.png}
\end{center}
\underline{Evaluación de Idea G1:} obtener toda la información de CE de especialización requiere acceder a dos tablas.
\subsubsection{Idea G2:} Formar una tabla para cada CE especialización con los atributos locales y heredados del CE generalización.
\begin{center}
\includegraphics[width=12cm, height=7cm]{./imagenes/g2.png}
\end{center}
\underline{Evaluación de Idea G2:} si dos o más especializaciones contienen la misma entidad, entonces los atributos que no son clave primaria del CE generalización son almacenados redundantemente.
\par Si la generalización es total con la traducción usando esta idea, la tabla del CE generalización no se requiere para almacenar información.
\subsubsection{Idea G3:} Si la generalización es total formar una tabla para cada CE especialización con los atributos locales y heredados; no formar tabla para la generalización. Esta idea es óptima para cuando la generalización es total y disjunta.
\vspace{7mm}
\textbf{En resumen:}
\begin{itemize}
\item Generalización total y disjunta: usar idea G3.
\item Generalización no total y disjunta: usar idea G2.
\item Generalización no disjunta: usar idea G1 (para evitar tener que tratar con redundancia de información).
\end{itemize}
\chapter{Algebra Relacional}
\par Un lenguaje de consultas es un lenguaje en el que un usuario solicita información de la base de datos. Estos lenguajes suelen ser de un nivel superior que el de los lenguajes de programación habituales.
\par En los lenguajes procedimentales el usuario instruye al sistema para que lleve a cabo una serie de operaciones, en la base de datos para calcular el resultado deseado. Por ejemplo, \textbf{álgebra relacional}. Otros lenguajes de consulta a estudiar: SQL (en modelo relacional), XPath y XQuery (en XML).
\par El AR consiste de un conjunto de operadores sobre relaciones que se pueden componer. Se parte de las relaciones de la BD, a esas relaciones se les aplican operadores del AR.
\section{Selección}
\par El operador \textbf{selección} sirve para definir por comprensión subconjuntos de una relación. Se usa la sintaxis $\sigma_{p}(r)$ , donde
\[\sigma_{p}(r) := \lbrace t \in r \; | \; p(t) \rbrace \]
\par Donde p es predicado de selección.
\begin{itemize}
\item p consistente de términos conectados por conectivos proposicionales $\{ \land, \lor, \neg \}$
\item Una relación de comparación \textit{rc} satisface: rc $\in \{=, \textless, >, \neq, \geq, \leq \}$
\item Dada una \textit{rc}, un \textbf{término} se forma de la siguiente manera:
\[ \langle atributo \rangle \; rc \; \langle atributo \rangle,\]
\[ \langle atributo \rangle \; rc \; \langle constante \rangle,\]
\[ \langle constante \rangle \; rc \; \langle atributo \rangle,\]
\end{itemize}
\begin{figure}[htb]
\centering
\includegraphics[width=3cm, height=3cm]{./imagenes/seleccion1.png}
\caption{Relación \textit{r}}
\vspace{5mm}
\includegraphics[width=2.5cm, height=2cm]{./imagenes/seleccion2.png}
\caption{$\sigma_{A=B \; \land \; D > 5}(r)$}
\end{figure}
\pagebreak
\section{Proyección}
\par \textbf{Notación:} $\sqcap_{A_{1}, A_{2} \dotsc A_{k}}(r)$
\vspace{3mm}
\par \textbf{Semántica:}
\begin{itemize}
\item relación de k columnas obtenida de borrar columnas que no son listadas
\item se borran filas duplicadas del resultado
\end{itemize}
\begin{figure}[htb]
\centering
\includegraphics[width=2.5cm, height=3cm]{./imagenes/proyeccion1.png}
\caption{Relación \textit{r}}
\vspace{5mm}
\includegraphics[width=3cm, height=2cm]{./imagenes/proyeccion2.png}
\caption{$\sqcap_{A, C}(r)$}
\end{figure}
\section{Proyección generalizada}
\par \textbf{Notación:} $\sqcap_{F_{1}, F_{2} \dotsc F_{n}}(E)$
\vspace{5mm}
\par Donde los $F_{1}, F_{2} \dotsc F_{n}$ son expresiones aritméticas involucrando constantes y atributos de E. Puedo permutar orden de atributos de \textit{r}.
\vspace{5mm}
\par \underline{Ejemplo:} obtener el salario mensual de un instructor
\begin{center} instructor(ID, name, dept name, salary) \\ salary: es salario anual \end{center}
\[\sqcap_{ID, \; name, \; dept\_name, \; salary \; \div \; 12} \; (instructor)\]
\section{Unión, diferencia e intersección}
\par Operaciones de conjuntos del mismo nombre.
\begin{itemize}
\item $r \cup s = \lbrace t \; | \; t \in r \lor t \in s \rbrace$
\item $r - s = \lbrace t \; | \; t \in r \land t \notin s \rbrace$
\item $r \cap s = \lbrace t \; | \; t \in r \land t \in s \rbrace$
\end{itemize}
\par Condiciones para que estas operaciones tengan sentido.
\begin{enumerate}
\item Ambas relaciones deben tener el mismo número de atributos.
\item Los dominios de atributos de la misma posición deben ser iguales.
\end{enumerate}
\section{Producto cartesiano}
\par \underline{Definición:} $r \; x \; s := \lbrace t \; q \; | \; t \in r \land q \in s \rbrace$
\vspace{5mm}
\par Esquema de $r \; x \; s$ (r(R) y s(S)):
\begin{itemize}
\item Si R y S son disjuntos: R . S
\item Si R y S no son disjuntos, se debe usar renombramiento.
\end{itemize}
\par \underline{Ejemplo:}
\[instructor(ID, \; name, \; dept\_name, \; salary) \]
\[teaches(ID, \; course\_id, \; sec\_id, \; semester, \; year) \]
\par El esquema de $r = instructor \; x \; teaches$ es:
\[ (instructor.ID, \; instructor.name, \, instructor.dept\_name, \; instructor.salary, \; teaches.ID, \]
\[
teaches.course\_id, \; teaches.sec\_id, \; teaches.semester, \; teaches.year)
\]
\par El esquema anterior se puede simplificar a:
\[
(instructor.ID, \; name, \; dept\_name, \; salary, \; teaches.ID, \; course\_id, \; sec\_id, \; semester, \; year) \]
\par Como consecuencias de la convención anterior, no se puede aplicar a $r \; x \; r$ y tampoco se puede aplicar a $r \; x \; E$, con E expresión de consulta arbitraria.
\begin{figure}[htb]
\centering
\includegraphics[width=4cm, height=3cm]{./imagenes/pc1.png}
\caption{Relaciones \textit{r} \textit{s}}
\vspace{5mm}
\includegraphics[width=4cm, height=5cm]{./imagenes/pc2.png}
\caption{$r \; x \; s$}
\end{figure}
\section{Renombramiento}
\par Se quiere poder aplicar operador de AR a expresión E arbitraria de AR, sin embargo para operadores selección y proyección es necesario tener acceso a nombres de atributos, es decir, que se necesita que expresiones arbitrarias de AR tengan nombres para las columnas de las tablas que representan.
\subsubsection{¿Cómo dar nombres de atributo a columnas de tabla asociada a expresión de consulta de AR?}
\par La solución esta en asociar un esquema a una expresión de ER mediante el mecanismo de renombramiento. Si la tabla de una expresión de AR E tiene aridad \textit{n}, entonces:
\[ \rho_{x \; (A_{1}, A_{2} \dotsc A_{n})}(E)\]
\par retorna la tabla de E con nombre X y con atributos renombrados a $A_{1}, A_{2} \dotsc A_{n}$.
\vspace{5mm}
\underline{Ejemplo:}
$\qquad \sigma_{x . A_{1} \; = \; r . A_{1}}(\rho_{x \; (A_{1}, A_{2} \dotsc A_{n})} (E) \; x \; r) $, r tabla de la BD.
\vspace{5mm}
\par Notar que necesito dar nombre X a E para poder decir a cuál atributo A1 me refiero.
\vspace{5mm}
\par A veces solo necesito darle nombre a la tabla de una expresión de AR, por lo que asociamos nombre a una expresión de AR mediante el mecanismo de renombramiento simplificado.
\begin{itemize}
\item $\rho_{x}(E)$ retorna la tabla de E con el nombre X.
\item Por ejemplo: para \textit{r} relación de BD, puedo expresar $(\rho_{s}(r)) \; x \; r$.
\end{itemize}
\section{Definición del AR}
\par Una expresión básica del AR consiste de una de las siguientes:
\begin{itemize}
\item Una relación de la BD
\item Una relación constante
\end{itemize}
\par Si E1 y E2 son expresiones del AR, entonces las siguientes son expresiones del AR:
\begin{itemize}
\item $E1\cup E2$
\item $E1 - E2$
\item $E1\; x \; E2$
\item $\sigma_{p}(E1)$, p predicado en atributos de E.
\item $\sqcap_{s}(E1)$, S lista con algunos de los atributos de E1.
\item $\rho_{x}(E1)$, x es un nombre para el resultado de E1.
\item $\rho_{x \; (A_{1}, \dotsc A_{n})}(E1), \; A_{1}, \dotsc A_{n}$, son nombres de atributos y x es un nombre para el resultado de E1.
\end{itemize}
\section{Vínculo de AR con SQL}
\par En el proyecto de taller trabajaremos con expresiones \textbf{select-from-where} de SQL con sintaxis:
\begin{itemize}
\item select distinct $A_{1}, \dotsc A_{n}$
\item from $r_{1}, \dotsc r_{n}$
\item where P
\end{itemize}
\par Son equivalentes a:
\[\sqcap_{A_{1}, A_{2} \dotsc A_{n}}(\sigma_{p}(r_{1} \; x \; r_{2} \dotsc \; x \; r_{n})) \]
\par Esto es cierto si $r_{1}, r_{2} \dotsc r_{n}$ son relaciones, sino hay que definir AR para multiconjuntos.
\section{Reunión natural}
\par Se puede operar con esquemas de relación, para eso podemos definir algunos operadores sobre esquemas. Se comportan como operaciones sobre listas de atributos.
\begin{itemize}
\item $S – R$: a S le quito los atributos que también están en R.
\item $S . R$: la lista de S seguida de la lista de R (concatenación).
\item $R \cup S := R . (S – R)$.
\end{itemize}
\par \underline{\textbf{Notación:}} $r \bowtie s$. Sean r(R) y s(S), entonces $r \bowtie s$ ($R \cup S$).
\vspace{5mm}
\par $r \bowtie s$ se obtiene como sigue:
\begin{itemize}
\item Sean $t_{r} \in r \; y \; t_{s} \in s$ tal que $t_{r}$ y $t_{s}$ tienen los mismos valores en $R \cap S$ (o sea $t_{r}$ y $t_{s}$ cazan)
\item Si \textit{t} concuerda con $t_{r}$ en R y \textit{t} concuerda con $t_{s}$ en S, entonces $t \in r \bowtie s$.
\end{itemize}
\begin{figure}[htb]
\centering
\includegraphics[width=5cm, height=3cm]{./imagenes/nj1.png}
\caption{Relaciones \textit{r} y \textit{s}}
\vspace{5mm}
\includegraphics[width=3cm, height=3cm]{./imagenes/nj2.png}
\caption{$r \; \bowtie \; s$}
\end{figure}
\underline{Ejemplo:}
\begin{itemize}
\item $R = (A, B, C, D)$
\item $S = (E, B, D)$
\item $R \cup S = (A, B, C, D, E)$
\item $r \bowtie s = \sqcap_{r.A, \; r.B, \; r.C, \; r.D, \; s.E}(\sigma_{r.B = s.B \; \land \; r.D = s.D} (r \; x \; s))$
\item En general:
\[r \bowtie s = \sqcap_{R \cup S}(\sigma_{r.A_{1}=s.A_{1} \; \land \; \dotsc \; \land \; r.A_{n} = s.A_{n}} (r \; x \; s)), \; donde \; R \cap S = \lbrace {A_{1}, \dotsc A_{n}} \rbrace\]
\end{itemize}
\par Algunas propiedades interesantes: r(R), s(S), u(U):
\begin{itemize}
\item $(r \bowtie s) \bowtie u = (r \bowtie (s \bowtie u))$
\item $R \cap S = \emptyset \Rightarrow r \bowtie s = r \; x \; s$
\item $R = S \Rightarrow r \bowtie s = r \cap s$
\end{itemize}
\underline{Ejemplo:}
\begin{itemize}
\item persona(DNI, nombre, apellido)
\item libro(título, ISBN, editorial, edición)
\item libroBib(numInv, ISBN, nombreBib)
\item prestadoA(numInv, nombreBib, DNI)
\item socio(posición, DNI)
\item inscriptoEn(DNI, nombreBib)
\end{itemize}
\par Obtener los ISBN de los libros prestados a Juan Pérez en la biblioteca de “FaMAF”.
\section{División}
\par La operación división, resulta adecuada para muchas consultas que incluyen la frase “para todo/s”.
\vspace{5mm}
\par \underline{Notación:} $r \div s$.
\vspace{3mm}
\par Definición: Sea r(R) y s(S) donde
\begin{itemize}
\item $R = (A_{1}, \dotsc A_{m}, B_{1}, \dotsc B_{n})$
\item $S = (B_{1} \dotsc B_{n})$
\item $r \div s(R - S) \; y \; R - S = (A_{1}, \dotsc A_{m})$
\item $r \div s := \lbrace t \in \sqcap_{R-S}(r) \; | \; \forall u \in s (t.u \in r) \rbrace$
\end{itemize}
\begin{figure}[htb]
\centering
\includegraphics[width=7cm, height=5cm]{./imagenes/div1.png}
\caption{Relaciones \textit{r} y \textit{s}}
\vspace{5mm}
\includegraphics[width=2cm, height=2cm]{./imagenes/div2.png}
\caption{$r \; \div \; s$}
\end{figure}
\par Sea $q = r \div s$ entonces q es la relación más grande que satisface $q \; x \; s \subseteq r$.
\vspace{5mm}
\underline{Ejemplo:}
\begin{itemize}
\item libro(título, ISBN, editorial, edición)
\item libroBib(numInv, ISBN, nombreBib)
\item biblioteca(nombreBib, calle, número)
\par Encontrar los títulos de los libros que están en todas las bibliotecas.
\end{itemize}
\subsubsection{Proceso para hacer una consulta con división:}
\begin{enumerate}
\item Identificar tablas a usar
\item Reescribir consulta en español de modo que quede más claro dónde se usa división y la división sea más evidente.
\item Identificar partes de la división
\begin{itemize}
\item Escribirlas primero en español
\item Luego pasarlas a AR
\end{itemize}
\item Usar proyecciones para que partes cumplan con esquemas exigidos por división.
\item Escribir división, chequearla usando la definición de división y corregirla.
\item Hacer la consulta completa en AR que involucra división.
\end{enumerate}
\section{Agregación}
\par \textbf{Función de Agregación:} toma una colección de valores y retorna un valor simple como resultado. En AR se consideran las siguientes funciones de agregación: avg, min, max, sum, count.
\par Muchas veces ocurre que debemos eliminar múltipes occurrencias de un valor antes de computar una función de agregación. Si queremos eliminar duplicados usamos los mismos nombres de función, con la adición de \textit{distinct} al final.
\vspace{5mm}
\par Operación de agregación en AR
\[\mathsf{G}_{F_{1}(A_{1}), F_{2}(A_{2}), \dotsc F_{n}(A_{n})}(E)\]
\begin{itemize}
\item E expresión de AR
\item Cada $F_{i}$ es una función de agregación
\item Cada $A_{i}$ es un nombre de atributo
\end{itemize}
\par \underline{Semántica:} el resultado tiene una tupla $(a_{1}, a_{2}, \dotsc a_{n})$ donde, para cada \textit{i}, $a_{i}$ es el resultado de aplicar la función de agregación $F_{i}$ al multiconjunto de valores del atributo $A_{i}$ en E.
\vspace{5mm}
\par Otra operación de agregación en AR más compleja
\[ G_{1}, G_{2}, \dotsc G_{n} \; \mathsf{G}_{F_{1}(A_{1}), F_{2}(A_{2}), \dotsc F_{n}(A_{n})}(E)\]
\begin{itemize}
\item E expresión de AR
\item $G_{1}, G_{2}, \dotsc G_{n}$ lista de atributos en los cuales agrupar (puede ser vacío)
\item Cada $F_{i}$ es una función de agregación
\item Cada $A_{i}$ es un nombre de atributo
\end{itemize}
\par \underline{Semántica:}
\begin{itemize}
\item Las tuplas en el resultado de la expresión E se dividen en grupos tales que:
\begin{enumerate}
\item Todas las tuplas del grupo tienen los mismos valores para $G_{1}, G_{2}, \dotsc G_{n}$.
\item Las tuplas de grupos diferentes tienen valores diferentes para $G_{1}, G_{2}, \dotsc G_{n}$.
\end{enumerate}
\item Para cada grupo asociado a $(g_{1}, g_{2}, \dotsc g_{n})$ el resultado tiene una tupla $(g_{1}, g_{2}, \dotsc g_{n}, a_{1}, a_{2} \dotsc a_{m})$, donde, para cada \textit{i}, ai es el resultado de aplicar la función de agregación $F_{i}$ al multiconjunto de valores del atributo $A_{i}$ en el grupo asociado a $(g_{1}, g_{2}, \dotsc g_{n})$.
\end{itemize}
\underline{Ejemplo:}
\begin{itemize}
\item bibliotecario(antiguedad, DNI)
\item trabajaEn(DNI, nombreBib)
\par Obtener el promedio de las antiguedades de los bibliotecarios que trabajan en cada biblioteca.
\end{itemize}
\section{Reuniones externas}
\par Sea r(R) y s(S), se quiere expresar información de casamiento de tuplas de \textit{r} y de \textit{s} y también información de tuplas de \textit{r-tuplas} de \textit{s} que no cazan con tuplas de la otra tabla. Esto no es posible mediante $r \bowtie s$ ya que solo informa para cada tupla de \textit{r} con que tuplas de \textit{s} caza.
\par Para resolver este problema se definen operadores especiales que son extensiones de la reunión natural que evitan pérdida de informaciones de tuplas que no cazan (ya sea en una o ambas de las tablas), para ello se computa la reunión natural y luego se agregan tuplas de una relación que no cazan con las tuplas en la otra relación. \textbf{Usa valores nulos}.
\vspace{5mm}
\par \underline{Ejemplo:}
\begin{figure}[htb]
\centering
\includegraphics[width=6cm, height=2cm]{./imagenes/re1.png}
\caption{Relación Instructor}
\vspace{5mm}
\includegraphics[width=4cm, height=2cm]{./imagenes/re2.png}
\caption{Relación Teaches}
\end{figure}
\begin{itemize}
\item Reunión natural
\begin{figure}[htb]
\centering
\includegraphics[width=9cm, height=2cm]{./imagenes/nj.png}
\caption{Instructor $\bowtie$ Teaches}
\end{figure}
\item Reunión externa a la izquierda
\begin{figure}[htb]
\centering
\includegraphics[width=9cm, height=2cm]{./imagenes/izquierda.png}
\caption{Instructor $\_\bowtie$ Teaches}
\end{figure}
\item Reunión externa a la derecha
\begin{figure}[htb]
\centering
\includegraphics[width=9cm, height=2cm]{./imagenes/derecha.png}
\caption{Instructor $\bowtie\_$ Teaches}
\end{figure}
\item Reunión externa full
\begin{figure}[htb]
\centering
\includegraphics[width=9cm, height=2cm]{./imagenes/full.png}
\caption{Instructor $\_\bowtie\_$ Teaches}
\end{figure}
\end{itemize}
\par Las reuniones externas pueden ser expresadas usando operadores básicos, por ejemplo $r \bowtie s$ puede escribirse como:
\[ (r \bowtie) \cup (r - \sqcap_{R}(r \bowtie s)) \; x \; \lbrace null, null \dotsc null \rbrace\]
\section{Manejo de valores nulos}
\par El resultado de una expresión aritmética involucrando null es null. Las funciones de agregación ignoran valores nulos (decisión arbitraria). Para eliminación de duplicados y agrupamientos a null se lo trata como a cualquier otro valor.
\par Comparaciones (como $\geq, \leq , =, >, \neq$) con valores null retorna el valor de verdad \textit{unknown}. Las comparaciones que incluyan nulos pueden aparecer dentro de expresiones booleanas con conectivos.
\vspace{5mm}
\par Una lógica de tres valores de verdad se usa con el valor de verdad unknown.
\begin{itemize}
\item OR: (\textit{unknown} or true) $=$ true,
\par (\textit{unknown} or false) $=$ \textit{unknown},
\par (\textit{unknown} or unknown) $=$ \textit{unknown}
\item AND: (true and \textit{unknown}) $=$ \textit{unknown},
\par (false and \textit{unknown}) $=$ false,
\par (\textit{unknown} and \textit{unknown}) $=$ \textit{unknown}
\item NOT: (not \textit{unknown}) $=$ \textit{unknown}
\end{itemize}
\begin{itemize}
\item \textbf{Selección:} evalúa el predicado P en $\sigma_{P}(E)$ sobre cada tupla de E. Si P(t) devuelve el valor cierto, se añade \textit{t} al resultado, caso contrario, si P(t) devuelve desconocido o falso, \textit{t} no se añade al resultado.
\item \textbf{Reunión natural} $r \bowtie s$: si dos tuplas $t_{r} \in r \; y \; t_{s} \in s$, tienen un valor nulo en un atributo común, entonces las tuplas no casan.
\item \textbf{Proyección:} trata los nulos como cualquier otro valor al eliminar duplicados.
\item \textbf{Unión, intersección y diferencia:} tratan las tuplas que tienen los mismos valores en todos los campos como duplicados incluso si algunos de los campos tienen valores nulos en ambas tuplas.
\item \textbf{Agregación:} Cuando hay valores nulos en los atributos agregados, la función de agregación a ser aplicada borra los valores nulos antes de aplicarse. Si el multiconjunto resultante está vacío, el resultado de la función de agregación es null.
\end{itemize}
\section{Asignación}
\par La asignación ($\leftarrow$) provee una manera de expresar consultas complejas. También sirve para expresar alteraciones a la BD.
\vspace{5mm}
\par Escribir la consulta como un programa secuencial consistente de:
\begin{enumerate}
\item una serie de asignaciones
\item una expresión cuyo valor se muestra como resultado de la consulta
\end{enumerate}
\par La asignación se hace sobre una variable relacional temporal, es decir, su valor es una tabla.
\par \underline{Ejemplo:}
\begin{itemize}
\item persona(DNI, nombre, apellido)
\item biblioteca(nombreBib, calle, número)
\item bibliotecario(antiguedad, DNI)
\item trabajaEn(DNI, nombreBib)
\par Dar las bibliotecas en las que trabajan los bibliotecarios de apellido Pérez.
\begin{itemize}
\item $r \leftarrow \sigma_{apellido="Perez"} (persona \bowtie bibliotecario)$
\item $s \leftarrow \sqcap_{antiguedad, DNI} (r)$
\item $ \sqcap_{nombreBib} (s \bowtie trabajaEn)$
\end{itemize}
\end{itemize}
\end{document}