-
Notifications
You must be signed in to change notification settings - Fork 0
/
LibroBasesDeDatos.tex
2653 lines (1869 loc) · 121 KB
/
LibroBasesDeDatos.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
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% ****************************************************************************************
% ********************* BASES DE DATOS ****************************
% ****************************************************************************************
% =======================================================
% ======= HEADER FOR DOCUMENT ============
% =======================================================
% ********* SPECIFIC FOR THIS BOOK ********
\def\ProjectAuthorLink{https://github.com/CompilandoConocimiento}
\def\ProjectNameLink{\ProjectAuthorLink/LibroBasesDeDatos}
% ********* DOCUMENT ITSELF **************
\documentclass[12pt, fleqn]{report} %Type of doc and size of font and left equations
\usepackage[margin=1.2in]{geometry} %Margins and Geometry pacakge
\usepackage{ifthen} %Allow simple programming using if - then
\usepackage[hidelinks]{hyperref} %Allow to create hiperlinks and Fuck Firefox
\usepackage{pdfpages} %Allow us 'import' PDF's
\hypersetup{pageanchor=false} %Solve 'double page 1' warnings in build :v
\setlength{\parindent}{0pt} %Eliminate ugly indentation
\author{Oscar Andrés Rosas} %Who I am
% ********* LANGUAJE *****************
\usepackage[spanish]{babel} %Please allow me to type in spanish
\usepackage[utf8]{inputenc} %Lets use UFT-8
\usepackage[T1]{fontenc} %Allow for better font support
\usepackage{textcmds} %Allow us to use quoutes
\usepackage{changepage} %Allow us to use identate paragraphs
\usepackage{anyfontsize} %All the sizes for fonts wiiiii!
% ********* MATH AND HIS STYLE *********
\usepackage{ntheorem, amsmath, amssymb, amsfonts} %All fucking math, I want all!
\usepackage{mathrsfs, mathtools, empheq} %All fucking math, I want all!
\usepackage{cancel} %Negate symbol
\usepackage{centernot} %Allow me to negate a symbol
\decimalpoint %Use decimal point
% ********* GRAPHICS AND IMAGES *********
\usepackage{graphicx} %Allow to create graphics
\usepackage{float} %For images
\usepackage{wrapfig} %Allow to create images
\graphicspath{ {Graphics/} } %Where are the images :D
% ********* LISTS AND TABLES ***********
\usepackage{listings, listingsutf8} %We will be using code here
\usepackage[inline]{enumitem} %We will need to enumarate
\usepackage{tasks} %Horizontal lists
\usepackage{longtable} %Lets make tables awesome
\usepackage{booktabs} %Lets make tables awesome
\usepackage{tabularx} %Lets make tables awesome
\usepackage{multirow} %Lets make tables awesome
\usepackage{multicol} %Create multicolumns
% ********* REMOVE SOME ERRORS **********
\hbadness=10000 %Ignore \vbox and \hbox warings
\hfuzz=\maxdimen\newdimen\hfuzz %Ignore \vbox and \hbox warings
% ********* HEADERS AND FOOTERS ********
\usepackage{fancyhdr} %Lets make awesome headers/footers
\pagestyle{fancy} %Lets make awesome headers/footers
\setlength{\headheight}{16pt} %Top line
\setlength{\parskip}{0.5em} %Top line
\renewcommand{\footrulewidth}{0.5pt} %Bottom line
\lhead { %Left Header
\hyperlink{chapter.\arabic{chapter}} %Make a link to the current chapter
{\normalsize{\textsc{\nouppercase{\leftmark}}}} %And fot it put the name
}
\rhead { %Right Header
\hyperlink{section.\arabic{chapter}.\arabic{section}} %Make a link to the current chapter
{\footnotesize{\textsc{\nouppercase{\rightmark}}}} %And fot it put the name
}
\rfoot{\textsc{\small{\hyperref[sec:Index]{Ve al Índice}}}} %This will always be a footer
\fancyfoot[L]{ %Algoritm for a changing footer
\ifthenelse{\isodd{\value{page}}} %IF ODD PAGE:
{\href{https://SoyOscarRH.github.io/} %DO THIS:
{\footnotesize %Send the page
{\textsc{Oscar Andrés Rosas}}}} %Send the page
{\href{https://compilandoconocimiento.com} %ELSE DO THIS:
{\footnotesize %Send the author
{\textsc{Compilando Conocimiento}}}} %Send the author
}
% =======================================================
% =================== COMMANDS =====================
% =======================================================
% =========================================
% ======= NEW ENVIRONMENTS ============
% =========================================
\newenvironment{Indentation}[1][0.75em] %Use: \begin{Inde...}[Num]...\end{Inde...}
{\begin{adjustwidth}{#1}{}} %If you dont put nothing i will use 0.75 em
{\end{adjustwidth}} %This indentate a paragraph
\newenvironment{SmallIndentation}[1][0.75em] %Use: The same that we upper one, just
{\begin{adjustwidth}{#1}{}\begin{footnotesize}} %footnotesize size of letter by default
{\end{footnotesize}\end{adjustwidth}} %that's it
\def \Eq {equation} %Stupid Visual studio error
\newenvironment{MultiLineEquation}[1] %Use: To create MultiLine equations
{\begin{\Eq}\begin{alignedat}{#1}} %Use: \begin{Multi..}{Num. de Columnas}
{\end{alignedat}\end{\Eq}} %And.. that's it!
\newenvironment{MultiLineEquation*}[1] %Use: To create MultiLine equations
{\begin{\Eq*}\begin{alignedat}{#1}} %Use: \begin{Multi..}{Num. de Columnas}
{\end{alignedat}\end{\Eq*}} %And.. that's it!
% =========================================
% == GENERAL TEXT & SYMBOLS ENVIRONMENTS ==
% =========================================
% ===== TEXT ======================
\newcommand \Quote {\qq} %Use: \Quote to use quotes
\newcommand \Over {\overline} %Use: \Bar to use just for short
\newcommand \ForceNewLine {$\Space$\\} %Use it in theorems for example
\newcommand \ForceColumnBreak {\vfill\null\columnbreak} %Use only in multicols
% ===== SPACES ====================
\DeclareMathOperator \Space {\quad} %Use: \Space for a cool mega space
\DeclareMathOperator \MegaSpace {\quad \quad} %Use: \MegaSpace for a cool mega mega space
\DeclareMathOperator \MiniSpace {\;} %Use: \Space for a cool mini space
% ===== MATH TEXT =================
\newcommand \Such {\MiniSpace | \MiniSpace} %Use: \Such like in sets
\newcommand \Also {\MiniSpace \text{y} \MiniSpace} %Use: \Also so it's look cool
\newcommand \Remember[1] {\Space\text{\scriptsize{#1}}} %Use: \Remember so it's look cool
% ===== THEOREMS: IN SPANISH :0 ===
\newtheorem{Theorem} {Teorema}[section] %Use: \begin{Theorem}[Name]\label{Nombre}...
\newtheorem{Corollary} {Colorario}[Theorem] %Use: \begin{Corollary}[Name]\label{Nombre}...
\newtheorem{Lemma}[Theorem] {Lemma} %Use: \begin{Lemma}[Name]\label{Nombre}...
\newtheorem{Definition} {Definición}[section] %Use: \begin{Definition}[Name]\label{Nombre}...
\theoremstyle{break} %THEOREMS START 1 SPACE AFTER Fuck!
% ===== LOGIC =====================
\newcommand \lIff {\leftrightarrow} %Use: \lIff for logic iff
\newcommand \lEqual {\MiniSpace \Leftrightarrow \MiniSpace} %Use: \lEqual for a logic double arrow
\newcommand \lInfire {\MiniSpace \Rightarrow \MiniSpace} %Use: \lInfire for a logic infire
\newcommand \lLongTo {\longrightarrow} %Use: \lLongTo for a long arrow
% ===== FAMOUS SETS ===============
\DeclareMathOperator \Naturals {\mathbb{N}} %Use: \Naturals por Notation
\DeclareMathOperator \Primes {\mathbb{P}} %Use: \Primes por Notation
\DeclareMathOperator \Integers {\mathbb{Z}} %Use: \Integers por Notation
\DeclareMathOperator \Racionals {\mathbb{Q}} %Use: \Racionals por Notation
\DeclareMathOperator \Reals {\mathbb{R}} %Use: \Reals por Notation
\DeclareMathOperator \Complexs {\mathbb{C}} %Use: \Complex por Notation
\DeclareMathOperator \GenericField {\mathbb{F}} %Use: \GenericField por Notation
\DeclareMathOperator \VectorSet {\mathbb{V}} %Use: \VectorSet por Notation
\DeclareMathOperator \SubVectorSet {\mathbb{W}} %Use: \SubVectorSet por Notation
\DeclareMathOperator \Polynomials {\mathbb{P}} %Use: \Polynomials por Notation
\DeclareMathOperator \VectorSpace {\VectorSet_{\GenericField}} %Use: \VectorSpace por Notation
\DeclareMathOperator \LinealTransformation {\mathcal{T}} %Use: \LinealTransformation for a cool T
\DeclareMathOperator \LinTrans {\mathcal{T}} %Use: \LinTrans for a cool T
\DeclareMathOperator \Laplace {\mathcal{L}} %Use: \LinTrans for a cool T
% ===== CONTAINERS ===============
\newcommand{\Set}[1] {\left\{ \; #1 \; \right\}} %Use: \Set {Info} for INTELLIGENT space
\newcommand{\bigSet}[1] {\big\{ \; #1 \; \big\}} %Use: \bigSet {Info} for space
\newcommand{\BigSet}[1] {\Big\{ \; #1 \; \Big\}} %Use: \BigSet {Info} for space
\newcommand{\biggSet}[1] {\bigg\{ \; #1 \; \bigg\}} %Use: \biggSet {Info} for space
\newcommand{\BiggSet}[1] {\Bigg\{ \; #1 \; \Bigg\}} %Use: \BiggSet {Info} for space
\newcommand{\Wrap}[1] {\left( #1 \right)} %Use: \Wrap {Info} for INTELLIGENT space
\newcommand{\bigWrap}[1] {\big( \; #1 \; \big)} %Use: \bigBrackets {Info} for space
\newcommand{\BigWrap}[1] {\Big( \; #1 \; \Big)} %Use: \BigBrackets {Info} for space
\newcommand{\biggWrap}[1] {\bigg( \; #1 \; \bigg)} %Use: \biggBrackets {Info} for space
\newcommand{\BiggWrap}[1] {\Bigg( \; #1 \; \Bigg)} %Use: \BiggBrackets {Info} for space
\newcommand{\Brackets}[1] {\left[ #1 \right]} %Use: \Brackets {Info} for INTELLIGENT space
\newcommand{\bigBrackets}[1] {\big[ \; #1 \; \big]} %Use: \bigBrackets {Info} for space
\newcommand{\BigBrackets}[1] {\Big[ \; #1 \; \Big]} %Use: \BigBrackets {Info} for space
\newcommand{\biggBrackets}[1] {\bigg[ \; #1 \; \bigg]} %Use: \biggBrackets {Info} for space
\newcommand{\BiggBrackets}[1] {\Bigg[ \; #1 \; \Bigg]} %Use: \BiggBrackets {Info} for space
\newcommand{\Generate}[1] {\left\langle #1 \right\rangle} %Use: \Generate {Info} <>
\newcommand{\Floor}[1] {\left \lfloor #1 \right \rfloor} %Use: \Floor {Info} for floor
\newcommand{\Ceil}[1] {\left \lceil #1 \right \rceil } %Use: \Ceil {Info} for ceil
% ===== BETTERS MATH COMMANDS =====
\newcommand{\pfrac}[2] {\Wrap{\dfrac{#1}{#2}}} %Use: Put fractions in parentesis
% =========================================
% ==== LINEAL ALGEBRA & VECTORS ======
% =========================================
% ===== UNIT VECTORS ================
\newcommand{\hati} {\hat{\imath}} %Use: \hati for unit vector
\newcommand{\hatj} {\hat{\jmath}} %Use: \hatj for unit vector
\newcommand{\hatk} {\hat{k}} %Use: \hatk for unit vector
% ===== MAGNITUDE ===================
\newcommand{\abs}[1] {\left\lvert #1 \right\lvert} %Use: \abs{expression} for |x|
\newcommand{\Abs}[1] {\left\lVert #1 \right\lVert} %Use: \Abs{expression} for ||x||
\newcommand{\Mag}[1] {\left| #1 \right|} %Use: \Mag {Info}
\newcommand{\bVec}[1] {\mathbf{#1}} %Use for bold type of vector
\newcommand{\lVec}[1] {\overrightarrow{#1}} %Use for a long arrow over a vector
\newcommand{\uVec}[1] {\mathbf{\hat{#1}}} %Use: Unitary Vector Example: $\uVec{i}
% ===== FN LINEAL TRANSFORMATION ====
\newcommand{\FnLinTrans}[1]{\mathcal{T}\Wrap{#1}} %Use: \FnLinTrans for a cool T
\newcommand{\VecLinTrans}[1]{\mathcal{T}\pVector{#1}} %Use: \LinTrans for a cool T
\newcommand{\FnLinealTransformation}[1]{\mathcal{T}\Wrap{#1}} %Use: \FnLinealTransformation
% ===== ALL FOR DOT PRODUCT =========
\makeatletter %WTF! IS THIS
\newcommand*\dotP{\mathpalette\dotP@{.5}} %Use: \dotP for dot product
\newcommand*\dotP@[2] {\mathbin { %WTF! IS THIS
\vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}} %WTF! IS THIS
} %WTF! IS THIS
\makeatother %WTF! IS THIS
% === WRAPPERS FOR COLUMN VECTOR ===
\newcommand{\pVector}[1] %Use: \pVector {Matrix Notation} use parentesis
{ \ensuremath{\begin{pmatrix}#1\end{pmatrix}} } %Example: \pVector{a\\b\\c} or \pVector{a&b&c}
\newcommand{\lVector}[1] %Use: \lVector {Matrix Notation} use a abs
{ \ensuremath{\begin{vmatrix}#1\end{vmatrix}} } %Example: \lVector{a\\b\\c} or \lVector{a&b&c}
\newcommand{\bVector}[1] %Use: \bVector {Matrix Notation} use a brackets
{ \ensuremath{\begin{bmatrix}#1\end{bmatrix}} } %Example: \bVector{a\\b\\c} or \bVector{a&b&c}
\newcommand{\Vector}[1] %Use: \Vector {Matrix Notation} no parentesis
{ \ensuremath{\begin{matrix}#1\end{matrix}} } %Example: \Vector{a\\b\\c} or \Vector{a&b&c}
% === MAKE MATRIX BETTER =========
\makeatletter %Example: \begin{matrix}[cc|c]
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c] { %WTF! IS THIS
\hskip -\arraycolsep %WTF! IS THIS
\let\@ifnextchar\new@ifnextchar %WTF! IS THIS
\array{#1} %WTF! IS THIS
} %WTF! IS THIS
\makeatother %WTF! IS THIS
% =========================================
% ======= FAMOUS FUNCTIONS ============
% =========================================
% == TRIGONOMETRIC FUNCTIONS ====
\newcommand{\Cos}[1] {\cos\Wrap{#1}} %Simple wrappers
\newcommand{\Sin}[1] {\sin\Wrap{#1}} %Simple wrappers
\newcommand{\Tan}[1] {tan\Wrap{#1}} %Simple wrappers
\newcommand{\Sec}[1] {sec\Wrap{#1}} %Simple wrappers
\newcommand{\Csc}[1] {csc\Wrap{#1}} %Simple wrappers
\newcommand{\Cot}[1] {cot\Wrap{#1}} %Simple wrappers
% === COMPLEX ANALYSIS TRIG ======
\newcommand \Cis[1] {\Cos{#1} + i \Sin{#1}} %Use: \Cis for cos(x) + i sin(x)
\newcommand \pCis[1] {\Wrap{\Cis{#1}}} %Use: \pCis for the same with parantesis
\newcommand \bCis[1] {\Brackets{\Cis{#1}}} %Use: \bCis for the same with Brackets
% =========================================
% =========== CALCULUS ============
% =========================================
% ====== TRANSFORMS =============
\newcommand{\FourierT}[1] {\mathscr{F} \left\{ #1 \right\} } %Use: \FourierT {Funtion}
\newcommand{\InvFourierT}[1]{\mathscr{F}^{-1}\left\{#1\right\}} %Use: \InvFourierT {Funtion}
% ====== DERIVATIVES ============
\newcommand \MiniDerivate[1][x] {\dfrac{d}{d #1}} %Use: \MiniDerivate[var] for simple use [var]
\newcommand \Derivate[2] {\dfrac{d \; #1}{d #2}} %Use: \Derivate [f(x)][x]
\newcommand \MiniUpperDerivate[2] {\dfrac{d^{#2}}{d#1^{#2}}} %Mini Derivate High Orden Derivate -- [x][pow]
\newcommand \UpperDerivate[3] {\dfrac{d^{#3} \; #1}{d#2^{#3}}} %Complete High Orden Derivate -- [f(x)][x][pow]
\newcommand \MiniPartial[1][x] {\dfrac{\partial}{\partial #1}} %Use: \MiniDerivate for simple use [var]
\newcommand \Partial[2] {\dfrac{\partial \; #1}{\partial #2}} %Complete Partial Derivate -- [f(x)][x]
\newcommand \MiniUpperPartial[2] %Mini Derivate High Orden Derivate -- [x][pow]
{\dfrac{\partial^{#2}}{\partial #1^{#2}}} %Mini Derivate High Orden Derivate
\newcommand \UpperPartial[3] %Complete High Orden Derivate -- [f(x)][x][pow]
{\dfrac{\partial^{#3} \; #1}{\partial#2^{#3}}} %Use: \UpperDerivate for simple use
\DeclareMathOperator \Evaluate {\Big|} %Use: \Evaluate por Notation
% ====== INTEGRALS ============
\newcommand{\inftyInt} {\int_{-\infty}^{\infty}} %Use: \inftyInt for simple integrants
% =======================================================
% =========== COLOR: MATERIAL DESIGN ===========
% =======================================================
% ===== COLORS ==================
\definecolor{RedMD}{HTML}{F44336} %Use: Color :D
\definecolor{Red100MD}{HTML}{FFCDD2} %Use: Color :D
\definecolor{Red200MD}{HTML}{EF9A9A} %Use: Color :D
\definecolor{Red300MD}{HTML}{E57373} %Use: Color :D
\definecolor{Red700MD}{HTML}{D32F2F} %Use: Color :D
\definecolor{PurpleMD}{HTML}{9C27B0} %Use: Color :D
\definecolor{Purple100MD}{HTML}{E1BEE7} %Use: Color :D
\definecolor{Purple200MD}{HTML}{EF9A9A} %Use: Color :D
\definecolor{Purple300MD}{HTML}{BA68C8} %Use: Color :D
\definecolor{Purple700MD}{HTML}{7B1FA2} %Use: Color :D
\definecolor{IndigoMD}{HTML}{3F51B5} %Use: Color :D
\definecolor{Indigo100MD}{HTML}{C5CAE9} %Use: Color :D
\definecolor{Indigo200MD}{HTML}{9FA8DA} %Use: Color :D
\definecolor{Indigo300MD}{HTML}{7986CB} %Use: Color :D
\definecolor{Indigo700MD}{HTML}{303F9F} %Use: Color :D
\definecolor{BlueMD}{HTML}{2196F3} %Use: Color :D
\definecolor{Blue100MD}{HTML}{BBDEFB} %Use: Color :D
\definecolor{Blue200MD}{HTML}{90CAF9} %Use: Color :D
\definecolor{Blue300MD}{HTML}{64B5F6} %Use: Color :D
\definecolor{Blue700MD}{HTML}{1976D2} %Use: Color :D
\definecolor{Blue900MD}{HTML}{0D47A1} %Use: Color :D
\definecolor{CyanMD}{HTML}{00BCD4} %Use: Color :D
\definecolor{Cyan100MD}{HTML}{B2EBF2} %Use: Color :D
\definecolor{Cyan200MD}{HTML}{80DEEA} %Use: Color :D
\definecolor{Cyan300MD}{HTML}{4DD0E1} %Use: Color :D
\definecolor{Cyan700MD}{HTML}{0097A7} %Use: Color :D
\definecolor{Cyan900MD}{HTML}{006064} %Use: Color :D
\definecolor{TealMD}{HTML}{009688} %Use: Color :D
\definecolor{Teal100MD}{HTML}{B2DFDB} %Use: Color :D
\definecolor{Teal200MD}{HTML}{80CBC4} %Use: Color :D
\definecolor{Teal300MD}{HTML}{4DB6AC} %Use: Color :D
\definecolor{Teal700MD}{HTML}{00796B} %Use: Color :D
\definecolor{Teal900MD}{HTML}{004D40} %Use: Color :D
\definecolor{GreenMD}{HTML}{4CAF50} %Use: Color :D
\definecolor{Green100MD}{HTML}{C8E6C9} %Use: Color :D
\definecolor{Green200MD}{HTML}{A5D6A7} %Use: Color :D
\definecolor{Green300MD}{HTML}{81C784} %Use: Color :D
\definecolor{Green700MD}{HTML}{388E3C} %Use: Color :D
\definecolor{Green900MD}{HTML}{1B5E20} %Use: Color :D
\definecolor{AmberMD}{HTML}{FFC107} %Use: Color :D
\definecolor{Amber100MD}{HTML}{FFECB3} %Use: Color :D
\definecolor{Amber200MD}{HTML}{FFE082} %Use: Color :D
\definecolor{Amber300MD}{HTML}{FFD54F} %Use: Color :D
\definecolor{Amber700MD}{HTML}{FFA000} %Use: Color :D
\definecolor{Amber900MD}{HTML}{FF6F00} %Use: Color :D
\definecolor{BlueGreyMD}{HTML}{607D8B} %Use: Color :D
\definecolor{BlueGrey100MD}{HTML}{CFD8DC} %Use: Color :D
\definecolor{BlueGrey200MD}{HTML}{B0BEC5} %Use: Color :D
\definecolor{BlueGrey300MD}{HTML}{90A4AE} %Use: Color :D
\definecolor{BlueGrey700MD}{HTML}{455A64} %Use: Color :D
\definecolor{BlueGrey900MD}{HTML}{263238} %Use: Color :D
\definecolor{DeepPurpleMD}{HTML}{673AB7} %Use: Color :D
% ===== ENVIRONMENT ==============
\newcommand{\Color}[2]{\textcolor{#1}{#2}} %Simple color environment
\newenvironment{ColorText}[1] %Use: \begin{ColorText}
{ \leavevmode\color{#1}\ignorespaces } %That's is!
% =======================================================
% =========== CODE EDITING ===========
% =======================================================
% ===== CODE EDITOR =============
\lstdefinestyle{CompilandoStyle} { %This is Code Style
backgroundcolor = \color{BlueGrey900MD}, %Background Color
basicstyle = \tiny\color{white}, %Style of text
commentstyle = \color{BlueGrey200MD}, %Comment style
stringstyle = \color{Green300MD}, %String style
keywordstyle = \color{Blue300MD}, %keywords style
numberstyle = \tiny\color{TealMD}, %Size of a number
frame = shadowbox, %Adds a frame around the code
breakatwhitespace = true, %Style
breaklines = true, %Style
showstringspaces = false, %Hate those spaces
breaklines = true, %Style
keepspaces = true, %Style
numbers = left, %Style
numbersep = 10pt, %Style
xleftmargin = \parindent, %Style
tabsize = 4, %Style
inputencoding = utf8/latin1 %Allow me to use special chars
}
% ===== CODE EDITOR =============
\lstdefinestyle{CompilandoStylePurity} { %This is Code Style
backgroundcolor = \color{white}, %Background Color
basicstyle = \tiny\color{BlueGrey900MD}, %Style of text
commentstyle = \color{Green300MD}, %Comment style
stringstyle = \color{Teal700MD}, %String style
keywordstyle = \color{Blue700MD}, %keywords style
numberstyle = \tiny\color{TealMD}, %Size of a number
frame = none, %Adds a frame around the code
breakatwhitespace = true, %Style
breaklines = true, %Style
showstringspaces = false, %Hate those spaces
breaklines = true, %Style
keepspaces = true, %Style
numbers = left, %Style
numbersep = 11pt, %Style
xleftmargin = \parindent, %Style
tabsize = 4, %Style
inputencoding = utf8/latin1 %Allow me to use special chars
}
\lstset{style = CompilandoStyle} %Use this style
% =====================================================
% ============ COVER PAGE ================
% =====================================================
\begin{document}
\begin{titlepage}
% ============ TITLE PAGE STYLE ================
\definecolor{TitlePageColor}{cmyk}{1,.60,0,.40} %Simple colors
\definecolor{ColorSubtext}{cmyk}{1,.50,0,.10} %Simple colors
\newgeometry{left=0.25\textwidth} %Defines an Offset
\pagecolor{TitlePageColor} %Make it this Color to page
\color{white} %General things should be white
% ===== MAKE SOME SPACE =========
\vspace %Give some space
\baselineskip %But we need this to up command
% ============ NAME OF THE PROJECT ============
\makebox[0pt][l]{\rule{1.3\textwidth}{3pt}} %Make a cool line
\href{https://compilandoconocimiento.com} %Link to project
{\textbf{\textsc{\Huge Compilando Conocimiento}}}\\[2.7cm] %Name of project
% ============ NAME OF THE BOOK ===============
\href{\ProjectNameLink} %Link to Author
{\fontsize{65}{78}\selectfont \textbf{Bases de Datos}}\\[0.5cm] %Name of the book
\textcolor{ColorSubtext}{\textsc{\Huge Programación}} %Name of the general theme
\vfill %Fill the space
% ============ NAME OF THE AUTHOR =============
\href{\ProjectAuthorLink} %Link to Author
{\LARGE \textsf{Oscar Andrés Rosas Hernandez}} %Author
% ===== MAKE SOME SPACE =========
\vspace %Give some space
\baselineskip %But we need this to up command
{\large \textsf{Julio 2018}} %Date
\end{titlepage}
% =====================================================
% ========== RESTORE TO DOCUMENT ============
% =====================================================
\restoregeometry %Restores the geometry
\nopagecolor %Use to restore the color to white
% =====================================================
% ======== INDICE =========
% =====================================================
\tableofcontents{}
\label{sec:Index}
\clearpage
% ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
% /////////////////////// ¿QUE ES LO QUE ESTOY LEYENDO? //////////////////////////////////////////
% ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\section{¿Qué es lo que estoy leyendo?}
Hola... ¡Hey! Seguramente te estarás preguntando
¿Qué demonios estoy leyendo?
Bueno, este pequeño texto intenta darle solución a esa pregunta, la respuesta mas inmediata es
que este texto (o compilado como nos gusta decirle) es una recopilación de teoremas, ideas
y conceptos importantes que aprendí a lo largo del tiempo sobre este tema.
De manera regular estarémos actualizando estos textos con todo aquello nuevo que aprenda intentando
profundizar en todos estos temas y cerrar posibles dudas en estas páginas, así que siempre mantente
alerta de tener la última versión, esta siempre esta en \href{http://www.CompilandoConocimiento.com}
{\underline{CompilandoConocimiento.com}}
Este Compilado intenta ser lo más estricto posible, aunque somos humanos y es posible (e incluso probable) que
cometamos pequeños errores de vez en cuando.
Estos textos están creados como una base con la que tu puedas leer rápidamente todo lo que hemos aprendido
a lo largo del tiempo, aprender los conceptos más importantes y que usándo esto tu puedas profundizar
más en la maravilla que es aprender más sobre este maravilloso mundo.
Este texto esta publicado bajo la GPL, por lo tanto es software libre y tu tienes el control total sobre
el, puedes descargar este texto, puedes ver su código fuente, puedes modificarlo y puedes distribuir este
texto y sus versiones modificadas, puedes acceder a todo lo que necesitas
\href{http://www.github.com/CompilandoConocimiento/LibroBasesDeDatos}
{\underline{en el Repositorio del Libro de Bases de Datos}}.
Cualquier pregunta, comentario o si quieres contactar con nosotros no dudes en escribir al email del proyecto:
Espero que tomes estas páginas como un regalo, creado por seres imperfectos pero con muchos ánimos de hacer
del mundo un lugar mejor, ahora si, abróchate los cinturones que esto acaba de empezar.
\begin{flushright}
Compilar es Compartir
\end{flushright}
% //////////////////////////////////////////////////////////////////////////////////////////////////////////
% /////////////////////////////////// PARTE ABSTRACTA /////////////////////////////////
% //////////////////////////////////////////////////////////////////////////////////////////////////////////
\part{Parte Abstracta}
\clearpage
% ===============================================================================
% =================== DEFINICIONES ======================
% ===============================================================================
\chapter{Definiciónes}
% ==============================================
% ======== REPOSITORIO DE DATOS =========
% ==============================================
\clearpage
\section{Repositorio de Datos}
Son un conjunto de datos, donde definio a un dato como cualquier información
que sea váliosa.
% ==============================================
% ======== BASE DE DATOS =========
% ==============================================
\section{Base de Datos}
Son un conjunto de datos interrelacionado definido por un modelo de datos, esto no lo
tiene necesariamente un repositorio de datos. Así como progrmas que nos permitan acceder
y manipular esa información.
Podemos definir de manera alterna como: Una colección de registros el cual es almacenada
en una computadora de una forma sistemática (estructurada), de tal forma que un programa
de computadora pueda consultarlo para responder consultas.
% ==============================================
% ======= RAZONES O PROPOSITOS ========
% ==============================================
\section{Proposito para una Base de Datos}
Todo muy bien, pero ¿porque debería importarme un comino?¿Porqué preferir una base de datos
sobre simplemente guardar los datos de manera \Quote{común}?
Antes de la aparición de los SGBD, las organizaciones normalmente almacenaban la
información en Sistemas de Procesamiento de Archivos Típicos (Sistemas de Archivos).
Un sistema de archivos es un conjunto de programas que prestan servicio a los usuarios
finales, donde cada programa define y maneja sus propios datos, los cuales presentan
los siguientes inconvenientes:
\begin{itemize}
\item
\textbf{Redundancia de datos e inconsistencia}:
Ya que tu no vas a programar un sistema entero habra muchas maneras
en que los demás programadores crearán aplicaciones y sobretodo en como
van a guardar los datos.
Peor aún, ¿Qué pasa cuando tengamos un motón de archivos con casi la misma
información?
Es decir cuando tengamos un montón de archivos con tu mismo número de telefono,
con tu misma información de contacto.
\clearpage
\item
\textbf{Problemas para acceder a la información que queriamos en primer lugar}:
Supongamos que queremos acceder a los datos, digamos que tenemos un montón
de registros de sobre alumnos.
¿Como hariamos para tener todos los alumos que hayan reprobado?
No hay forma fácil de hacerlo, incluso la forma mas \Quote{correcta} sería
desarrollar un pequeño programa que se encargue de hacer lo que queremos.
Y esto podría servir muy bien.... Hasta que necesitemos algo más.
Entonces tenemos que estar haciendo programas y programas ¡Que cansado!
\item
\textbf{Aislamiento de la Información}:
Ya que puede estar repartida por todos lados, no se exactamente por donde tengo
que empezar a buscar. Y esto se vuelve un verdadero desastre cuando intentamos
modificar la información guardada.
\item
\textbf{Problemas con Integridad}:
Los valores de los datos almacenados en la base de datos, deben satisfacer
ciertos tipos de restricciones de consistencia.
Por ejemplo, el saldo de cierto tipo de cuentas bancarias no pueden ser nunca
inferior a una cantidad predeterminada, digamos 4000 dolares.
Los desarrolladores deben cumplir estas restricciones en el sistema añadiendo
el código correspondiente en los diversos programas de aplicación. Sin embargo,
cuando se añaden nuevas restricciones, es difícil cambiar los programas para
hacer que se cumplan.
\item
\textbf{Problemas con Atomicidad}:
Si ocurriera un problema en el sistema al momento de estar modificando la información
me gustaria que al volver a arrancar todo, este debería regresar a un punto de
respaldo.
Como si el sistema fallara justo al hacer una transacción bancaria, me interesa que
se haya realizado o no, pero que no le haya quitando dinero a una cuenta pero no se la
haya dado al otro cliente.
\item
\textbf{Errores del Acceso Concurrente}:
Para aumentar el rendimiento global del sistema y obtener una respuesta más
rápida, muchos sistemas permiten que varios usuarios actualicen los datos
simultaneamente. En realidad hoy en día, los principales sitios de comercio
electrónico en internet pueden tener millones de accesos diarios de compradores
a sus datos. En tales entornos es posible la interacción de actualizaciones
concurrentes y puede dar lugar a datos inconsistentes.
\item
\textbf{Problemas de seguridad}:
No todos los usuarios de un sistema de base de datos deben tener acceso a todos
los datos. Ya que los programas de aplicación se añaden al sistema de
procesamiento de datos de un forma adhoc, es difícil hacer cumplir tales
restricciones de seguridad.
\end{itemize}
\clearpage
Podemos resumir esto con que a diferencia de un sistema de archivos, una base de datos busca:
\begin{itemize}
\item Evitar o miniza la redundancia
\item Evitar inconsistencias en los datos
\item Eliminar inconsistencias en los datos
\item Comunicacion con distintos repositorios de datos
\item Control de concurrencia
\end{itemize}
% ==============================================
% === ELEMENTOS DE UNA BASE DE DATOS ======
% ==============================================
\clearpage
\section{Elementos de un Sistema de Base de Datos}
\includegraphics[width=0.85\textwidth]{DiagramaPartes.png}
\begin{itemize}
\item
\textbf{Aplicaciones:} Es la interfaz entre la base de datos y el usuario, estas pueden
ser desarrolladas por un lenguaje de alto nivel
\item
\textbf{Conector:} Son los componentes que permiten el enlace entre el SGBD y las
interfaces desarrolladas en un lenguaje de programación, estas contienen las clases
y/o funciones necesarias para llevar a cabo la comunicación entre las aplicaciones
con el Sistema Gestor de Base de Datos.
\item
\textbf{Sistema Gestor de Base de Datos:} Son el software especialízado que
nos permite manipular inteligentemente nuestro datos:
Es la aplicación que permite a los usuarios definir, crear y mantener la base
de datos y proporciona acceso controlado a la misma.
\begin{itemize}
\item Creación de Repositorios
\item Creación de Cuentas de Usuarios
\item Se encarga de crear archivos lógicos, físicos y objetos de la BD.
\item Se encarga de administrar las transacciones, bloqueos , etc.
\end{itemize}
\end{itemize}
% ==============================================
% ======== ABSTRACCIÓN DE LOS DATOS ========
% ==============================================
\clearpage
\section{Abstracción de los Datos}
\begin{itemize}
\item
\textbf{Nivel Físico}:
Es el nivel base de abstracción que describe como es que la información
es guardade de manera actual. Esto nos permite describir como de complejo
es que son las estructuras en la realidad.
\item
\textbf{Nivel Lógico}:
Es el nivel que nos muestra como es que se almacena la información dentro de
la base de datos y como es que se da la relaciones entre la información.
Aunque la implementación de las estructuras simples en el nivel lógico puede
implicar complejas estructuras de nivel físico, el usuario de este nivel no
necesita ser consciente de esta complejidad.
Esto se conoce como independencia de datos físicos.
Los administradores de bases de datos, que deben decidir qué información debe
conservar en la base de datos, utilizan el nivel lógico de abstracción.
\item
\textbf{Nivel Visual}:
El nivel más alto de abstracción describe sólo una parte de la base de datos completa.
Aunque el nivel lógico utiliza estructuras más simples, la complejidad se mantiene
debido a la variedad de información almacenada en una base de datos grande.
Muchos usuarios del sistema de base de datos no necesitan toda esta información,
sólo necesitan acceder a una parte de la base de datos.
El nivel de vista de la abstracción existe para simplificar su interacción
con el sistema.
\end{itemize}
% ===============================================
% ==== USUARIOS DE UNA BASE DE DATOS ====
% ===============================================
\clearpage
\section{Usuarios de una Base de Datos}
Hay cuatro grupos de personas que intervienen en el entorno de un sistema de base de datos:
el administrador de la base de datos, los diseñadores de la base de datos, los programadores
de aplicaciones y los usuarios.
\begin{itemize}
\item
\textbf{Diseñadores de la Base de Datos}
\begin{itemize}
\item Encargado de grabar los propios Módelos de Datos
\item Esquema de la Base de Datos
\item Diseño lógico de la Base de Datos
\end{itemize}
\item
\textbf{Administrador de la Base de Datos}
Encargado de:
\begin{itemize}
\item Monitorear el Performance
\item Diseño físico de la base de datos y de su implementación.
\item Herramientas Administrativas
\begin{itemize}
\item Creacion de cuentas de usuarios
\item Objetos accedidos.
\item Matriz de autorizacion.
\end{itemize}
\item Definir tiempos de respaldo
\item Reorganización físico
\item Llevar a cabo las tecnicas de recuperación
\end{itemize}
\item
\textbf{Programadores de Aplicaciones}
Son los que se encargan de implementar los programas de aplicación que
servirán a los usuarios finales. Estos programas son los que permiten
consultar datos, insertarlos, actualizarlos y eliminarlos.
\begin{itemize}
\item Interfaces de los usuarios finales
\begin{itemize}
\item Facilitar el acceso a ciertos "objetos" de la BD
\end{itemize}
\item Interfaces para la gestión de la aplicaciones
\begin{itemize}
\item Operaciones de escritura sobre altas ó bajas
\item IDE desarrollo (Java, .NET)
\item Lenguaje Scripts
\item Conectividad servidores de datos (API s)
\end{itemize}
\end{itemize}
\end{itemize}
% ==================================
% ==== USUARIOS FINALES ====
% ==================================
\clearpage
\subsection{Usuarios Finales}
Los usuarios finales son los clientes de la base de datos, son las personas que
requieren acceso a la base de datos para realizar consultas, actualizaciones e
informes. Los usuarios se pueden clasificar en varias categorías:
\begin{itemize}
\item
\textbf{Casuales}
Estos acceden ocasionalmente a la base de datos, pero pueden necesitar una
información diferente en cada momento.
\begin{itemize}
\item Data Minning
\item Big Data
\end{itemize}
\item
\textbf{Principiantes - Paramétricos}
Constituyen una parte considerable de los usuarios finales de los
sistemas de bases de datos. Su labor principal gira entorno a la
consulta y actualización constantes de la BD.
\item
\textbf{Sofisticados}
\begin{itemize}
\item Experiencia en aplicaciones
\item Programadores de aplicación
\item DBA
\item Investigadores
\end{itemize}
\item
\textbf{Independientes (Stand Alone)}
\begin{itemize}
\item Sistemas Escolares
\item Sistemas de prueba
\item Sin conectividad a otros nodos
\end{itemize}
\end{itemize}
% ===============================================
% =========== DML VS DDL ===============
% ===============================================
\clearpage
\section{DML vs DDL}
\begin{itemize}
\item
\textbf{DML}
Data Manipulation Languaje, es un lenguaje que nos permite modificar los
datos guardados.
Los tipos de acceso que tenemos disponibles son:
\begin{itemize}
\item Recuperar información
\item Insertar nueva información
\item Eliminar la información
\item Modificación de la información
\end{itemize}
Una consulta o query es una sentencia que solicita la recuperación de información.
La parte de un DML que implica recuperación de información se denomina lenguaje
de consulta.
Aunque técnicamente incorrecto, solemos utilizar los términos lenguaje de consulta
y lenguaje de manipulación de datos como sinónimos.
\item
\textbf{DDL}
Data Definition Languaje, es Lenguaje de definición de datos.
Especificamos un esquema de base de datos mediante un conjunto de definiciones
expresadas por un lenguaje especial denominado DDL.
El DDL también se utiliza para especificar propiedades adicionales de los datos.
\end{itemize}
\clearpage
Podemos simplificar en el sentido de SQL que:
\textbf{DDL: Data Definition Language}, mediante el cual puede definir nuevos objetos
de base de datos, como Table, Views, Stored Procedures, etc.
Algunos comandos comunes son:
\begin{itemize}
\item CREATE
\item ALTER
\item DROP
\item etc...
\end{itemize}
\textbf{DML: Data Manipulation Language}, mediante el cual puede realizar cambios en
los objetos creados anteriormente por DDLs. Algunos comandos comunes son:
\begin{itemize}
\item INSERT
\item UPDATE
\item DELETE
\item SELECT
\item etc...
\end{itemize}
% ===============================================
% ==== ARQUITECTURA DE SISTEMA DE DB =====
% ===============================================
\clearpage
\section{Arquitectura del Sistema Gestor}
Podemos acceder al Sistema Gestor de nuestra Base de Datos de muchas maneras,
desde formularios web, aplicaciones de escritorio e interpretes de SQL, todos se
comunican con la Base de Datos mediante SQL.
\begin{itemize}
\item
\textbf{Motor de Evaluación de Consultas}
\begin{itemize}
\item Analizador:
Este se encarga de analizar las sentencias SQL a nivel
sintactico y lexico, así como una validación de que existan
dichas relaciones y atributos.
Es lo que mucha gente conoce como un compilador de DDL ó DML.
\item Evaluador de Operaciones:
Este se encarga de crear el árbol canónico, es decir, la forma
formal que tendría el árbol necesario para acceder a la información.
\item Optimizador:
Se encarga de tomar el árbol canónico y optimizarlo para que se tenga
que hacer la menor cantidad de operación a nivel lógico, este se conoce
como árbol de consulta.
\item Ejecutor de Planes:
Se encarga de planear la mejor estrategia para ejecutar la consulta
de tal manera que se optimize de manera física.
\end{itemize}
\clearpage
\item
\textbf{Gestores}
\begin{itemize}
\item Gestor de Transacciones:
Este es el que se encarga de organizar varias sentencias SQL para ejecutarlas
como una transacción.
\item Gestor de Bloqueos:
Este es el que se encarga de ver si es que cierta relación
esta bloqueada porque esta ocurriendo una transacción en ese momento.
Los bloqueos son una parte muy importatne de este gesto.
Podemos definirlos en principalmente 2:
\begin{itemize}
\item Binario:
Es decir permite que una relación este o bine bloqueada
o no para lectura o escritura.
\item Múltiplos Niveles:
Es decir nos permite que existan bloqueos de lectura,
escritura diferentes, ayudando a evitar las esperas si no
son necesarias.
\end{itemize}
\item Gestor de Recuperación:
Este es el que se encarga de definir todas las técnicas de recuperación
sobre la base, estas mismas las podemos definir en dos:
\begin{itemize}
\item Inmediatas: Son las que podemos representar como rollback o rollfoward
\item Técnicas en Frío: Usa una copia de seguridad
\end{itemize}
\item Gestor de Archivos y Métodos de Acceso