Professional Documents
Culture Documents
Dentro de los SGBD Relacionales más conocidos están: Dentro de los SGBD No Relacionales más conocidos:
• MySQL • MongoDB
• Sql Server • FireBase
• Oracle • CouchDB
• DB2 • Neo4j
• Informix • Cassandra
• Diseño Conceptual
• Diseño Lógico
• Diseño Físico
Diseño Conceptual
Modelo Entidad Relación - MER
Atributo1 Atributo1
Atributo2 Atributo2
Atributo3 Atributo3
1:N
1:N
(0,1) (0,N)
Persona Posee Vehículo
Conceptos
Ejemplo de Relación.
Nombre Edad Estatura Placa Modelo Color
1:N
Relación Recursiva
Nombre Edad Estatura
Persona compañer @
Ejemplo:
Se requiere un sistema de información que permita gestionar la información de los
Arriendos/Alquileres de las viviendas.
Este sistema debe contener la información del propietario de la(s) vivienda(s) y la información
que se debe contemplar para dicho propietario es: identificación, nombre completo, teléfonos de
contacto y opcionalmente el correo electrónico. La(s) vivienda(s) deben tener la información de:
código de la vivienda, dirección, la cual está compuesta por: calle y número, la vivienda debe
tener además una descripción y la cantidad de habitantes. Cada vivienda se encuentra ubicada
en una ciudad y dicha ciudad pertenece a un departamento/estado. Se debe tener la información
de los arriendos/alquileres los cuales tendrán la información de: fecha de inicio, fecha de fin,
valor mensual. Y también se requiere conocer la información del (los) inquilino(s), la información
de este debe ser: identificación, nombre completo y teléfonos.
nombres apellidos
código código nombre
Identifi.
nombre dirección
1:N N:1
(1:1) (1:N) (0:N) (1:1)
PROPIETARIO Posee VIVIENDA Ubicada CIUDAD
(1:1) (1:N)
(1:N) (1:N)
INQUILINO Realizado ARRIENDO
código nombre
Persona
ENTIDADES, ATRIBUTOS COMPUESTOS RELACIONES Y ATRIBUTOS
Apellidos
PERSONA(Nombre_Nombres, Nombre_Apellidos, Edad)
Nombre Edad
dominio(Nombre_Nombres) : carácter de tamaño n
dominio(Nombre_Apellidos) : carácter de tamaño n
Persona dominio(Edad): entero de 0 hasta 150
TELEFONOS(Telefono)
Persona
ENTIDADES, ATRIBUTOS MULTIVALUADOS
CLAVES PRIMARIAS Y CLAVES FORANEAS RELACIONES Y ATRIBUTOS
PERSONA(Nombre, Edad)
TELEFONOS(Nombre, Telefono)
RELACIONES
CARDINALIDAD 1:N 1:N
Una Persona
posee muchos
PERSONA Posee VEHÍCULO vehículos
PERSONA(Nombre, edad, dirección)
1:N
(0,N)
(0,N) Persona puede tener mínimo 0 y máximo muchos vehículos
Mínimo
(0,1) Un vehículo puede pertenecer mínimo a 0 y máximo a 1 persona
RELACIONESCARDINALIDAD N:M
N:M
MATRICULA(identificacion, codigo)
(1:1) (1:N)
(1:N) (1:N)
INQUILINO Realizado ARRIENDO
código nombre
TELEFONOS(identificación, telefono)
DEPARTAMENTO(codigo_departamento, nombre)
ARRIENDO_INQUILINO(codigo, identificacion)
TELEFONOS_INQUILINOS(identificación, telefono)
Representación Tabular
R {
(atributo1, atributo2, atributo3, …, atributoN),
(atributo1, atributo2, atributo3, …, atributoN),
(atributo1, atributo2, atributo3, …, atributoN),
…
(atributo1, atributo2, atributo3, …, atributoN)
}
Restricciones:
• Restricción Nulo: No permite que el valor del atributo sea nulo.
• Restricción de Identidad: No permite tener dos valores repetidos en las
claves primarias.
• Restricción de Integridad de Entidad: No permite tener valores nulos en la
clave primaria.
• Restricción de Integridad Referencial: No permite tener valores en la clave
foránea que no existan en la clave primaria. Sin embargo, si permite tener
valores nulos en la clave foránea.
• Restricción de Clave Alterna: No permite valores repetidos en la clave
alterna.
• Restricción de Dominio: Los datos deben ser del dominio específico.
Ejemplo: dominio de los números enteros comprendidos entre 0 y 18.
Operaciones Transaccionales
• INSERCIÓN
• ELIMINACIÓN
• ACTUALIZACIÓN
Transacciones Compuestas
• BEGIN
• COMMIT
• ROLLBACK
Violaciones de Restricciones
OPERACIÓN IDENTIDAD ENTIDAD REFERENCIAL UNICA DOMINIO NULO
INSERTAR SI SI SI SI SI SI
Sin Alternativas Sin Alternativas Alternativa Alternativa Sin Alternativas Alternativa
NULO NULO VALOR X
DEFECTO
ELIMINAR NO NO SI (Si es de la NO NO NO
tabla padre que
contiene
información en Nulificar: Al borrar información padre colocar
las tablas hijo) NULL a la referencia (clave foránea).
Alternativa Cascada: Al borrar información padre borrar
NULIFICAR, registros hijos.
CASCADA, Restringir: Restringir pero informar.
RESTRINGIR
ACTUALIZAR SI SI SI (Padre a Hijo) SI SI SI
Sin Alternativas Sin Alternativas Alternativas Alternativa Sin Alternativas Sin Alternativas
iguales a NULO
Eliminar.
Lenguaje SQL
Structured Query Language por sus siglas en inglés.
ALTER TABLE nombre ALTER COLUMN campoN SET NOT NULL à Primero quitar valores Nulos.
ALTER TABLE nombre ADD CONSTRAINT nombre_constraint FOREIGN KEY (campoN, … campoM) REFERENCES
otra_tabla (campoN, …, campoM) ON DELETE acción ON UPDATE acción
ALTER TABLE nombre ALTER COLUMN campoN TYPE nuevo_tipo (tamaño) à Entre el mismo Tipo de dato
Bases de Datos
DROP DATABASE nombre
Tablas
DROP TABLE nombre
DCL – GRANT and REVOKE
GRANT: Permite realizar una acción sobre un objeto.
Pueden haber mas acciones, es una forma de controlar, tener encuenta si hay secuencias
Tambien se deben dar permisos. Para que se peude utilizar. Esto para instertar.
INSERT INTO tabla (campo5, campo3, campo1, campo18, …, campoN) VALUES (valor5, valor1, valor18, …,
valorN)
INSERT INTO tabla VALUES (DEFAULT, valorN, valorM, …, valorZ)à llamara el valor por defecto. Tambien
para serial.
Where:
WHERE campoM = valorM (=, >, <, <>)
WHERE campoM BETWEEN valor1 AND valor2
WHERE campoM IN (valor1, valor2, …, valorN)
WHERE campoM IN SELECT consulta
WHERE campoM NOT IN…
DML – DELETE
DELETE FROM tabla WHERE campoN = valorN
Where:
WHERE campoM = campoM (=, >, <, <>)
WHERE campoM BETWEEN valor1 AND valor2
WHERE campoM IN (valor1, valor2, …, valorN)
WHERE campoM IN SELECT consulta
WHERE campoM NOT IN…
Configuración Postgres
• Configurar variable PATH para postgtress con postgressApp.
• - sudo mkdir -p /etc/paths.d &&
• echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
•
• Archivos de Configuración.
•
• Ruta:
• /Users/mauricio/Library/Application Support/Postgres/var-10/pg_hba.conf
•
• pg_hba.conf —> Configurar prestación de servicios o autenticación del cliente.
•
• Postgresql.conf —> Configurar las ip que puede ingresar a nuestra base de datos. ‘*’ para todas las
maquinas si son varias ipso se separa por ‘,’
Crear Espacio De Trabajo
Dar permisos y usuario a la carpeta
chown -R mauricio basesdedatos
chgrp -R mauricio basesdedatos
SELECT *
FROM TABLA1 AS NUEVO_NOMBRE
CROSS JOIN
Es el resultado del producto cartesiano de las relaciones que
intervienen en la combinación.
• Para traer todos los campos distintos pero asignando que columna no se
quiere repetir:
5 * 1 - 5 = 0 $BODY$
DECLARE inicio integer;
5 * 2 - 5 = 5
BEGIN
inicio = _registros * _pagina - _registros;
RETURN QUERY SELECT consecutivo, producto, cantidad FROM
ventas
SETOF à Devolver un conjunto de la tabla. LIMIT _registros OFFSET inicio;
END;
$BODY$
LANGUAGE plpgsql;
-- LLAMADO DE LA FUNCIÓN QUE PERMITE PAGINAR
SELECT * FROM ventas_paginadas(5, 3);
-- TIPOS DE DATOS
-- SON TODOS LOS TIPOS DE DATOS QUE ACEPTA POSTGRESQL
-- %TYPE PERMITE COPIAR EL TIPO DE DATO EXACTO DE UNA COLUMNA (ATRIBUTO) DE UNA TABLA
(RELACIÓN).
DECLARE mi_variable productos.nombre%TYPE;
-- TIPO DE DATO
-- %ROWTYPE PERMITE COPIAR LA ESTRUCTURA DE UNA TABLA PARA ALMACENAR
-- LA INFORMACIÓN DE UN REGISTRO
DECLARE mi_fila productos%ROWTYPE;
mi_fila.valor;
-- CICLOS -- EJECUCIÓN
-- FOR SELECT repetir_for();
CREATE OR REPLACE FUNCTION repetir_for() -- CREAR FUNCION PARA RECORRER UN SELECT
RETURNS void
AS CREATE OR REPLACE FUNCTION obtener_ventas()
$BODY$ RETURNS SETOF ventas
DECLARE iteracion integer; AS
BEGIN $BODY$
FOR iteracion IN 1..10 LOOP DECLARE
RAISE NOTICE 'Voy en la iteración: %', iteracion; fila ventas%ROWTYPE;
END LOOP; BEGIN
END; FOR fila IN SELECT * FROM VENTAS LOOP
$BODY$ -- fila.valor = fila.valor * 3;
LANGUAGE plpgsql; RETURN NEXT fila;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
-- llamado a la función
SELECT * FROM obtener_ventas();
-- WHILE
-- SE EJECUTA MIENTRAS QUE LA CONDICIÓN SE CUMPLA
CREATE OR REPLACE FUNCTION mientras()
RETURNS void
AS
$BODY$
DECLARE valor integer;
BEGIN valor = 5;
WHILE valor < 50 LOOP
RAISE NOTICE 'voy en el valor: %', valor;
valor = valor + 10;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
-- llamado de la función
-- LLAMADO DE LA FUNCIÓN
NEW.ultima_modificacion = now();
NEW.ultimo_usuario_bd = user;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
-- CREACIÓN DEL TRIGGER
CREATE TRIGGER valida_productos
BEFORE INSERT OR UPDATE
ON productos
FOR EACH ROW EXECUTE PROCEDURE valida_productos();
• Redundancia.
• Problemas de:
• Inserción
• Actualización
• Borrado
¿PARA QUÉ SIRVE?
• Redundancia.
• Problemas de:
• Inserción
• Actualización
• Borrado
Cálculo de las DEPENDENCIAS FUNCIONALES
En una relación:
R(Atributos, Dependencias)
Atributos: {A, B}
Notación: A -> B
R(Atributos, Dependencias)
Atributos: {A, B, C}
Dependencias: {A->B; B->C; A->C}
R(Atributos, Dependencias)
Atributos: {A, B, C, D}
Dependencias: {A->B,D; B->C;}
Por lo tanto la superclave será A ya que este atributo puede determinar toda la R.
Formas Normales
5FN
4FN
FNBC
3FN
2FN
1FN
Descripción
• Cada atributo es simple.
1FN • Cada atributo es monovaluado.
• Se encuentra en 1FN.
2FN • Cada atributo no principal tiene DF de la clave candidata.
• Se encuentra en 2FN.
3FN • No existe ningún atributo no principal que dependa transitivamente de clave candidata.
NOMBRE SKILLS
ALVARO FELIPE HTML
ALVARO FELIPE CSS
ALVARO FELIPE JAVASCRIPT
ALEXYS LOZADA JAVA
ALEXYS LOZADA JAVASCRIPT
ALEXYS LOZADA DBA
Ejemplos:
ESTUDIANTE MATERIA NOTA SALON
• No se puede ingresar un Profesor si no se le ha asignado una materia la cual debe tener a su vez un libro y salón.
• No se puede ingresar una Materia si no existe un profesor asignado y un libro y un salón.
• Etc…
Borrado:
Una oficina tiene un único teléfono Una materia tiene más de un profesor
Una materia tiene un número de créditos Un profesor en una materia utiliza un solo libro el
cual tiene un autor y un año de edición
• Materia -> Créditos
• Profesor, Materia -> Libro, Autor, Año
Un libro tiene un autor y año de edición