miércoles, 14 de diciembre de 2016

Creación de Base de datos
Todas las bases de datos tienen dos archivos importantes que son: ldf(log database file). y mdf(master database file).
Los datos se almacenan en el mdf.
Siempre hay que estimar cuanto queremos que crezca la base de datos.
Las bases de datos del usuario son creadas para usos específicos por cualquier aplicación o usuario. Cuando el administrador de una base de datos crea una nueva, SQL Server crea el archivo MDF y LDF correspondiente a esa base de datos. SQL Server los coloca inicialmente en su directorio por defecto, o el administrador puede definir dónde van a ser almacenados. Después de la creación, pueden ser movidos a diferentes ubicaciones por razones de conveniencia, desempeño o almacenamiento.
SQL Server no exige las extensiones de archivo .mdf, .ndf, .ldf, pero estas extensiones ayudan a identificar las distintas clases de archivo.

Modelo 1: Creación de base de datos y archivos de base de datos:

Creación de base de datos:

Consideraciones para la creación de una base de datos:

  • Propósito del almacenamiento de datos 
  • Rendimiento de transacciones 
  • Crecimiento potencial del almacenamiento físico de datos 
  • Ubicación de los archivos 

Opciones de base de datos 

Establezca las opciones de base de datos utilizando:

  • SQL Server Management Studio
  •  Instrucción ALTER DATABASE 
Automática: Controla los comportamientos automáticos como estadísticas, cierre de base de datos y reducción

Disponibilidad: Controla si la base de datos tiene o no conexión, quién puede conectar con ella y si la base de datos es de sólo lectura

Cursor : Controla el comportamiento y el ámbito del cursor

Recuperación: Controla el modelo de recuperación de la base de datos

SQL: Controla las opciones de compatibilidad con ANSI como valores nulos ANSI y desencadenadores recursivos.

Cuándo crear grupos de archivos

  • Uso de varios archivos en un único grupo de archivos para mejorar el rendimiento 
  • Uso de varios grupos de archivos para controlar la colocación física de los datos 

domingo, 11 de diciembre de 2016

DBMS Oracle y MySQL
DBMS (Data Base Management System). Son las siglas en inglés para los Sistemas de Gestión de Bases de Datos (SGBD), es un Software que controla la organización, almacenamiento, recuperación, seguridad e integridad de los datos en una base de datos.

  • Tipos de datos
    • Tipo de dato (numérico, texto, fechas, etc.)
    • Nombre del tipo de dato (float, int, char(), varchar(), etc)
    • Número de bytes utilizados por cada tipo de dato
    • Valores permitidos para cada tipo de dato, valor máximo y mínimo
Existen varios tipos de datos en MySQL como de tipo numérico, cadena, fecha.

Numéricos: TinyInt, Bool, SmallInt, MediumInt, Int, BigInt, Float, Double, Decimal.
Cadena: Char, Varchar, Blob, Text.
Fecha: Date, DateTime, TimeStamp, Time, Year.

La cantidad de bytes utilizados varía según el tipo de dato:

Numéricos:
Fecha: 
Cadena:
Existen ciertos valores permitidos para cada tipo de dato:

Numéricos:

  • Decimal: Se almacena como cadena
  • Bool: 0 o 1
  • TinyInt: Con signo desde -128 a 127, sin signo desde 0 a 255.
  • SmallInt: Con signo el rango va desde -32768 a 32767. Sin signo, de 0 a 65535.
  • MediumInt: Con signo va desde -8.388.608 a 8.388.607. Sin signo desde 0 a 16.777.215.
  • Int: Con signo va desde -2.147.483.648 a 2.147.483.647. Sin signo desde 0 a 4.294.967.295
  • BigInt: Con signo va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo desde 0 a 18.446.744.073.709.551.615
  • Float: Los valores válidos van desde -3.402823466 e+38 a -1.175494351 e-38, 0 (cero) y desde 1.175494351 e- 38 a 3.402823466 e+38.
  • Double: Los valores van desde -1.7976931348623157 e+308 a -2.2250738585072014 e-308, 0 (cero) y desde 2.2250738585072014 e-308 a 1.7976931348623157 e+308
Fecha:
  • Date: El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999.
  • DateTime: El rango va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos
  • TimeStamp: El rango va desde el 1 de enero de 1970 al año 2037
  • Time: El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos
  • Year: El rango de valores va desde el año 1901 al año 2155.
Cadena:
  • Char:  La cadena podrá contener desde 0 a 255 caracteres.
  • Varchar:  La cadena podrá contener desde 0 a 255 caracteres.
  • Blob:  Los cuatro tipos BLOB son TINYBLOB, BLOB, MEDIUMBLOB, y LONGBLOB.
  • Text:  Los cuatro tipos TEXT son TINYTEXT, TEXT, MEDIUMTEXT, y LONGTEXT.
  • Servicios:
    • Servicios disponibles por el DBMS, para la ejecución de sus funcionalidades
    • Descripción general de cada servicio, que indique para qué funcionalidad es requerido 
    • Especificación de la edición del DBMS en la que viene incluido el servicio
MYSQL
ORACLE
  •  Gestión de Conexiones: Es responsable de mantener las múltiples conexiones de los clientes, por otro lado, se puede configurar el límite en el número de conexiones y también se implementa un pool de conexiones.
  • Conectores: Son bibliotecas en diferentes lenguajes de programación que permiten la conexión ya sea remota o local con servidores MYSQL y la ejecución de consultas
  • MySQL toma una serie de decisiones, que pueden incluir el determinar el orden de lectura de las tablas, el uso de ciertos índices, o la re-escritura de la consulta en una forma más eficiente.


  •  Motores De Almacenamiento:  El control de concurrencia en un gestor de bases de datos es simplemente el mecanismo que se utiliza para evitar que lecturas o escrituras simultáneas a la misma porción de datos terminen en inconsistencias o efectos no deseados.

  • Sistema de gestión de la memoria: Su función es que haya suficiente memoria para que el RDBMS funcione eficazmente y a la vez nunca dejar menos memoria de la que necesita el Sistema Operativo para que la máquina funcione.


  • Gestión de Entrada y Salida: Para conseguir que los accesos a los datos sean adecuados.          


  • Procesador de Lenguajes: Para interpretar las instrucciones SQL (o de otros lenguajes válidos) que los usuarios lanzan a la base de datos.   


  • Control de procesos. Gestiona los programas en ejecución necesarios para el funcionamiento de la base de datos.
  • Control de la red: Para gestionar las conexiones a la base de datos desde la red y evitar problemas a la base de datos en caso de desconexión.
  • : Permite gestionar las transacciones (series de operaciones que se pueden anular o llevar a cabo al final.
  • MySQL Standard Edition
  • MySQL Enterprise Edition
  • MySQL Classic Edition
  • MySQL Community Edition
  • MySQL Cluster CGE
  • MySQL Embedded (OEM/ISV)




  • Enterprise Edition (EE).
  • Standard Edition (SE).
  • Standard Edition 
  • One
  •  (SE2)
  •  (XE).
  •  (PE).
  •  (LE).


















































  • Bases de datos del sistema
    • Bases de datos del sistema y bases de datos que se cargan por defecto en la instalación del DBMS
    • Descripción de cada una de las bases de datos (funcionalidad o uso)
MYSQL
ORACLE
   
Cada conjunto de relaciones que componen un modelo completo forma una base de datos. Desde el punto de vista de SQL, una base de datos es sólo un conjunto de relaciones (o tablas), y para organizarlas o distinguirlas se accede a ellas mediante su nombre. A nivel de sistema operativo, cada base de datos se guarda en un directorio diferente.



Una Base de Datos Oracle es un conjunto de datos almacenado y accesible según el formato de tablas relacionales. Una tabla relacional tiene un nombre y unas columnas y su definición. Los datos están almacenados en las filas.
Una Base de Datos Oracle está almacenada físicamente en ficheros, y la correspondencia entre los ficheros y las tablas es posible gracias a las estructuras internas de la BD, que permiten que diferentes tipos de datos estén almacenados físicamente separados. 

Bases de Datos Creada por defecto:
  •  Information_schema
  • MySQL

Por defecto

Resultado de imagen para show databases
  • Proceso de instalación
    • Requerimientos de sw y hw mínimos
    • Descripción de proceso y captura de imágenes de instalación
Resultado de imagen para MySQL y Oracle Requerimientos de sw y hw mínimos

Descargamos el instalador o insertamos el cd de instalación 
Tras seleccionar la ruta de los ficheros en donde se va a instalar Oracle hacemos clic en Siguiente.
 A continuación seleccionaremos el tipo de instalación que deseemos(si es que solo queremos la base de datos damos clic en la primera opción):

 A continuación seleccionaremos el tipo de instalación que deseemos:
Seleccionamos el uso que le vamos a dar a nuestra base de datos, generalmente se marca la primera opción: 
Seleccionamos el puerto que por defecto es el 2030:
Especificamos como se llamara la base y la dirección de la misma.
Tras la instalación de Oracle y la creación de la base de datos aparecerá una ventana indicando que el proceso de instalación ha finalizado:
MySQL:
Ejecutamos el instalador del software y de le damos clic en Siguiente:
Aceptamos términos y licencias:
La instalación típica es la mas sencilla y puede cumplir nuestros propósitos:
Optamos por Detailed Configuration, de modo que se optimice la configuración del servidor MySQL.
Dependiendo del uso que vayamos a darle a nuestro servidor deberemos elegir una opción u otra, cada una con sus propios requerimientos de memoria:
Deja ambas opciones marcadas, tal como vienen por defecto. Y seleccione el puerto 3306:
Dejar la opción marcada, tal como viene por defecto y seleccionar el motor de la base de datos arranque por defecto y esté siempre a nuestra disposición. La alternativa es hacer esto manualmente. 
Última etapa: listos para generar el fichero de configuración y arrancar el servicio.
Referencias:

lunes, 5 de diciembre de 2016

Funciones de Agregación
Son funciones que toman una colección de valores como entrada y producen un único valor de salida.
COUNT(atributo)

  • Devuelve el número de tuplas o valores especificados en una consulta para el atributo indicado. 
  • Se puede utilizar como atributo *.
  • SUM(atributo), MAX(atributo), MIN(atributo), AVG(atributo). 
  • Se aplican a valores numéricos y devuelven la suma, el máximo, mínimo y media de los atributos indicados. 
  • Se pueden utilizar en la cláusula SELECT o en el HAVING. 
  • En el SELECT no pueden aparecer otros atributos a menos que se incluyan en el GROUP BY.
Ejemplos: 
¿Cuántas películas ha protagonizado Mickey Mouse?
SELECT COUNT(*) FROM pelicula P, protagoniza S, actor A WHERE P.titulo = S.titulo_pelicula AND P.anio = S.anio_pelicula AND A.nombre = S.nombre_actor AND A.nombre = ‘Mickey Mouse’

SELECT SUM (sueldo), MAX (sueldo), MIN(sueldo) AVG(sueldo) FROM empleado  SELECT COUNT (*) FROM empleado  SELECT COUNT(DISTINCT sueldo) FROM empleado

Subconsultas

  • En general se admiten varios niveles de anidación.
  • Para evitar la ambigüedad los atributos sin cualificar siempre se referirán a las relaciones declaradas en la consulta más interna. 
  • Para evitar problemas es aconsejable cualificar los atributos y utilizar alias para las relaciones.
SELECT nombre
FROM empleado
WHERE sueldo > SELECT sueldo
                              FROM empleado
                              WHERE dpto = 5

Operadores de Subconsultas
EXISTS (subconsulta)

  • Se utiliza para comprobar si el resultado de una consulta anidada es vacio. 
  • Devuelve true si la tabla no es vacía, en otro caso devuelve falso. 

NOT EXISTS (subconsulta)

  • Se utiliza para comprobar si el resultado de una consulta anidada no es vacio. 
  • Devuelve true si la tabla es vacía, en otro caso devuelve falso. 

atributo operador_comparación ALL (subconsulta)

  •  Se utiliza para comparar, mediante alguno de los operadores de comparación, si el valor de un atributo es mayor, menor, igual, … que todos los valores de un determinado conjunto de valores. 
  •  La subconsulta debe devolver una lista de valores. 

Atributo operador_comparación ANY (subconsulta)

  • Es similar al operador ALL, lo único que lo diferencia es que el valor del atributo únicamente tiene que ser igual, menor, mayor, … que al menos uno de los valores del conjunto. 
  • La subconsulta debe devolver una lista de valores.
Group By
  • Se utiliza para formar agrupaciones de tuplas en función de los valores de uno o varios atributos. 
  • Se utiliza con funciones de agregación. 
  • No es necesario utilizar WHERE. 
  • Como resultado en el SELECT, sólo pueden aparecer funciones de agregación o los atributos que aparecen en GROUP BY. … GROUP BY at1 , at2 , …, atn , … 
Ejemplo:
SELECT dpto, COUNT(*), AVG(sueldo) FROM empleado GROUP BY dpto

Having:

  • Se utiliza siempre con GROUP BY. 
  • Impone condiciones sobre los grupos formados previamente en GROUP BY. 
  • Las condiciones son similares a las utilizadas en WHERE, pero se pueden utilizar funciones de agregación. 
  • Mientras que WHERE impone condiciones a las tuplas , HAVING impone condiciones los grupos. 

miércoles, 23 de noviembre de 2016

SQL
Orígenes y Evolución
  • (Por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como hacer cambios en ellas.
  • Entre 1974 y 1975 se implementó en un prototipo llamado SEQUEL-XRM.
  • Entre 1976 y 1977, condujeron a una revisión del lenguaje (SEQUEL/2)
  • Cambio de nombre por motivos legales, convirtiendose en SQL.
  • A partir de 1981, IBM comenzó a entregar sus productos relacionales.
  • En 1983 empezó a vender DB2
  • En 1986, el ANSI adoptó SQL como estándar para los lenguajes relacionales.
  • En 1987 se transformó en estándar ISO, con el nombre de SQL/86.
  • Luego se presento la versión SQL/89.
  • En 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado "SQL-92"
  • SQL3 nuevo estándar de SQL en 1999, después de más de 7 años de debate.
Con SQL podemos hacer entre otras las siguientes operaciones en el programa que gestiona las bases de datos:
  • Crear nuevas bases de datos.
  • Crear nuevas tablas en una base de datos.
  • Crear nuevos registros en las tablas de una base de datos
  • Crear tablas de consulta en una base de datos.
  • Borrar tablas o bases de datos.
  • Borrar registros.
  • Cambiar uno o varios datos de un registro.
  • Mostrar los datos de una tabla o consulta.
  • Buscar y mostrar sólo algunos datos de una tabla o consulta, poniendo una serie de condiciones para la búsqueda.
Resultado de imagen para modelo relacional(Codd-IBM) ibm db2
Funciones de SQL:
  •  DDL – Data Definition Language

-Creación de estructuras de la base de datos.

- Integridad de los datos.

Create: crear.
alter: modificar objeto.
drop: borra objeto.
  •  DML – Data Manipulation Language
-Recuperación de datos.
-Manipulación de datos.

Insert: insertar datos.
Update: actualizar datos.
Delete: borrar datos.
  • DCL – Data Control Language
 -Control acceso.
- Compartición de datos.

Grant: da permisos al usuario.
Remoke: quita permisos a un usuario.
Ventajas de SQL:
  • Independencia de los fabricantes.
  • Portabilidad a cualquier tipo de plataforma.
  • SQL está estandarizado.
  • Basado en el modelo relacional.
  • Lenguaje de alto nivel.
  • Consultas interactivas ad-hoc.
  • Utilización en Lenguaje de programación.
  • Múltiples vistas de los datos.
  • Lenguaje de base de datos.
  • Definición dinámica de datos.
  • Arquitectura cliente/servidor.
Tipos de datos:
Char[10]: Deja en vacio caracteres que no lo ocupa.(cédula)
VarChar[10]:Menor performance a la base de datos.(comentario)
En Oracle se usa el VarChar2.
Creación de Dominios:
Los dominios se pueden utilizar como tipos de datos.
Permite cambiar el tipo simultaneamente a varios atributos.
CREATE DOMAIN dominio [AS] tipotipodatos
[DEFAULT valor_defecto]
[CRECK condicion]
Operadores:
Creación de Objetos: Tablas
  • Se utiliza el comando CREATE TABLE. 
  •  Se especifican los atributos de la relación y sus tipos. 
  • Se especifica la clave primaria. 
  •  Se especifica las restricciones de integridad. 
  •  Se especifica la integridad referencial.
Restricciones de tabla
UNIQUE (nombre_atributo, ……)  
PRIMARY KEY (nombre_atributo, ……) 
FOREIGN KEY (nombre_atributo, ……) REFERENCES nombre_tabla(nombre_atributo) accion_referencial 
CHECK (condición) 
Acciones referenciales 
ON UPDATE acción 
ON DELETE acción 
RESTRICT 
Si no se especifica nada, se considera RESTRICT 
CASCADE 
SET NULL 
SET DEFAULT valor
Restrcciones de columna:
  • UNIQUE
  • NOT NULL
  • DEFAULT<valor_por_defecto>
  • CHECK(Condicion)
  • PRIMARY KEY
  • REFERENCES nombre_tabla(nombre_atributo)
Restricción de tabla:
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
Acciones referenciales:
  • ON UPDATE
  • ON DELETE
  • RESTRICT
Ejemplo:
Pelicula (titulo, anio, duracion, color, nombre_estudio, productora) , Protagoniza (titulo_pelicula, anio_pelicula, nombre_actor) , Actor (nombre, direccion, sexo, fecha_nacimiento) , Productora (numero, nombre, direccion) , Estudio (nombre, direccion)

CREATE TABLE pelicula (
              titulo VARCHAR(50),
              anio CHAR(4),
              duracion INTEGER,
              color CHAR(12),
              nombre_estudio VARCHAR(30),
              productora INTEGER,
              PRIMARY KEY (titulo, anio),
              FOREIGN KEY nombre_estudio
              REFERENCES estudio (nombre)
              ON DELETE SET NULL
              ON UPDATE CASCADE,
              FOREIGN KEY productora REFERENCES productora (numero) ON DELETE CASCADE );
Borrado de tablas:
DROP TABLE nombre_tabla [CASCADE CONSTRAINT]
Si se utiliza CASCADE CONSTRAINT se elimina la tabla y todas sus restricciones. 
Si no se utiliza CASCADE CONSTRAINT, si la tabla tiene restricciones asociadas no se elimina, hasta que no se eliminen las restricciones. 
 Al eliminar una tabla de la base de datos, también se eliminan los datos que tuviera almacenados. 
Modificar una tabla:
Acciones de modificación. 
Añadir atributos. 
  • ADD nuevo_atributo tipo restricciones. 
  • Las restricciones sólo pueden ser NOT NULL, CHECK y DEFAULT. 
  • Un atributo NOT NULL sólo se puede añadir a una tabla si esta vacía. 
Borrar atributos. 
  • DROP (nombre_atributo, …). 
  • DROP COLUMN nombre atributo [CASCADE CONSTRAINT]. 
Modificar atributos. 
MODIFY nombre_atributo nuevo_tipo restricciones. 
  • Se puede cambiar el tipo o disminuir el tamaño de un atributo si todas las tuplas tienen ese campo vacío. 
  • Un atributo existente se puede hacer NOT NULL si todas las tuplas tienen valor en ese atributo. 
  • Si no se especifica algo en la modificación, permanece como estaba.
EJEMPLOS 
Borrado de tabla 
DROP TABLE pelicula CASCADE CONSTRAINT DROP TABLE pelicula 
Modificación de tabla
 ALTER TABLE pelicula ADD fecha_estreno DATE

Manipulación de datos:
Inserción de datos:

INSERT INTO nombre_tabla (lista_atributos) VALUES (lista_valores);
  • Introduce información en la tabla y atributos indicados. 
  • El orden y el tipo de los atributos debe coincidir con el orden y tipo de los valores. 
  • Los valores se pueden obtener mediante una consulta. 
  • Si un atributo no se indica, toma valor NULL. 
INSERT INTO nombre_tabla VALUES (lista_valores);
  • Si se omite la lista de atributos, los valores se almacenan de acuerdo al orden de definición de los mismos en el CREATE TABLE. 
  • Los tipos de la lista de valores deben coincidir con los tipos de definición en el CREATE TABLE.
Ejemplo:
Todos los valores de la tupla: 
INSERT INTO empleados VALUES (‘Juan’, ‘Pérez’, 555); 
Algunos valores de la tupla: 
INSERT INTO empleados (nombre, codigo) VALUES (‘Juan’, 555); 
Valores desde consulta: 
INSERT INTO empleados SELECT nombre, apellido, codigo FROM personal WHERE codigo > 555; 

Modificación de Datos:
UPDATE nombre_tabla SET nombre_atributo = nuevo_valor, … WHERE condicion; 
  • Actualiza en la tabla indicada los valores del atributo siempre y cuando se cumpla la condición especificada. 
  • Los valores se pueden obtener mediante una subconsulta o mediante fórmulas matemáticas.
  • Si no hay condición, se actualizan todas las filas de la tabla (PELIGRO).
Borrado de datos:
DELETE nombre_tabla WHERE condición
  • Borra de la tabla las tuplas que cumplen cierta condición. 
  • Si no hay condición se borran todas las filas de la tabla (PELIGRO). 
  • A diferencia de DROP TABLE no borra la estructura de la tabla 
Consulta de datos:
SELECT lista_atributos FROM lista_tablas WHERE condición GROUP BY lista_atributos HAVING condición ORDER BY lista_atributos [ASC/DESC]
  • Consulta valores de una o varias tablas de acuerdo a las condiciones impuestas en la sentencia. 
  • Las únicas partes obligatorias son SELECT y FROM, el resto son opcionales. 
  • Si aparecen deben ir en el orden que aparecen en la sentencia. 
  • HAVING sólo puede aparecer si hay GROUP BY
En la cláusula SELECT se indican los atributos que se quieren obtener como respuesta a la consulta.
La cláusula FROM indica la tabla o tablas que son necesarias para obtener la información.
En la cláusula WHERE se indican las condiciones que deben cumplir las tuplas obtenidas como resultado de la consulta.
 GROUP BY se utiliza para formar grupos de datos en función de algún atributo.
HAVING establece condiciones sobre los grupos que se formen.
ORDER BY indica si muestra el resultado ordenado en función de algún atributo.

Select:
Lista de atributos separados por comas.
SELECT at1 , at2 , …, atn … 
 Se indican solamente aquellos atributos que queremos que aparezcan en el resultado.
Se utiliza * si queremos todos los atributos de las tablas involucradas. SELECT * … 
Pueden aparecen filas duplicas.
 Para evitarlos se puede utilizar DISTINCT.
SELECT DISTINCT lista_atributos … 
Sólo se obtienen como resultado filas no duplicadas para la combinación de los atributos que aparecen en el SELECT.
Los nombres de los atributos se pueden cambiar en el resultado de la consulta (alias de atributo) SELECT nombre_atributo [AS] nuevo_nombre … 

From:
Lista de tablas que se utilizan en la consulta separadas por comas. …FROM tab1 , tab2 , …, tabn … 
Realiza el producto cartesiano (X) de las mismas
Las condiciones (WHERE, GROUP BY) se imponen sobre el producto cartesiano
Los atributos que aparecen en el SELECT se toman del producto cartesiano
Dentro de la consulta una tabla se puede renombrar (alias de tabla) … FROM nombre_tabla nuevo_nombre_tabla …

Where:

  • Indica las condiciones que deben cumplir las filas obtenidas como resultado. 
  • Si no aparece se recuperan todas las filas del producto cartesiano de las tablas que hay en el FROM. 
  • La condición es una expresión n booleana. 
  • Sólo se obtienen aquellas filas que cumplen la condición.

Join(reunión):

  • No se realiza automaticamente. 
  • Hay que escribir la condición en la consulta. 
  • Si no se pone la condición de join, se obtiene el producto cartesiano (X). 

Escritura de join:

  • Las tablas tienen que estar relacionadas mediante claves foráneas (atributos comunes). 
  • Igualar los atributos comunes de las tablas participantes en la consulta.

Ambiguedades:
Cuando el mismo nombre de atributo aparece en más de una tabla:

  • Hay que distinguir a que atributo se refiere. 
  • Se cualifica el atributo con el nombre de la tabla. 

nombre_tabla.nombre_atributo
SELECT empleado.nombre, CI FROM empleado, departamento WHERE empleado.codigo = departamento.codigo AND departamento.nombre = ‘nomina’

Alias en tablas:

  • Cuando la misma relación se la usa más de una vez en la consulta.  
  • En ese caso se utilizan alias para las tablas. 

SELECT E.nombre, J.nombre FROM empleado E, empleado J WHERE E.ID_jefe = J.ID
Referencias:
- Galaza. M (2016) "Normalización". Recuperado el 23-11-2016 de http://www2.udla.edu.ec/udlapresencial/mod/resource/view.php?id=905785

-   (2007) "Fundamentos de la normalización de bases de datos ". Recuperado el 
23-11-2016 de https://support.microsoft.com/es-ec/kb/283878

-  Orígenes y Evolución de SQL. (Sin fecha). Recuperado el 23 de noviembre de 2016 de http://sql3.wikispaces.com/4.-+Or%C3%ADgenes+y+Evoluci%C3%B3n+de+SQL.

-  Características de SQL. (Sin fecha). Recuperado el 23 de noviembre de 2016 de http://aprende-web.net/progra/sql/sql_2.php

miércoles, 16 de noviembre de 2016

Normalización:
En un conjunto de reglas que sirven para ayudar a los diseñadores a desarrollar un esquema que minimice los problemas de lógica.
Cada regla esta basada en la que le antecede. Se la adopto por que el viejo estilo de poner todos los datos en un solo lugar, como un archivo o tabla de base de datos, es ineficiente y conducía a errores de lógica.
Existen tres niveles básico de normalización:
Primera forma normal (1NF).
Segunda forma normal (2NF).
Tercera forma normal (3NF).
Existen cuatro niveles mas de normalizacion:
Forma Normal Boyce-Codd(BCNF)
Cuarta forma normal(4NF).
Quinta forma normal o forma normal de proyección-unión(5NF).
Forma normal de dominio/clave.
Primera Forma Normal (1NF)
  • Todo los atributos son atómicos. Un atributo es atómico si los elementos del dominio son indivisibles, mínimos.
  • La tabla contiene una clave primaria.
  • La clave primara no contiene atributos nulos.
  • No posee ciclos repetitivos.
  • No debe de existir una variación en el numero de columnas.

Suponga que un diseñador principiante desea guardar los nombres y los números telefónicos de los clientes. Procede a definir una tabla de cliente como la que sigue:
Cliente
ID ClienteNombreApellidoTeléfono
123RachelIngram555-861-2025
456JamesWright555-403-1659
789CesarDure555-808-9633
En este punto, el diseñador se da cuenta que un requerimiento es guardar múltiples números telefónicos para algunos clientes. Razona que la manera más simple de hacer esto es permitir que el campo "Teléfono" contenga más de un valor en cualquier registro dado:
Cliente
ID ClienteNombreApellidoTeléfono
123RachelIngram555-861-2025
456JamesWright555-403-1659
555-776-4100
789CesarDure555-808-9633
El diseñador puede evitar esta restricción definiendo múltiples columnas del número telefónico:
Cliente
ID ClienteNombreApellidoTeléfono 1Teléfono 2Teléfono 3
123RachelIngram555-861-2025
456JamesWright555-403-1659555-776-4100
789CesarDure555-808-9633
Sin embargo, esta representación hace uso de columnas que permiten valores nulos, y por lo tanto no se conforman con la definición de la 1NF de Date. Incluso si se contempla la posibilidad de columnas con valores nulos, el diseño no está en armonía con el espíritu de 1NF. Teléfono 1, Teléfono 2, y Teléfono 3, comparten exactamente el mismo dominio y exactamente el mismo significado; dividir los números de teléfono en tres encabezados es artificial y causa problemas lógicos.
  • Dificultad en hacer consultas a la tabla. Es difícil contestar preguntas tales como "¿Qué clientes tienen el teléfono X?" y "¿Qué pares de clientes comparten un número de teléfono?".
  • La imposibilidad de hacer cumplir la unicidad los enlaces Cliente-a-Teléfono por medio del RDBMS. Al cliente 789 se le puede dar equivocadamente un valor para el Teléfono 2 que es exactamente igual que el valor de su Teléfono 1.
  • La restricción de los números de teléfono por cliente a tres. Si viene un cliente con cuatro números de teléfono, estamos obligados a guardar solamente tres y dejar el cuarto sin guardar. Esto significa que el diseño de la base de datos está imponiendo restricciones al proceso del negocio, en vez de (como idealmente debe ser el caso) al revés.
Ejemplos:

  • Múltiples valores:
Multiples datos en número de teléfono
 La forma correcta sería:
Número de teléfono normalizado


  • Redundancia de datos:
Datos redundantes en dos registros
 La forma correcta de representar la tabla sería:
Sin redundancia. Cabe mencionar que la llave primaria de la segunda tabla es compuesta
  • Columnas que permiten valores nulos:


La forma correcta de representar esta tabla seria como en el ejemplo anterior


  • Tabla sin llave principal:
La forma correcta sería agregando una llave principal
Segunda forma normal:
Una tabla 1NF estará en 2NF si y solo si, dada una clave candidata y cualquier atributo que no sea un constituyente de la clave candidata, el atributo no clave depende de toda la clave candidata en vez de solo una parte de ella.
Observe que cuando una tabla 1NF no tiene ninguna clave candidata compuesta(claves candidatas consistiendo en mas de un atributo), la tabla esta automaticamente en 2NF.
Ejemplos:
  • Ejemplo1:
Esto se soluciona separando el atributo N_TRABAJADOR a una tabla separada
  • Ejemplo 2:
en este caso se puede separar la tabla en 3 tablas diferentes para cumplir con la 2FN

Ejemplo3: 
Esta tabla esta en FN2

Ejemplo4:
Esta tabla esta en FN2

La Segunda Forma Normal presenta anomalias, en donde si existe dependencia funcional completa entre los atributos. como en el ejemplo siguiente: 
Habilidades de los empleados
EmpleadoHabilidadLugar actual de trabajo
JonesMecanografía114 Main Street
JonesTaquigrafía114 Main Street
JonesTallado114 Main Street
BravoLimpieza ligera73 Industrial Way
EllisAlquimia73 Industrial Way
EllisMalabarismo73 Industrial Way
HarrisonLimpieza ligera73 Industrial Way
La única clave candidata de la tabla es {Empleado, Habilidad}.
El atributo restante, Lugar actual de trabajo, es dependiente solo en parte de la clave candidata, llamada Empleado. Por lo tanto la tabla no está en 2NF. Observe la redundancia de la manera en que son representadas los Lugares actuales de trabajo: nos dicen tres veces que Jones trabaja en la 114 Main Street, y dos veces que Ellis trabaja en 73 Industrial Way. Esta redundancia hace a la tabla vulnerable a anomalías de actualización: por ejemplo, es posible actualizar el lugar del trabajo de Jones en sus registros "Mecanografía" y "Taquigrafía" y no actualizar su registro "Tallado". Los datos resultantes implicarían respuestas contradictorias a la pregunta "¿Cuál es el lugar actual de trabajo de Jones?".
Una alternativa 2NF a este diseño representaría la misma información en dos tablas:
Empleados
EmpleadoLugar actual de trabajo
Jones114 Main Street
Bravo73 Industrial Way
Ellis73 Industrial Way
Harrison73 Industrial Way
Habilidades de los empleados
EmpleadoHabilidad
JonesMecanografía
JonesTaquigrafía
JonesTallado
BravoLimpieza ligera
EllisAlquimia
EllisMalabarismo
HarrisonLimpieza ligera
Las anomalías de actualización no pueden ocurrir en estas tablas, las cuales están en 2NF.
Sin embargo, no todas las tablas 2NF están libres de anomalías de actualización. Un ejemplo de una tabla 2NF que sufre de anomalías de actualización es:
Ganadores del torneo
TorneoAñoGanadorFecha de nacimiento del ganador
Des Moines Masters1998Chip Masterson14 de marzo de 1977
Indiana Invitational1998Al Fredrickson21 de julio de 1975
Cleveland Open1999Bob Albertson28 de septiembre de 1968
Des Moines Masters1999Al Fredrickson21 de julio de 1975
Indiana Invitational1999Chip Masterson14 de marzo de 1977
Aunque el Ganador y la Fecha de nacimiento del ganador están determinadas por una clave completa {Torneo, Año} y no son partes de ella, particularmente las combinaciones Ganador / Fecha de nacimiento del ganador son mostradas redundantemente en múltiples registros. Este problema es tratado por la tercera forma normal (3NF).
Tercera forma normal(3NF):
Es una forma normal usada en la normalización de bases de datos. Para que la tabla esté en 3NF, se debe cumplir que la tabla ya esté en 2NF. Adicionalmente, ningun atributo no primario de la tabla debe ser dependiende transitivamente de una clave primaria.
Un ejemplo de una tabla 2NF que falla en satisfacer los requerimientos de la 3NF es:
Ganadores del torneo
TorneoAñoGanadorFecha de nacimiento del ganador
Indiana Invitational1998Al Fredrickson21 de julio de 1975
Cleveland Open1999Bob Albertson28 de septiembre de 1968
Des Moines Masters1999Al Fredrickson21 de julio de 1975
Indiana Invitational1999Chip Masterson14 de marzo de 1977
La única clave candidata es {Torneo, Año}.
La violación de la 3NF ocurre porque el atributo no primario Fecha de nacimiento del ganador es dependiente transitivamente de {Torneo, Año} vía el atributo no primario Ganador. El hecho de que la Fecha de nacimiento del ganador es funcionalmente dependiente en el Ganador hace la tabla vulnerable a inconsistencias lógicas, pues no hay nada que impida a la misma persona ser mostrada con diferentes fechas de nacimiento en diversos registros.
Para expresar los mismos hechos sin violar la 3NF, es necesario dividir la tabla en dos:
Ganadores del torneo
TorneoAñoGanador
Indiana Invitational1998Al Fredrickson
Cleveland Open1999Bob Albertson
Des Moines Masters1999Al Fredrickson
Indiana Invitational1999Chip Masterson
Fecha de nacimiento del jugador
GanadorFecha de nacimiento
Chip Masterson14 de marzo de 1977
Al Fredrickson21 de julio de 1975
Bob Albertson28 de septiembre de 1968
Las anomalías de actualización no pueden ocurrir en estas tablas, las cuales están en 3NF.
Referencias:
http://basesdedatosjc.blogspot.com/2012/04/primera-forma-normal-en-bases-de-datos.html