martes, 4 de marzo de 2014

MONGO DB, UN POLO OPUESTO A LAS BASES DE DATOS TRADICINALES. (Ensayo).


I.                I.                    Introducción.

MongoDB  maneja  bases de datos NoSQL orientado a documentos bajo el concepto de código abierto, al ser un sistema de bases de datos no relacionales, esto lo hace ser más rápido que otros sistemas, para demostrar esto  a lo largo del documento se comparó la velocidad al hacer  operaciones con grandes volúmenes de datos en Mongo y en MySQL .

El articulo parte de la comparación de Mongo y MySQL, con  un laboratorio en el que se probaron ambos sistemas en la misma maquina haciendo las mismas tareas, moviendo grandes volúmenes de datos.
La primera comparación  fue entre MySQL usando workbecnh  y MySQL usando la consola su consola, el resultado fue que con workbecnh  el tiempo fue 105.781 segundos y por consola 89  segundos; lo que muestra  una notable reducción de tiempo por consola. Esta misma prueba de insertar mil datos  se realizó con Mongo, por medio de consola y se obtuvo un resultado de menos de un segundo; esto demuestra que Mongo tiene más velocidad para el procesamiento de datos. Y al insertar diez mil datos, hacer una consulta después de cada inserción, es decir diez mil consultas, y mostrar el resultado, utilizando lenguaje PHP se hizo en 21.18 segundos.

Mongo se caracteriza por tener alto rendimiento y una sintaxis muy flexible, aunque por ser una base  de datos noSQL a veces se sacrifican las relaciones, al tratar de eliminar un elemento que es padre, este sistema no tendrá restricciones, también se tiene el problema de seguridad de información,  no hay normalización, y en el rendimiento puede resultar más importante que la coherencia.
A pesar del problema de coherencia de estas bases de datos, escoger entre la coherencia  de los datos y el rendimiento depende las necesidades que se tenga. Pero  no por esto las  bases de datos relacionales dejarían de existir, solo que estos motores de bases de datos no relacionales son convenientes para manejar grandes volúmenes de datos, el motor de base de datos escogido depende de las necesidades.
En cuanto a las sintaxis de las sentencias, la sintaxis de Mongo es basada en JavaScript, y JSON, lo que la hace bastante simple para quienes han trabajado con estos lenguajes.









viernes, 7 de junio de 2013

Algebra relacional


2.2. Algebra relacional.

El Algebra relacional es un lenguaje de consulta procedural. Consta de un conjunto de operaciones que toman como entrada una o dos relaciones y producen como resultado una nueva relación, por lo tanto, es posible anidar y combinar operadores. Hay ocho operadores en el álgebra relacional que construyen relaciones y manipulan datos, estos son:
1. Selección2. Proyección3. Producto
4. Unión5. Intersección6. Diferencia
7. JOIN8. División

Tabla 2-1 - Operadores del Algebra relacional

Las operaciones de proyección, producto, unión, diferencia, y selección son llamadas primitivas, puesto que las otras tres se pueden definir en términos de estas.

Se hace necesario en este punto incluir un modelo de datos de ejemplo en el cual trabajar para generar ejemplos de comandos y operadores. Para este efecto se incluye un modelo básico de administración de RadioTaxis. El Gráfico que se presenta a continuación representa el Modelo conceptual (Modelo Lógico) o Diagrama de Entidad-Relación
Los Esquemas de relaciones que se pueden construir a partir de este modelo son los siguientes:
Dueño = {rut, nombre, teléfono, dirección, vigencia}
Chofer = {rut, nombre, teléfono, dirección, fecha_licencia_desde, fecha_licencia_hasta, vigencia}
Vale = {correlativo, hora_desde, hora_hasta, metraje_total, tarifa_total}
Móvil = {patente, rut_dueño, rut_chofer, marca, modelo, año}
Viaje = {correlativo_vale, patente_movil, Hora_Desde, hora_hasta, origen, destino, tarifa, metraje}
2.2.1. Selección.
El operador de selección opta por tuplas que satisfagan cierto predicado, se utiliza la letra griega sigma minúscula (σ) para señalar la selección. El predicado aparece como subíndice de σ. La Relación que constituye el argumento se da entre paréntesis después de la σ.

Ejemplos :
index12.jpg
index13.jpg

2.2.2. Proyección.
La operación de proyección permite quitar ciertos atributos de la relación, esta operación es unaria, copiando su relación base dada como argumento y quitando ciertas columnas, La proyección se señala con la letra griega pi mayúscula (Π). Como subíndice de Π se coloca una lista de todos los atributos que se desea aparezcan en el resultado. La relación argumento se escribe después de Π entre paréntesis.

Ejemplos :
index14.jpg
index15.jpg

2.2.3. Producto.
En álgebra relacional el producto de dos relaciones A y B es:

A Veces B o A X B

Produce el conjunto de todas las tuplas t tales que t es el encadenamiento de una tupla aperteneciente a A y de una b que pertenece a B. se utiliza el símbolo X para representar el producto.

Ejemplos:
index16.jpg

2.2.4. Unión.
En álgebra relacional la unión de dos relaciones compatibles[3]A y B es:

A UNION B o A ∪ B

Produce el conjunto de todas las tuplas que pertenecen ya sea a A o a B o a Ambas. Al igual que en teoría de conjuntos el símbolo ∪ representa aquí la unión de dos relaciones.

Ejemplo :
index17.jpg
Devuelve todos los Dueños y los Choferes.

2.2.5. Intersección.
En álgebra relacional la intersección de dos relaciones compatibles A y B
A INTERSECCION B o A ∩ B

Produce el conjunto de todas las tuplas pertenecientes a A y B. Al igual que en teoría de conjuntos el símbolo ∩ representa aquí la intersección entre dos relaciones.

Ejemplo:
index18.jpg
Devuelve todos los dueños que también son choferes

2.2.6. Diferencia
En álgebra relacional la diferencia entre dos relaciones compatibles A y B

A MENOS B o A – B

Produce el conjunto de todas las tuplas t que pertenecen a A y no pertenecen a B.

Ejemplo:
index19.jpg
Devuelve todos los dueños que NO son choferes


2.2.7. Join o Reunión.
En álgebra relacional el JOIN entre el atributo X de la relación A con el atributo Y de la relación B produce el conjunto de todas las tuplas t tal que t es el encadenamiento de una tupla a perteneciente a A y una tupla b perteneciente a B que cumplen con el predicado “A.X comp B.Y es verdadero” (siendo comp un operador relacional y los atributos A.X y B.Y pertenecientes al mismo dominio). Si el operador relacional “comp” es “=” entonces el conjunto resultante es un EQUI-JOIN. Si se quita uno de éstos (usando una proyección) entonces el resultado es un JOIN-NATURAL.

Ejemplo :
index20.jpg

2.2.8. División
En álgebra relacional el operador de división divide la relación A con grado m + n por la relación B entregando como resultado una relación con grado m. El atributo m + i de A y el atributo i de B deben estar definidos dentro del mismo dominio. Así el resultado de

A DIVIDIDO POR B o A / B

produce la relación C con un sólo atributo X, tal que cada valor de x de C.X aparece como un valor de A.X, y el par de valores (x, y) aparece en A para todos los valores y que aparecen en B.
Ejemplo:
index21.jpg
Selecciona todos los autos a cuyos choferes les caduca la licencia el 01/01/1999



http://www.jorgesanchez.net/bd/ejerciciosAR/algebra1.pdf

Ejercicios de álgebra relacional (1) 
Tenemos el siguiente esquema relacional de base de datos: 
CLIENTES(Nº Cliente, Nombre, Dirección, Teléfono, Población) 
PRODUCTO(Cod Producto, Descripción, Precio) 
VENTA(Cod Producto, Nº Cliente, Cantidad, Id Venta) 
La tabla de clientes almacena información sobre cada posible cliente 
de nuestra empresa. 
En la tabla de productos almacenamos información sobre cada 
producto de la empresa. 
La tabla de ventas relaciona a las dos anteriores utilizando el atributo 
cod Producto para indicar el producto que se venda, y el atributo Nº 
Cliente para indicar el cliente al que vendimos el producto. 
Sobre ella se realizan estos ejercicios (las soluciones están al final): 
[1] Realizar una consulta que muestre el nombre de los 
clientes de Palencia 
[2] Indicar el código y descripción de los productos cuyo 
código coincida con su descripción 
[3] Obtener el nombre de los clientes junto con el 
identificador de venta y la cantidad vendida, de aquellos 
productos de los que se vendieron más de 500 unidades 
[4] Nombre de los clientes de la tabla Clientes que no 
aparecen en la tabla de ventas (Clientes que no han 
comprado nada) 
[5] Nombre de los clientes que han comprado todos los 
productos de la empresa 
[6] Identificador de las ventas cuya cantidad supera a la 
cantidad vendida en la venta número 18 
[7] Productos que no se han comprado nunca en Palencia 
[8] Productos que se han vendido tanto en Palencia como en 
Valladolid [9] Poblaciones a las que hemos vendido todos nuestros 
productos 
Imaginemos que añadimos la tabla de facturas que se relaciona con 
la de ventas, de modo que a la tabla de ventas le añadimos el nº de 
Factura con la que se relaciona. En la tabla de factura indicamos la 
fecha, el número y si se pago o no (un 1 significa pagado, un 0 que 
no está pagada). Cada factura se corresponde con varias ventas y 
con un solo cliente, para lo cual se varía el diseño: 
FACTURA(Nº Factura, Fecha, Pagada, Nº Cliente) 
VENTA(Cod Producto, Nº Factura, Cantidad, Id Venta) 
[10] Obtener el nombre de los clientes que tienen alguna 
factura sin pagar 
[11] Clientes que han pagado todas sus facturas 
Soluciones 
Lo primero es renombrar las tablas para facilitar su manejo en las 
consultas: 
Ventas V
oductos P
Clientes C
Pr
[1] ( ) ∏nombre σ población="Palencia"
C
[2] ( ) ∏cód Pr oducto,Descripción
σ cod Pr oducto=Descripción
P
[3] (( ) ) ∏C.Nombre,P.Descripción,V.Cantidad σ cantidad >500V ∞P∞C
[4] C (C V) ∏nombre −∏nombre ∞
[5] Se aplica una división sobre toda la tabla de ventas 
mezclada con clientes y se divide entre la tabla de 
productos (quedan los clientes que tienen todas las 
combinaciones de la tabla de productos) (( ( )):( )) ∏nombre ∏C.nombre,C.NºCliente,V.codproducto
C∞V ∏codproducto
P
[6] Dividimos la consulta en dos, primero obtenemos la fila 
correspondiente a la venta nº 18 y luego la combinamos 
con todas las demás eliminando las que tengan ventas 
menores 
'
'
. '.
18
V V
V V
V cantidad V Cantidad
idVenta
∞>
σ =
[7] Se resuelve sacando primero los productos que sí se 
compraron en Palencia y luego restándoles del conjunto 
total de Productos 
P Pale
C V Pale
codproducto
V codproducto población Palencia
∏ −
∏ .
((σ =" "
)∞ )→
[8] Se trata de una intersección entre los productos de 
Palencia y los productos comprados en Valladolid 
Pale Vall
C V Vall
C V Pale
V codproducto población Valladolid
V codproducto población Palencia
I
∏ ∞ →
∏ ∞ →
=
=
(( ) )
(( ) )
. " "
. " "
σ
σ
[9] Necesitamos sacar la lista de poblaciones con los códigos 
de productos que se han vendido en ellas. Luego 
dividimos entre los códigos de la tabla de productos y 
quedarán las poblaciones en las que se han pedido todos 
los códigos 
(( ( )):( )) ∏poblacion ∏C.población,V.codproducto
C∞V ∏codprodcto P
[10]
( ( )) ∏nombre,nº factura σ
Pagada=0
C∞F[11] La consulta no se puede hacer como la anterior, ya que 
puede haber clientes que hayan pagado algunas facturas y 
otras no. Se parte de la consulta anterior para hacer esto: 
Pagadores
C F Pagadores
nombre
nombre Pagada
∏ −
∏ (σ =0

( ∞ ))→


Modelo ERR (Ejercicios Resueltos )

http://lopez99.wordpress.com/2010/03/23/modelos-entidad-relacion-trabajo/

EJERCICIO 1
A partir del siguiente enunciado se desea realiza el modelo entidad-relación.
“Una empresa vende productos a varios clientes. Se necesita conocer los datos
personales de los clientes (nombre, apellidos, dni, dirección y fecha de nacimiento). Cada
producto tiene un nombre y un código, así como un precio unitario. Un cliente puede
comprar varios productos a la empresa, y un mismo producto puede ser comprado por
varios clientes.
Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta
que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede
suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y
dirección”.
EJERCICIO 2
A partir del siguiente enunciado se desea realizar el modelo entidad-relación.
“Se desea informatizar la gestión de una empresa de transportes que reparte paquetes
por toda España. Los encargados de llevar los paquetes son los camioneros, de los que
se quiere guardar el dni, nombre, teléfono, dirección, salario y población en la que vive.
De los paquetes transportados interesa conocer el código de paquete, descripción,
destinatario y dirección del destinatario. Un camionero distribuye muchos paquetes, y un
paquete sólo puede ser distribuido por un camionero.
De las provincias a las que llegan los paquetes interesa guardar el código de provincia y
el nombre. Un paquete sólo puede llegar a una provincia. Sin embargo, a una provincia
pueden llegar varios paquetes.
De los camiones que llevan los camioneros, interesa conocer la matrícula, modelo, tipo y
potencia. Un camionero puede conducir diferentes camiones en fechas diferentes, y un
camión puede ser conducido por varios camioneros”.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 2
EJERCICIO 3
A partir del siguiente enunciado diseñar el modelo entidad-relación.
“Se desea diseñar la base de datos de un Instituto. En la base de datos se desea guardar
los datos de los profesores del Instituto (DNI, nombre, dirección y teléfono). Los
profesores imparten módulos, y cada módulo tiene un código y un nombre. Cada alumno
está matriculado en uno o varios módulos. De cada alumno se desea guardar el nº de
expediente, nombre, apellidos y fecha de nacimiento. Los profesores pueden impartir
varios módulos, pero un módulo sólo puede ser impartido por un profesor. Cada curso
tiene un grupo de alumnos, uno de los cuales es el delegado del grupo”.
EJERCICIO 4
A partir del siguiente supuesto diseñar el modelo entidad-relación:
“Se desea diseñar una base de datos para almacenar y gestionar la información
empleada por una empresa dedicada a la venta de automóviles, teniendo en cuenta los
siguientes aspectos:
La empresa dispone de una serie de coches para su venta. Se necesita conocer la
matrícula, marca y modelo, el color y el precio de venta de cada coche.
Los datos que interesa conocer de cada cliente son el NIF, nombre, dirección, ciudad y
número de teléfono: además, los clientes se diferencian por un código interno de la
empresa que se incrementa automáticamente cuando un cliente se da de alta en ella. Un
cliente puede comprar tantos coches como desee a la empresa. Un coche determinado
solo puede ser comprado por un único cliente.
El concesionario también se encarga de llevar a cabo las revisiones que se realizan a
cada coche. Cada revisión tiene asociado un código que se incrementa automáticamente
por cada revisión que se haga. De cada revisión se desea saber si se ha hecho cambio de
filtro, si se ha hecho cambio de aceite, si se ha hecho cambio de frenos u otros. Los
coches pueden pasar varias revisiones en el concesionario”.
EJERCICIO 5
A partir del siguiente supuesto diseñar el modelo entidad-relación:
“La clínica “SAN PATRÁS” necesita llevar un control informatizado de su gestión de
pacientes y médicos.
De cada paciente se desea guardar el código, nombre, apellidos, dirección, población,
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 3
provincia, código postal, teléfono y fecha de nacimiento.
De cada médico se desea guardar el código, nombre, apellidos, teléfono y especialidad.
Se desea llevar el control de cada uno de los ingresos que el paciente hace en el hospital.
Cada ingreso que realiza el paciente queda registrado en la base de datos. De cada
ingreso se guarda el código de ingreso (que se incrementará automáticamente cada vez
que el paciente realice un ingreso), el número de habitación y cama en la que el paciente
realiza el ingreso y la fecha de ingreso.
Un médico puede atender varios ingresos, pero el ingreso de un paciente solo puede ser
atendido por un único médico. Un paciente puede realizar varios ingresos en el hospital”.
EJERCICIO 6
Se desea informatizar la gestión de una tienda informática. La tienda dispone de una serie
de productos que se pueden vender a los clientes.
“De cada producto informático se desea guardar el código, descripción, precio y número
de existencias. De cada cliente se desea guardar el código, nombre, apellidos, dirección y
número de teléfono.
Un cliente puede comprar varios productos en la tienda y un mismo producto puede ser
comprado por varios clientes. Cada vez que se compre un artículo quedará registrada la
compra en la base de datos junto con la fecha en la que se ha comprado el artículo.
La tienda tiene contactos con varios proveedores que son los que suministran los
productos. Un mismo producto puede ser suministrado por varios proveedores. De cada
proveedor se desea guardar el código, nombre, apellidos, dirección, provincia y número
de teléfono”.
EJERCICIO 7
Pasa el modelo entidad-relación del ejercicio 1 al modelo relacional. Diseña las tablas en
Access, realiza las relaciones que consideres oportunas e inserta cinco registros en cada
una de las tablas.






EJERCICIO 8
Pasa el modelo entidad-relación del ejercicio 2 al modelo relacional. Diseña las tablas en
Access, realiza las relaciones que consideres oportunas e inserta cinco registros en cada
una de las tablas.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 4
 EJERCICIO 9
Pasa el modelo entidad-relación del ejercicio 3 al modelo relacional. Diseña las tablas en
Access, realiza las relaciones que consideres oportunas e inserta cinco registros en cada
una de las tablas.
¿Cómo quedaría el modelo relacional suponiendo que cada profesor sólo imparte un
módulo y cada módulo es impartido por sólo un profesor?
EJERCICIO 10
Transforma el modelo entidad-relación del ejercicio 4 al modelo relacional. Diseña las
tablas en Access, realiza las relaciones que consideres oportunas e inserta cinco registros
en cada una de las tablas.
Si un cliente sólo puede comprar un coche en el concesionario, y un coche sólo puede ser
comprado por un cliente, ¿cómo quedaría el modelo relacional?
 
EJERCICIO 11
Transforma el modelo entidad-relación del ejercicio 5 a modelo relacional. Diseña las
tablas en Access, realiza las relaciones que consideres oportunas e inserta cinco registros
en cada una de las tablas.




EJERCICIO 12
Transforma el modelo entidad-relación del ejercicio 6 al modelo relacional. Diseña las
tablas en Access, realiza las relaciones que consideres oportunas e inserta cinco registros
en cada una de las tablas.
 EJERCICIO 13
Considera la siguiente relación PERSONA-TIENE HIJOS-PERSONA. Una persona puede
tener muchos hijos/as o ninguno. Una persona siempre es hijo/a de otra persona. Los
atributos de la persona son dni, nombre, dirección y teléfono. Transformarlo al modelo
relacional.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 5
EJERCICIO 14
A partir del siguiente enunciado, diseñar el modelo entidad-relación.
“En la biblioteca del centro se manejan fichas de autores y libros. En la ficha de cada
autor se tiene el código de autor y el nombre. De cada libro se guarda el código, título,
ISBN, editorial y número de página. Un autor puede escribir varios libros, y un libro puede
ser escrito por varios autores. Un libro está formado por ejemplares. Cada ejemplar tiene
un código y una localización. Un libro tiene muchos ejemplares y un ejemplar pertenece
sólo a un libro.
Los usuarios de la biblioteca del centro también disponen de ficha en la biblioteca y sacan
ejemplares de ella. De cada usuario se guarda el código, nombre, dirección y teléfono.
Los ejemplares son prestados a los usuarios. Un usuario puede tomar prestados varios
ejemplares, y un ejemplar puede ser prestado a varios usuarios. De cada préstamos
interesa guardar la fecha de préstamo y la fecha de devolución”.
Pasar el modelo entidad-relación resultante al modelo relacional. Diseñar las tablas en
Access, realizar las relaciones oportunas entre tablas e insertar cinco registros en cada
una de las tablas.

 
EJERCICIO 15
A partir del siguiente supuesto realizar el modelo entidad-relación y pasarlo a modelo
relacional.
“A un concesionario de coches llegan clientes para comprar automóviles. De cada coche
interesa saber la matrícula, modelo, marca y color. Un cliente puede comprar varios
coches en el concesionario. Cuando un cliente compra un coche, se le hace una ficha en
el concesionario con la siguiente información: dni, nombre, apellidos, dirección y teléfono.
Los coches que el concesionario vende pueden ser nuevos o usados (de segunda mano).
De los coches nuevos interesa saber el número de unidades que hay en el concesionario.
De los coches viejos interesa el número de kilómetros que lleva recorridos.
El concesionario también dispone de un taller en el que los mecánicos reparan los coches
que llevan los clientes. Un mecánico repara varios coches a lo largo del día, y un coche
puede ser reparado por varios mecánicos. Los mecánicos tienen un dni, nombre,
apellidos, fecha de contratación y salario. Se desea guardar también la fecha en la que se
repara cada vehículo y el número de horas que se tardado en arreglar cada automóvil”.
Pasar el modelo entidad-relación resultante al modelo relacional. Diseñar las tablas en
Access, realizar las relaciones oportunas entre tablas e insertar cinco registros en cada
una de las tablas.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 6
EJERCICIO 16
La liga de fútbol profesional, presidida por Don Ángel María Villar, ha decidido informatizar
sus instalaciones creando una base de datos para guardar la información de los partidos
que se juegan en la liga.
Se desea guardar en primer lugar los datos de los jugadores. De cada jugador se quiere
guardar el nombre, fecha de nacimiento y posición en la que juega (portero, defensa,
centrocampista…). Cada jugador tiene un código de jugador que lo identifica de manera
única.
De cada uno de los equipos de la liga es necesario registrar el nombre del equipo, nombre
del estadio en el que juega, el aforo que tiene, el año de fundación del equipo y la ciudad
de la que es el equipo. Cada equipo también tiene un código que lo identifica de manera
única. Un jugador solo puede pertenecer a un único equipo.
De cada partido que los equipos de la liga juegan hay que registrar la fecha en la que se
juega el partido, los goles que ha metido el equipo de casa y los goles que ha metido el
equipo de fuera. Cada partido tendrá un código numérico para identificar el partido.
También se quiere llevar un recuento de los goles que hay en cada partido. Se quiere
almacenar el minuto en el que se realizar el gol y la descripción del gol. Un partido tiene
varios goles y un jugador puede meter varios goles en un partido.
Por último se quiere almacenar, en la base de datos, los datos de los presidentes de los
equipos de fútbol (dni, nombre, apellidos, fecha de nacimiento, equipo del que es
presidente y año en el que fue elegido presidente). Un equipo de fútbol tan sólo puede
tener un presidente, y una persona sólo puede ser presidente de un equipo de la liga.
Pasar el modelo entidad-relación resultante al modelo relacional. Diseñar las tablas en
Access, realizar las relaciones oportunas entre tablas e insertar cinco registros en cada
una de las tablas.
EJERCICIO 17
A partir del siguiente supuesto diseñar el modelo entidad-relación.
“Se desea informatizar la gestión de un centro de enseñanza para llevar el control de los
alumnos matriculados y los profesores que imparten clases en ese centro. De cada
profesor y cada alumno se desea recoger el nombre, apellidos, dirección, población, dni,
fecha de nacimiento, código postal y teléfono.
Los alumnos se matriculan en una o más asignaturas, y de ellas se desea almacenar el
código de asignatura, nombre y número de horas que se imparten a la semana. Un
profesor del centro puede impartir varias asignaturas, pero una asignatura sólo es
impartida por un único profesor. De cada una de las asignaturas se desea almacenar
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 7
también la nota que saca el alumno y las incidencias que puedan darse con él.
Además, se desea llevar un control de los cursos que se imparten en el centro de
enseñanza. De cada curso se guardará el código y el nombre. En un curso se imparten
varias asignaturas, y una asignatura sólo puede ser impartida en un único curso.
Las asignaturas se imparten en diferentes aulas del centro. De cada aula se quiere
almacenar el código, piso del centro en el que se encuentra y número de pupitres de que
dispone. Una asignatura se puede dar en diferentes aulas, y en un aula se pueden
impartir varias asignaturas. Se desea llevar un registro de las asignaturas que se imparten
en cada aula. Para ello se anotará el mes, día y hora en el que se imparten cada una de
las asignaturas en las distintas aulas.
La dirección del centro también designa a varios profesores como tutores en cada uno de
los cursos. Un profesor es tutor tan sólo de un curso. Un curso tiene un único tutor. Se
habrá de tener en cuenta que puede que haya profesores que no sean tutores de ningún
curso”.
Una vez construido el modelo E-R pasarlo al modelo relacional. Diseñar las tablas en
Access, hacer las relaciones oportunas e insertar 5 registros en cada una de las tablas.
 
EJERCICIO 18
“Una empresa necesita organizar la siguiente información referente a su organización
interna.
La empresa está organizada en una serie de departamentos. Cada departamento tiene un
código, nombre y presupuesto anual. Cada departamento está ubicado en un centro de
trabajo. La información que se desea guardar del centro de trabajo es el código de centro,
nombre, población y dirección del centro.
La empresa tiene una serie de empleados. Cada empleado tiene un teléfono, fecha de
alta en la empresa, NIF y nombre. De cada empleado también interesa saber el número
de hijos que tiene y el salario de cada empleado.
A esta empresa también le interesa tener guardada información sobre los hijos de los
empleados. Cada hijo de un empleado tendrá un código, nombre y fecha de nacimiento.
Se desea mantener también información sobre las habilidades de los empleados (por
ejemplo, mercadotecnia, trato con el cliente, fresador, operador de telefonía, etc…). Cada
habilidad tendrá una descripción y un código”.
Sobre este supuesto diseñar el modelo E/R y el modelo relacional teniendo en cuenta los
siguientes aspectos.
• Un empleado está asignado a un único departamento. Un departamento estará
compuesto por uno o más empleados.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 8
• Cada departamento se ubica en un único centro de trabajo. Estos se componen de
uno o más departamentos.
• Un empleado puede tener varios hijos.
• Un empleado puede tener varias habilidades, y una misma habilidad puede ser
poseída por empleados diferentes.
• Un centro de trabajo es dirigido por un empleado. Un mismo empleado puede
dirigir centros de trabajo distintos.
Realizar el diseño de la base de datos en Access e introducir cinco registros en cada una
de las tablas.
EJERCICIO 19
Se trata de realizar el diseño de la base de datos en el modelo E/R para una cadena de
hoteles.
“Cada hotel (del que interesa almacenar su nombre, dirección, teléfono, año de
construcción, etc.) se encuentra clasificado obligatoriamente en una categoría (por
ejemplo, tres estrellas) pudiendo bajar o aumentar de categoría.
Cada categoría tiene asociada diversas informaciones, como, por ejemplo, el tipo de IVA
que le corresponde y la descripción.
Los hoteles tiene diferentes clases de habitaciones (suites, dobles, individuales, etc.), que
se numeran de forma que se pueda identificar fácilmente la planta en la que se
encuentran. Así pues, de cada habitación se desea guardar el código y el tipo de
habitación.
Los particulares pueden realizar reservas de las habitaciones de los hoteles. En la reserva
de los particulares figurarán el nombre, la dirección y el teléfono.
Las agencias de viaje también pueden realizar reservas de las habitaciones. En caso de
que la reserva la realiza una agencia de viajes, se necesitarán los mismos datos que para
los particulares, además del nombre de la persona para quien la agencia de viajes está
realizando la reserva.
En los dos casos anteriores también se debe almacenar el precio de la reserva, la fecha
de inicio y la fecha de fin de la reserva”.
EJERCICIO 20
Imagina que una agencia de seguros de tu municipio te ha solicitado una base de datos
mediante la cual llevar un control de los accidentes y las multas. Tras una serie de
entrevistas, has tomado las siguientes notas:
“Se desean registrar todas las personas que tienen un vehículo. Es necesario guardar los
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 9
datos personales de cada persona (nombre, apellidos, dirección, población, teléfono y
DNI).
De cada vehículo se desea almacenar la matrícula, la marca y el modelo. Una persona
puede tener varios vehículos, y puede darse el caso de un vehículo pertenezca a varias
personas a la vez.
También se desea incorporar la información destinada a gestionar los accidentes del
municipio. Cada accidente posee un número de referencia correlativo según orden de
entrada a la base de datos. Se desea conocer la fecha, lugar y hora en que ha tenido
lugar cada accidente. Se debe tener en cuenta que un accidente puede involucrar a varias
personas y varios vehículos.
Se desea llevar también un registro de las multas que se aplican. Cada multa tendrá
asignado un número de referencia correlativo. Además, deberá registrarse la fecha, hora,
lugar de infracción e importe de la misma. Una multa solo se aplicará a un conductor e
involucra a un solo vehículo.”
Realiza el modelo E-R y pásalo al modelo relacional. Diseña después las tablas en
Access, realiza las relaciones oportunas entre ellas e inserta cinco registros en cada una
de las tablas.
EJERCICIO 21
Una agencia de viajes desea informatizar toda la gestión de los viajeros que acuden a la
agencia y los viajes que estos realizan. Tras ponernos en contacto con la agencia, ésta
nos proporciona la siguiente información.
“La agencia desea guardar la siguiente información de los viajeros: dni, nombre, dirección
y teléfono.
De cada uno de los viajes que maneja la agencia interesa guardar el código de viaje,
número de plazas, fecha en la que se realiza el viaje y otros datos. Un viajero puede
realizar tantos viajes como desee con la agencia. Un viaje determinado sólo puede ser
cubierto por un viajero.
Cada viaje realizado tiene un destino y un lugar de origen. De cada uno de ellos se quiere
almacenar el código, nombre y otros datos que puedan ser de interés. Un viaje tiene un
único lugar de destino y un único lugar de origen”.
Realizar el modelo E-R y pasarlo al modelo de datos relacional. Diseñar las tablas en
Access, realizar las oportunas relaciones entre tablas e introducir cinco registros en cada
una de las tablas.
EJERCICIOS MODELO ENTIDAD-RELACIÓN . PÁG. 10
 
EJERCICIO 22
Una empresa desea diseñar una base de datos para almacenar en ella toda la
información generada en cada uno de los proyectos que ésta realiza.
“De cada uno de los proyectos realizados interesa almacenar el código, descripción,
cuantía del proyecto, fecha de inicio y fecha de fin. Los proyectos son realizados por
clientes de los que se desea guardar el código, teléfono, domicilio y razón social. Un
cliente puede realizar varios proyectos, pero un solo proyecto es realizado por un único
cliente.
En los proyectos participan colaboradores de los que se dispone la siguiente información:
nif, nombre, domicilio, teléfono, banco y número de cuenta. Un colaborador puede
participar en varios proyectos. Los proyectos son realizados por uno o más colaboradores.
Los colaboradores de los proyectos reciben pagos. De los pagos realizados se quiere
guardar el número de pago, concepto, cantidad y fecha de pago. También interesa
almacenar los diferentes tipos de pagos que puede realizar la empresa. De cada uno de
los tipos de pagos se desea guardar el código y descripción. Un tipo de pago puede
pertenecer a varios pagos”.

miércoles, 29 de mayo de 2013

Subconsultas


Una consulta genera  un result set (tabla)
Una consulta puede generar :
-Dato (valor)
-Un registro(tupla)
-Una tabla (una columna o n columnas)

Una subconsulta es utilizar uno de los resultados en otra consulta
las subconsultas van en el where

where campo (operador realacional) consulta
                                    <,>,=, <> ----------->la consulta debe dar un solo valor
             
             campo  in   (subconsulta)-----------------> la subconsulta puede ser una columna o un valor
---listar empleados del dpart 20 que tienen tocayos en el 50
          nombre in (select nombre from e where d=50)
-----Listar por departamentos cantidad empleados que hay y el departamento debe tener un empleados llamado jorge
                                    >any
----Empleados con salario mayor a cualquier jefe 
                                   <=all

 Cuando hay group by o funciones  se usa having
     having count (e.id)>x



inteligencia de negocio, arquitectura de software




select * from employees;

select e1.employee_id, e1.first_name from employees e1 where e1.salary> select

avg(d.manager_id)from ;
select e.department_id, e.employee_id,  count( distinct e.employee_id) from employees e group by e.department_id, e.employee_id having  count( distinct e.employee_id)>4
join departments d1 on e.employee_id=d1.


join departments d2 on e.department_id=;



---Mostrar empleados cuyo salario sea mayor a la mitad del maximo s
alario de la region el cual el trabaja
select * from employees e where e.sala;ry> select max(e2) from employees e2 ---
where q.region_id =r1.region_id


---subconsultas en el from

select nombre from (select e.employee_id as codigo  , e.first_name as nombre from employees e where e.department_id=50);

select nombre from (select e.employee_id as codigo  , e.first_name as nombre from employees e where e.department_id=50 )join departments d on d.manager_id=codigo  ;

select nombre from (select e.employee_id  , e.first_name as nombre from employees e where e.department_id=50 )join departments d on d.manager_id=employee_id ;

----  con alias
select nombre from ((select e.employee_id  , e.first_name as nombre from employees e where e.department_id=50 )) M join departments d on d.manager_id=M.employee_id;

select Round((count(e.employee_id)/  total)*100 ) from employees e   cross join  (select count(*)  total from employees  ) group by e.department_id, total ;
----mostrar por departamento empleado que ams gana

select from   (select  max(e.salary ) , e.department_id ,m.department_id from employees e  join employees m on m.department_id=e.department_id group by e.department_id, m.department_id) as ta
join employees n on ta.


jueves, 23 de mayo de 2013

Group by

Permite calcular totales de grupo, se usa solo cuando se necesite una función , si se necesita mostar por  nombre o por algo solo se ordena

select
from
where
group by Exp-grupo

----------------------------------------------------------------------------------------------


--No se puede poner asterisco
select * from employees e join departments d  on d.department_id=e.department_id  order by d.department_name;

select e.department_id from employees e group by e.department_id;

select d.department_name from employees e join departments d  on d.department_id=e.department_id group by  d.department_name;

select d.department_name from employees e join departments d  on d.department_id=e.department_id group by  d.department_id, d.department_name;

-----------------------Total de salarios de Accouting 20300
--------Suma
select d.department_name , sum(e.salary)from employees e join departments d  on d.department_id=e.department_id group by  d.department_id, d.department_name;

-------Promedio 
select d.department_name , sum(e.salary), avg(e.salary) from employees e join departments d  on d.department_id=e.department_id group by  d.department_id, d.department_name;


Finance 51600 8600
Shipping 156400 3475,555555555555555555555555555555555556
Public Relations 10000 10000
Executive 58000 19333,3333333333333333333333333333333333
Purchasing 24900 4150
Administration 4400 4400
Accounting 20300 10150
Human Resources 6500 6500
IT 28800 5760
Sales 304500 8955,882352941176470588235294117647058824
Marketing 19000 9500


---Ordenar por el  d.department_id, d.department_name,  e.employee_id 
select d.department_name, sum(e.salary), avg(e.salary) from employees e join departments d  on d.department_id=e.department_id group by  d.department_id, d.department_name,  e.employee_id ;


Otras funciones


------Como todas las funciones son  en una agrupacion ´por departamento entonces todas las  funciones se ponen en una consulta

select d.department_name , sum(e.salary) , max(e.salary), avg(e.salary), min(e.salary) , variance (e.salary) from employees e join departments d  on d.department_id=e.department_id group by  d.department_id, d.department_name;


Mostrar departamentos  con menos de 3 empleados

select d.department_name, sum(e.salary), avg(e.salary), count(e.employee_id) from employees e right join departments d  on d.department_id=e.department_id group by
d.department_id, d.department_name having count (e.employee_id ) <3;


select count (*) from employees;

---- cuenta id aunque hayan repetidas
select count (department_id) from employees;

----Cuenta id sin repetir , sumar  salarios distintos , promediar salarios distintos
select  count (distinct department_id) from employees;










Funciones de Expresiones Regulares


REGEXP_LIKE

REGEXP_LIKE(cadena, expreg)
REGEXP_LIKE is similar to the LIKE condition, except REGEXP_LIKE performs regular expression matching instead of the simple pattern matching performed by LIKE. This condition evaluates strings using characters as defined by the input character set.
This condition complies with the POSIX regular expression standard and the Unicode Regular Expression Guidelines. For more information, please refer to Appendix C, " Oracle Regular Expression Support".

regexp_like_condition::=
Description of regexp_like_condition.gif follows
Description of the illustration regexp_like_condition.gif

  • source_string is a character expression that serves as the search value. It is commonly a character column and can be of any of the datatypes CHARVARCHAR2NCHARNVARCHAR2CLOB, or NCLOB.
  • pattern is the regular expression. It is usually a text literal and can be of any of the datatypes CHARVARCHAR2NCHAR, or NVARCHAR2. It can contain up to 512 bytes. If the datatype of pattern is different from the datatype of source_string, Oracle converts pattern to the datatype of source_string. For a listing of the operators you can specify in pattern, please refer to Appendix C, " Oracle Regular Expression Support".
  • match_parameter is a text literal that lets you change the default matching behavior of the function. You can specify one or more of the following values for match_parameter:
    • 'i' specifies case-insensitive matching.
    • 'c' specifies case-sensitive matching.
    • 'n' allows the period (.), which is the match-any-character wildcard character, to match the newline character. If you omit this parameter, the period does not match the newline character.
    • 'm' treats the source string as multiple lines. Oracle interprets ^ and $ as the start and end, respectively, of any line anywhere in the source string, rather than only at the start or end of the entire source string. If you omit this parameter, Oracle treats the source string as a single line.
    If you specify multiple contradictory values, Oracle uses the last value. For example, if you specify 'ic', then Oracle uses case-sensitive matching. If you specify a character other than those shown above, then Oracle returns an error.
    If you omit match_parameter, then:
    • The default case sensitivity is determined by the value of the NLS_SORT parameter.
    • A period (.) does not match the newline character.
    • The source string is treated as a single line.

      See Also:
      "LIKE "

Examples
The following query returns the first and last names for those employees with a first name of Steven or Stephen (where first_name begins with Ste and ends with en and in between is either v or ph):
SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Steven               King
Steven               Markle
Stephen              Stiles

The following query returns the last name for those employees with a double vowel in their last name (where last_name contains two adjacent occurrences of either aeio, or u, regardless of case):
SELECT last_name
FROM employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i');

LAST_NAME
-------------------------
De Haan
Greenberg
Khoo
Gee
Greene
Lee
Bloom
Feeney


REGEXP_REPLACE

Syntax
Description of regexp_replace.gif follows Description of the illustration regexp_replace.gif
Purpose
REGEXP_REPLACE extends the functionality of the REPLACE function by letting you search a string for a regular expression pattern. By default, the function returns source_char with every occurrence of the regular expression pattern replaced with replace_string. The string returned is in the same character set as source_char. The function returns VARCHAR2 if the first argument is not a LOB and returns CLOB if the first argument is a LOB.
This function complies with the POSIX regular expression standard and the Unicode Regular Expression Guidelines. For more information, please refer toAppendix C, "Oracle Regular Expression Support".
  • source_char is a character expression that serves as the search value. It is commonly a character column and can be of any of the datatypes CHAR,VARCHAR2NCHARNVARCHAR2CLOB or NCLOB.
  • pattern is the regular expression. It is usually a text literal and can be of any of the datatypes CHARVARCHAR2NCHAR, or NVARCHAR2. It can contain up to 512 bytes. If the datatype of pattern is different from the datatype of source_char, Oracle Database converts pattern to the datatype ofsource_char. For a listing of the operators you can specify in pattern, please refer to Appendix C, "Oracle Regular Expression Support".
  • replace_string can be of any of the datatypes CHARVARCHAR2NCHARNVARCHAR2CLOB, or NCLOB. If replace_string is a CLOB or NCLOB, then Oracle truncates replace_string to 32K. The replace_string can contain up to 500 backreferences to subexpressions in the form \n, where n is a number from 1 to 9. If n is the backslash character in replace_string, then you must precede it with the escape character (\\). For more information on backreference expressions, please refer to the notes to "Oracle Regular Expression Support"Table C-1.
  • position is a positive integer indicating the character of source_char where Oracle should begin the search. The default is 1, meaning that Oracle begins the search at the first character of source_char.
  • occurrence is a nonnegative integer indicating the occurrence of the replace operation:
    • If you specify 0, then Oracle replaces all occurrences of the match.
    • If you specify a positive integer n, then Oracle replaces the nth occurrence.
  • match_parameter is a text literal that lets you change the default matching behavior of the function. This argument affects only the matching process and has no effect on replace_string. You can specify one or more of the following values for match_parameter:
    • 'i' specifies case-insensitive matching.
    • 'c' specifies case-sensitive matching.
    • 'n' allows the period (.), which is the match-any-character character, to match the newline character. If you omit this parameter, the period does not match the newline character.
    • 'm' treats the source string as multiple lines. Oracle interprets ^ and $ as the start and end, respectively, of any line anywhere in the source string, rather than only at the start or end of the entire source string. If you omit this parameter, Oracle treats the source string as a single line.
    • 'x' ignores whitespace characters. By default, whitespace characters match themselves.
    If you specify multiple contradictory values, Oracle uses the last value. For example, if you specify 'ic', then Oracle uses case-sensitive matching. If you specify a character other than those shown above, then Oracle returns an error.
    If you omit match_parameter, then:
Examples
The following example examines phone_number, looking for the pattern xxx.xxx.xxxx. Oracle reformats this pattern with (xxxxxx-xxxx.
SELECT
  REGEXP_REPLACE(phone_number,
                 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
                 '(\1) \2-\3') "REGEXP_REPLACE"
  FROM employees;

REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4567
(515) 123-4568
(515) 123-4569
(590) 423-4567
. . .

The following example examines country_name. Oracle puts a space after each non-null character in the string.
SELECT
  REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"
  FROM countries;

REGEXP_REPLACE
--------------------------------------------------------------------------------
A r g e n t i n a
A u s t r a l i a
B e l g i u m
B r a z i l
C a n a d a
. . .

The following example examines the string, looking for two or more spaces. Oracle replaces each occurrence of two or more spaces with a single space.
SELECT
  REGEXP_REPLACE('500   Oracle     Parkway,    Redwood  Shores, CA',
                 '( ){2,}', ' ') "REGEXP_REPLACE"
  FROM DUAL;

REGEXP_REPLACE
--------------------------------------
500 Oracle Parkway, Redwood Shores, CA

select * from employees;

select first_name,  REGEXP_COUNT( first_name, '^[f-i]' ) as pattern_count from  employees;

-------
SELECT first_name, last_name  FROM employees  WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');
---Reempaza algo
SELECT  REGEXP_REPLACE(phone_number,  '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',   '(\1) \2-\3') "REGEXP_REPLACE"  FROM employees;
SELECT  REGEXP_REPLACE(first_name,  'a',   'b') "REGEXP_REPLACE"  FROM employees;
--The following example examines country_name. Oracle puts a space after each non-null character in the string.
SELECT  REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"   FROM countries;
--El metacaracter () porner  expresion dentro de otra 
--- REGEXP_COUNT  si se ponen en el where es para comparar si se pone en el select es para retornar 
----  En que posicion de la cadena se cumple la expresion  ejemplo le[a-c] alea retornaria 2
SELECT last_name, REGEXP_INSTR(last_name, '[aeiou]') FROM   hr.employees;
----Saca un pedazo de la cadena
SELECT last_name, REGEXP_SUBSTR(last_name, '^[AC]') FROM   hr.employees;
---i, j retorna  cuantas  la letra  cuando aparezca j veces Ana 1,2 retorna la segunda  a
---i a partir de cual numero j:cantidad de ocurrencias
SELECT last_name, REGEXP_SUBSTR ( Upper(last_name), 'A',1,2) FROM  hr.employees;
---a partir del caracter 5 hay una a
SELECT last_name, REGEXP_SUBSTR ( Upper(last_name), 'A',5,1) FROM  hr.employees;
SELECT * FROM   hr.employees where  REGEXP_SUBSTR(last_name, 'a')=hr.last_name;
----Start at 3rd position, extract 2 characters from the last ----
SELECT last_name, REGEXP_SUBSTR(last_name, '..',3) FROM   hr.employees;