UNIVERSAD TECNOLOGICA DE TAMAULIPAS NORTE Carrera: TECNOLOGIAS DE LA INFORMACION Y LA COMUNICACION Materia: BASE DE DATOS Profesor: ROBERTO GARCIA GUERRERO Alumna: CLAUDIA BERENICE LADRON DE GUEVARA RODRIGUEZ Grupo: 2° E TRABAJO FINAL 1. FUNDAMENTOS DE BASE DE DATOS. Que es una base de datos? Una base de datos o banco de datos (en ocasiones abreviada con la sigla BD o con la abreviatura b. d.) es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos. Existen programas denominados sistemas gestores de bases de datos, abreviado SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de la informática. Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas. También son ampliamente utilizadas en entornos científicos con el objeto de almacenar la información experimental. Aunque las bases de datos pueden contener muchos tipos de datos, algunos de ellos se encuentran protegidos por las leyes de varios países. Por ejemplo, en España los datos personales se encuentran protegidos por la Ley Orgánica de Protección de Datos de Carácter Personal (LOPD). Para que sirve un base de datos? Es una interfaz que te permite manejar grandes cantidades de informacion de manera rapida y facil gracias a los comandos, accesos directos y demas prestaciones que da, asi pues en vez de andar buscando dato por dato solo insertas algunas palabras claves y el programa te muestra la informacion que buscas. 1.1 Conceptos Básicos. Registro: Un registro del sistema viene a ser una base de datos que tiene el fin de almacenar configuración, opciones y comandos propios del sistema operativo. Engine: Es un conjunto de algoritmos que permite la gestión y optimización de base de datos. Prudentemente el motor de base de datos utiliza instrucciones especificas para: búsqueda de información, añadir, modificar, borrar: tablas, borrar, modificar: campos, etc. Instancia: Es el conjunto de areas de memoria que permiten el acceso a la base de datos, la instancia es lo que se sube o baja. Campo: Es la mínima unidad de información a la que se puede acceder; un campo o un conjunto de ellos forman un registro, en las hojas de cálculo los campos son llamadas celdas. Entidad: En el caso del enfoque “clásico” correspondería a cada registro guardado en un fichero. Tipo de entidad: Es el conjunto de entidades que comparten los mismos atributos (aunque con diferentes Valores para ellos). Clave: Atributo o conjunto de atributos cuyos valores identifican unívocamente cada entidad. Tabla en el modelo relacional: Una tabla o relación es una matriz rectangular que almacena líneas con una estructura concreta. Access: Es un programa que permite definir, desarrollar, mantener y utilizar base de datos relacionales. Consulta: Esta utilidad permite seleccionar todos los registros de una base de datos que cumplan las condiciones de las preguntas que se formulen. 1.2 Analisis de requerimientos de base de datos El análisis de requerimientos para una base de datos incorpora las mismas tareas que el análisis de requerimientos del software. Es necesario un contacto estrecho con el cliente; es esencial la identificación de las funciones e interfaces; se requiere la especificación del flujo, estructura y asociatividad de la información y debe desarrollarse un documento formal de los requerimientos. Es necesario recabar toda la información posible sobre la realidad, para luego analizarla con detenimiento, desde distintos puntos de vista con el fin de lograr diseñar un modelo que la represente de manera abstracta lo más fielmente posible. El análisis de requerimientos solicita entendimiento, clasificación, organización, priorización y validación. En todo momento debemos considerar los límites del sistema, teniendo en claro cuál es su objetivo primario ¿Qué es lo que queremos que el sistema haga? ¿Qué salidas de información queremos obtener? Sólo de esta manera se podrá diferenciar qué de toda la información recolectada debemos almacenar y cómo deberá ser el diseño que se ajuste a ella. 2. MODELO ENTIDAD-RELACIÓN (E-R) Cuando se utiliza una base de datos para gestionar información, se está plasmando una parte del mundo real en una serie de tablas, registros y campos ubicados en un ordenador; creándose un modelo parcial de la realidad. Antes de crear físicamente estas tablas en el ordenador se debe realizar un modelo de datos. Se suele cometer el error de ir creando nuevas tablas a medida que se van necesitando, haciendo así el modelo de datos y la construcción física de las tablas simultáneamente. El resultado de esto acaba siendo un sistema de información parcheado, con datos dispersos que terminan por no cumplir adecuadamente los requisitos necesarios. Entidades y Relaciones El modelo de datos más extendido es el denominado ENTIDAD/RELACIÓN (E/R) En el modelo E/R se parte de una situación real a partir de la cual se definen entidades y relaciones entre dichas entidades: Entidad.- Objeto del mundo real sobre el que queremos almacenar información (Ej: una persona). Las entidades están compuestas de atributos que son los datos que definen el objeto (para la entidad persona serían DNI, nombre, apellidos, dirección,...). De entre los atributos habrá uno o un conjunto de ellos que no se repite; a este atributo o conjunto de atributos se le llama clave de la entidad, (para la entidad persona una clave seria DNI). En toda entidad siempre hay al menos una clave que en el peor de los casos estará formada por todos los atributos de la tabla. Ya que pueden haber varias claves y necesitamos elegir una, lo haremos atendiendo a estas normas: Que sea única. Que se tenga pleno conocimiento de ella.- ¿Por qué en las empresas se asigna a cada cliente un número de cliente?. Que sea mínima, ya que será muy utilizada por el gestor de base de datos. Relación.- Asociación entre entidades, sin existencia propia en el mundo real que estamos modelando, pero necesaria para reflejar las interacciones existentes entre entidades. Las relaciones pueden ser de tres tipos: Relaciones 1-1.- Las entidades que intervienen en la relación se asocian una a una (Ej: la entidad HOMBRE, la entidad MUJER y entre ellos la relación MATRIMONIO). Relaciones 1-n.- Una ocurrencia de una entidad está asociada con muchas (n) de otra (Ej: la entidad EMPERSA, la entidad TRABAJADOR y entre ellos la relación TRABAJAR-EN). Relaciones n-n.-Cada ocurrencia, en cualquiera de las dos entidades de la relación, puede estar asociada con muchas (n) de la otra y viceversa (Ej: la entidad ALUMNO, la entidad EMPRESA y entre ellos la relación MATRÍCULA). Representación gráfica de Entidades y Relaciones Para asimilar fácilmente un diseño de datos cuando se emplea el modelo E/R se utilizan los siguientes elementos gráficos: La utilización de estos elementos dará como resultado lo que se denomina el esquema entidad-relación de la base de datos. Los ejemplos que se incluyen en el apartado anterior, gráficamente quedarían como sigue: ¿Cómo se pasa del esquema E/R a las tablas? Para cada entidad del esquema se creará una tabla con tantos campos como atributos tenga la entidad. Ejemplo de una Universidad Creación de Tablas Tabla Alumno En una Universidad, si tenemos la entidad Alumno que definimos como: Tabla ALUMNO(DNI, Nombre, Apellido1, Apellido2, Telefono, Calle, Ciudad, Provincia, FNacimiento, EstadoCivil) CP: DNI Creando la tabla en vista "Diseño" obtenemos: Tabla Asignatura Y la entidad Asignatura definida como: ASIGNATURA(Codigo, Nombre, Creditos, Dni_prof, Observaciones) CP:Codigo Tabla Matricula Y sabiendo que un alumno se puede matricular de muchas asignaturas y que una asignatura a su vez puede tener muchos alumnos matriculados, podemos definir entre ambas entidades la relación (n-m) matricula como: MATRICULA(DNI, Codigo_asig, Fecha, Nota) CP:DNI,Codigo_asig,Fecha Y la tabla quedaría como: Creación de Relaciones Seleccionamos la opción Relaciones del menú Herramientas: Agregamos las tablas (Alumno,Asignatura y Matricula): Que son: Y por último sólo falta arrastrar los campos relacionados de la tabla con la relación 1 a la tabla con la relación muchos, es decir crear las relaciones, en las que seleccionaremos siempre : Exigir Integridad Referencial Actualizar en cascada los campos relacionados Eliminar en cascada los registros relacionados En el caso de Alumno-Matricula (1 Alumno.DNI se puede repetir n veces en Matricula.DNI) arrastramos el Alumno.DNI sobre la Matricula.DNI: Y si repetimos la misma operación entre Asignatura.Codigo y Matricula.Codigo_asig queda el esquema E-R en Access según se muestra en la figura siguiente: 2.2 Modelo Entidad-Relación Extendido El Modelo Entidad-Relación Extendido incluye todos los conceptos del Entidad-Relación e incorpora los conceptos de Subclase y superclase con los conceptos asociados de Especialización y Generalización. Otro nuevo concepto incluido por el ERE es el de Categoría. Asociado a estos conceptos está el importante mecanismo de Herencia de atributos. Habrá que tener en cuenta que no existe una terminología estandarizada para estos conceptos, por lo que usaremos la mas difundida. Subclases, Superclases y Especialización. En el modelo Entidad-Relación, una entidad agrupa un conjunto de ocurrencias de entidad del mismo tipo. En muchos casos, estas ocurrencias se pueden agrupar a su vez en otros subconjuntos que tienen un significado propio para los propósitos de la Base de Datos y, por tanto, deberían representarse de forma explícita. Por ejemplo, la entidad EMPLEADO puede a su vez subdividirse en SECRETARIA, INGENIERO, JEFE, TÉCNICO, ASALARIADO, SUBCONTRATADO, etc. El conjunto de ocurrencias de entidad en cada una de estas entidades será un subconjunto de las ocurrencias de entidad de EMPLEADO, ya que por ejemplo, un ingeniero también es un empleado. Llamaremos a cada uno de estos subconjuntos Subclases de la entidad EMPLEADO y a EMPLEADO una Supercalse de cada uno de estos subconjuntos. Llamaremos a la relación existente entre las Superclases y las Subclases como relación Clase/Subclase. En el ejemplo anterior, EMPLEADO/SECRETARIA y EMPLEADO/TÉCNICO son dos relaciones Clase/Subclase. Hay que tener en cuenta que una ocurrencia de una Subclase representa el mismo objeto real que alguna correspondiente a su Superclase, por ejemplo la SECRETARIA "Concha Leco" será también la EMPLEADO "Concha Leco". Por tanto, la ocurrencia de Subclase es la misma que en la Superclase pero con un rol específico. Una ocurrencia de Subclase no tienen sentido si no es a su vez ocurrencia de Superclase. Por otro lado, una ocurrencia de superclase puede ser a su vez ocurrencia de varias subclases o de ninguna. Por ejemplo, "Roberto Mate" como ocurrencia de EMPLEADO puede a su vez pertenecer a subclases INGENIERO y ASALARIADO. Herencia de atributos en la relación Clase/subclase. Debido a que una subclase es a su vez parte se una superclase, la subclase tendrá sus atributos específicos así como los atributos correspondientes a la superclase a la que pertenece. Esto quiere decir que la ocurrencia de entidad de una subclase hereda los atributos correspondientes a la superclase a la que pertenece. De la misma manera hereda las relaciones en las que su correspondiente superclase participa. Especialización. El proceso por el que se definen las diferentes subclases de una superclase se conoce como especialización. El conjunto de subclases se define basándonos en características diferenciadoras de las ocurrencias de entidad de la superclase. Por ejemplo, el conjunto se subclases {SECRETARIA, INGENIERO, TECNICO} es una especialización de la superclase EMPLEADO mediante la distinción del tipo de trabajo en cada ocurrencia de entidad. Podemos tener varias especializaciones de una misma entidad basándonos en distintos criterios. Por ejemplo, otra especialización de EMPLEADO podría dar lugar a las subclases ASALARIADO y SUBCONTRATADO, dependiendo del tipo de contrato. Generalizacion: Es el resultado de la unión de 2 o mas conjuntos de entidades (de bajo nivel) para producir un conjunto de entidades de mas alto nivel. Se uso para hacer resaltar los parecidos entre tipos de entidades para formar una entidad(es) global(es) con dichos atributos semejantes, dicha entidad global quedara a un nivel mas alto al de las entidades origen. Trata de eliminar la redundancia (repeticion) de atributos, al englobar los atributos semejantes. 3. MODELO RELACIONAL Este modelo permite representar la información del mundo real de una manera intuitiva, introduciendo conceptos cotidianos y fáciles de entender por cualquier inexperto. Asimismo, mantiene información sobre las propias características de la base de datos (metadatos), que facilitan las modificaciones, disminuyendo los problemas ocasionados en las aplicaciones y a desarrolladas. Por otro lado, incorpora mecanismos de consulta muy potentes, totalmente independientes del S.G.B.D., e incluso de la organización física de los datos; el propio S.G.B.D. es el encargado de optimizar estas preguntas en formato estándar, a sus características propias de almacenamiento. 3.1 Conceptos del modelo relacional Tabla: Se refiere al tipo de modelado de datos, donde se guardan los datos recogidos por un programa. Su estructura general se asemeja a la vista general de un programa de hoja de calculo. La primera fila de una tabla es la más importante, ya que nos da su estructura. Esta columna identifica los nombres de campo o atributos de que consta cada tabla. En otras palabras, cada tupla está formada por un conjunto de información estructurada en elementos más simples llamados atributos. Dominios: Los dominios a que puede pertenecer un atributo, suelen depender de los que proporcione el S.G.B.D. que empleemos. Suelen ser comunes dominios como: decimal, Fecha, Hora, Sí/No, etc. decimal, Fecha, Hora, Sí/No Por otro lado, un dominio como pueda ser entero, es un dominio cuyo conjunto entero de valores es infinito, y dado que trabajamos con ordenadores, es imprescindible poner un límite que p ermita almacenar un valor concreto debido a las limitaciones de memoria, y sobre todo al hecho de que toda tupla debe poseer el mismo tamaño. Tomemos como ejemplo el Nombre del Plato, que es evidentemente del tipo Texto; las limitaciones del ordenador nos impiden almacenar Text o nombres ilimitadamente largos, como puedan ser « Magret de p ato al vinagre de grosella con guarnición de higos malagueños al vino moscatel Pedro Ximénez». Es necesario , por tanto, establecer una cota al número máximo de letras que podemos teclear, por lo que el dominio del atributo Nombre puede ser Texto de 20 caracteres. Atributo: Componentes que determinan una entidad. Cada atributo tiene asociado un dominio: Conjunto de valores que puede tomar. El nombre del atributo debe describir el significado de la información que representa. En la tabla Platos, el atributo Precio tendrá como cometido almacenar el valor en pesetas con el que ese plato se vende al público. A menudo suele ser necesario añadir una pequeña descripción a cada atributo que aclare su naturaleza: ¿el precio lleva I.V.A. o no? En el atributo Menú no está claro que es lo que se almacena. Una descripción del mismo aclararía más las cosas: Indica si el cliente puede pedir este plato o no en el menú del día. Por otro lado, está claro que un atributo en una tupla no puede tomar un valor cualquiera, p.ej., no tiene sentido que en el precio del Ajo blanco con uvas se guarde una palabra como pueda ser Gerente. Para evitar este tipo de situaciones anómalas en la medida de lo posible, obligaremos a que cada atributo sólo pueda tomar los valores pertenecientes a un conjunto de valores previamente establecido, o sea, un atributo tiene asociado un dominio de valores. En el caso anterior se tiene que el atributo Precio sólo puede tomar valores numéricos, mientras que el Nombre sólo puede contener frases textuales. Atributos simples y compuestos: Se dice que un atributo es compuesto cuando puede descomponerse en otros componentes o atributos más pequeños, y simple en otro caso. Tuplas: Las tuplas son estructuras de datos que constan de varios campos que pueden contener datos de tipos distintos. El acceso al contenido de los campos en las tuplas se hace utilizando el nombre de los campos en lugar de su posición. El siguiente ejemplo muestra la definición del tipo de tupla “coche” que posee cuatro campos: propietario, modelo, matrícula y año de matriculación typedef struct { char propietario[25]; char modelo[25]; char matrícula[25]; int año; } coche; coche mi_coche; Una vez definido el tipo de tupla “coche”, podemos declarar variables de tipo “coche” como de cualquier otro tipo. 3.2 Esquemas de bases de datos relacionales Para transformar un modelo entidad-relación a modelo relacional seguiremos las siguientes reglas: Toda entidad del modelo entidad-relación se transforma en una tabla. Cualquier atributo de una entidad se transforma en un campo dentro la tabla, manteniendo las claves primarias. Las relaciones N:M se transforman en una nueva tabla que tendrá como clave primaria la concatenación de los atributos clave de las entidades que relaciona. En las relaciones 1:N se pueden tener dos casos: Si la entidad que participa con cardinalidad máxima uno lo hace también con cardinalidad mínima uno, entonces se propaga el atributo de la entidad que tiene cardinalidad máxima 1 a la que tiene cardinalidad máxima N, desapareciendo el nombre de la relación. Si existen atributos en la relación éstos también se propagarán. Si la entidad que participa con cardinalidad máxima uno lo hace también cardinalidad mínima cero, entonces se crea una nueva tabla formada por las claves de cada entidad y los atributos de la relación. La clave primaria de la nueva tabla será el identificador de la entidad que participa con cardinalidad máxima N. En el caso de las relaciones 1:1 también pueden darse dos casos: Si las entidades poseen cardinalidades (0,1), la relación se convierte en una tabla. Si una de las entidades posee cardinalidad (0,1) y la otra (1,1), conviene propagar la clave de la entidad con cardinalidad (1,1) a la tabla resultante de la entidad con cardinalidad (0,1). Si ambas entidades poseen cardinalidades (1,1) se puede propagar la clave de cualquiera de ellas a la tabla resultante de la otra. En el caso de las relaciones N-arias se aplica la misma regla que para las relaciones N:M En el caso de las relaciones reflexivas supondremos que se trata de una relación binaria con la particularidad que las dos entidades son iguales y aplicaremos las reglas vistas en los puntos anteriores. 3.3 Algebra Relacional El álgebra relacional es un lenguaje de consulta formal procedimental, el álgebra relacional define operadores que funcionan sobre las tablas (de una manera similar a los operadores +,-,etc. del álgebra común ) para llegar al resultado deseado. El álgebra relacional es difícil de utilizar, debido en parte a que es procedimental, esto es, al utilizar el álgebra relacional no sólo debemos saber lo que queremos, también cómo obtenerlo. En el proceso de bases de datos comerciales el álgebra relacional se utiliza de manera poco frecuente. Aunque unos cuantos productos exitosos DBMS sí tienen opciones del álgebra relacional, éstas son poco utilizadas en vista de su complejidad. El álgebra relacional toma dos o más tablas como entrada produce una nueva tabla como resultado de la serie de operaciones. Las operaciones fundamentales en el álgebra relacional son seleccionar, proyectar, producto cartesiano, renombrar, unión y diferencia de conjuntos. Además de las operaciones fundamentales existen otras operaciones como son:intersección de conjuntos, producto natural, división y asignación. ** Operaciones fundamentales ** Las operaciones seleccionar, proyectar y renombrar, son denominadas operaciones unitarias ya que operan sobre una tabla. Las otras operaciones operan sobre pares de relaciones y, por tanto se llaman operaciones binarias. * La operación seleccionar. Esta operación selecciona tuplas (filas) que satisfacen una instrucción(condición) dada de una tabla. Se representa por medio de paréntesis. (nombre_tabla WHERE condición); La oración de la instrucción después de la cláusula WHERE puede incluir condiciones de igualdad como =,=,<,>,>=,<=,además que se puede hacer una oración más compleja usando los conectores y (^) y o (v). * La operación Proyectar. Consiste en identificar las columnas (atributos en el modelo E-R) que nos interesa conocer. Se representa por medio de corchetes. Si este se omite indicara que se desea obtener todas las columnas de la tabla en cuestión. (nombre_tabla WHERE condición) [Nombre_atributo]; * La operación Producto cartesiano. Consiste en multiplicar todas las tuplas entre tablas, obteniendo como resultado una tabla que contiene todas las columnas de ambas tablas. Se especifica con la orden TIMES. Nombre_tabla TIMES Nombre_tabla; * La operación Join. Consiste en obtener el producto (multiplicación) de todas las tuplas de una tabla con las de la otra, para posteriormente evaluar aquellas cuyo campo en común sea igual generando como resultado una nueva tabla que tiene como tuplas (renglones) que cumplen con la condición establecida. Se representa con la orden JOIN. La orden Join es colocada entre las dos tablas a multiplicar después de que la primera especifica la operación de selección y proyección. (Tabla)[atributo] JOIN (Tabla)[Atributo]; * La operación Divide. Toma dos relaciones, una binaria y la otra unaria, construye una relación formada por todos los valores de un atributo de la relación binaria que concuerdan (en el otro atributo) con todos los valores de la relación unaria. Se representa con la ordenDIVIDEBY. NomTablaBin DIVIDEBY NomTablaUna * La operación Diferencia. Construye una relación formada por todas las tuplas (filas) de la primera relación que no aparezcan en la segunda de las dos relaciones especificadas. Se representa con la orden MINUS. Nom_tablaA MINUS NomTablaB; * La operación Unión. Construye una relación formada por todas las tuplas de la primera relación y todas las tuplas de la segunda relación. El requisito es que ambas relaciones sean del mismo tipo. Nom_TablaA UNION Nom_tablaB * La operación intersección. Construye una nueva tabla compuesta por todas las tuplas que están en la primera y segunda tabla. Nom_TablaA INTERSEC Nom_tablaB 4. DISEÑO DE BD RELACIONALES Cualidades de un buen diseño de base de datos: Reflejar la estructura del problema en el mundo real. Ser capaz de representar todos los datos esperados, incluso con el paso del tiempo. Evitar el almacenamiento de información redundante. Proporcinar un acceso eficaz a los datos. Mantener la integridad de los datos a lo largo del tiempo. Ser claro, coherente y de fácil comprensión. Nota: A veces, estos objetivos pueden ser contradictorios. 4.1 Restricciones de Integridad Datos Requeridos: establece que una columna tenga un valor no NULL. Se define efectuando la declaración de una columna es NOT NULL cuando la tabla que contiene las columnas se crea por primera vez, como parte de la sentencia CREATE TABLE. Chequeo de Validez: cuando se crea una tabla cada columna tiene un tipo de datos y el DBMS asegura que solamente los datos del tipo especificado sean ingresados en la tabla. Integridad de entidad: establece que la clave primaria de una tabla debe tener un valor único para cada fila de la tabla; si no, la base de datos perderá su integridad. Se especifica en la sentencia CREATE TABLE. El DBMS comprueba automáticamente la unicidad del valor de la clave primaria con cada sentencia INSERT Y UPDATE. Un intento de insertar o actualizar una fila con un valor de la clave primaria ya existente fallará. Integridad referencial: asegura la integridad entre las llaves foráneas y primarias (relaciones padre/hijo). Existen cuatro actualizaciones de la base de datos que pueden corromper la integridad referencial: La inserción de una fila hijo se produce cuando no coincide la llave foránea con la llave primaria del padre. La actualización en la llave foránea de la fila hijo, donde se produce una actualización en la clave ajena de la fila hijo con una sentencia UPDATE y la misma no coincide con ninguna llave primaria. La supresión de una fila padre, con la que, si una fila padre -que tiene uno o más hijosse suprime, las filas hijos quedarán huérfanas. La actualización de la llave primaria de una fila padre, donde si en una fila padre, que tiene uno o más hijos se actualiza su llave primaria, las filas hijos quedarán huérfanas. 4.2 Normalización El proceso de normalización de una base de datos consiste en aplicar una serie de reglas a las relaciones obtenidas tras el paso del modelo E-R (entidad-relación) al modelo relacional. Las bases de datos relacionales se normalizan para: • Evitar la redundancia de los datos. • Evitar problemas de actualización de los datos en las tablas. • Proteger la integridad de los datos. En el modelo relacional es frecuente llamar tabla a una relación, aunque para que una tabla bidimensional sea considerada como una relación tiene cumplir con algunas restricciones: • Cada columna debe tener su nombre único. • No puede haber dos filas iguales. No se permiten los duplicados. • Todos los datos en una columna deben ser del mismo tipo. Primera forma normal(1FN): Una relación R se encuentra en 1FN si y solo sí por cada renglón columna contiene valores atómicos. Abreviada como 1FN, se considera que una relación se encuentra en la primera forma normal cuando cumple lo siguiente: 1. Las celdas de las tablas poseen valores simples y no se permiten grupos ni arreglos repetidos como valores, es decir, contienen un solo valor por cada celda. 2. Todos los ingresos en cualquier columna(atributo) deben ser del mismo tipo. 3. Cada columna debe tener un nombre único, el orden de las columnas en la tabla no es importante. 4. Dos filas o renglones de una misma tabla no deben ser idénticas, aunque el orden de las filas no es importante. Por lo general la mayoría de las relaciones cumplen con estas características, así que podemos decir que la mayoría de las relaciones se encuentran en la primera forma normal. Para ejemplificar como se representan gráficamente las relaciones en primera forma normal consideremos la relación alumno cursa materia cuyo diagrama E-R es el siguiente: Como esta relación maneja valores atómicos, es decir un solo valor por cada uno de los campos que conforman a los atributos de las entidades, ya se encuentra en primera forma normal, gráficamente así representamos a las relaciones en 1FN. Segunda forma normal (2FN): Para poder definir la segunda forma normal es necesario saber que es una dependencia funcional, consiste en edificar que atributos dependen de otros atributos. Una relación R se encuentra en 2FN si y solo si esta en 1FN, y los atributos no primos dependen de la llave primaria. Una relación se encuentra en segunda forma normal, cuando cumple con las reglas de la primera forma normal y todos sus atributos que no son claves (llaves) dependen por completo de la clave. Cada tabla que tiene un atributo único como clave, esta en segunda forma normal. Tercera forma normal(3FN): Una relación R está en 3FN si y solo si esta en 2FN y todos sus atributos no primos dependen no transitivamente de la llave primaria. Consiste en eliminar la dependencia transitiva que queda en una segunda forma normal, en pocas palabras una relación esta en tercera forma normal si está en segunda forma normal y no existen dependencias transitivas entre los atributos, nos referimos a dependencias transitivas cuando existe más de una forma de llegar a referencias a un atributo de una relación. 5. SISTEMA GESTOR DE BASES DE DATOS (SGBD) Un Sistema Gestor de Bases de Datos (SGBD) o DBMA (DataBase Management System) es una colección de programas cuyo objetivo es servir de interfaz entre la base de datos, el usuario y las aplicaciones. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta. Un SGBD permiten definir los datos a distintos niveles de abstracción y manipular dichos datos, garantizando la seguridad e integridad de los mismos. Algunos ejemplos de SGBD son Oracle, DB2, PostgreSQL, MySQL, MS SQL Server, etc. Un SGBD debe permitir: • Definir una base de datos: especificar tipos, estructuras y restricciones de datos. • Construir la base de datos: guardar los datos en algún medio controlado por el mismo SGBD • Manipular la base de datos: realizar consultas, actualizarla, generar informes. En sí, un sistema manejador de base de datos es el corazón de la base de datos ya que se encarga del control total de los posibles aspectos que la puedan afectar. 5.1 Fundamentos de los SGBD. Las características de un Sistema Gestor de Base de Datos SGBD son: • Abstracción de la información. Los SGBD ahorran a los usuarios detalles acerca del almacenamiento físico de los datos. Da lo mismo si una base de datos ocupa uno o cientos de archivos, este hecho se hace transparente al usuario. Así, se definen varios niveles de abstracción. • Independencia. La independencia de los datos consiste en la capacidad de modificar el esquema (físico o lógico) de una base de datos sin tener que realizar cambios en las aplicaciones que se sirven de ella. • Redundancia mínima. Un buen diseño de una base de datos logrará evitar la aparición de información repetida o redundante. De entrada, lo ideal es lograr una redundancia nula; no obstante, en algunos casos la complejidad de los cálculos hace necesaria la aparición de redundancias. • Consistencia. En aquellos casos en los que no se ha logrado esta redundancia nula, será necesario vigilar que aquella información que aparece repetida se actualice de forma coherente, es decir, que todos los datos repetidos se actualicen de forma simultánea. • Seguridad. La información almacenada en una base de datos puede llegar a tener un gran valor. Los SGBD deben garantizar que esta información se encuentra segurizada frente a usuarios malintencionados, que intenten leer información privilegiada; frente a ataques que deseen manipular o destruir la información; o simplemente ante las torpezas de algún usuario autorizado pero despistado. Normalmente, los SGBD disponen de un complejo sistema de permisos a usuarios y grupos de usuarios, que permiten otorgar diversas categorías de permisos. • Integridad. Se trata de adoptar las medidas necesarias para garantizar la validez de los datos almacenados. Es decir, se trata de proteger los datos ante fallos de hardware, datos introducidos por usuarios descuidados, o cualquier otra circunstancia capaz de corromper la información almacenada. • Respaldo y recuperación. Los SGBD deben proporcionar una forma eficiente de realizar copias de respaldo de la información almacenada en ellos, y de restaurar a partir de estas copias los datos que se hayan podido perder. • Control de la concurrencia. En la mayoría de entornos (excepto quizás el doméstico), lo más habitual es que sean muchas las personas que acceden a una base de datos, bien para recuperar información, bien para almacenarla. Y es también frecuente que dichos accesos se realicen de forma simultánea. Así pues, un SGBD debe controlar este acceso concurrente a la información, que podría derivar en inconsistencias. 5.2 Manipulación de una BD. Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado. El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional. INSERT Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional. Forma básica INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...'']) Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error. Copia de filas de otras tablas Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a continuación. INSERT INTO phone_book2 SELECT * FROM phone_book WHERE name IN ('John Doe', 'Peter Doe') Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las tablas no son iguales.) El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados. UPDATE Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla. Ejemplo UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N'; DELETE Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla. Forma básica SQL="DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''" Ejemplo DELETE FROM My_table WHERE field2 = 'N'; 6. LENGUAJE DE DEFINICIÓN DE DATOS (SQL-DDL) Lenguaje de definición de datos (DDL: Data Definition Language):Sencillo lenguaje artificial para definir y describir los objetos de la base de datos, su estructura, relaciones y restricciones. En la práctica puede consistir en un subconjunto de instrucciones de otro lenguaje informático. Aparte suele poseer dos subconjuntos de instrucciones: Lenguaje de definición del almacenamiento de los datos (DSDL: Data Storage Definition Language): permite especificar características físicas de la base de datos (volúmenes y archivos donde van a ser almacenados los datos, etc). Lenguaje de control de datos (DCL: Data Control Language): encargado del control y seguridad de los datos (privilegios y modos de acceso, etc). 6.1 Introducción a 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. Componentes del SQL El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. Comandos Existen dos tipos de comandos SQL: DLL que permiten crear y definir nuevas bases de datos, campos e índices. DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. Comandos DLL Comando Descripción CREATE Utilizado para crear nuevas tablas, campos e índices DROP Empleado para eliminar tablas e índices ALTER Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos. Comandos DML Comando Descripción SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado INSERT Utilizado para cargar lotes de datos en la base de datos en una única operación. UPDATE Utilizado para modificar los valores de los campos y registros especificados DELETE Utilizado para eliminar registros de una tabla de una base de datos Cláusulas Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular. Cláusula Descripción FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar GROUP BY Utilizada para separar los registros seleccionados en grupos específicos HAVING Utilizada para expresar la condición que debe satisfacer cada grupo ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden específico Operadores Lógicos Operador Uso AND Es el "y" lógico. Evalúa dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas. OR Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta. NOT Negación lógica. Devuelve el valor contrario de la expresión. Operadores de Comparación Operador Uso < Menor que > Mayor que <> Distinto de <= Menor o igual que >= Mayor o igual que = Igual que BETWEEN Utilizado para especificar un intervalo de valores. LIKE Utilizado en la comparación de un modelo In Utilizado para especificar registros de una base de datos Funciones de Agregado Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros. Funciónn Descripción AVG Utilizada para calcular el promedio de los valores de un campo determinado COUNT Utilizada para devolver el número de registros de la selección SUM Utilizada para devolver la suma de todos los valores de un campo determinado MAX Utilizada para devolver el valor más alto de un campo especificado MIN Utilizada para devolver el valor más bajo de un campo especificado Orden de ejecución de los comandos Dada una sentencia SQL de selección que incluye todas las posibles cláusulas, el orden de ejecución de las mismas es el siguiente: Cláusula FROM Cláusula WHERE Cláusula GROUP BY Cláusula HAVING Cláusula SELECT Cláusula ORDER BY 6.2 Creación del esquema de una BD. Crear - Para hacer una nueva base de datos, tabla, índice, o consulta almacenada. A CREAR declaración en SQL crea un objeto dentro de un sistema de gestión de bases de datos relacionales (RDBMS). Los tipos de objetos que se pueden crear depende del RDBMS está siendo utilizado, pero la mayoría de apoyar la creación de tablas, índices, usuarios, sinónimos y bases de datos . Algunos sistemas (como PostgreSQL) permiten CREAR , y otros comandos DDL, en el interior de una transacción y por lo tanto puede ser revertido . Otras que se incluyen dentro del DDL, pero que su existencia depende de la implementación del estándar SQL que lleve a cabo el gestor de base de datos son GRANT y REVOKE, los cuales sirven para otorgar permisos o quitarlos, ya sea a usuarios específicos o a un rol creado dentro de la base de datos. 6.3 Modificación del esquema de una BD Si por alguna razón se necesita cambiar o eliminar un elemento de datos, el diccionario de datos señalaría los programas específicos que utilizan el elemento de datos que quizá sea necesario modificar. EJEMPLOS •ALTER TABLE oficinas ADD (nueva CHAR(8)); Añade una nueva columna a la tabla oficinas •ALTER TABLE oficinas MODIFY (nueva NOT NULL); Modifica la tabla oficinas obligando a que nueva no pueda tomar un valor null. •ALTER TABLE oficinas DROP COLUMN nueva; Elimina la columna nueva NOTA: Unused ALTER TABLE oficinas set UNUSED COLUMN nueva; ELIMINAR TABLAS: DROP TABLE.- Elimina una tabla Ej: DROP TABLE oficinas; TRUNCATE TABLE.- Elimina todas las filas de la tabla, pero sin eliminar su definición. ¡cuidado! Ej: TRUNCATE TABLE oficinas; Clave primaria: Es una de las claves candidatas a la que le damos algunas características especiales. Sólo se puede tener una única clave primaria, y una columna de clave primaria no puede contener NULLs. CREATE TABLE prueba (ciudad VARCHAR2(13) NOT NULL, fecha_muestra DATE NOT NULL, tarde NUMBER(4,1), noche NUMBER(4,1), precipitacion NUMBER, CONSTRAINT prueba_pk PRIMARY KEY(ciudad,fecha_muestra)); Para claves candidatas o primarias, podemos definir la clave sobre una columna mediante una restricción de columna en lugar de una restricción de tabla. CREATE TABLE trabajador (nombre VARCHAR2(25) PRIMARY KEY, edad NUMBER, ubicación VARCHAR2(15)); NOTA: Nombrado de restricciones: lo ponemos nosotros o lo genera Oracle automáticamente. Clave foránea: Es una combinación de columnas con valores basados en la los valores de la clave primaria de otra tabla. Una restricción de clave foránea, también conocida como restricción de integridad referencial, especifica que los valores de la clave foránea se corresponden con valores reales de la clave primaria en la otra tabla. CREATE TABLE trabajador (nombre VARCHAR2(25), edad NUMBER, ubicacion VARCHAR2(15), CONSTRAINT trabajador_pk PRIMARY KEY(nombre), FOREIGN KEY (ubicacion) REFERENCES Ubicaciones(ubi)); 7. LENGUAJE DE MANIPULACIÓN DE DATOS (SQL-DML) Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado. El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras. Clasificación del lenguaje de manipulación de datos Son DML : Select, Insert, Delete y Update Se clasifican en dos grandes grupos: lenguajes de consulta procedimentales Lenguajes procedimentales. En este tipo de lenguaje el usuario da instrucciones al sistema para que realice una serie de procedimientos u operaciones en la base de datos para calcular un resultado final. lenguajes de consulta no procedimentales En los lenguajes no procedimentales el usuario describe la información deseada sin un procedimiento especifico para obtener esa información. 7.1 Consultas y vistas Una subconsulta es una consulta que aparece dentro de otra consulta o subconsulta en la lista de selección, en la cláusula WHERE o HAVING, originalmente no se podían incluir en la lista de selección. Una subconsulta se denomina también consulta o selección interna, mientras que la instrucción que contiene la subconsulta es conocida como consulta o selección externa. Aparece siempre encerrada entre paréntesis y tiene la misma sintaxis que una sentencia SELECT normal con alguna limitación: No puede incluir una cláusula COMPUTE o FOR BROWSE y sólo puede incluir una cláusula ORDER BY cuando se especifica también una cláusula TOP. Una subconsulta puede anidarse en la cláusula WHERE o HAVING de una instrucción externa SELECT, INSERT, UPDATE o DELETE, o bien en otra subconsulta. Se puede disponer de hasta 32 niveles de anidamiento, aunque el límite varía dependiendo de la memoria disponible y de la complejidad del resto de las expresiones de la consulta. Hay que tener en cuenta que para cada fila de la consulta externa, se calcula la subconsulta, si anidamos varias consultas, el número de veces que se ejecutarán las subconsultas ¡puede dispararse! Cuando la subconsulta aparece en la lista de selección de otra consulta, deberá devolver un solo valor, de lo contrario provocará un error. Ejemplo de subconsulta: Listar los empleados cuya cuota no supere el importe vendido por el empleado. SELECT nombre FROM empleados WHERE cuota <= (SELECT SUM(importe) FROM pedidos WHERE rep = numemp); ¿Qué es una vista? Se puede presentar un subconjunto lógico o combinación de datos para la creación de vistas de tablas. Una vista es una tabla lógica basada en una tabla u otra vista. Una vista no contiene datos propiamente pero es como una ventana por medio de la cual los datos de las tablas pueden ser vistas o cambiadas. Las tablas en las que una vista se basa son llamadas tablas base. La vista es almacenada como una sentencia SELECT en el diccionario de datos. Ventajas de las vistas • Las vistas restringen el acceso a los datos puesto que una vista puede mostrar ciertas columnas de una tabla • Las vistas pueden ser usadas para hacer simples consultas y recuperar los resultados de consultas complejas. Por ejemplo, las vistas pueden ser usadas para consultar información de múltiples tablas sin que el usuario conozca como escribir sentencias Join. 7.3 Instrucciones de actualización Normalmente, las informaciones presentes en una base de datos no son estáticas, sino que evolucionan en el tiempo. Existe, por tanto, la necesidad no sólo de añadir nuevos datos, sino de modificar los que están ya incluidos en las tablas de la base de datos. Las instrucciones SQL que se usan para este fin son UPDATE y DELETE. La primera modifica los valores presentes en una o más columnas de una o más líneas de una tabla. La segunda elimina una o más líneas de una tabla. La sintaxis de UPDATE es la siguiente: UPDATE nombre_tabla SET lista_asignaciones [ WHERE expresión_condicional ] Las asignaciones se especifican del modo: nombre_columna = expresión_escalar La instrucción UPDATE actualiza las columnas de la tabla que se han especificado en la cláusula SET, utilizando los valores que son calculados por las correspondientes expresiones escalares. Si se expresa también la cláusula WHERE, se actualizan sólo las líneas que satisfacen la expresión condicional. Véase que la expresión escalar usada para actualizar una columna puede ser también el resultado de una query escalar, es decir una query que devuelve una sola línea y una sola columna. Veamos un ejemplo: UPDATE Person SET given_names = 'Stefano' WHERE surname = 'Spaccapietra' La instrucción anterior cambia el valor de la columna given_name de la tabla Person en las líneas (en nuestro caso es una sola) en que la columna surname tiene valor 'Spaccapietra'. La sintaxis de DELETE es: DELETE FROM nombre_tabla [ WHERE expresión_condicional ] La instrucción delete elimina de una tabla todas las líneas que satisfacen la expresión condicional de la cláusula WHERE. Si WHERE no se especifica, se cancelan todas las líneas de la tabla. Si en la definición de la tabla se han especificado las cláusulas ON UPDATE u ON DELETE, en el momento en que se ejecutan estas operaciones también se ejecutan las que habían estado previstas en las columnas referenciadas (CASCADE, SET DEFAULT o SET NULL). COMANDOS BASICOS DE SQL. SELECT Obtiene filas de la base de datos y permite realizar la selección de una o varias filas o columnas de una o varias tablas. La sintaxis completa de la instrucción SELECT es compleja, aunque las cláusulas principales se pueden resumir del modo siguiente: SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ] Se puede utilizar el operador UNION entre consultas para combinar sus resultados en un solo conjunto de resultados. UPDATE Actualiza columnas en registros de tabla existentes con nuevos valores. La cláusula SET indica qué columna modificar y los valores que puede recibir. La cláusula WHERE , si se da, especifica qué registros deben actualizarse. De otro modo, se actualizan todos los registros. Si la cláusula ORDER BY se especifica, los registros se actualizan en el orden que se especifica. La cláusula LIMIT es el límite de registros a actualizar. El comando UPDATE soporta los siguientes modificadores: Si usa la palabra clave LOW_PRIORITY , la ejecución de UPDATE se retrasa hasta que no haya otros clientes leyendo de la tabla. Si usa la palabra clave IGNORE, el comando de actualización no aborta incluso si ocurren errores durante la actualización. Los registros que presenten conflictos de clave duplicada no se actualizan. Los registros cuyas columnas se actualizan a valores que provocarían errores de conversión de datos se actualizan al valor válido más próximo. DELETE. Para borrar datos de una tabla, debemos utilizar la sentencia DELETE. La sintaxis de la sentencia DELETE es la siguiente: DELETE FROM <nombre_tabla> [ WHERE <condicion>]; El siguiente ejemplo ilustra el uso de la sentencia DELETE. Es buena idea especificar en la sentencia WHERE los campos que forman la clave primaria de la tabla para evitar borrar datos que no queramos eliminar. DELETE FROM tCoches WHERE marca = 'SEAT'; La sintaxis de DELETE varia en Access, siendo necesario el uso del comodín *. DELETE * FROM <tCoches> Cuando trabajemos con la sentencia DELETE debemos tener en cuenta las siguientes consideraciones: Solo podemos borrar datos de una única tabla. Cuando borramos datos de una vista, los estamos borrando también de la tabla. Las vistas son solo una forma de ver los datos, no una copia. Si intentamos borrar un registro de una tabla referenciada por una FOREING KEY como tabla maestra, si la tabla dependiente tiene registros relacionados la sentencia DELETE fallará. Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia TRUNCATE, mucho más rápida que DELETE. INSERT En SQL, hay fundamental y básicamente dos formas para INSÉRERdatos en una tabla: Una es insertar una fila por vez, y la otra es insertar filas múltiples por vez. Primero observemos como podemos INSÉRER datos a través de una fila por vez: La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente: INSERT INTO "nombre_tabla" ("columna1", "columna2", ...) VALUES ("valor1", "valor2", ...) Suponiendo que tenemos una taba con la siguiente estructura, Tabla Store_Information Column Name Data Type store_name char(50) Sales float Date datetime y ahora deseamos insertar una fila adicional en la tabla que represente los datos de ventas para Los Ángeles el 10 de enero de 1999. En ese día, este negocio tenía $900 dólares estadounidenses en ventas. Por lo tanto, utilizaremos la siguiente escritura SQL: INSERT INTO Store_Information (store_name, Sales, Date) VALUES ('Los Angeles', 900, '10-Jan-1999') El segundo tipo de INSERT INTOnos permite insertar filas múltiples en una tabla. A diferencia del ejemplo anterior, donde insertamos una única fila al especificar sus valores para todas las columnas, ahora utilizamos la instrucción SELECT para especificar los datos que deseamos insertar en la tabla. Si está pensando si esto significa que está utilizando información de otra tabla, está en lo correcto. La sintaxis es la siguiente: INSERT INTO "tabla1" ("columna1", "columna2", ...) SELECT "columna3", "columna4", ... FROM "tabla2"