viernes, 4 de mayo de 2012

ROLES

CREATE ROLE administradores
GRANT ROLE administradores TO USER rebeca
REVOKE ROLE administradores FROM USER rebeca
GRANT CREATETAB, BINDAPP, CONNECT ON DATABASE TO ROLE administradores
GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TABLE trabajos TO ROLE administradores
GRANT SELECT ON TABLE trabajos TO ROLE clientes
GRANT SELECT, INSERT, DELETE, ON TABLE maquinas TO ROLE moderadores
REVOKE SELECT, UPDATE (apellido, nombre) ON TABLE conductores FROM ROLE moderadores
UPDATE DBM CFG USING AUTHENTICATION SERVER_ENCRYPT

Ejemplo de Script en SQL

Ejemplo de Script en SQL

Este script fue utilizado para crear la base de datos que se muestra a continuación:
CREATE SCHEMA "ADMINISTRATOR";


CREATE TABLE "ADMINISTRATOR"."BARES" (
"CODB" VARCHAR(3) NOT NULL,
"NOMBRE" VARCHAR(15) NOT NULL,
"CIF" VARCHAR(10),
"LOCALIDAD" VARCHAR(20) NOT NULL
)
DATA CAPTURE NONE IN "USERSPACE1";
CREATE TABLE "ADMINISTRATOR"."CERVEZAS" (
"CODC" VARCHAR(3) NOT NULL,
"ENVASE" VARCHAR(10) NOT NULL,
"CAPACIDAD" DECIMAL(6 , 3) NOT NULL,
"STOCK" INTEGER NOT NULL
)
DATA CAPTURE NONE IN "USERSPACE1";
CREATE TABLE "ADMINISTRATOR"."EMPLEADOS" (
"CODE" VARCHAR(3) NOT NULL,
"NOMBRE" VARCHAR(30) NOT NULL,
"SUELDO" INTEGER NOT NULL
)
DATA CAPTURE NONE IN "USERSPACE1";
CREATE TABLE "ADMINISTRATOR"."REPARTO" (
"CODE" VARCHAR(3) NOT NULL,
"CODB" VARCHAR(3) NOT NULL,
"CODC" VARCHAR(3) NOT NULL,
"FECHA" DATE NOT NULL,
"CANTIDAD" INTEGER NOT NULL
)
DATA CAPTURE NONE IN "USERSPACE1";
ALTER TABLE "ADMINISTRATOR"."BARES" ADD CONSTRAINT "SQL110915083013030" PRIMARY KEY
("CODB");
ALTER TABLE "ADMINISTRATOR"."CERVEZAS" ADD CONSTRAINT "SQL110915090449660" PRIMARY KEY
("CODC");
ALTER TABLE "ADMINISTRATOR"."EMPLEADOS" ADD CONSTRAINT "SQL110915083625520" PRIMARY KEY
("CODE");
ALTER TABLE "ADMINISTRATOR"."REPARTO" ADD CONSTRAINT "SQL110915083904570" PRIMARY KEY
("CODE",
"CODB",
"CODC");
ALTER TABLE "ADMINISTRATOR"."REPARTO" ADD CONSTRAINT "SQL110915084519020" FOREIGN KEY
("CODE")
REFERENCES "ADMINISTRATOR"."EMPLEADOS"
("CODE");
ALTER TABLE "ADMINISTRATOR"."REPARTO" ADD CONSTRAINT "SQL110915084537220" FOREIGN KEY
("CODB")
REFERENCES "ADMINISTRATOR"."BARES"
("CODB");
ALTER TABLE "ADMINISTRATOR"."REPARTO" ADD CONSTRAINT "SQL110915090459180" FOREIGN KEY
("CODC")
REFERENCES "ADMINISTRATOR"."CERVEZAS"
("CODC");
GRANT CREATEIN ON SCHEMA "ADMINISTRATOR" TO PUBLIC;
*Nota: el script crea la base de datos vacía.

Ejercicios

Insertar en la tabla trabajos la fila ‘C01’, ‘M04’,’P07’,’19/09/02’,100.
INSERT INTO trabajos
VALUES ('C01', 'M04','P07',’2002-09-19’,100)
* No se puede insertar ya que P07 no existe en la tabla de proyectos.

Eliminar el conductor ‘C01’ de la tabla conductores.
DELETE
FROM conductores
WHERE codc = 'C01'
* No se puede eliminar ya que la tabla ‘Trabajos’ lo impide.

Modificar el código del conductor ‘C01’ de la tabla conductores, por el código ‘C05’.
UPDATE conductores
SET codc = 'C05'
WHERE codc = 'C01'
* No se puede modificar ya que quedaría un valor duplicado.

Modificar el código del conductor ‘C01’ de la tabla conductores, por el código ‘C07’.
UPDATE conductores
SET codc = 'C07'
WHERE codc = 'C01'
* No se puede modificar ya que la tabla ‘Trabajos’ lo impide.

Tipo de lenguajes

Tipos de lenguajes:
* Definición de Datos (DDL): Crean el esquema de la base de datos
* Administración de Datos (DML): Permiten al usuario interactuar con la base de datos, insert, delete, update, select.
* Control de Datos (DCL): Create user, grant, revoke…

Ejercicios DML

1. Obtener el nombre de la comunidad con menor número de habitantes.
SELECT provincias.comunidad, SUM (localidades.habitantes) AS habitantes FROM provincias, localidades WHERE localidades.codprov = provincias.codprov GROUP BY provincias.comunidad ORDER BY habitantes ASC LIMIT 1

2. Obtener el nombre de las comunidades con un número de habitantes por debajo de la media de todas las comunidades.
SELECT provincias.comunidad, sum (localidades.habitantes) AS hab FROM provincias, localidades WHERE localidades.codprov = provincias.codprob GROUP BY provincias.comunidad HAVING SUM (localidades.habitantes) < (SELECT AVG (hab) FROM (SELECT provincias.comunidad, sum (localidades.habitantes) AS hab FROM provincias,localidades WHERE localidades.codprov = provincias.codprov GROUP BY provincias.comunidad) AS t1)

3. Obtener el nombre de las localidades con un número de habitantes por debajo de la media de todas las localidades.
SELECT nombre FROM localidades WHERE habitantes < (SELECT AVG (habitantes) FROM localidades)

4. Obtener las localidades accesibles a través de un solo tramo desde la localidad de Cuenca.
SELECT nombre FROM localidades WHERE codloc IN (SELECT codloca FROM tramos WHERE codlocb IN (SELECT codloc FROM localidades WHERE nombre = 'Cuenca')) UNION SELECT nombre FROM localidades WHERE codloc IN (SELECT codlocb FROM tramos WHERE codloca IN (SELECT codloc FROM localidades WHERE nombre = 'Cuenca'))

5. Obtener el nombre de las localidades de la comunidad CLM.
SELECT nombre FROM localidades WHERE codprov IN (SELECT codprov FROM provincias WHERE comunidad = 'CLM')

6. Obtener el número de habitantes de cada provincia, ordenando por comunidad y provincia.
SELECT SUM (localidades.habitantes) FROM localidades, provincias WHERE localidades.codprov = provincias.codprov GROUP BY provincias.nombrep, provincias.comunidad ORDER BY provincias.nombrep, provincias.comunidad

7. Obtener las comunidades que tienen de media una distancia superior a 30 kilómetros entre las localidades de su comunidad.

8. Obtener el nombre de las provincias con un censo inferior a 40000 habitantes.
SELECT nombrep FROM provincias, localidades WHERE localidades.codprov = provincias.codprov GROUP BY provincias.nombrep HAVING SUM (localidades.censo) < 40,000

9. Obtener localidades que no figuren en ninguno de los tramos o en los que no figure la distancia entre los nodos del tramo.
SELECT nombre FROM localidades WHERE codloc NOT IN (SELECT codloca FROM tramos UNION SELECT codlocb FROM tramos) OR codloc IN (SELECT codloca FROM tramos WHERE distancia IS NULL UNION SELECT codlocb FROM tramos WHERE distancia IS NULL)

OBJETIVOS DBMS


Objetivos de un DBMS
1. Consultas no predefinidas y complejas
2. Flexibilidad a los cambios e independencia
3. Redundancia e inconsistencia de datos
4. Integridad: procesos de restauración (logs/backup)
5. Seguridad: usuarios, privilegios, criptografia
6. Concurrencia

Lenguaje SQL

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema de normalización hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) no nos servirá para resolver todos los problemas, aunque si se puede asegurar que cualquier sentencia escrita en ANSI será interpretable por cualquier motor de datos.

Definicion cohesion vs acomplamiento


Cohesion: medida del grado de fuerza funcional de un componente, cuanto menor sea el numero de tareas (elementos de procesamiento) que realiza un componente, mayor sera su cohesion.
Acoplamiento: medida de la interdependencia relativa entre componentes y depende de la interfaz entre estos, es decir, de la cantidad y tipo e datos que comparten.

TRIGGER

Un Trigger SQL es un programa que ejecuta el DB2 antes o después de que ocurra una operación de Insert, Update o Delete sobre la TABLA donde el trigger está definido. El DB2 invoca al trigger que se “dispara” automáticamente realizando una acción determinada, sin tener en cuenta qué aplicación o qué interfase se utilizó para modificar esa tabla