Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Base de dato-Documental
Antecedentes
Antes de que apareciera el concepto e ingeniería de las bases de datos relacionales y esto en
concordancia con la tecnología del momento, la información y sus datos eran guardados en
“cintas magnéticas”, “Discos flexibles”, “Discos duros”, en Archivos secuenciales.
Parecidos a los registros de las Bases de datos documentales, pero no utilizaban el concepto
de “Arreglos”; se arman cadenas o string de datos y se grababa una cadena después de la
otra.
La creación de los aplicativos de software exigía de mucha programación a razón de que
los componentes en base a las operaciones de “borrado” y “modificación” de datos.
No tienen una instrucción propia del lenguaje que los faciliten a diferencia de los motores
de las bases de datos relacionales que tienen sus propias instrucciones para borrar y
modificar.
E P S
Todo sustantivo, cómo verbos generan una información en particular, que deberá ser
guardada en una estructura o repositorio denominado “archivo y bases de datos” y así
mismo se elaboran los programas de computador que harán diferentes operaciones con la
información.
Ejemplos de compresión
● Se tiene la siguiente arquitectura que hace relación a una base
documental convirtiéndola a una tabla de datos relacional
100 Pedro 2 1
200 Carlos 1 2
300 María 3 3
400 Paula 2 2
E P S
Un antecedente fundamental a partir del cual se crearon las bases de datos, corresponde a
los “ficheros”.
Un “fichero” es un repositorio o archivo, dispuesto para guardar información y permitir su
acceso, a través de ciertas instrucciones, que fueron construidas por casi todos los lenguajes
de programación, con la propiedad particular de grabar en líneas de datos y de leer líneas de
datos.
Las “líneas de datos”> (registros de datos), son “cadenas o String´s” de información, que
contienen porciones o fragmentos de textos, números o alfanuméricos separados
(Concatenados), a través de un carácter convencional tipo: “guion, “coma”, “punto y
coma”, etc.
Para crear y manejar un “fichero” (Repositorio o archivo secuencial) en java (NetBeans), se
deberá estructurar un programa con la siguiente secuencia de recursos:
Import java…;
Import java…;
Public class fichero 1
{
Public static void main (String [] args)
{
Archivo= new file(c:\-----\empleado);
Grabar ();
Leerunido ();
Leerseparado ();→ Instrucción “Split”
}
Public static void grabar ()
Evita sobrescribir en líneas
{
ya guardadas siempre
//abrir archivo para escritura
después de la última línea.
Fw= New filewrite (archivo, true);
// crear “canal” de comunicación entre teclado y archivos
Br= New Bufferedwrited(fw);
//Ingresar datos desde el teclado mediante una “variable” tipo scanner
Ced=;
Nom=;
Tel=;
//concatenar los datos
Datos= ced + “-” + nom + “- ” + tel; Ejemplo:
// Grabar la cadena
Bw. write(datos); 100 - pedro-
4020
}
Conclusiones:
1. La forma de guardar predestina en la programación es el uso de los ficheros
2. Para crear un fichero se es necesario un programa con una serie de recursos
predispuestos
[3]
Archivos secuenciales
(Ficheros de acceso secuencial)
Una de las características físicas de las Bases de datos, es lo de guardar la información de
manera distribuida, utilizando varios archivos denominados “tablas” los cuales y gracias a
las instrucciones brindadas por el “lenguaje” del motor permite la interacción coherente,
funcional e inmediata entre los datos.
“Borrado de registros”
-ingresar desde teclado cedula a borrar
- abrir archivo, “splitear” la cedula del string leído
- Preguntas si cedula del teclado es igual a cedula “spliteado”:
Ejemplo
de archivo
secuenciales
[4]
Antecedentes de las bases de datos
“Archivos de acceso secuencial”
(Ficheros)
Contienen registros compuestos por “concatenación de datos”, cada registro se arma como
una cadena de datos, separados por un carácter especial, ejemplo raya al piso o coma
Modificación de registros:
Para los ficheros de acceso secuencial, la modificación de registros, utiliza básicamente la
misma mecánica utilizada para borrar los registros:
1) Ingresar desde el teclado el número de cedula, que obedece al registro que se
quiere modificar
2) Leer el registro del archivo haciendo “Split”, para extraer la cedula, sobre la cual se
harpa la búsqueda
3) Preguntar si la cedula ingresada desde el teclado, coincide con la cedula del registro:
● Si es no:
- Se grabará el registro en un nuevo archivo o fichero
- Se vuelve al paso 2
● Si es si:
- Este registro no se graba en el nuevo archivo
- Se ingresan datos para nombre y profesión
- Se concatenan los datos de cedula, nombre y profesión
- Se graba el registro en el nuevo archivo
- Se graban todos los demás registros del archivo original en
el archivo nuevo.
4)
- Se cierra el archivo original
- Se cierra el archivo nuevo.
5)
- Borrar el archivo original
- Renombrar el archivo nuevo con el nombre del archivo original
Import java. util. Scanner;
Scanner registro= new Scanner (System.in);
Cedula=registro.nextInt();
Nombre=registro.nextInt();
Profesión=registro.nextInt();
Datos= “cedula” + “nombre” + “profesión”;
Bw.write(datos);
Conclusiones:
1) Para la modificación de registros es utilizada la misma mecánica implementada
en borrado de registros cerrando y reescribiendo en un nuevo archivo, pero
manteniendo el mismo nombre anteriormente creado.
2) Se analiza si lo ingresado por teclado coincide con el registro, si esto es así es
posible hacer la modificación , borrado o renombrado en el fichero
[5]
Antecedentes de las bases de datos
“Cruce entre ficheros de acceso secuencial”
Fichero 1
D
Fichero 2 isc
Disco
duro
Cedula, Nombre, Código
ciudad
Si se quisiera obtener un “informe” de todos los registros de ficheros, reemplazando el
código de la ciudad, por el nombre de la ciudad, obligaría a leer el primer registro de
ficheros 1, y con el código de la ciudad (Splitear) ir a fichero 2, comparar con el código
ciudad (Splitear) de fichero 2 extraer el nombre de ciudad, lo cual resultaría, sin embargo,
al volver a fichero 1, el apuntador volvería al primer registro impidiendo avanzar a un
nuevo registro.
Lo anterior se debe solucionar de la siguiente manera:
1) Crear fichero 1, fichero 2, guardar información en cada uno de ellos
2) Subir a una lista de nodos de memoria dinámica el fichero 2: se sube a la Ram
100,
pedro,
médico
200,
Carlos,
Abogado
300,
María,
Ingeniero
400,
Paola,
Medico
100 Pedro 2
200 Carlos 1
300 María 3
400 Paula 2
1 Abogado
2 Médico
3 Ingeniería
1 Abogado
2 Medico
3 Ingeniera
100 Pedro 2 1
200 Carlos 1 2
300 María 3 3
400 Paula 2 2
1 Futbol
2 Tenis
3 Natación
1000,
Pedro, 2
4000,
María, 3
2000,
Carlos, 1
3000,
Carol, 2
7000,
Julián, 3
1,
Medellín
2, Cúcuta
3,
Manizale
s
1000, Pedro, 2
4000, María, 3
1 Med 2 3
2000, Carlos, 1
3000, Carol, 2
7000, Julián, 3
O
K
Conclusiones:
1) El cruce de ficheros de tipo secuencial hace sentido con el hecho de acceder a
valores contenidos, pero solo con un determinado orden.
2) Para hacer más versátil el hecho de reemplazar, cambiar, etc. un registro guardado
la forma más sencilla de hacerla es creando dos ficheros, hacer listas dinámicas
“las que se necesiten” y esta ser implementada en la RAM del computador.
5.1
Bases de datos
if(i==0){
cab=p
; q=p;
}
else{
q.enlace=p;
q=p;
}
}
}
}
class nodo{
String cod;
String ciud;
nodo enlace;
}
[6]
Antecedentes de las bases de datos
“Ficheros con acceso directo”
Los ficheros pueden ser accedidos de manera secuencial con lo cual puede “tardar” el
acceso a un determinado “registro” mientras recorre los anteriores.
También los ficheros pueden ser accedidos de manera “Directa”, con lo cual se permite
acceder a un registro determinado, sin necesidad de hacer recorrido los registros anteriores,
mejorando la velocidad de acceso.
Para implementar el acceso directo, se recomienda determinar una “longitud fija” para
todos los registros, facilitando la posición inicial exacta de cada uno de ellos.
Comprensión:
Cedula nombre teléfono
0 32
Registros de igual tamaño
16
Alias.seek(pos);
Registro=alias.readLine();
Splitear [0], [1],[2];
Muestra 0.1.2;
Pide un Nuevo pos;
}
Ya no se define en modo
File alias…
Si no en modo
FileRandomAccess
alias…
REFLEXION:
Actuando sobre el .txt
En un fichero de acceso directo
no se deberá cerrar como en los mismo
secuenciales, para acceder a un
registro anterior al que se encuentra
en memoria
Conclusiones:
1) Por lo general para evitar tener problemas en los ficheros de acceso directo se
agregan más espacios para ingresar datos, es decir, se dejan en blanco
2) La velocidad del acceso en los ficheros directos es mucho mayor al secuencial
por no tener la necesidad de hacer recorridos en registros anteriores
Ejemplo de ficheros directos
Ejercicio de comprensión:
Se tiene dos ficheros con extensión “.txt” cada uno con las mismas características en
cuanto a la cantidad de columnas (variables o atributos) y cantidad de registros; así
mismo los datos contenidos son los mismos.
En la primera columna (primer atributo) de cada registro y en cada uno de los
archivos se encuentra la cedula; son 300 registros y los números de las cedulas van
del número 10 hasta el 300 con incrementos de 10 en 10.
Solución:
1.
Para acceder a un archivo de manera secuencial se tiene en cuenta el hecho de que
esta manera es poco eficiente en la búsqueda de registros por tener que recorrer
todo el archivo, o en este caso una tabla.
Ahora tenemos que efectuar una rutina de tal manera que se pueda ubicar el registro
entre los ya guardados en el archivo .txt, por lo cual se ingresa la cedula que se
quiere buscar; sea para modificación o borrado. Independiente de cual sea el caso se
opta por splitear la cedula y preguntar como ciclo si coinciden con los registros, es
decir que mientras se está recorriendo por medio del spliteado y no hay coincidencia
de los registros con el buscado “200” se colocarán en un nuevo archivo secuencial,
todo esto a fin de que apenas se halle, cierre el archivo original y se guarden los
otros registros y por ultimo se borre (remove) o renombre (rename).
2.
Para el acceso de manera directa al segundo fichero se determina el uso de una
longitud fija para obtener una cantidad de registros de igual tamaño y acceder un
registro determinado sin la necesidad de hacer recorrido en los registros anteriores.
En especifico para este ejemplo se tienen 300 registros pero son dados de 10 en 10
por lo cual se deduce una cantidad total de registros serán separados en registros
iguales, pero como se sabe no todos los registros son iguales, entonces se deja con
un rango mayor al nivel de caracteres y de esta manera identificar la posición inicial
más fácil, es decir que para el registro 200 se tendrá que identificar una cantidad de
20 registros por estar delimitados en incrementos de 10 en 10.
[7]
Explicación de talleres propuestos para identificación de ficheros
secuenciales y directos
1. Para este primer ejercicio de practica se hace énfasis en el ingreso de datos a partir
de una dirección propuesta en el ordenador donde se esté trabajando, en este caso
se utiliza el manejo de ficheros de forma secuencial con los siguientes métodos =
GRABAR – LEER (UNIDO Y SEPARADO) – ELIMINAR Y MODIFICAR.
Todo esto para organizar el fichero por registros conteniendo información de un
empleado: CEDULA, NOMBRE Y TELEFONO.
Información esencial:
Leer unido:
Leer separado:
Borrar registro:
// se hace a partir de la cedula
Modificar:
Codigo:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package fichero1;
import java.io.*;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author FABIO BAYONA DUARTE
*/
public class Fichero1 {
/**
* @param args the command line arguments
*/
public static int opcion;
File archivo =
new File("C:\\Users\\FABIO BAYONA DUARTE\\Desktop\\"
+ "ORDEN\\Bases de datos\\Ficheromenu"
+ "\\Fichero1\\empleado.txt");
if (!archivo.exists()) {
archivo.createNewFile();
}
do {
System.out.println("╔═══════════════════════╗")
; System.out.println("║ MENU ║");
System.out.println("╠═══════════════════════╣")
; System.out.println("║ 1.- Grabar ║");
System.out.println("║ 2.- Leer unido ║");
System.out.println("║ 3.- Leer separado ║");
System.out.println("║ 4.- Eliminar ║");
System.out.println("║ 5.- Modificar ║");
System.out.println("║ 6.- salir ║");
System.out.println("╚═══════════════════════╝")
; opcion = cont1.nextInt();
switch (opcion) {
case 1:
grabar(archivo);
break;
case 2:
leerunido(archivo);
break;
case 3:
leerseparado(archivo);
break;
case 4:
borrarRegistro(archivo);
if (archivo.delete()) {
System.out.println("el fichero se borro");
}
archivo = null;
File borrador = new File("C:\\Users\\FABIO BAYONA DUARTE\\Desktop\\ola
si\\Fichero1\\empleadoBorrar.txt");
case 6:
System.exit(0);
break;
default:
System.out.println("╔══════════════════════════╗");
System.out.println("║Ingrese un valor dentro del rango de 1 a 6║");
System.out.println("╚══════════════════════════╝");
break;
}
} while (opcion != 7);
if (s.nextInt() == 1) {
borrarRegistro(archivo);
}
System.out.println("¿desea Modificar? \n1 si\n2 no");
if (s.nextInt() == 1) {
if (archivo.delete()) {
System.out.println("el fichero se
borro");
}
archivo = null;
File borrador = new File("C:\\Users\\FABIO BAYONA DUARTE\\Desktop\\ola
si\\Fichero1\\empleadoBorrar.txt");
FileReader fr = null;
try {
fr = new FileReader(archivo);
BufferedReader br = new
BufferedReader(fr); String datos;
try {
datos = br.readLine();
System.out.println(datos);
br.close();
} catch (IOException ex) {
Logger.getLogger(Fichero1.class.getName()).log(Level.SEVERE, null, ex);
}
Se crean dos métodos, uno para grabar en fichero 1 “personal” y otro para el fichero
2 “ciudad”
Se crean 2 métodos de lectura
Finalmente se agrega el método y su enlazamiento con la lista llamado en este caso
armLista
Codigo:
package fichero2;
import java.io.*;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author FABIO BAYONA DUARTE
*/
public class Fichero2 {
String cod;
String Ciud;
Nodo enlace;
}
private Nodo raiz;
public Fichero2() {
raiz = null;
}
public void armLista(File archivo2) throws IOException {
try {
FileReader fr = new FileReader(archivo2);
try (BufferedReader br = new BufferedReader(fr)) {
int i;
String datos;
datos = br.readLine();
String[] parte = datos.split("/");
String[] parte1 = parte[0].split("-");
String[] parte2 = parte[1].split("-");
String[] parte3 = parte[2].split("-");
}
}
Interfaz menú
3. El siguiente ejercicio se hace con base al último tema visto del corte 1 denominado
ficheros de acceso directo el cual se trabaja con archivos prediseñados de txt y su
función se resume en la búsqueda y posible modificación de datos de forma más
eficiente, para este caso se implementa la lectura e impresión de los datos.
Utilizando ahora la extensión FileRandomAccess.
Interfaz menú
Métodos:
Codigo:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package FicheroAccesoDirecto;
import java.io.*;
import java.io.RandomAccessFile;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author FABIO BAYONA DUARTE
*/
public class FicheroAccesoDirecto {
/**
* @param args the command line arguments
* @throws java.io.IOException
* @throws java.io.FileNotFoundException
* @throws java.lang.InterruptedException
*/
public static void main(String[] args)
throws IOException,
FileNotFoundException,
InterruptedException {
File archivo1 = new File("C:\\Users\\FABIO BAYONA DUARTE"
+ "\\Desktop\\datos\\FicheroAccesoDirecto.txt");
if (!archivo1.exists()) {
try {
archivo1.createNewFile();
} catch (IOException ex) {
Logger.getLogger(FicheroAccesoDirecto.class.getName()).log(Level.SEVERE, null, ex);
}
}
FicheroAccesoDirecto p = new FicheroAccesoDirecto();
int opcion;
boolean comprobar;
Scanner numero = new Scanner(System.in);
do {
do {
opcion = 0;
comprobar = false;
System.out.println("╔═══════════════════════╗")
; System.out.println("║ MENU ║");
System.out.println("║ 1. Leer fichero ║");
System.out.println("║ 2. Imprimir el fichero ║");
System.out.println("║ 3. Salir ║");
System.out.println("╚═══════════════════════╝")
; System.out.println("Ingrese una opción de 1 a 3");
opcion = numero.nextInt();
if (opcion <= 0 || opcion > 3) {
System.out.println("╔═══════════════════════╗");
System.out.println("║ Usted ingresó un dato invalido ║");
System.out.println("╚═══════════════════════╝ ");
} else {
comprobar = true;
}
} while (comprobar == false);
switch (opcion) {
case 1:
FicheroAccesoDirecto.leer(archivo1);
break;
case 2:
p.imprimir(archivo1);
break;
case 3:
System.exit(0);
break;
}
} while (opcion != 4);
}
while (true) {
fr.seek(Pos);
registro = fr.readLine();
String[] parte0 = registro.split("/");
System.out.println(parte0[0]);
System.out.println(parte0[1]);
}
}
}
╔═════════════ CORTE 2 ══════════════╗
[1]
Bases de datos
Al igual que el diseño de software, el diseño de las bases de datos nace de las necesidades
que reclame el “sistema” para ser automatizado:
Sistema
Software Bases de datos
Tanto “software” como “bases de datos” deberán alinear con el “sistema” y de manera
impositiva software y bases de datos deben ser concordantes.
De lo anterior, los “sistemas” son un absoluto claro y rico procedimientos de lógica que se
encuentran inmersos en los sectores productivos (primario, secundario y terciario) y que
deben ser concebidos inicialmente independientes de software y bases de datos.
La “lógica absoluta” de los sistemas, definen claramente “procedimientos” de la entrada,
proceso y salida.
E P S
PARA Actor 2
QUIEN SE
VA A QUE SE VA
ACONTROL A
CONTROLAR
4) Tomar los datos de los informes o reportes y asignarlos dentro del “actor” que
corresponda
Conclusiones:
1) En resumen, el desarrollo de las bases de datos como del software no se hará
trabajo enfáticamente a la entrada, proceso y salida, si no que será puntual en
la automatización de uno o dos de los escenarios propuestos
2) Para hacer un uso debido de la abstracción se debe tener en cuenta los
requerimientos del cliente, lógica del sistema y los dos contextos principales de
para quien y que se va a controlar.
[2]
Arquitectura y diseño
El “contexto” del sistema define lo largo y angosto de lo que se quiera automatizar del
sistema y deberá ser representado de la siguiente manera:
1) Esquema de lo “Que se va a controlar” y “Para quien se va a controlar”
2) Modelo conceptual en términos de un diagrama “Entidad – Relación”, sustentado en
los principios de “Peter Chenn”
Para hacer más comprensible lo anterior, supóngase que se quiere construir el “contexto” de
un sistema, con base en la siguiente “abstracción” producto de la narrativa de un cliente:
Controlar las “facturas” de los “clientes” de un almacén y obtener los informes que
sean requeridos en donde se involucran datos como cédula, nombre, números de
facturas, dirección de cliente, valor total de la factura, profesión del cliente, código
de consumo de facturas, teléfono del cliente.
Reflexión:
De manera explícita la abstracción ya determina “Que se va a controlar” y “para
quien se va a controlar”, con lo cual es facilitara la construcción del Esquema.
Así mismo la “abstracción” hace mención de unos “datos”, los cuales deberán ser
asignados de manera acertada al esquema haciendo uso de la
Ley de la “Autodeterminación”: Al esquema del contexto, el cual estará
representado por “actores” le serán asignados de manera “absoluta” los “atributos”
que representan datos, los cuales deberán ser propios y primitivos de cada actor.
Esquema:
1
1
m
Client 1
es m
Factur
Para quien se va a as
controlar R Que se va a
controlar
Nofac
Relac PK
ión Fechfac
Valtfac
Codcoms
FKD
Conclusiones:
Los conjuntos obtenidos serán representados como “entidades” para construir el “modelo
conceptual” asociando atributos y definiendo relaciones.
DFE
m 1 1
Clientes 1
● Ced -PK m
● Nom Factur
● Dir ● Nofac -PK
● Tel ● Fechfac
● Profes- FKD ● Valtfac
● Codcoms - FKD
Código de la 46
profesión Código de
consumo
DFE: (Dependencia funcional exclusiva)
Existe cuando habiendo una relación R de uno (1) muchos (m) entre el actor antecesor y el
actor sucesor del “contexto”, existe una dependencia funcional de uno (1)a uno (1) entre el
actor sucesor y el actor antecesor
C
Clientes
e
d Se refleja
(ley de
,
reflexión)
N Soluciona la
o DFE
m
,
D
i
r
,
T
e
l
,
P
r
o
f
.
p
F
K
D
Prof, Nomprof : Resuelve la FKD
Profesiones
PKE (emergente)
n
Facturas
o
f
Consumos
a
c
,
f
e
c
h
f
a
c
,
v
a
l
t
f
a
c
,
c
o
d
c
o
n
s
o
,
d
c
c
e
d o
p n
s
k
,
n
F o
K m
D c
o
F
n
s
K
P
P
K
E
Autodeterminación ● Ced PK
● Nom
● Dir
● Tel
● Profes FKD
m 1
Conclusiones:
1) Para el desarrollo de modelos se enfatiza en las relaciones de 1 a muchos a nivel de
atributos en las relaciones dadas para las entidades, es por esto que se le llama a la
primera relación o modelo DFE o dependencia funcional exclusiva, pues muestra
cómo a partir de una relación se llega a tomar datos que solucionen o automaticen el
modelo.
2) Las reglas para dar solución al modelo se deben cumplir, ya que con estas se da un
correcto manejo de la información tratada y esta a su vez logra por medio del
diagrama explicar las entidades y sus relaciones en base a las Primary key y Foreing
key por defecto.
[4]
Bases de datos
Modelo conceptual por dependencia funcional exclusiva-DFE/
Contexto simple (2 actores)
El modelo conceptual entonces, se fundamenta en el modelo entidad relación de “Peter
Chenn”, y se puede construir de manera “segura y objetiva”, si se cumple con los siguientes
preliminares o antecedentes:
TALLER DE APLICACIÓN
m 1 Relación
1 D inversa
Estudia
ntes 1
FE
Cedest m Matric
R ulas
PK
nrorecib
nomest
PK
telest
fechard
valorreci
Relación
natural b banco
Contexto:
Controlar para el departamento de contabilidad de una determinada universidad, las
matriculas registradas por los estudiantes, durante su pertenencia académica. (el
contexto no tiene en cuenta materias)
: SOLUCIÓN PUNTO 1.
SOLUCIÓN PUNTO 2.
Conclusiones:
1) La ejecución de los ejercicios puestos en práctica es importante al nivel de
entendimiento de los PK, FKD y FKP pues de esta manera se logra identificar
las entidades respecto a sus atributos en base a los actores encontrados en el
modelo.
2) El manejo que se le da al modelo debe ser proporcional al creado por Peter Chenn,
efectuando de manera segura y objetiva enfatizando la abstracción del cliente para
su entendimiento lógico en base a entidades y atributos.
[5]
Bases de datos
La
normalización
A propósito del “modelo conceptual”, la “normalización” es un ejercicio inherente al
diseño de las bases de datos, que consiste en garantizar las siguientes características sobre
el diseño de:
1) Distribuir funcionalmente la información, de tal manera que no exista duplicidad de
la misma dentro, ni fuera de los espacios compartidos.
2) Dentro de los espacios compartidos (tablas) establecer una conectividad lógica a
través de un atributo denominado llave principal (Primary key) y otro denominado
llave foránea (Foreing key) por defecto y por proceso.
3) Al no existir duplicidad de la información, se dice no existir “Redundancia” de la
misma con lo cual no existe perdida de espacio en disco
4) La existencia de las FKD (Foreing key por defecto) evitan así mismo la perdida de
espacio en disco, pues la descripción del código solo aparecerá una vez, aunque el
código si muchas veces.
Cuando se obtiene el “método conceptual”, “Asegurado y objetivo”, se está también
obteniendo un “normalización” del diseño de las bases de datos, la cual maneja las
siguientes 5 fases.
1FN= Primera Forma Normal
2FN= Segunda Forma Normal
3FN= Tercera Forma Normal
4FN=Cuarta Forma Normal
5FN= Quinta Forma Normal
Conclusiones:
Profesiones
Prof
Clientes PK
Recordando: Cedu PK Nomp
1) Se localizan las entidades (MER)Nom rof iniciando
o las tablas (MR) de izquierda a derecha
D
con el conjunto que solucionó el “último actor del contexto”
i
2) Ubicar a la derecha las entidades o tablas que tienen los PK de las FK de
r
la izquierda.
3) Las relaciones se harán de derecha a izquierda, se leerá el diseño de derecha a
izquierda, irá al motor de derecha a izquierda.
Diseño:
Facturas
Nofac PK
Fechfac
Valfac
Codconsu FKD
Cedu FKP
Consumos
Codconsu PKE
nomconsu
Conclusiones:
1) En esta primera utilización del motor, aplicado en la página paiza.io se pudo
experimentar la forma en la que trabaja una relación pasada a codigo, utilizando
una serie de caracteres muy bien relacionadas con lenguajes de programación
empleados.
2) Es clara la utilización de las relaciones pues se deben cumplir una serie de pasos
que ayuden al desarrollo de este en el motor en forma de codigo, esta serie de
pasos se darán claramente al hacer los dos tipos de diagrama los cuales son modelo
entidad relacional y modelo entidad relación.
Estos dos son los encargados de mostrar el orden para cada “clase” que para todos
los casos es dada en el orden de derecha a izquierda.
[7]
Bases de datos
PLSQL básico (Insert, select, delete, update)
select count (*), ciu from empleados group by ciu order by ciu; 10
Se debe indicar que el
Cuenta todos los
conteo lo hago por
registros de la tabla, con
grupos de ciudades 60
bases en el criterio
(ciu) por tanto es
“ciu”
obligado ordenar
ANALIZIS
1
--------------------------------------------------------------------------------------------------------------
3
delete from empleados where suel > 700000 and ciu =1;
select * from empleados;
select " ";
delimiter //
create procedure pa20()
begin
select * from empleados
where ciu=2;
select " ";
select * from empleados;
end;
//
delimiter ;
call pa20();
-PA con paso de parámetros
delimiter //
create procedure pa23 (in ciuaux int)
begin
select* from empleados where ciu =ciuaux;
end;
//
delimiter ;
call pa23(2);
call pa23(1);
Imágenes de paiza.io
Para este caso en especifico se tomó el
mismo formato de tabal anterior respecto a
relación, enfáticamente se implementó la
utilización de más métodos en donde se
expresarán los diferentes cambios, pero esta
vez separados por espacios.
Se efectúa el cambio respecto a la
cedula numero 100 el cambio de
nombre por carol.
Los empleados s que tengan
sueldos menores a 700000 serán
aumentados a 1000000.
El empleado que tiene la cedula
número 400 se le produce una
reescritura donde su nueva ciudad es la
numero 1.
Se pone un sueldo total para
todos los empleados de 950000.
A los empleados que viven en la
ciudad número 1 se les dará un salario
de 700000.
Borra empleado con la cedula
numero 300
Borra los empleados que
tengan un sueldo mayor a 70000 y
tengan como ciudad la numero 1
Borra los empelados
Conclusiones:
Call
pa20(2);
Call pa20(1);
Delimiter //
Create procedure pa20( in, suelaux, ciuaux, int)
Begin
Select * from empleados where ciu =ciuaux and suel > suelaux;
End
//
Delimiter ;
delimiter //
create procedure pa10()
begin
Select* from empleados;
end;
//
delimiter ;
call pa10();
delimiter //
create procedure pa20 (in ciuaux int)
begin
select* from empleados where ciu=ciuaux;
end;
//if
delimiter ;
call pa20(2);
call pa20(1);
select " ";
delimiter //
create procedure pa30 (in suelaux int, ciuaux int)
begin
select* from empleados where ciu=ciuaux and suel>suelaux;
end;
//
delimiter ;
call pa30(600000,2);
Pantallazo:
Resultado:
Conclusiones:
Empleados
Si:
Select * from empleados
where ciu = 2;
Entonces:
delimiter //
create procedure pacu1 (in ciuaux int)
begin
declare ced1,suel1,ciu1 int;
declare nom1 varchar(20);
declare fin int default 0;
declare cursor1 cursor for select * from empleados;
declare continue Handler for not found set fin=1;
open cursor1;
repeat
fetch cursor1 into ced1,nom1,suel1,ciu1;
if ciu1=ciuaux then
select ced1,nom1,suel1,ciu1;
end if;
until fin = 1 Empleados
end repeat;
close cursor1; Cursor1 = es un
end; objeto dinámico tipo
C
/ Select e vector
d
/ u
d N Fetch : leer el
o
e m cursor
C
l e
l
i Cedu/nom/suel/ciu C
i
m u
i
t
e
r
;
call pacu1(2);
Define de
manera Ced1 nom1 suel1 ciu1
automática, en
mismo número
Ced1 nom1 suel1 ciu1
de “columnas
de select”
Se procede a colocar una nueva instancia relacioanda a ciudad 2 y sueldo mayor a 700000
open cursor1;
repeat
fetch cursor1 into ced1,nom1,suel1,ciu1;
if not fin then
if (ciu1=ciuaux) and (suel1> suelaux) then
select ced1,nom1,suel1,ciu1;
end if;
end if;
until fin = 1 end repeat;
close cursor1;
end;
//
delimiter ;
call pacu2(2,700000);
CODIGO:
delimiter //
create procedure pacu1 (in ciuaux int)
begin
declare ced1,suel1,ciu1 int;
declare nom1 varchar(20);
declare fin int default 0;
declare cursor1 cursor for select * from empleados;
declare continue Handler for not found set fin=1;
open cursor1;
repeat
fetch cursor1 into ced1,nom1,suel1,ciu1;
if ciu1=ciuaux then
select ced1,nom1,suel1,ciu1;
end if;
until fin = 1 end repeat;
close cursor1;
end;
//
delimiter ;
call pacu1(2);
open cursor1;
repeat
fetch cursor1 into ced1,nom1,suel1,ciu1;
if not fin then
if (ciu1=ciuaux) and (suel1> suelaux) then
select ced1,nom1,suel1,ciu1;
end if;
end if;
until fin = 1 end repeat;
close cursor1;
end;
//
delimiter ;
call pacu2(2,700000);
PANTALLAZO:
CONCLUSIONES:
Permite dentro de una sentencia SQL básica un tipo “select”, migrar de una tabla a otra
buscando por ejemplo la descripción de un código:
Aplicaciones
Mayor tiempo de procesamiento
Create table Test(id integer, title varchar(100));
insert into Test(id, title) values(1, "Hello");
select * from Test;
-- Your code here!
create database base30;
use base30;
create table ciudades
(
ciu int (2),
nomciu varchar(20),
primary key (ciu)
);
insert into ciudades(ciu,nomciu)
values(1,"medellin"),
(2,"cali"),
(3,"Bogotá"),
(4,"Yopal");
select clientes.cedu,clientes.nom,clientes.ciu,clientes.suel,
ciudades.nomciu from clientes
inner join ciudades on clientes.ciu=ciudades.ciu;
Resultado para caso simple
delimiter //
create procedure migrar()
begin
declare ced1,suel1,ciu1,ciuaux int;
declare nom1 varchar(20);
declare nomciu1 varchar(20);
declare fin int default 0;
declare cursor1 cursor for select * from clientes;
declare continue Handler for not found set fin=1;
open cursor1;
repeat
fetch cursor1 into ced1,nom1,suel1,ciu1;
Conclusiones:
1. El inner join tiene como función principal la migración de datos entre tablas de
datos, estos deben ser de valores idénticos en los dos campos para ser comparados y
unidos.
Para el caso del innner join puede ocasionarse perdida de filas en alguna de las
tablas por tener valores nulos o por tener un valor que no exista en la otra tabla entre
los campos/columnas que se están comparando
2. Cuando se hace utilización del inner join es posible aplicarlo a dos contextos, el de
longitud de código y procesado.
En el caso de longitud solo se hace necesaria la creación de las tablas y la
invocación del método inner join
Para el caso de procesado, referenciando velocidad, se utilizan cursores para hacer
el paso de información y así migrar de forma más rápida.
[PARCIAL #2]
m 1
1 D
Inmue
bles 1
FE
matrin m Refaccio
R nes
PK
noctoref
valin
PK fechcto
tipoin
valocto
tiporefac
FKD
Construya:
Clasere
fac
Entida
d refracciones
Tipoin
mu
Entidad
inmuebles
Infodu
eño
2. Solución modelo relacional
Entidad Infodueño
inmuebles Iddueño
matrin, PK PKE
valin nomdue
tipoin teldue
3. Solución modelo DDL
Inner join:
delimiter //
create procedure pasodatos()
begin
declare matrin1,valim1,tipoin1,iddueño1,tipoinaux int;
declare nom1 int(20);
declare nomin1 varchar(20);
declare fin int default 0;
declare cursor1 cursor for select * from inmuebles;
declare continue Handler for not found set fin=1;
open cursor1;
repeat
fetch cursor1 into matrin1,valim1,tipoin1,iddueño1;
-Trigger-
Un trigger es también un procedimiento almacenado PA, que a diferencia de los PA
tradicionales, tiene la propiedad de “autoejecutarse” cuando advierte la activación de una
secuencia SQL sobre las tablas que han sido asociadas a las alertas requeridas, de tipo
delete y update especialmente, pero también de tipo Select e Insert.
Si:
auditoria
delimiter //
create trigger tr1 after delete on clientes
for each row
begin
insert into auditoria(ceda, noma,suela,fecha,usua)
values (old.cedu, old.nom, old.suel, now(),"pedro");
end ;
//
delimiter ;
Codigo 2:
delimiter //
create trigger tr1 after delete on clientes
for each row
begin
insert into auditoria(ceda, noma,suela,fecha,usua)
values (old.cedu, old.nom, old.suel, now(),"pedro");
end ;
//
delimiter ;
delete from clientes where suel > 900000;
select * from clientes;
select "-------";
select * from auditoria;
delimiter //
Compilación codigo 1
Compilación codigo 2
Conclusiones:
1) En bases de datos, la utilización de la función trigger es de suma importancia para la
modificación de datos a fin de tener noción del momento en el que fue hecha la
actualización respecto a tablas, con relación ha guardado en dos tablas.
La primera encargada del almacenamiento de datos originales, y la segunda del
almacenamiento de datos referente a los cambios producidos.
2) Las principales operaciones efectuadas en el trigger son: Insert, delete y update.
Gracias a estas operaciones se tiene un control claro de la información de la base
de datos, y como principal utilidad del trigger se destaca la prevención de errores
dada una modificación, inserción u eliminación de algún dato en la sincronización
de tablas.
[2]
Bases de datos
-Dependencia funcional no exclusiva DFNE-
Una DFNE es la relación inversa de una (1) a muchos (m) entre 2 componentes del
contexto del sistema.
Una DFNE siempre se resuelve armando una “llave compuesta” con base en la PK del
componente antecesor y la PK del componente sucesor del contexto del sistema.
Con base en la “llave compuesta” se crearán siempre en 2 tablas:
- Tabla con los atributos que dependen de las dos partes de la
llave.
- Tabla con los atributos que depender de la segunda parte de la
llave.
Aplicación:
m 1 DF
Facturas
1
NE
nofac m Articu
R los
PK
fechfa codar
t PK
nomart
valuart
canvar
Cantidad Código
vendida del de bodega del
articulo articulo
Contexto:
Fkp Fkp
Fact-art nofac + codart, canvart
PKE
Bodegas C
o
d
b
o
a
r
t
,
d
i
r
b o
o P
, K
t E
e
l
b
2) Diseño modelo relacional
R
e
f
r
a
c
c
i
o
n
e
s
N
u
c
t
o
r
e
f
P
K
F
e
c
h
c
t
o
V
a
l
o
c
t
o
T
i
p
o
r
e
f
a
c
F
K
D
M
a
t
r
i
n
F
K
P
C
l
a
s
e
r
e
f
a
c
ti
p
o
r
e
f
a
c
P
K
n
o
m
r
e
f
a
c
T
i
p
o
i
n
m
u
T
i
p
o
i
n
P
K
E
n
o
m
i
n
CED NOM SUEL
CEDA NOMA SUELA FECHA SUELA
100 Pedro 800000
200 Carol 900000
[3]
Bases de datos
- DFNE –
F
a
c
t
-
a
r
t
N
o
f
a
c
F
K
P
p
k
C
o
d
a
r
t
F
K
P
c
a
n
v
a
r
t
facturas clientes
Nofac PK Idcli PK
Fechfac Nomcli
Idcli FK Telcli
articulos
codart PK
nomart
valvart
cantvart Bodegas
codboard FK
Codboart PK
Dirbo
Telbo
Cuando se obtiene una “llave compuesta”, se dice estar configurando una “Relación
fuerte” y esta deberá representarse a través de un “Rombo” inscrito dentro de un
“Rectángulo” o “cuadro”, esta representación recibe el final el nombre de
“agregación “, pues el rectángulo o cuadro sugiere que el rombo se deberá convertir
en una “entidad” y que como tal deberá “agregarse” al diseño
nofac
c Entidad Entidad
Rel
ació
n
c
Entidad Entidad
Entidad por
agregación
m Contratos 1 DF
alquiler 1
NE
m Vehícu
nrocto
R los
PK
placa PK
fechcto
idmarca
totcto
FKD color
modelo
idconductor
Atributo que
dependería
nrocto+placa
F
a
c
t
-
a
r
t
N
o
f
a
c
F
K
P
p
k
C
o
d
a
r
t
F
K
P
c
a
n
v
a
r
t
facturas clientes
Nofac PK Idcli PK
Fechfac Nomcli
Idcli FK Telcli
articulos
codart PK
nomart
valvart
cantvart Bodegas
codboard FK
Codboart PK
Dirbo
Telbo
Entidad Entidad
Rela
ción
fuert
e
id
c Entidad Entidad
Entidad por
agregación
Conclusiones:
1) Cuando se habla de dependencia funcional no exclusiva, tratamos con el hecho de
que los diseños respecto a entidad relación son diferentes, pues como característica
principal en esta se hace el diagrama con un rombo que contiene la relación fuerte y
no se vincula cuando la entidad antecesora participa en la creación de la relación
fuerte
2) Al tratar la DFNE siempre se debe estar precavido pues se debe tener noción de
la relación que debe haber en la relación fuerte pues en caso dado que se tomen
mal las asociaciones de las clases será de poca utilidad la aplicación DDL
[4]
Diseño bases de datos
-Normalización 4FN-5FN-
La cuarta forma normal (4FN) y la quinta forma normal (5FN), son manifestaciones propias
de la normalización inherentes a la solución de las dependencias funcionales no exclusivas
(DFNE).
Cuando se habla de 4FN, hay que advertir que sucede algo particular con la 3FN, pues esta
última se sucede en el instante en que la PK del “componente antecesor” se refleja en el
“componente sucesor” armando un “llave compuesta” con la PK de este último
componente; cada una de las partes de la “llave compuesta” se convierte a su vez en
“FKP”.
La “4FN” se manifiesta, cuando se construye el “conjunto” con los atributos que dependen
de las dos partes de la llave.
La “5FN” se manifiesta, cuando se construye el “conjunto” con los atributos que dependen
estrictamente de la “segunda” parte de la llave.
Aplicación:
m
1 Estudiante m DF
1 NE
ides Mate
R rias
t PK
idma
nome
t PK
st
nomm
at
credit
N
r
o
c
t
o
+
p
l
a
c
a
N
o
r
c
t
o
F
K
P
p
k
P
a
l
c
a
F
K
P
I
d
c
o
n
d
u
c
t
o
r
contratos
nrocto PK
fechcto
totcto
idctista FKD
c
o
n
t
r
a
t
i
s
t
a
I
d
c
t
i
s
t
a
P
K
N
o
m
c
t
i
s
t
a
t
e
l
c
t
i
s
t
a
v
e
h
i
c
u
l
o
s
p
l
a
c
a
P
K
i
d
m
a
r
c
a
c
o
l
o
r
m
o
d
e
l
o
i
d
c
o
n
d
u
c
t
o
r
F
K
D
C
o
n
d
u
c
t
o
r
I
d
c
o
n
d
u
c
t
o
r
P
K
N
o
m
c
o
n
d
u
c
t
o
r
T
e
l
c
o
n
d
u
c
t
o
r
[5]
Dependencias funcionales mixtas
-(DFE-DFNE/DFNE-DFE)-
I
d
e
s
t
+
i
d
m
a
t
i
d
e
s
t
F
K
P
p
k
i
d
m
a
t
F
K
P
c
o
d
p
r
o
f
P
r
o
f
e
s
i
ó
n
C
o
d
p
r
o
f
P
K
n
o
m
p
r
o
f
estudiante
Idest PK
nomest
telest
codprof FKD
materias
idmat PK
nommat
créditos
nota
codprof FKP
P
r
o
f
e
s
i
ó
n
C
o
d
p
r
o
f
P
K
n
o
m
p
r
o
f
Fact-art
Nofac
p
FKP
Codart
nofac
Conclusiones:
Al final de “Dependencias funcionales mixtas” – DFNE /DFE -
[6]
Dependencias funcionales mixtas
-(DFNE-DFE)-
clientes
Idcli PK
Nomcli
Telcli
Profe FK
Profesiones
Profe PKE
Codprof
fa
c
t
u
r
a
s
N
o
f
a
c
P
K
F
e
c
h
f
a
c
V
a
l
t
f
a
c
S
u
c
u
r
F
K
ar
t
i
c
u
l
o
s
c
o
d
a Bodega
s
r
C
t
o
P d
K b
n o
o a
m r
t
a
P
r K
t D
v i
a r
l b
v o
Telbo
a
r
t
c
a
n
t
v
a
r
t
c
o
d
b
o
a
r
d
F
K
Modelo pseudomatemático
Modelo DDL
Clientes
extend
● Ced -PK Factu
● Nom ras
● Nofac -PK
● Tel
● Fechfac
● Activ- FKD
● Valtfac
● S
include
u
n
c d
l e
Conclusiones:
1) La aplicación de las bases de datos va ligada a la ingeniería de software, la cual
se ve reunida en ella misma por relaciones o herencias como sucedía en la
programación orientada a objetos
2) Los diagramas aplicados desde las bases de datos tienen relación por diagramas
haciendo utilización de extends e includes
[8]
Bases de datos
-Trabajo final-
Solución:
Primer punto
1. Se hace la creación de una base de datos referenciada a DFNE tomando dos clases
principales, haciendo referencia a una empresa que cuenta con empleados y productos,
estos se relacionan debido a que 1 un empleado tiene dominio de muchos productos, pero
cada producto “unidad” lo posee muchos empleados
Aplicación:
1 Empleado m DF
1 NE
idempl Produc
R tos
e PK
idmat PK
nomemp
nomproduc
le
canvpro
Diseño modelo pseudomatematico
Empleado idemple nomemple telemple codempre
PK FKD
----------------------------------------------------------------------------------------------
Distribución
Coddistribuu PK
registrodistri
Prod
uctos
idproduct PK
nomproduct
canvpro
coddistribu
FKD
Diseño modelo DDL
--------------------------------------------------------------------------------------------------------------
idemple
Entidad Entidad
idproduct
empleado codigoempresa
Relación
fuerte
emple-
produc
Entidad por
agregación
--------------------------------------------------------------------------------------------------------------
Segundo punto
Según lo aprendido en la materia bases de datos las normalizaciones aplicadas serán
definidas de la siguiente manera:
1FN= Primera forma normal = la primera forma normal es aquella que se destaca por hacer
referencia a los atributos que no pueden ser separados es decir son simples, por otra parte
las tablas en las que se registran los datos si cambia el orden no debe haber variación en
este en sus significados.
Esto quiere decir en resumen de cuentas que por ley de la autodeterminación se generan los
atributos de los actores y se tiene el contexto lógico base del que se quiere tratar.
2FN= Segunda forma normal= Cuando se habla de 2FN hablamos de la primera ley de
conjuntos presentada en la normalización, pues se conoce que la 2FN se presenta cuando
esta tiene contenida en si misma la 1FN, en este contexto aparecen las llaves mostrando
para los actores la PK (primary key) y para los atributos FKD (Foreing key por defecto).
A su vez gracias a este empieza a darse la definición por dependencia funcional sea:
exclusiva o no exclusiva.
3FN= La tercera forma normal se puede resumir en el contexto de que en ella se debe
contener la 2FN, ahora bien, en este caso se debe cumplir el hecho de que la primary key no
debe estar dependiendo con otro atributo, es decir que en el caso de que se cumpla una
dependencia de este tipo, es necesario dividir la tabla con los datos que este contiene
4FN= La cuarta forma normal se puede presentar mientras esté presente la tercera forma
normal y en este caso es posible la eliminación redundante o las relaciones de muchos a
muchos gracias a esta. Es decir que la 4FN tiene como fin el orden de datos y a su vez
evitar que se presente información redundante.
Cuando se hace énfasis en la 4FN sucede algo particular con la 3FN, pues esta última se
sucede en el instante en que la primary key del “componente antecesor” se refleja en el
“componente sucesor” armando un “llave compuesta” con la PK de este último componente
Es decir que cada una de las partes de la “llave compuesta” se convierte a su vez en “FKP”.
Fin de documento
Presentado por: Fabio Andrés Bayona Duarte
Para la asignatura: Bases de datos