UNIVERSIDAD PERUANA LOS ANDESFACULTAD DE CIENCIAS ADMINISTRATIVAS CONTABLES CARRERA PROFESIONAL: CONTABILIDAD Y FINANZAS GESTION INFORMATICA II Huancayo – 2013 “Material sujeto a modificaciones y actualizaciones durante el desarrollo del curso” Ing. Elvis Guillermo Huarcaya Quispe Pág. 2 Gestión de informática II PRESENTACIÓN En un mundo donde se cambia constantemente la tecnología y la información su tratamiento automatizado no sólo es necesaria para el eficiente funcionamiento de toda organización, sino que se ha convertido en uno de los principales elementos de competitividad. En este contexto, el almacenamiento de la información (en forma de datos) y su disponibilidad para las aplicaciones de negocio se hace indispensable para la normal operación y funcionamiento de cualquier empresa. El personal que opera las diferentes aplicaciones rutinarias interactúa con "Base de datos". La Gerencia, que evalúa y controla la eficiencia de estas operaciones también requerirá de información, de manera de planificar nuevas tareas y/o corregir aquellas que no vayan con la estrategia de negocio planteada. A su vez, las personas que deciden las estrategias de negocio (nuevos mercados, nuevas líneas de negocio, simple supervivencia, etc.) también requieren información para toma de decisiones. Se dice que el principal activo de una organización es su personal. Entonces podría decirse que el segundo en importancia sería su información, aunque probablemente y en muchos casos ésta última sea más difícil de reemplazar que el primero. Ya sea que la base de datos sea usada para apoyar alguno de los niveles organizacionales comentados o todos, debe elegirse la tecnología adecuada que garantice su permanente y eficiente disponibilidad, así como que facilite el desarrollo de aplicaciones y la administración de la base de datos. El autor Ing. Elvis Guillermo Huarcaya Quispe Pág. 3 Gestión de informática II ÍNDICE PRESENTACIÓN ÍNDICE COMPETENCIAS DE LA ASIGNATURA PRIMERA UNIDAD Definición de sistema de base de datos Modelo Relacional Dominio y Atributo Transformación del Modelo Entidad-Relación al modelo relacional Algebra Relacional Modelo Entidad-Relación SEGUNDA UNIDAD Diseño de Base de Datos Dependencias Funcionales Normalización Lenguaje de Consulta de Base de Datos Structured Query Language. TSQL (DDL) Manipulación de datos (DML) Administración de bases de datos, Gestión de Base de Datos y seguridad Programación en SQL (Procedimientos Almacenados, funciones y desencadenantes etc.) BIBLIOGRAFÍA Ing. Elvis Guillermo Huarcaya Quispe Pág. 4 Gestión de informática II COMPETENCIAS DE LA ASIGNATURA - Analiza y diseña e implementa una base de datos, utilizando el modelo entidad-relación, modelo relacional, modelo distribuido de una organización Pública o Privada con creatividad y responsabilidad. - Implementa en un gestor de bases de datos basados en arquitectura Cliente/Servidor y Administra base de datos corporativa Ing. Elvis Guillermo Huarcaya Quispe Pág. 5 Gestión de informática II PRIMERA UNIDAD SISTEMA DE BASE DE DATOS 1. Introducción En una empresa, las entidades están representadas por los operarios, los empleados, los clientes, los proveedores, las facturas. En este tipo de organización y otras se ha de trabajar con una gran cantidad de datos, lo cual hace surgir la necesidad de almacenarlos de manera que nos resulten de fácil acceso en cada momento y, por consiguiente, útiles a nuestras actividades. Si por ejemplo cada día debemos gestionar varias decenas de clientes y facturas, utilizaremos un sistema para memorizar los datos como, por ejemplo, un fichero, más bien antes que recurrir únicamente a la memoria. Las fichas aparecen reagrupadas en archivos, cada uno de los cuales contiene en general las fichas de un sólo tipo, las de los proveedores o las de los productos. Este sistema recibe el nombre de base de datos, que no es ninguna otra cosa más que una colección de informaciones tales como el catálogo de los ficheros de una biblioteca, un listado telefónico o una enciclopedia. El término de bases de datos fue escuchado por primera vez en 1963, en un simposio celebrado en California – USA. La idea de base de datos surge como una necesidad de mantener datos relacionados. Para entender mejor el concepto de Base de datos empezaremos con las definiciones siguientes: - Dato: Conjunto de caracteres con algún significado, pueden ser numéricos, alfabéticos, o alfanuméricos. - Información: Es un conjunto ordenado de datos los cuales son manejados según la necesidad del usuario, para que un conjunto de datos pueda ser procesado eficientemente y pueda dar lugar a información, primero se debe guardar lógicamente en archivo 2. Definiciones de BD Todas las definiciones coinciden en que es un conjunto de datos almacenados - Un conjunto de información relacionada que se encuentra agrupada ó estructurada. - Un sistema formado por un conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos (punto de vista informático) - “Colección de datos interrelacionados almacenados en conjunto sin redundancias perjudiciales o innecesarias; su finalidad es servir a una o más aplicaciones de la mejor forma posible; los datos se almacenan de modo que resulten independientes de los programas que los usan; se emplean métodos bien determinados para incluir nuevos datos y para modificar o extraer los datos almacenados”. Martin, 1975. - “Colección integrada y generalizada de datos, estructurada atendiendo a las relaciones naturales de modo que suministre todos los caminos de acceso necesarios a cada unidad de datos con objeto de poder atender todas las necesidades de los diferentes usuarios”. Deen, 1985. - “Colección de datos integrados, con redundancia controlada y con una estructura que refleje las interrelaciones y restricciones existentes en el mundo real; los datos, que han de ser compartidos por diferentes usuarios y aplicaciones, deben mantenerse independientes de éstas, y su definición y descripción, únicas para cada tipo de datos, han de estar almacenadas junto con los mismos. Los procedimientos de actualización y recuperación, comunes y bien determinados, habrán de ser capaces de conservar la integridad, seguridad y confidencialidad del conjunto de los datos”. A.de Miguel, 1993. - “Una base de datos consiste en alguna colección de datos persistentes e independientes usados por una organización determinada”. (Date, 1995) 3. Análisis del concepto de Base de Datos El concepto de Base de Datos determina algunas características propias, por ejemplo: - El mundo real considera interrelaciones entre datos y restricciones semánticas que deben estar presentes en una base de datos. Una base de datos no solo debe almacenar entidades y atributos, sino que también debe almacenar COMPETENCIA Analiza y diseña e implementa una base de datos, utilizando el modelo entidad-relación, modelo relacional, modelo distribuido de una organización Pública o Privada con creatividad y responsabilidad Ing. Elvis Guillermo Huarcaya Quispe Pág. 6 Gestión de informática II interrelaciones entre datos. Por otro lado, actualmente se le está dando mucha importancia a las restricciones semánticas, de manera que éstas se almacenan junto con los datos. - La redundancia de datos debe ser controlada, de forma que no existan duplicidades perjudiciales ni innecesarias. - Las bases de datos pretenden servir a toda la organización, es decir a múltiples usuarios y a diferentes aplicaciones. - La definición y descripción del conjunto de datos contenido en la base debe ser única e integrada con los mismos datos. En las bases de datos, la descripción, y en algunos casos, también una definición y documentación completas (metadatos) se almacenan junto con los datos, de modo que éstos están documentados, y cualquier cambio que se produzca en la documentación debe quedar recogido en el sistema. - La actualización y recuperación de las bases de datos debe realizarse mediante procesos bien determinados, incluidos en el SGBD; procedimientos que han de estar diseñados de modo que se mantenga la integridad, seguridad y confidencialidad de la base. 4. Características elementales de una Base de Datos El objetivo de disminuir la redundancia de un conjunto de datos determina dos características fundamentales que poseerá cualquier sistema de Bases de Datos: a) Integrada Una base de datos puede considerarse como una unificación de varios archivos de datos independientes, donde se elimina parcial o totalmente cualquier redundancia entre los mismos. Ejm: Una BD específica puede contener registros de ALUMNO, que incluyen el nombre, dirección, teléfono, fecha de nacimiento, etc. y, existir registros de INSCRIPCION que representan inscripciones de alumnos en cursos de capacitación. En el caso de llevar acabo el proceso de administración de los cursos se necesita conocer la dirección de cada estudiante inscrito, para lo cual, no hay necesidad de incluir este dato (redundante) en los registro de INSCRIPCION, siempre se podría obtener recurriendo a los registros de ALUMNO correspondiente. b) Compartida Las partes individuales de la Base de Datos pueden compartirse entre varios usuarios distintos, en el sentido que cada uno de ellos puede tener acceso a la misma parte de la Base de Datos y utilizarla con propósitos diferentes. Tal comportamiento es en verdad consecuencia del hecho de que la Base de Datos es integrada. En el caso del ejemplo anterior se tiene que los datos de los registros de ALUMNO es compartido por usuarios del departamento de personal y capacitación. Lo cual implica que, diferentes usuarios percibirán de modos muy distintos una base de datos. 5. Ventajas de las Bases de Datos Referidas a: Referidas a: Ventajas Los datos - Independencia de estos respecto de los tratamientos y viceversa - Mejor disponibilidad de los mismos para los usuarios - Mayor eficiencia en la recogida, codificación y entrada Los resultados - Mayor coherencia - Mayor valor informativo - Mejor y más normalizada documentación de la información Los usuarios - Acceso más rápido y sencillo de los usuarios finales - Más facilidades para compartir los datos por el conjunto de los usuarios - Mayor flexibilidad para atender a demandas cambiantes. Análisis cuadro anterior Los datos: - Independencia de los datos respecto a los tratamientos y viceversa: Esto supone que un cambio en los tratamientos no imponga un nuevo diseño lógico y/o físico de la base de datos. Por otro lado, cambios en la incorporación, desaparición de datos, cambios en la estructura física o caminos de acceso no deben obligar a alterar los programas. Así se evita la reprogramación de las aplicaciones. - Mejor disponibilidad de los datos para el conjunto de los usuarios: En una base de datos ningún usuario es propietario de los datos, pues éstos se comparten entre las aplicaciones, existiendo una mayor disponibilidad. - Mayor eficiencia en la recogida, codificación y entrada de datos: Al no existir la redundancia, los datos se recogen y validan una sola vez, aumentando así la eficiencia. Los resultados: - Coherencia de los resultados: Debido a que la información de la base de datos se recoge y se almacena una sola vez, en todos los tratamientos se utilizan los mismos datos, por lo que los resultados de estos son coherentes y comparables. Así, se evitan las divergencias en los resultados. - Mayor valor informativo: Esto se refiere al concepto de sinergia, en donde el valor informativo del conjunto de datos es superior a la suma del valor informativo de los elementos individuales. Ing. Elvis Guillermo Huarcaya Quispe Pág. 7 Gestión de informática II - Mejor y más normalizada documentación: La mayoría de los SGBD proporcionan herramientas para reflejar el contenido semántico de los datos, es decir, incluyen una descripción de los datos dentro del sistema. - Mayor eficiencia en la captura, validación e ingreso de datos al sistema: al no existir redundancias, los datos se capturan y validan una sola vez aumentando el rendimiento del proceso previo al almacenamiento - Reducción del espacio de almacenamiento: por un lado, la disminución de redundancias y las técnicas de compactación hacen que disminuya el espacio en disco. Sin embargo, los diccionarios, referencias, punteros, listas invertidas también ocupan espacio. 6. Desventajas de las bases de datos Las desventajas de una base de datos relativas a: Referidas a: Desventajas: La implantación - Costosa en equipos (lógico y físico) - Implantación larga y difícil - Falta de rentabilidad a corto plazo - Escasa estandarización Los usuarios - Personal especializado - Desfase entre teoría y práctica Análisis del cuadro anterior - Instalación costosa: Puede implicar el coste elevado en equipos físicos (adquisición de nuevas instalaciones, o ampliaciones de las existentes), como en el lógico (sistemas operativos, programas, compiladores, etc.) así como el coste de adquisición o mantenimiento del SGBD. - Implantación larga y difícil: Debido a las causas mencionadas en la instalación costosa la implantación de un sistema de base de datos puede convertirse en una tarea larga y complicada. - Falta de rentabilidad a corto plazo: Los amplios costes que conlleva la implantación, implica una rentabilidad no a corto, sino a medio, o incluso a largo plazo. - Escasa estandarización: Esto supone una dificultad añadida a los usuarios de la base de datos. - Personal especializado: Es clave la administración de la base de datos, se requiere de conocimientos específicos. - Desfase entre teoría y práctica: muchos ejecutivos asumen que ciertas funcionalidades son ya un hecho, cuando en realidad son estudios teóricos 7. Componentes de la BD Un sistema de Base de Datos contempla los siguientes componentes: - La base de datos - El Sistema de Gestión de Bases de Datos (SGBD, DBMS) o motor, tal como Oracle, Sybase, SQL Server, Ms-Acces, etc. - Programas de aplicación (Visual Basic, Visual Fox Pro, Power Builder, etc.) - Un conjunto de usuarios (finales, DBA, programadores de aplicaciones, etc.) - Máquinas o PC‟s - Programas utilitarios (generadores de informes, de interfaces, herramientas de desarrollo, de administración, etc.) DBMS: Es la sigla en inglés de Sistema de Administración de Bases de Datos, que corresponde al Software que maneja todos los accesos a la Base de Datos. 8. ¿Para qué sirve una Base de Datos? Una base de datos permite la realización de consultas, informes filtrado de información, entre otros. Formatos personalizados Cálculos estadísticos Búsquedas de datos Clasificación Resumen y Reportes impresos Páginas web 9. Sistemas de Gestión de Base de Datos (SGBD o DBMS) Un sistema de gestión de bases de datos consiste de una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos. La colección de datos es la base de datos, y es la que contiene información por ejemplo acerca de una empresa determinada. El objetivo principal de un SGBD es proporcionar un entorno que sea a la vez conveniente y eficiente para ser utilizado al extraer y almacenar información en la base de datos. Toda organización puede verse en tres niveles de gestión: operacional, táctico y estratégico. Muchas veces se produce una desconexión de los sistemas que caracterizan a estos niveles, pues constituyen sistemas aislados, sin relación entre ellos. Esto produce un aumento del costo global de creación y mantenimiento del sistema de información, produce redundancias e incoherencias. Esto impide una gestión racional de los datos. Ing. Elvis Guillermo Huarcaya Quispe Pág. 8 Gestión de informática II La base de datos es un depósito único de datos para toda la organización, por lo que debe ser capaz de integrar los distintos sistemas y aplicaciones, atendiendo a las necesidades de los usuarios en los tres niveles. El objetivo del SGBD es suministrar la interfaz entre el conjunto de los datos y dichos usuarios. El SGBD también debe proporcionar a los otros usuarios (analistas, programadores, administradores) las correspondientes herramientas que les permitan un adecuado desarrollo de sus funciones. La gestión y las bases de datos. a) Definición del SGBD El SGBD es un conjunto coordinado de programas, procedimientos, lenguajes, etc. que suministra, tanto a usuarios no informáticos como a los analistas, programadores o al administrador, los medios necesarios para describir, recuperar y manipular los datos almacenados en la base, manteniendo su integridad, confidencialidad y seguridad. b) Funciones del SGBD - De Descripción o Definición Debe permitir al administrador de la base especificar los datos que la integran, su estructura y las relaciones que existen entre ellos, las reglas de integridad semántica, los controles a efectuar antes de autorizar el acceso a la base, etc., así como las características de tipo físico y las vistas lógicas de los usuarios. Esta función la realiza el lenguaje de definición de datos (LDD), y debe ser capaz de definir las estructuras de datos a los tres niveles (nivel externo, nivel lógico global o conceptual y nivel interno). A nivel interno se define: o Espacio reservado para la base( volúmenes, cilindros y pistas) o Longitud de los campos o Modo de representación de los datos (binario, decimal, alfanúmerico, etc.) o Caminos de acceso como punteros e índices. A nivel externo y conceptual, la función de descripción proporciona los instrumentos para la definición de entidades, su identificación, atributos, interrelaciones entre ellas, autorizaciones de acceso, restricciones de integridad, etc. El SGBD, además de describir, debe permitir la correspondencia o mapping entre estos niveles. - De Manipulación Permite a los usuarios de la base (todos) buscar, eliminar o modificar los datos de la base, de acuerdo a las especificaciones y normas de seguridad dadas por el administrador. Esto se realiza mediante el lenguaje de manipulación de datos (LMD), mediante un conjunto de instrucciones (lenguaje huésped) que son admitidas por un lenguaje de programación (lenguaje anfitrión), o bien, mediante un lenguaje autocontenido, que posee todas las instrucciones necesarias para llevar a cabo estas tareas. - De Utilización Reúne todas las interfaces que necesitan los diferentes tipos de usuarios para comunicarse con la base y proporciona un conjunto de procedimientos para el administrador. Algunas de estas funciones de servicio son: o Cambiar capacidades de los archivos o Obtener estadísticas de utilización respaldos o Cargar y descarga de la base o Seguridad, etc. Ing. Elvis Guillermo Huarcaya Quispe Pág. 9 Gestión de informática II MODELO RELACIONAL INTRODUCCIÓN. El modelo relacional es un modelo de datos basado en la teoría de las relaciones, en donde los datos se estructuran lógicamente en forma de relaciones (tablas), siendo un objetivo fundamental del modelo mantener la independencia de esta estructura lógica respecto al modo de almacenamiento y a otras características de tipo físico. Este modelo persigue una serie de objetivos, que se pueden resumir en los siguientes: Independencia física: es decir, el modo en el que se almacenan los datos no influya en su manipulación lógica y, por tanto, los usuarios que acceden a esos datos no tienen que modificar sus programas por cambios en el almacenamiento físico. Independencia lógica: esto es, que el añadir, eliminar o modificar objetos de la base de datos no repercuta en los programas y/o usuarios que están accediendo a subconjuntos parciales de los mismos (vistas). Flexibilidad: en el sentido de poder presentar a cada usuario los datos de la forma en que éste prefiera. Uniformidad: las estructuras lógicas de los datos presentan un aspecto uniforme, lo que facilita la concepción y manipulación de la base de datos por parte de los usuarios. Sencillez: las características anteriores, así como unos lenguajes de usuario muy sencillos, producen como resultado que el modelo de datos relacional sea fácil de comprender y de utilizar por parte del usuario final. Para conseguir los objetivos citados, Codd introduce el concepto de "relación" (tabla) como una estructura básica del modelo. Todos los datos de la BD se representan en forma de relaciones cuyo contenido varía en el tiempo. ESTRUCTURA DEL MODELO RELACIONAL RELACION La relación es el elemento básico en el modelo relacional. Las relaciones se definen de la siguiente manera: DIPLOMATICO(Codigo,Nombre,Nacionalidad,Institución) y se puede representar como una tabla, como vemos en el siguiente ejemplo: DIPLOMATICO Codigo Nombre Nacionalidad Institucion 01 Pepe España O.N.U. 02 John EE.UU. O.M.S. 03 Pierre Francia O.N.U. En ella podemos distinguir un conjunto de columnas, denominadas atributos o campos, que representan propiedades de la misma y que están caracterizadas por un nombre; y un conjunto de filas llamadas túplas que son las ocurrencias de la relación. Existen también unos dominios donde los atributos toman sus valores. El número de filas de una relación se denomina cardinalidad de la relación y el número de columnas es el grado de la relación. Una relación va a tener una serie de elementos característicos: 1.- No puede haber filas duplicadas, es decir, todas las túplas tienen que ser distintas. 2.-No puede haber nombre de atributos repetidos. 3.- El orden de las filas es irrelevante. 4.-El orden de las columnas es irrelevante. 5.- La tabla es plana, es decir, en el cruce de una fila y una columna sólo puede haber un valor (no se admiten atributos multivaluados). DOMINIO Y ATRIBUTO Un dominio D es un conjunto finito de valores homogéneos y atómicos caracterizados por un nombre; decimos homogéneos porque son todos del mismo tipo y atómicos porque son indivisibles. Todo dominio ha de tener un nombre por el cual nos podamos referir a él y un tipo de datos; así el tipo de datos del dominio "nacionalidades" es una cadena de caracteres de longitud 10. El dominio "nacionalidades" tiene valores: Española, Francés, Italiana,... Ing. Elvis Guillermo Huarcaya Quispe Pág. 10 Gestión de informática II Un atributo es el papel que tiene un determinado dominio en una relación. Es muy usual dar el mismo nombre al atributo y al dominio. En el caso de que sean varios los atributos de una misma tabla definidos sobre el mismo dominio, habrá que darles nombres distintos, ya que una tabla no puede tener dos atributos con el mismo nombre. Por ejemplo los atributos „precio_compra‟ y „precio_venta‟ pueden estar definidos sobre el mismo dominio de enteros de longitud 5. Claves Una clave candidata de una relación es un conjunto no vacío de atributos que identifican unívocamente cada tupla. Una relación puede tener más de una clave candidata. Una clave primaria es aquella clave candidata mínima que identifica de forma unívoca a la relación.( ser indica la clave primaria subrayando el/los atributos; otra notación es usando el símbolo almohadilla #) Una clave alternativa es aquella clave candidata que no ha sido elegida para ser primaria. Se denomina clave ajena (externa, foránea, secundaria) de una relación R2 al conjunto no vacío de atributos que forman la clave primaria de otra relación R1. Que un atributo sea clave ajena en una tabla significa que para introducir datos en ese atributo, previamente han debido introducirse en la tabla origen. (se indica la clave ajena mediante una línea discontinua o marejada; otra notación es usando el subrayado) TERMINOLOGÍA DEL MODELO RELACIONAL • Una base de datos relacional tiene el aspecto de un conjunto de tablas. • Tupla. Es una fila de la tabla que se corresponde con cada ocurrencia de la relación. • Atributo: Igual que en el esquema ER. También se le llaman columnas de la relación. • Grado. Es el número de atributos de la tabla. Todas las tuplas tienen el mismo número de atributos. • Cardinalidad:. Es el número de filas de la tabla. • Dominio: El dominio de los atributos tiene que ser simple: no se admiten atributos multivaluados ni compuestos. a) Relación Una relación es una tabla con columnas y filas. Un SGBD sólo necesita que el usuario pueda percibir la base de datos como un conjunto de tablas. Esta percepción sólo se aplica a la estructura lógica de la base de datos (en el nivel externo y conceptual de la arquitectura de tres niveles). ALUMNO matricula nombre Apellidos curso nota 3456 José Pérez 1 15.25 0101 María Antúnez 2 17.80 8743 Lourdes Sánchez 1 14.50 1234 Antonio Soria 3 16.35 5674 Luis Madrid 1 13.20 Ejemplo de relación En este ejemplo se trata de una tabla denominada ALUMNO, en cuyo ejemplo están presentes cinco tuplas. La relación es de grado cinco. Los cinco dominios son conjuntos de valores que representan respectivamente: el número de matrícula, el nombre, los apellidos, curso y las notas obtenidas por los alumnos. Ejemplo: el Dominio correspondiente a la nota es el conjunto de todas las notas posibles La relación Alumno tiene una cardinalidad de cinco INTENSIÓN Y EXTENSIÓN DE UNA RELACIÓN tuplas Ing. Elvis Guillermo Huarcaya Quispe Pág. 11 Gestión de informática II • Intensión de una relación Parte definitoria y estática (invariante en el tiempo) de la relación, es lo que llamaremos esquema de relación Ejemplo: CURSO (Cód_curso: Códigos, Nombre: Nombres, N_Horas: Horas, Materia: Materias) • Extensión Conjunto de tuplas que, en un instante determinado satisfacen el esquema de relación y se encuentran almacenadas en la base de datos; es lo que se suele llamar, simplemente relación. La extensión varía en el transcurso del tiempo. Ejemplo: CURSO Cód_curso Nombre N_Horas Materias 00012 DISEÑO DE BASE DE DATOS 50 Base de Datos 00034 BASE DE DATOS ORIENTADAS A OBJETOS 30 Base de Datos 00167 SISTEMAS OPERATIVOS 30 Sis. Operativos 01521 ALMACENES DE DATOS 25 Base de Datos 00514 INTRODUCCIÓN AL C++ 25 Lenguajes ELEMENTOS NO PERMITIDOS: RESTRICCIONES Son de dos tipos: restricciones inherentes y restricciones semánticas a) RESTRICCIONES INHERENTES Son las restricciones derivadas de la misma estructura del modelo, que no tienen que ser definida por el usuario o No permite la existencia de tuplas duplicadas y de ahí la obligatoriedad de una clave primaria o Integridad de Entidad: Ningún atributo que forme parte de la clave primaria puede tomar valores nulos b) RESTRICCIONES SEMÁNTICAS Son restricciones que tiene que definir el diseñador a fin de que el esquema sea un reflejo lo más fiel posible del mundo real: de ahí la importancia de las restricciones en el diseñote la Base de Datos Por tanto, un Sistema de Gestión de Base de Datos Realacional (SGBDR), al igual que otros sistemas no relacionales, debe incluir facilidades que permitan: En la fase de definición: - Describir las restricciones con precisión y sencillez - Las acciones ante una posible violación de una restricción - Verificar la consistencia de las restricciones entre sí mismas En la fase de manipulación: - Comprobar que las actualizaciones cumplen las restricciones de integridad - Poner en marcha las acciones indicadas en el caso de que las restricciones non se cumplan REGLAS DE INTEGRIDAD Al definir cada atributo sobre un dominio se impone una restricción sobre el conjunto de valores permitidos para cada atributo. A este tipo de restricciones se les denomina restricciones de dominios. Hay además dos reglas de integridad muy importantes que son restricciones que se deben cumplir en todas las bases de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la regla de integridad de entidades y la regla de integridad referencial. A Ing. Elvis Guillermo Huarcaya Quispe Pág. 12 Gestión de informática II a) Regla de integridad de entidades La primera regla de integridad se aplica a las claves primarias de las relaciones base: ninguno de los atributos que componen la clave primaria puede ser nulo. Por definición, una clave primaria es un identificador irreducible que se utiliza para identificar de modo único las tuplas. Que es irreducible significa que ningún subconjunto de la clave primaria sirve para identificar las tuplas de modo único. Si se permite que parte de la clave primaria sea nula, se está diciendo que no todos sus atributos son necesarios para distinguir las tuplas, con lo que se contradice la irreducibilidad. b) Regla de integridad referencial La segunda regla de integridad se aplica a las claves ajenas: si en una relación hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos. La regla de integridad referencial se enmarca en términos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cómo puede evitarse. La cuestión es ¿qué hacer si estando en un estado legal, llega una petición para realizar una operación que conduce a un estado ilegal? Existen dos opciones: rechazar la operación, o bien aceptar la operación y realizar operaciones adicionales compensatorias que conduzcan a un estado legal. Por lo tanto, para cada clave ajena de la base de datos habrá que contestar a tres preguntas: - Regla de los nulos: ¿Tiene sentido que la clave ajena acepte nulos? - Regla de borrado: ¿Qué ocurre si se intenta borrar la tupla referenciada por la clave ajena? o Restringir: no se permite borrar la tupla referenciada. o Propagar: se borra la tupla referenciada y se propaga el borrado a las tuplas que la referencian mediante la clave ajena. o Anular: se borra la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos). - Regla de modificación: ¿Qué ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena? o Restringir: no se permite modificar el valor de la clave primaria de la tupla referenciada. o Propagar: se modifica el valor de la clave primaria de la tupla referenciada y se propaga la modificación a las tuplas que la referencian mediante la clave ajena. o Anular: se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos). c) Reglas de negocio Además de las dos reglas de integridad anteriores, los usuarios o los administradores de la base de datos pueden imponer ciertas restricciones específicas sobre los datos, denominadas reglas de negocio. Por ejemplo, si en una oficina de la empresa inmobiliaria sólo puede haber hasta veinte empleados, el SGBD debe dar la posibilidad al usuario de definir una regla al respecto y debe hacerla respetar. En este caso, no debería permitir dar de alta un empleado en una oficina que ya tiene los veinte permitidos. TRANSFORMACIÓN DEL MODELO ENTIDAD-RELACIÓN AL MODELO RELACIONAL En el proceso de diseño de una base de datos el primer paso consistía en realizar el diseño conceptual para, posteriormente, abordar el diseño lógico que generaba el esquema de la base de datos en el modelo lógico elegido (relacional, jerárquico, de redes u orientado a objetos). Este apartado presenta un procedimiento sistemático para transformar el esquema conceptual resultante de aplicar el modelo entidad-relación al problema de diseño de una base de datos en un esquema relacional. Para poder llevar a cabo esta transformación, es necesario realizar previamente determinadas conversiones que eliminen elementos del modelo entidad-relación no representables en el modelo relacional. Antes de pasar al modelo relacional, es conveniente analizar el diagrama entidad-relación y comprobar que no existen elementos que no puedan ser representados directamente en el modelo relacional. Para ello pueden seguirse los siguientes pasos: Preparación de los esquemas conceptuales Ing. Elvis Guillermo Huarcaya Quispe Pág. 13 Gestión de informática II a) Eliminación de atributos múltiples o multivaluados Todos los atributos múltiples; es decir, los atributos que pueden tomar más de un valor en el dominio en el cual están definidos, se transformarán en un tipo de entidad débil por existencia en la cual mantendrá relación LIBRO IdLibro Edición Editorial Paginas Fecha Autor LIBRO IdLibro Edición Editorial Paginas Fecha Autor AUTOR ESCRIBE M N IdAutor Nombre b) Eliminación de atributos compuestos Todos los atributos compuestos asociados con los tipos de entidad y los tipos de interrelación deben ser descompuestos en los atributos simples que formen parte o intervengan en los atributos compuestos correspondientes. En este proceso se eliminará el atributo compuesto correspondiente, quedando los atributos simples definidos Nombre_completo EMPLEADO NombrePila Apellido1 Apellido2 dni direccion calle numero distrito provincia departamento Ing. Elvis Guillermo Huarcaya Quispe Pág. 14 Gestión de informática II EMPLEADO NombrePila Apellido1 Apellido2 dni calle numero distrito provincia departamento c) Eliminación de jerarquías de generalización. Al hacerlo hay que tener en cuenta que no debe existir pérdida de información. Existen tres posibilidades para realizar la conversión: c.1 Englobar todos los atributos de la entidad y subtipos en una sola relación. En general se adoptará esta solución cuando los subtipos se diferencien en muy pocos atributos y las interrelaciones que los asocian con el resto de las entidades del esquema sean las mismas para todos (o casi todos los subtipos), lo cual implica que los subtipos no sean excluyentes Esta alternativa presenta el inconveniente de generar demasiados valores nulos en los atributos opcionales. También ralentiza el proceso de búsqueda al tener en cuenta todas las tuplas en vez de las que pertenecen a la subentidad deseada. Su única ventaja es que el acceso a una fila que refleje toda la información de una determinada entidad es mucho más rápido (no hace falta combinar varias relaciones). c.2 Considerar cada subentidad como entidad. Para ello, se añaden los atributos de la entidad genérica a la subentidad; y la clave primaria de la genérica pasa a serlo de las nuevas entidades creadas. Esta opción es adecuada en el caso de que existan muchos atributos distintos entre los subtipos, además los subtipos sean excluyentes Sus inconvenientes son varios: a) Se pierde el concepto de la entidad genérica. b) Los accesos a la entidad genérica deben convertirse en accesos a todas las subentidades. c) Los atributos de la entidad genérica son repetidos en cada subentidad. d) Sólo es válida para jerarquías totales y exclusivas. e) Si la entidad genérica tiene alguna relación, ésta debe propagarse a cada subentidad. f) En consecuencia, esta alternativa es válida cuando la jerarquía es total o exclusiva, no importa el concepto de la entidad genérica en las operaciones y no hay relación entre la entidad genérica y otras entidades. c.3 Considerar relaciones distintas para cada subtipo, que contengan, además de los atributos propios, los atributos comunes. Se elegiría esta opción en el caso de que existan muchos atributos distintos entre los subtipos Ing. Elvis Guillermo Huarcaya Quispe Pág. 15 Gestión de informática II Transformación de los esquemas conceptuales 1. Transformación de atributos de entidades Cada atributo de una entidad se transforma en una columna de la relación a la que ha dado lugar la entidad. Pero teniendo en cuenta que tenemos atributos identificador principal, otros que son identificadores alternativos y el resto de atributos que no son identificadores 1.1 Atributos identificadores Los identificadores principales pasan a ser la clave primaria de la relación. Ejemplo: La relación PROFESOR, fruto de la transformación de la entidad del mismo nombre, con su identificador principal (Cod_prof) que pasa a ser la clave primaria PROFESOR 1.2 Atributos identificadores alternativos Respecto a los identificadores alternativos, recoge por medio de la cláusula UNIQUE estos objetos, los cuales son soportados por el modelo relacional 1.3 Atributos no identificadores Estos atributos pasan a ser columnas, como los anteriores, de la relación, las cuales tienen permitido tomar valores nulos a no ser que se indique lo contrario Aplicando la regla 1.1 y 1.2, la transformación de la entidad PROFESOR es la siguiente: CREATE TABLE profesor (Cód_Profesor, Nombre, DNI NOT NULL , Dirección, Teléfono, Materia, PRIMARY KEY (Cód_Profesor), UNIQUE (DNI)) DNI Nombre Dirección PROFESOR DOCTOR NO DOCTOR (1,1) (0,1) (0,1) IdProf Nombre Tipo Año_doc Materia_doc c.1 PROFESOR (IdProf, Nombre, …, Tipo, Año_doc, Materia_doc) c.2 PROFESOR ( IdProf, Nombre, …) DOCTOR (IdProf, …, Año_doc,Materia¨_doc) NO_DOCTOR( IdProf, …) c.3 DOCTOR (IdProf, Nombre,…, Año_doc, Materia_doc) NO _DOCTOR (IdProf, Nombre,…) PROFESOR (Cód_prof, Nombre, DNI, dirección, Teléfono, Materia) Esquema relacional Diagrama relacional PROFESOR Cód_prof Nombre DNI Dirección Teléfono Materia Ing. Elvis Guillermo Huarcaya Quispe Pág. 16 Gestión de informática II 2. Transformación de interrelaciones 2.1 Interrelaciones N:M Este tipo de interrelación se transforma en una relación que tendrá como clave primaria la concatenación de los Identificadores principales de los tipos de entidad que asocia En SQL obtendríamos: CREATE TABLE Imparte (Cód_Profesor , Cód_curso, primary key(Cód_Profesor,Cód_curso), foreign key (Cód_Profesor) references Profesor ON DELETE CASCADE ON UPDATE CASCADE, foreign key(Cód_curso) references Curso ON DELETE CASCADE ON UPDATE CASCADE ) 2.2 Interrelaciones 1:N Existen dos soluciones para la transformación de una interrelación 1:N a) Obligatorio - Obligatorio Se propaga los identificadores principales del tipo de entidad que tiene de cardinalidad máxima 1 a la que tiene N, desapareciendo el nombre de la interrelación. Este caso se da en la relación es del tipo DEPARTAMENTO PROFESOR Cód_prof Nombre DNI Dirección Teléfono Fecha Cód_dpto Nombre_dpto pertenece (1,n) PROFESOR ( Cód_prof, Nombre, …, Cód_dpto) DEPARTAMENTO ( Cód_dpto, Nombre_dpto, fecha) ME/R MR (1,1) PROFESOR PROFESOR Cód_prof Nombre DNI Dirección Teléfono Materia Cód_curso Nombre_curso imparte (1,n) (1,n) PROFESOR ( Cód_prof, Nombre, DNI, dirección, Teléfono, Materia ) IMPARTE ( Cód_curso, Cód_prof ) CURSO ( Cód_curso, Nombre_curso ) ME/R MR 1:N No admite valores nulos (1,1) Ing. Elvis Guillermo Huarcaya Quispe Pág. 17 Gestión de informática II b) Obligatorio - Opcional Se transforma en una relación, como si se tratara de una interrelación N:M ; sin embargo en este caso, la clave primaria de la relación creada es sólo la clave primaria de la tabla a la que le corresponde la cardinalidad N. Es recomendable esta opción si el número de departamentos es de gran cantidad y no se admitan valores nulos c) Opcional-opcional: Este caso se reduce al de relación obligatoria-opcional. 2.3 Interrelación 1:1 Una interrelación de tipo 1:1 es un caso particular de una N:M o también de una 1:N, por lo que no hay regla fija para la transformación de este tipo de interrelación al modelo relacional, pudiéndose aplicar la regla 2.1 ( con lo que crearíamos una relación) o aplicar la regla 2.2 (esto es, propagar la clave correspondiente) En este último caso, la propagación de la clave puede efectuarse en ambos sentidos. Los criterios para aplicar una u otra regla se basan en la cardinalidades mínimas: a) Obligatoria – Obligatoria Se integran las dos entidades en una tabla que contiene los atributos y la clave primaria es cualquiera de las de E1 y E2. Si coincidiera, sólo se incluiría una vez en la nueva relación. DNI Nombre (1,1) (1,1) DNI Denominación b) Obligatoria – Opcional ESTUDIANTE REALIZA PROYECTO DEPARTAMENTO PROFESOR Cód_prof Nombre DNI Dirección Teléfono Materia Cód_dpto Nombre_dpto pertenece ( 1, n ) PROFESOR ( Cód_prof, Nombre, DNI, dirección, Teléfono, Materia ) DEPARTAMENTO_ PROFESOR ( Cód_dpto, Cod_prof, fecha ) DEPARTAMENTO ( Cód_dpto, Nombre_dpto) ME/R MR ( 0, 1 ) 1:N Admite valores nulos, la claúsula NOT NULL resuelve el problema ESTUDIANTE ( DNI , Nombre, Denominación ) ME/R MR 1:1 Fecha Ing. Elvis Guillermo Huarcaya Quispe Pág. 18 Gestión de informática II Cada entidad se convierte en una relación representada por una tabla, y a la que tiene participación obligatoria se añadiría la clave primaria de la opcional. Las claves primarias de ambas relaciones se mantienen. Suponiendo ESTUDIANTE opcional, el ejemplo resultaría: Cod_prof Nombre_prof (1,1) (0,1) Cod_dpto nombre_dpto c) Opcional-opcional En este caso, se generarán tres relaciones: una para cada entidad y otra para la correspondencia entre ambas. Las entidades no sufriría cambios y la nueva relación incluirá las claves primarias de E1 y E2, así como los atributos de R, si los hubiera. La clave primaria de esta relación recién creada será cualquiera de las de E1 o E2. El ejemplo, sería: Cod_hombre Nombre (0,1) (0,1) Cod_mujer nombre PROFESOR responsable DEPARTAMENTO ME/R MR 1:1 PROFESOR ( Cód_prof, Nombre ) DEPARTAMENTO ( Cod_dpto, nombre_dpto, Cod_prof) HOMBRE matrimoni o MUJER ME/R MR 1:1 HOMBRE ( Cod_hombre, Nombre) MATRIMONIO ( Cod_mujer, Cod_hombre, fecha ) MUJER ( Cod_mujer, Nombre) fecha Ing. Elvis Guillermo Huarcaya Quispe Pág. 19 Gestión de informática II 3. Transformación de dependencias en identificación y en existencia 4. Transformación de tipos y subtipos En lo que respecta a los tipos y subtipo, no son objetos que se puedan representar explícitamente en el modelo relacional. Ante un tipo de entidad y subtipos caben varias soluciones de transformación al modelo relacional. 5. Transformación de relaciones recursivas 5.1 Relaciones Reflexivas 1:N Empleado (dni, nombre, dni_supervisor) dni_supervisor es una clave foránea de dni (de la misma tabla), refleja quien es el jefe y no admite NULL. CORRIDA TORO IdGanadería Año_nac Numero Feria estoqueado ( 0, 1 ) CORRIDA ( N_orden, Feria, Año, NombrePlaza ) TORO ( IdGanadería, Año_nac, Número , NombreToro, Color, N_orden, Feria, Año) GANADERÍA (IdGanadería, NombreGan) ME/R MR ( 6, n ) N_orden Año NombreToro NombrePlaza GANADERÍA IdGanadería NombreGan pertenece ( 1, n ) ( 1, 1 ) Color (1,1) (1,N) 1:N supervisa EMPLEADO DNI nombre Ing. Elvis Guillermo Huarcaya Quispe Pág. 20 Gestión de informática II Empleado (dni, nombre) Supervisa (dni, dni_supervisor) 5.2 Relaciones Reflexivas M:N Empleado (dni, nombre) Supervisa (dni, dni_supervisor) 6. Relaciones n-arias. Tienen el mismo tratamiento que las relaciones N:M. Cada entidad se transforma en tabla y se añade una tabla para la asociación que incluya las claves primarias de las entidades participantes en la correspondencia y los atributos de la asociación. La composición de las claves primarias de las entidades es la clave primaria de la nueva relación. Por ejemplo, la siguiente relación ternaria quedaría del modo que muestra la figura: (1,N) (1,N) M:N supervisa EMPLEADO DNI nombre (1,1) (1,N) 1:N supervisa EMPLEADO DNI nombre Ing. Elvis Guillermo Huarcaya Quispe Pág. 21 Gestión de informática II CASOS GESTIÓN DE UNA BIBLIOTECA Desarrolle el modelo Entidad Relación que permita la gestión de una biblioteca con las siguientes características: • El préstamo sólo considera libros ( no incluye: CD‟S, revistas, o cualquier otro medio) • Para efectos del préstamos todos los libros son iguales • De un mismo libro pueden existir varios ejemplares • Los ejemplares de un libro pueden ser de diferentes ediciones (por ejemplo: del libro Fundamentos de Bases de datos de Korth, pueden existir cinco ejemplares, uno de la segunda edición y cuatro de la tercera edición) • Todos los libros están en español • Un libro puede tener varios autores • Todos los usuarios son iguales y se identifican con un código • Cada usuario tiene derecho a tener prestados hasta 5 libros • Todos los libros prestados deben ser entregados como máximo dos días después del préstamo. Los usuarios que incumplan esta regla, quedan suspendidos por una semana • Un libro puede tratar de varios temas (Ejemplo: Base de datos, programación orientada a objetos, SQL, etc.) Las consultas más comunes son: • Cuáles libros tienen un usuario, y cuando deben regresarlos • Quien tiene un libro determinado • Libros por tema (Ejemplo: Satélites, microondas, telefonía celular, etc.) • Historia de los libros prestados por un usuario • Historia de los usuarios que prestan un libro • Información general de un libro Desarrolle el esquema conceptual (Modelo Entidad – Relación) , y el esquema lógico (Modelo Relacional) ALQUILER Y COMPRA DE INMUEBLES Se trata de diseñar una base de datos para una red de agencias franquiciadas a TECHNOHOUSE, empresa especializada en el alquiler y compra de inmuebles - Cada agencia tiene un titular propio y un conjunto de vendedores. Tanto el titular como los vendedores sólo pueden pertenecer a una agencia. Sobre las agencias interesa almacenar su dirección, teléfonos (que pueden ser varios), fax, etc. Además, cada agencia tiene asignada una zona de actuación que es única - Las agencias disponen de inmuebles tanto para alquilar como para comprar (incluso ambas cosas), en el primer caso figurará el precio de alquiler y la fianza a depositar, mientras que en el segundo caso, además del precio de venta, se indica si el inmuebles está o no hipotecado - Por otro lado, los inmuebles pueden ser locales comerciales, o pisos. En ambos casos se identifican por un código, e interesa conocer el propietario, la dirección en m2. - Además, en el caso de pisos interesa conocer el número de habitaciones (incluyendo el salón), el número de cuartos de baño, CONDUCTOR (NCarnet, Nombre, experiencia) AUTOBUS (matricula, licencia, categoria) LUGAR ( Provincia, Distrito, actividad) CON_AUT_LUG ( NCarnet, Matricula, Provincia, Distrito, Fecha) CONDUCTOR LUGAR Provincia Distrito actividad NCarnet Nombre conduce ( 1, n ) ( 1, n ) Fecha AUTOBUS experiencia Matricula Licencia categoria ( 1, n ) N:N:N Ing. Elvis Guillermo Huarcaya Quispe Pág. 22 Gestión de informática II el tipo de gas (natural, butano), y si es interior o exterior. Para los locales comerciales se debe conocer si dispone de licencia de apertura - Un cliente puede acudir a varias agencias, en cada una se le asigna un vendedor, que es el encargado de seleccionar los inmuebles que cumplen las características deseadas, y en caso de estar interesado, el cliente debe dar una señal para reservar el inmueble ( o los inmuebles) que desea Complete los atributos que faltan del modelo Entidad / Relación y transforme al esquema Lógico empleando el Modelo Relacional GIMNASIO ”Siempre en forma” En el gimnasio se quiere implantar una base de datos para llevar el control de los socios, recursos utilizados, etc. Las especificaciones son las siguientes: - Existen varias salas, de las cuales se quiere guardar información, como los metros cuadrados que ocupa, ubicación y el tipo de sala (cardio, general, muscular). Cada sala se identifica por un número - Hay salas que tienen aparatos y salas que no. En las salas se pueden o no impartir clases - Cada aparato está asignado a una única sala, y de cada uno de ellos se quiere tener almacenado su código, descripción y estado de conservación - También se quiere mantener información relacionada con las clases que se imparten (descripción y día / hora en la que se imparten); cada clase se identifica por un código de clase. Cada clase tiene asignada una sala en la que se imparte y un monitor - De cada monitor se quiere conocer el DNI, nombre, teléfono, si tienen o no titulación y experiencia profesional, así como las clases que pueden impartir (preparación como monitor de aerobic, step, streching, etc.) - De cada socio se quiere conocer el número de socio, nombre, dirección, teléfono, profesión y datos bancarios, así como las clases a las que asiste - El gimnasio dispone también de pistas de squash, de las que se quiere conocer el número de pistas, ubicación y estado. Las pistas de squash pueden ser utilizadas por socios, y existe un servicio de reserva de pista ( en una fecha y a una hora) Complete los atributos que faltan del modelo Entidad / Relación y transforme al esquema Lógico empleando el Modelo Relacional Ing. Elvis Guillermo Huarcaya Quispe Pág. 23 Gestión de informática II CASOS DE DESARROLLO Realizar el esquema relacional en base a los siguientes modelos de Entidad Relación 1. El Gimnasio “Siempre en forma” del caso anterior impone las siguientes restricciones: - Las pistas de Squash se consideran salas - Las clases sólo se imparten en salas sin aparatos. Las salas con aparatos siguen clasificándose en sala de cardio, general, etc, Ing. Elvis Guillermo Huarcaya Quispe Pág. 24 Gestión de informática II 2. Colecciones de Mariposas 3. - Gestión de Biblioteca 4.- Gestión de CD‟S Desarrollar un modelo E-R que permita representar el siguiente enunciado El Señor Juan Pérez tiene en su discoteca privada una cantidad considerable de CD‟S y tiene problemas al acceder a una canción en particular dado que emplea mucho tiempo en la búsqueda de esta. A continuación una serie de preguntas y respuestas que entregan más información acerca del problema. - ¿Cuántas canciones tiene un CD? Cada CD puede tener una o más canciones Una canción puede aparecer en varios CD‟s Sí, además puede ser interpretada por varios artistas (Grupos o Solistas) Ing. Elvis Guillermo Huarcaya Quispe Pág. 25 Gestión de informática II - Un CD puede tener canciones de varios artistas? Si, existen CD variados. - A cuántos géneros puede pertenecer una canción? Un solo género Por ejemplo: Balada, Rock, Latinoamericanos, etc. - Cómo se identifican los CD‟s? Cada CD tiene un nombre único que lo identifica de los demás CD‟s. En el caso de un álbum con varios CD‟s, suponga que el álbum tiene un nombre y cada CD se referencia como Vol1, Vol2, VOl3, etc. Cada CD pertenece a una casa disquera. - En el caso de CD‟s variados cómo se maneja? Cada canción tiene su intérprete, duración y género Otros datos: Una canción, por ejemplo “Valio la pena ” puede existir en varios CD‟s interpretada por varios artistas. Una canción tiene un solo autor , y para efectos del ejercicio es una sola persona No hay prestamos de CD‟s Todos los CD‟s son únicamente de música Un CD puede tener la misma canción interpretada por diferentes artistas Caso extremo: Un CD donde aparezca dos o más veces la misma canción interpretada por el mismo artista, Ejemplo: una versión grabada en estudio, otra grabada en vivo y otra un desconectado Ing. Elvis Guillermo Huarcaya Quispe Pág. 26 Gestión de informática II ALGEBRA RELACIONAL 1.- CONSULTA Y MANIPULACIÓN DE DATOS Existen dos tipos de operaciones que se realizan sobre una base de datos: - Actualizar la base de datos. - Consultar la base de datos. Actualizar la Base de Datos Se entiende por actualizar una base de datos como todas aquellas operaciones que cambian, de alguna manera, la información contenida en la BD. Estas operaciones son tres: · Inserción de nuevos datos (nueva tupla). · Modificación de datos que ya existían. · Borrado de datos que ya existía. Consultar la Base de Datos Incluye todas las operaciones que realizan consultas (preguntas) a la información contenida en la base de datos (BD). Al realizar una consulta no se pueden modificar los datos. Las consultas pueden ser más o menos complejas y pueden afectar a una o varias tablas. El álgebra relacional es la técnica que se utiliza para realizar las consultas de una base de datos relacional. En la fase de Diseño de Datos, además de diseñar las estructuras (tablas) en las que se guardará la información, también se deben diseñar las consultas que se realizarán sobre esas tablas. .2.- OPERACIONES DEL ÁLGEBRA RELACIONAL. Las operaciones de álgebra relacional manipulan relaciones. Esto significa que estas operaciones usan una o dos relaciones existentes para crear una nueva relación. Esta nueva relación puede entonces usarse como entrada para una nueva operación. Esto hace más fácil la solución de las consultas, debido a que se puede experimentar con soluciones parciales hasta encontrar la proposición con la que se trabajará. El álgebra relacional define un conjunto cerrado de operaciones que: - Actúan sobre relaciones. - Producen relaciones como resultados. - Pueden combinarse para construir expresiones más complejas El álgebra relacional consta de nueve operaciones: 1. Unión 2. Intersección 3. Diferencia 4. Producto 5. Selección 6. Proyección 7. Reunión 8. División 9. Asignación Las cuatro primeras se toman de la teoría de conjunto de las matemáticas; las cuatro siguientes son operaciones propias del álgebra relacional y la última es la operación de dar un valor a un elemento. 3-OPERADORES DE CONJUNTOS 3.1. compatibilidad respeto a la unión o unión compatible. Se dice que una operación es compatible respecto a la unión o es unión-compatible si Para la definición de las operaciones de conjuntos usaremos las siguientes relaciones R y S: S= A B a 1 b 1 a 2 b 2 a 5 b 5 R= A B a 1 b 1 a 2 b 2 a 3 b 2 a 4 b 4 Ing. Elvis Guillermo Huarcaya Quispe Pág. 27 Gestión de informática II 3.2.-Unión. (R S) La unión de dos relaciones R y S, es otra relación que contiene las tuplas que están en R, o en S, o en ambas, eliminándose las tuplas duplicadas. R y S deben ser compatibles respecto a la unión. Intersección (R S). La intersección de dos relaciones R y S, es otra relación que contiene las tuplas que están en R y en S a la vez. R y S deben ser compatibles respecto a la union. DIFERENCIA (R-S). La diferencia de dos relaciones R y S, es otra relación que contiene las túplas que están en R y no está en S. R y S deben ser compatibles respecto a la unión. 3.5.- PRODUCTO (R x S). El producto de dos relaciones R y S, es otra relación que es la concatenación de cada una de las filas de la relación R con cada una de las filas de la relación S. Las relaciones han de ser compatibles respecto al producto. R S = A B a 1 b 1 a 2 b 2 a 3 b 2 a 4 b 4 a 5 b 5 R · S = A B a 1 b 1 a 2 b 2 R-S= A B a 3 b 2 a 4 b 4 A B a 1 b 1 a 2 b 2 a 3 b 2 a 4 b 4 D d 1 d 2 d 3 × A B D a 1 b 1 d 1 a 1 b 1 d 2 a 1 b 1 d 3 a 2 b 2 d 1 a 2 b 2 d 2 a 2 b 2 d 3 a 3 b 3 d 1 a 3 b 3 d 2 a 3 b 3 d 3 a 4 b 4 d 1 a 4 b 4 d 2 a 4 b 4 d 3 = R S R X S Ing. Elvis Guillermo Huarcaya Quispe Pág. 28 Gestión de informática II .4.-OPERADORES RELACIONALES. 4.1.-Selección ( Predicado( R)) Es un operador unario. Define una relación con los mimos atributos que R y que contiene solo aquellas filas de R que satisfacen la condición especificada (predicado). El predicado está formado por Nombres de atributos. .4.- Proyección ( x(R)). Es un operador unario. Define una relación que contiene un subconjunto vertical de R con los valores de los atributos especificados en x, eliminando las tuplas duplicadas en el resultado. .4.- Define una relación que tiene como columnas los campos de R que no está en S y como tuplas, las de R (sólo los campos correspondientes) que están combinadas con todas las tuplas de S. Deben cumplirse las siguientes condiciones: - grado(R) > grado (S) - - R debe tener, al menos, una tupla. - El cociente se utiliza cuando se quiere relacionar un elemento (tupla) de una lista con todos los elementos de otra lista. Ejemplo: Lo primero que hacemos es extraer en una tabla todos los códigos de todos los productos, a esta tabla la denominamos A. R = Codigo Nombre Ciudad Status S1 Juan Lopez Granada 20 S2 Jose Sanchez Jaen 15 S3 Antonio Perez Cadiz 20 S4 Jose Lopez Sevilla 25 S6 Carmen Lopez Cordoba 30 S7 Julia Sanchez Granada 25 S8 Juana Perez Jaen 10 S9 Luis Gomez Almeria 35 S10 Maria Galvez Sevilla 30 Codigo Nombre Ciudad Status S4 Jose Lopez Sevilla 25 S6 Carmen Lopez Cordoba 30 S7 Julia Sanchez Granada 25 S9 Luis Gomez Almeria 35 S10 Maria Galvez Sevilla 30 o status>=25 ® (r)= Ciudad Status Granada 20 Jaen 15 Cadiz 20 Sevilla 25 Cordoba 30 Granada 25 Jaen 10 Almeria 35 Sevilla 30 t ciudad,status (r)= Ing. Elvis Guillermo Huarcaya Quispe Pág. 29 Gestión de informática II Tabla A Código Producto 1035 2241 2249 5818 En una segunda tabla extraemos, de la tabla de ventas, el código del producto y el comercial que lo ha vendido, lo hacemos con una proyección y evitamos traer valores duplicados. El resultado podría ser el siguiente: Tabla B Código Comercial Código Producto 10 2241 23 2518 23 1035 39 2518 37 2518 10 2249 23 2249 23 2241 Si dividimos la tabla B entre la tabla A obtendremos como resultado una tercera tabla que: 1. Los campos que contiene son aquellos de la tabla B que no existen en la tabla A. En este caso el campo Código Comercial es el único de la tabla B que no existen en la tabla A. 2. Un registro se encuentra en la tabla resultado si y sólo si está asociado en tabla B con cada fila de la tabla A Tabla Resultado Código Comercial 23 El comercial 23 es el único de la tabla B que tiene asociados todos los posibles códigos de producto de la tabla A. Unión natural (natural join: R * S o R |x| S): El resultado es una relación con los atributos de ambas relaciones y se obtiene combinando las tuplas de ambas relaciones que tengan el mismo valor en los atributos comunes. Normalmente la operación de join se realiza entre los atributos comunes de dos tablas que corresponden a la clave primaria de una tabla y la clave foránea correspondiente de la otra tabla. Método: - Se realiza el producto cartesiano R x S. - Se seleccionan aquellas filas del producto cartesiano para las que los atributos comunes tengan el mismo valor. - Se elimina del resultado una ocurrencia (columna) de cada uno de losatributos comunes Equivalencia con operadores básicos: R |x|P S = P(RxS). En este caso Casos Resuelva el ejercicio propuesto EJERCICIOS Consideremos la instancia siguiente de una BD: Cuál es el resultado de cada una de las siguientes consultas? 1. R S 2. T R Ing. Elvis Guillermo Huarcaya Quispe Pág. 30 Gestión de informática II 3. R T 4. R U 5. R R 6. U – T 7. R – S 8. S – R 9. S – T 10. R – T 11. T – R 12. R – R 13. [A,B (R) 14. [A (R) 15. [C (R) 16. [A (S) 17. [C (U) 18. oA>=2 (R) 19. oA<1 (R) Ing. Elvis Guillermo Huarcaya Quispe Pág. 31 Gestión de informática II MODELO ENTIDAD-RELACIÓN El modelo Entidad Relación fue propuesto por Meter Chen a mediados de los años setenta para la representación conceptual de los problemas y como un medio para representar la visión de un sistema global. Las características actuales de este modelo permiten la representación de cualquier tipo de sistema y a cualquier nivel de abstracción. Este modelo maneja los siguientes conceptos: PRINCIPALES ELEMENTOS DEL MODELO 1. ENTIDAD Una entidad es una "cosa" u "objeto" del mundo real, con existencia independiente y distinguible de los demás objetos. Cada entidad tiene un conjunto de propiedades y valores que la identifican de forma unívoca. Esta puede ser tanto tangible (existencia física) Ejemplo: Un carro, como intangible (existencia conceptual), ejemplo: Un curso universitario. Fig. Representación de entidades fuertes Fig. Representación de una entidad débil TIPOS DE ENTIDADES: a) Entidades Fuertes: Son independientes no necesitan la existencia de otras entidades. Ejemplo: la entidad PERSONA, EMPLEADO b) Entidades Débiles: Su existencia depende de otra entidad. Ejemplo: la entidad ocupacion depende la existencia de una entidad persona, ya que sin esta no tendría sentido. 2. INTERRELACIÓN Se entiende por interrelación una asociación, vinculación o correspondencia entre entidades Fig. Representación la relación imparte entre PROFESOR y CURSO Fig. Dos tipos de entidad entre los que existen dos tipos de interrelación 3. ATRIBUTO Las propiedades que califican y le dan vida a la entidad se denominan atributos. Ejemplo: la entidad persona se puede describir por las siguientes propiedades: cédula, nombre, dirección, sexo, peso, altura, color, tipo de sangre, salario CURSO PROFESOR Imparte Imparte CURSO PROFESOR Recibee CURSO PROFESOR EDICIÓN Ing. Elvis Guillermo Huarcaya Quispe Pág. 32 Gestión de informática II TIPOS DE ATRIBUTOS Simples: No divisible, es decir es un atributo atómico. Ejemplo: El atributo DNI, su propiedad no tiene sentido dividirla, no tendrá significado para la entidad, ya que la concepción de este es un número indivisible. A continuación se muestra dos formas de representar los atributos simples: Compuesto: Está conformado por un conjunto de partes que en el momento de dividirlas pueden formar otros atributos sin perder el sentido básico de la propiedad que está calificando la entidad. Ejemplo: los atributos nombre, dirección pueden estar conformados en su naturaleza funcional por varias partes. Si tomáramos el atributo nombre con un valor de: JUAN PEREZ CORREA, sin perder la propiedad del mismo, se podrán crear otros dos atributos simples tales como: primer_apellido, segundo_apellido. Así se tendrá: (nombre, JUAN), (primer_apellido, PEREZ), (segundo_apellido, CORREA). CURSO PROFESOR Imparte Cod_prof Nombre DNI Dirección Fecha_nac Cod_curso Nombre_curso Núm_horas Fecha_inicio Fecha_terminación dni dni nPila pApellido sApellido PERSONA nombre nombre direccion PERSONA telefono nPila pApellido sApellido direccion telefono Ing. Elvis Guillermo Huarcaya Quispe Pág. 33 Gestión de informática II Monovaluados (univalorados): Son atributos que en el transcurso del tiempo sólo toman un valor para una entidad en particular. Ejemplo: El atributo dni, solo toma un valor para una entidad persona en particular. Multivaluados (multivalorados): Son atributos que en el transcurso del tiempo pueden tener un conjunto de valores para una entidad en particular. Ejemplo: El atributo Grado_Academico para el conjunto de entidades persona puede tomar diferentes valores desde 0 o primaria o medio, entre otros. Almacenado Son atributos cuyo valor no depende de los valores de otros atributos o entidades Derivado: Son atributos cuyo valor depende de los valores de otros atributos o entidades. Ejemplo: el atributo salario puede derivarse a partir del cálculo de los siguientes valores: PARAMETROS (salario_base, 5000), NOVEDADES (nro_horas_trabajadas, 240), el valor que tendría el atributo en un instante en el tiempo será: PERSONA (salario,1200000). 4. REPRESENTACIÓN DE LOS ATRIBUTOS EN LOS TIPOS DE ENTIDAD 1era. Representación: Grado_aca d Grado_acad dni dni edad Fech_nac Fech_nac Fech_nac Año Num_Matricula ESTUDIANTE Cod_Estudiante Nombre ESTUDIANTE Nombre Dirección Año Num_Matricula Cod_Estudiante Dirección atributo simple Identificador principal o atributo clave Ing. Elvis Guillermo Huarcaya Quispe Pág. 34 Gestión de informática II 2da. Representación Cod_estudiante ESTUDIANTE Nombre Direccion Año Num_Matricula 5. DOMINIO Es el conjunto de todos los valores posibles que puede tomar un atributo. Cada uno de los atributos de una entidad posee un dominio, el que corresponde al tipo del atributo. Por ejemplo, "matrícula" tiene como dominio al conjunto de los enteros positivos y "nombre" tiene como dominio al conjunto de caracteres 6. RELACIÓN Una relación se puede definir como una asociación entre entidades. Por ejemplo: - La entidad "libro" puede estar relacionada con la entidad "persona" por medio de la relación "está pedido". - La entidad "alumno" puede estar relacionada con la entidad "curso" por la relación "está inscrito". Una relación también puede tener atributos. Por ejemplo: - La relación "está inscrito" puede tener los atributos "semestre" y "nota de aprobación". Usando esta notación, podemos ahora hacer el diagrama E-R del ejemplo anterior de los alumnos y los cursos matriculados. 6.1 GRADO El grado de una relación es el número de tipos de entidad que participan Ejemplo: Grado 2 (binario) y grado 3 (ternario) 6.2 CARDINALIDAD - Uno a uno, y se representa 1:1, si a cada ocurrencia de A le corresponde como máximo una ocurrencia de B, y viceversa Atributo simple clave Ing. Elvis Guillermo Huarcaya Quispe Pág. 35 Gestión de informática II - Uno a muchos, y se representa 1:M, si a cada ocurrencia de A le pueden corresponder varias de B, pero a cada ocurrencia de B sólo le corresponde una de A como máximo. Si la asociación se entendiera de B con A, la relación sería M:1. - Muchos a muchos y se representa M:M, si a cada ocurrencia de A le pueden corresponder varias de B, y viceversa. 7. TIPOS DE INTERRELACIÓN INTERRELACIÓN REFLEXIVA (RECURSIVA) Son relaciones unarias y, por tanto, consideran que en el tipo de interrelación se ve involucrado un único tipo de entidad INTERRELACIÓN EXCLUSIVA Existe una interrelación exclusiva con respecto a un tipo de entidad que participa en ambas interrelaciones cuando cada ejemplar de dicho tipo de entidad sólo puede pertenecer a uno de los tipos de la interrelación, pero en el momento en que pertenezca a uno ya no podrá pertenecer a otro. CASOS COMPAÑÍA: Suponga que estamos modelando los datos de una COMPAÑIA. La base de datos COMPAÑIA debe mantener información sobre los empleados de la compañía, los departamentos y los proyectos. La descripción del mini-mundo (la parte de la compañía a ser representada en la base de datos) es la siguiente: - La compañía está organizada en departamentos. Cada departamento tiene un nombre único. un número único, y un empleado particular quien lo administra. Se quiere saber la fecha en que el empleado administrador empezó a hacerse cargo del departamento. Un departamento puede tener varios locales. - Cada departamento controla un cierto número de proyectos. Cada proyecto tiene un nombre y número únicos, y un local. - Para cada empleado se desea tener su nombre, dni, dirección, salario, sexo y año de nacimiento. Un empleado es asignado a un departamento, pero puede trabajar en varios proyectos, los que no son necesariamente controlados por el mismo departamento. Se quiere saber el número de horas semanales que un empleado trabaja en cada proyecto. Se quiere además saber cuál es el supervisor directo de cada empleado. - Se desea conocer las personas dependientes de cada empleado para propósitos de seguros. De cada dependiente se desea conocer el nombre, sexo, fecha de nacimiento y relación con el empleado. La siguiente figura muestra el esquema de esta base de datos, a través de una notación gráfica llamada diagrama ER. LOS RESIDUOS TÓXICOS Se desea abordar la problemática ambiental de los residuos tóxicos y peligrosos cuya incorrecta gestión produce daños de gran importancia en el medio ambiente y en la salud del ser humano. La información a contemplar es la que corresponde desde que es producido el residuo por un centro o una empresa productora hasta que éste se encuentre en un lugar seguro, en donde recibe un tratamiento especial que puede ser la incineración, almacenamiento en depósitos de seguridad, etc. En el sistema de información se desea considerar la información de los productores de residuos, los residuos, las empresas que transportan los residuos hasta los lugares seguros y el traslado de los residuos teniendo en cuenta el tipo de transporte, el envase, etc. Es conveniente tener los siguientes supuestos semánticos: SUPUESTO1: Una empresa productora produce un número amplio de residuos constituido por un número variable de constituyentes químicos Imparte CURSO PROFESOR Recibee TEMA consta M N N M Ing. Elvis Guillermo Huarcaya Quispe Pág. 36 Gestión de informática II SUPUESTO2: Más de una empresa productora puede producir residuos con igual número de constituyentes químicos y con las mismas o distintas cantidades SUPUESTO3: Las empresas productoras asignan un código único a los residuos que producen, lo que les permite diferenciar distintas producciones de los mimos productos. Además más de una empresa puede asignar el mismo código a los residuos que produce SUPUESTO 4: Los residuos pueden ser trasladados en su totalidad (cantidad total del mismo) o en partes, o no ser trasladado nunca. SUPUESTO 5: En cada traslado de residuos la cantidad que se traslada de los mismos es enviada a un único destino SUPUESTO 6: En una misma fecha las empresas productoras pueden ordenar más de un traslado de un mismo o distinto residuo (cantidades parciales del mismo) a un mismo o distinto destino SUPUESTO 7: En cada traslado puede intervenir más de una empresa transportista usando el mismo o distinto transporte , por lo que resulta interesante conocer tanto tanto el medio de transporte utilizado como los kilómetros realizados, así como el coste de trabajo SUPUESTO8: El residuo se traslada en un tipo de envase determinado por la empresa productora y que no varía a lo largo de su traslado SUPÙESTO 9: Es interesante conocer la fecha de llegada a destino y el tratamiento a que se someten los residuos una vez alcanzado el mismo SUPUESTO10: por seguridad se considera que en un traslado sólo puede trasladarse un residuo de una empresa productora Nombre EMPLEADO Sexo Direccion NombrePila Apellido1 Apellido2 Salario NombrePila FechN DNI TRABAJA_PARA N DEPARTAMENTO Nombre 1 Número Localizaci ones ADMINISTRA 1 1 FechInicio PROYECTO CONTROLA 1 N TRABAJA_PARA Horas M N SUPERVISA 1 N DEPENDIENTE TIENE 1 N Nombre Número Localización Nombre Sexo FechaN Relación En este diagrama los rectángulos representan conjuntos de entidades, los elipses representan atributos y los rombos representan conjuntos de relaciones Ing. Elvis Guillermo Huarcaya Quispe Pág. 37 Gestión de informática II SEGUNDA UNIDAD DISEÑO DE LA BASE DE DATOS Introducción A finales de la década de 1960, cuando las bases de datos entraron por primera vez en el mercado de software, los diseñadores de software actuaban como artesanos, con herramientas muy primitivas: diagramas de bloques y estructuras de registros y el diseño de Base de datos se confundía frecuentemente con la implantación de la base de datos. Dicha situación ahora ha cambiado: los métodos y los modelos del diseño de datos han evolucionado paralelamente con el progreso de la tecnología en los sistemas de base de datos. Asimismo El diseño de la Base de datos es una actividad esencial en el desarrollo de Sistemas de Información 1. El diseño de la Base de Datos en el ciclo de vida de los sistemas de información - Sistema de Información: Es un grupo de personas, procedimientos y equipos diseñados, construidos, operados y mantenidos para recoger, registrar, procesar, almacenar, recuperar y visualizar información - Sistemas de gestión de Base de Datos: Son paquetes de software para la gestión de datos; en particular para almacenar, manipular y recuperar datos en un computador Las Bases de datos son sólo uno de los componentes de los sistemas de información, que también incluyen programas de aplicación, interfaces para usuarios y otro tipo de paquetes de software. Sin embargo, las bases de datos son esenciales para la supervivencia de cualquier organización, porque los datos estructurados constituyen un recurso esencial para todas las organizaciones El típico ciclo de vida de un sistema de información se muestra en la Fig 2.1, a continuación se detalla las fases: 1. Estudio de Factibilidad: Trata de determinar la rentabilidad de las distintas alternativas de diseño de sistemas de información y las prioridades de los diversos componentes del sistema. COMPETENCIA Implementa en un gestor de bases de datos basados en arquitectura Cliente/Servidor y Administra base de datos corporativa Ing. Elvis Guillermo Huarcaya Quispe Pág. 38 Gestión de informática II RECOLECCIÓN Y ANALISIS DE REQUERIMIENTOS DISEÑO CONCEPTUAL DISEÑO LÓGICO (TRANSFORMACIÓN DEL MODELO DE DATOS) Mundo real 2. Recolección y análisis de requerimientos: Se ocupa de la misión del sistema de información, es decir las áreas de aplicación del sistema dentro de una empresa y los problemas a resolver. Los usuarios describen sus necesidades a los diseñadores y esas descripciones se le conoce como especificación de requerimientos. 3. Diseño: Se ocupa de la especificación de la estructura del sistema de información. Se distingue el diseño de la base de datos (estructura de la BD) y el diseño de las aplicaciones (programas de aplicación) 4. Creación de Prototipos: El prototipo permite a los usuarios verificar si el sistema de información satisface sus necesidades 5. Implantación: Se refiere la programación de la versión final y operativa del sistema de información 6. Validación y prueba: Procedimiento mediante el cual se garantiza que cada fase del desarrollo es de calidad aceptable 7. Operación: Se empieza con la carga inicial de los datos y termina cuando el sistema se vuelve obsoleto y tiene que ser reemplazado, además se necesita mantenimiento para mejorarlo. 2. Fases del diseño de la base de datos El diseño de la Base de datos se descompone en diseño conceptual, diseño lógico y diseño físico como lo muestra la siguiente Fig. 2.2 Estudio de factibilidad Recolección y análisis de requerimientos Diseño Creación de prototipos Implantación Validación y prueba Operación Fig. 2.1 Ciclo de vida de un Sistema de Información Requerimientos de la base de datos Esquema conceptual en un modelo de datos de alto nivel (por ejemplo: modelo E/R) Independiente de S.G.B.D. Esquema lógico (en el modelo de datos de S.G.B.D.) Específico para S.G.B.D. Ing. Elvis Guillermo Huarcaya Quispe Pág. 39 Gestión de informática II DISEÑO FÍSICO a) Recolección y análisis de requerimientos Los diseñadores entrevistan a los futuros usuarios de la base de datos para recoger y documentar sus necesidades de información. b) Diseño conceptual Parte de la especificación de todos los requerimientos, el siguiente paso es crear un esquema conceptual para la base de datos mediante un modelo de datos conceptual de alto nivel. El esquema conceptual contiene una descripción detallada de los requerimientos de información de los usuarios (información de la base de datos), y contiene descripciones de los tipos de datos, relaciones entre ellos y restricciones. Para el curso utilizaremos diseño de esquemas conceptuales el modelo E-R (entidad-relación), que describe los datos cono entidades, vínculos (relaciones) y atributos. c) Diseño lógico de la base de datos (transformación de modelo de datos) El siguiente paso en el proceso de diseño consiste en implementar de hecho la base de datos con un S.G.B.D. comercial, transformando el modelo conceptual al modelo de datos empleados por el S.G.B.D. (jerárquico, red o relacional). En el desarrollo del curso haremos la implementación con un S.G.B.D. relacional, por ser el modelo más utilizado por las empresas en la actualidad. d) Diseño físico de la base de datos Parte del esquema lógico y da como resultado el esquema físico. El esquema físico especifica las estructuras de almacenamiento internas y los métodos usados para tener un acceso efectivo a los datos. Por esta razón el diseño físico se adapta a un sistema DBMS específico. GESTORES DE BASES DE DATOS 1. DEFINICIÓN Un Sistema Gestión de Bases de Datos –SGBD- (Data Base Management System DBMS) consiste en una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos. El Objetivo primordial de un SGBD es proporcionar un entorno que sea a la vez conveniente y eficiente para ser utilizado al extraer y almacenar información de la base de datos. (KORTH, 1995) “El sistema de gestión de la base de datos (SGBD) es una aplicación que permite a los usuarios definir, crear y mantener la base de datos, y proporciona acceso controlado a la misma.” (MÁRQUES, 2001) Esquema interno (para el mismo S.G.B.D.) Fig. 2.2 Enfoque orientado a los datos para el diseño de la BD Ing. Elvis Guillermo Huarcaya Quispe Pág. 40 Gestión de informática II En el esquema se observa que los usuarios interactúan con una aplicación (por ej. un sistema integrado de gestión o un paquete contable) que utiliza un SGBD para procesar las consultas, el cual accede a los metadatos y a la base de datos correspondiente - Metadatos: Son datos acerca de los datos presentes en la base de datos. Dato Tipo Longitud Num Numérico 4 Nombre Alfabético 20 2. FUNCIONES BÁSICAS DE UN SGBD Un SGBD debe incluir por lo menos las siguientes funciones (DATE, 1993): 2.1 Definición de los Datos. El SGBD debe ser capaz de aceptar las definiciones de datos en versión fuente y convertirlas en la versión objeto. El SGBD debe incluir componentes procesadores para cada uno de los lenguajes de definición de datos (LDD). (DATE, 1993). 2.2 Manipulación de los Datos. El SGBD debe atender las solicitudes de los usuarios para extraer, actualizar, adicionar o suprimir datos. El SGBD debe incluir un componente procesador del Lenguaje de manipulación de datos (LMD). (DATE, 1993). 2.3 Seguridad e Integridad de los Datos. El SGBD debe supervisar las solicitudes de los usuarios y rechazar los intentos de violar las medidas de seguridad e integridad definidas por el Administrador de la Base de Datos DBA. (DATE, 1993). 2.4 Recuperación y concurrencia de los datos. El principal objetivo de la implantación de una base de datos es poner a disposición de un gran número de usuarios en conjunto integrado de datos, estos datos El tipo de datos puede ser Numérico, alfabético, fecha, lógico (Sï /NO). La longitud indica la cantidad máxima de caracteres que puede asumir el dato. Ing. Elvis Guillermo Huarcaya Quispe Pág. 41 Gestión de informática II podrán ser manipulados por los diferentes usuarios y es ahora cuando se debe garantizar la coherencia de los datos después de las diversas manipulaciones. (DATE, 1993). 3. EL MODELO DE ARQUITECTURA DE BASES DE DATOS. Las bases de datos respetan la arquitectura de tres niveles definida, para cualquier tipo de base de datos, por el grupo ANSI/SPARC. En esta arquitectura la base de datos se divide en los niveles externo, conceptual e interno (KORTH y SILBERSCHATZ, 1994:5; MIGUEL y PIATTINI, 1993: 83-107; MOTA, CELMA y CASAMAYOR, 1994: 11-12): Fig. Niveles de la arquitectura de bases de datos. a) Nivel interno: Es el nivel más bajo de abstracción, y define cómo se almacenan los datos en el soporte físico, así como los métodos de acceso. Se describe la estructura física de la base de datos mediante un esquema interno, se especifica mediante un modelo físico y describe todos los detalles para el almacenamiento de la base de datos, así como los métodos de acceso. - Estructura física de almacenamiento - Todos los detalles de cómo el DBMS utiliza: el disco duro la memoria, etc. - Tema principal: El sistema debe ser rápido en responder y ser eficiente en el uso de espacio - Administrador de la base de datos b) Nivel conceptual: Es el nivel medio de abstracción. Se trata de la representación de los datos realizada por la organización, que recoge las vistas parciales de los requerimientos de los diferentes usuarios y las aplicaciones posibles. Se configura como visión organizativa total, e incluye la definición de datos y las relaciones entre ellos. En ocasiones puede encontrarse el nivel conceptual divido en dos niveles, conceptual y lógico. El primero de ellos corresponde a la visión del sistema global desde un punto de vista organizativo independiente, no informático. El segundo correspondería a la visión de la base de datos expresada en términos del sistema que se va a implantar con medios informáticos. - Estructura lógica de almacenamiento - Diseño conceptual de la base de datos: Tablas, columnas, etc. - Tema principal: El diseño debe reflejar conceptualmente el problema a modelar - Administradores de datos c) Nivel externo: Es el nivel de mayor abstracción. A este nivel corresponden las diferentes vistas parciales que tienen de la base de datos los diferentes usuarios. En cierto modo, es la parte del modelo conceptual a la que tienen acceso. - Vistas sobre las tablas - Requiere sólo acceso parcial a los datos - Público objetivo: Desarrolladores de aplicaciones, Usuarios finales - Tema principal: Cada vista debe reflejar adecuadamente la parte de los datos que interesa a cada uno El modelo de arquitectura propuesto permite establecer el principio de independencia de los datos. Esta independencia puede ser lógica y física. Por independencia lógica se entiende que los cambios en el esquema lógico no deben afectar a los esquemas externos que no utilicen los datos modificados. Por independencia física se entiende que el esquema lógico no se vea afectado por cambios realizados en el esquema interno, correspondientes a modos de acceso, etc. 4. LENGUAJES DEL SGBD El SGBD incorpora como herramienta fundamental dos lenguajes Ing. Elvis Guillermo Huarcaya Quispe Pág. 42 Gestión de informática II - El lenguaje de definición de datos (DDL, Data Definition Language) provee de los medios necesarios para definir los datos con precisión, especificando las distintas estructuras. - Acorde con el modelo de arquitectura de tres niveles, habrá un lenguaje de definición de la estructura lógica global, otro para la definición de la estructura interna, y un tercero para la definición de las estructuras externas. - El lenguaje de manipulación de datos (DML, Data Manipulation/ Management Language), que es el encargado de facilitar a los usuarios el acceso y manipulación de los datos. Pueden diferenciarse en procedimentales (aquellos que requieren qué datos se necesitan y cómo obtenerlos) y no procedimentales (que datos se necesitan, sin especificar como obtenerlos), y se encargan de la recuperación de los datos almacenados, de la inserción y supresión de datos en la base de datos, y de la modificación de los existentes. 5. COMPONENTES DE UN SISTEMA DE GESTIÓN DE BASE DE DATOS. Un Sistema de Gestión de Base de Datos se divide en módulos que tratan cada una de las responsabilidades del sistema general. Los componentes funcionales de un SGBD (KORTH, 1995) incluyen: a) Procesador de Consultas. Traduce sentencias en un lenguaje de consultas a instrucciones de bajo nivel que entiende el gestor de la base de datos. b) Gestor de la Base de Datos. Proporciona la interfase entre los datos de bajo nivel almacenados en la base de datos y los programas de aplicación y las consultas que se hacen en el sistema. c) Gestor de Archivos. Gestiona la asignación de espacio en la memoria del disco y de las estructuras de datos usadas para representar la información almacenada en disco. d) Pre compilador del Lenguaje de Manipulación de Datos DML. Convierte las sentencias en DML incorporadas en un programa de aplicación en llamadas normales a procedimientos en el lenguaje principal. e) Compilador del Lenguaje de Definición de Datos DDL. Convierte sentencias en DDL en un conjunto de tablas metadatos o “datos sobre datos”. f) Gestor del Diccionario de Datos. Almacena metadatos sobre la estructura de la base de datos. 6. COMPONENTES DEL GESTOR DE LA BASE DE DATOS Los principales componentes del gestor de la base de datos son los siguientes (MARQUÉS 2001): a) Control de autorización. Este módulo comprueba que el usuario tiene los permisos necesarios para llevar a cabo la operación que solicita. b) Procesador de comandos. Una vez que el sistema ha comprobado los permisos del usuario, se pasa el control al procesador de comandos. Ing. Elvis Guillermo Huarcaya Quispe Pág. 43 Gestión de informática II c) Control de la integridad. Cuando una operación cambia los datos de la base de datos, este módulo debe comprobar que la operación a realizar satisface todas las restricciones de integridad necesarias. d) Optimizador de consultas. Este módulo determina la estrategia óptima para la ejecución de las consultas. e) Gestor de transacciones. Este módulo realiza el procesamiento de las transacciones. f) Planificador (scheduler). Este módulo es el responsable de asegurar que las operaciones que se realizan concurrentemente sobre la base de datos tienen lugar sin conflictos. g) Gestor de recuperación. Este módulo garantiza que la base de datos permanece en un estado consistente en caso de que se produzca algún fallo. h) Gestor de buffers. Este módulo es el responsable de transferir los datos entre memoria principal y los dispositivos de almacenamiento secundario. A este módulo también se le denomina gestor de datos. CLASIFICACIÓN DE LOS SISTEMAS DE GESTIÓN DE BASE DE DATOS Los sistemas de Gestión de Base de Datos se clasifican según: a) Modelo lógico en el que se basan: - Modelo Jerárquico. - Modelo de Red. - Modelo Relacional. - Modelo Orientado a Objetos. b) Número de usuarios - Monousuario. - Multiusuario. c) Número de sitios - Centralizados. - Distribuidos: Homogéneos, Heterogéneos. d) Ámbito de aplicación - Propósito General. - Propósito Específico ¿Qué diferencias hay entre los diferentes gestores de bases de datos ? Oracle: - Integridad referencial, rapidez en las consultas dada por el número de accesos concurrentes que soporta a una gran cantidad de información, se puede realizar una copia de seguridad sin necesidad de paralizar la web y es multiplataforma - Oracle para web puede salir por unos 5.000 euros - Para usarlo tendremos que disponer de un servidor exclusivo para nosotros con las implicaciones que supone a nivel técnico y objetivos a largo plazo. La web de una gran empresa, que se puede permitir disponer de técnicos para controlar la seguridad del servidor, que necesita soportar múltiples conexiones a su base de datos, cuyos visitantes interactúan con una importante cantidad de información, podría, desde luego, elegir Oracle como su gestor de base de datos. SQL - Con SQL tendremos que alojar nuestra web en un servidor con entorno Windows, - Con SQL tendremos que adquirir la versión que utilicemos MySql - MySql puede trabajar tanto con Windows como con Linux - MySql es un software gratuito - Consume muy pocos recursos de CPU y memoria. Muy buen rendimiento. - MySql se encuentra en el otro extremo de la oferta. Es la opción que nos plantean todos los servidores de hosting gratuito que soportan bases de datos y es casi impensable encontrar una empresa de hosting de pago que no lo soporte - Tamaño del registro sin límite - Buena integración con PHP - Utilidades de administración (phpMyAdmin) - Buen control de acceso usuarios-tablas-permisos MODELOS DE BASE DE DATOS 3.1 Introducción Ing. Elvis Guillermo Huarcaya Quispe Pág. 44 Gestión de informática II Los modelos de datos son vehículos para describir la realidad, asimismo los programadores usan modelos de datos para construir esquemas, los cuales son representaciones de la realidad. Las abstracciones ayudan al programador a entender, clasificar y modelar la realidad. El modelo de Entidad – relación es una herramienta fundamental que se usa en el diseño de la Base de Datos. 3.2 Abstracciones en el diseño conceptual de bases de datos Abstracción: Es un proceso mental que se aplica al seleccionar algunas características y propiedades de un conjunto de objetos y excluir otras no pertinentes, es decir se fija la atención en las propiedades consideradas esenciales de un conjunto de cosas y desechar sus diferencias. Ejm: el concepto carro es un proceso de abstracción, lo que hace excluir todos los detalles de la estructura tales como: llantas, parabrisas, frenos, etc. El diseño conceptual de bases de datos se usan tres tipos de abstracciones: clasificación, agregación y generalización: a) Abstracción de clasificación La abstracción de clasificaciones usa para definir un concepto como una clase de objetos de la realidad caracterizados por propiedades comunes Ejm: el concepto de bicicleta es la clase cuyos miembros son todas las bicicletas (la bicicleta roja, la bicicleta de Carla, etc.) Ejm: Semana Lunes Martes ……. Viernes b) Abstracción de agregación Define una nueva clase a partir de un conjunto de clases que representan sus partes o componentes Ejm: a partir de las clases RUEDA, PEDAL, MANILLAR, etc. se forma la clase BICICLETA Ejm: MESA SILLA MUEBLE MARRÓN Mesa Mesa Silla Silla marrón blanca marrón verde c) Abstracción de generalización La clase genérica es como la raíz y las sub- clases como hojas. La abstracción de generalización, a pesar de ser muy común no se usa en muchos modelos de datos, pero muy útil por la cualidad de herencia (todas as abstracciones para la clase genérica son heredadas por las clases sub – conjuntos Ejm: PERSONA HOMBRE MUJER Ejm: PERSONA NOMBRE SEXO HOMBRE SITUACIÓN MILITAR 3.3 Modelos de datos Un modelo de datos es una serie de conceptos que puede utilizarse para describir un conjunto de datos y las operaciones para manipularlos. Los modelos de datos se dividen en tres grupos: - Modelos lógicos basados en objetos. - Modelos lógicos basados en registros. - Modelos físicos de datos. 3.3.1 Modelos lógicos basados en objetos Ing. Elvis Guillermo Huarcaya Quispe Pág. 45 Gestión de informática II Se usan para describir datos en los niveles conceptual y de visión, es decir, con este modelo representamos los datos de tal forma como nosotros los captamos en el mundo real, tienen una capacidad de estructuración bastante flexible y permiten especificar restricciones de datos explícitamente. Existen diferentes modelos de este tipo, pero el más utilizado por su sencillez y eficiencia es el modelo Entidad-Relación. Modelo Entidad-Relación ( E – R ) Este modelo representa a la realidad a través de entidades, que son objetos que existen y que se distinguen de otros por sus características, por ejemplo: un alumno se distingue de otro por sus características particulares como lo es el nombre, o el numero de control asignado al entrar a una institución educativa, así mismo, un empleado, una materia, etc. El modelo Entidad – Relación, asimismo utiliza conceptos como atributos y relaciones. - Atributo: Representa alguna propiedad o característica de una entidad Ejm: el nombre, dirección teléfono, grado, grupo, etc. son atributos de la entidad alumno; Clave, número de seguro social, departamento, etc., son atributos de la entidad empleado - Relación: Describe una interacción entre dos o más entidades a través de una relación Ejm: la relación de un alumno y sus notas, trabajo entre un empleado y su oficina. Caso: Consideremos una empresa que requiere controlar a los vendedores y las ventas que ellos realizan; de este problema determinamos que los objetos o entidades principales a estudiar son el empleado (vendedor) y el artículo (que es el producto en venta), y las características que los identifican son: Empleado: Artículo: Nombre Descripción Cargo Costo DNI Stock Dirección La relación entre ambas entidades la podemos establecer como Venta. Para representar gráficamente en un modelo E-R, se emplean símbolos: Concepto Representación diagramática Entidad Interrelación Atributo Así nuestro ejemplo anterior quedaría representado de la siguiente forma: Ing. Elvis Guillermo Huarcaya Quispe Pág. 46 Gestión de informática II Cardinalidades de relaciones - Relación Uno a Uno Es la relación de pertenencia de uno a uno Ejm: la relación entre un automóvil y tarjeta de circulación - Relación muchos a muchos. Es la relación que se da de muchos a muchos Ejm: la relación de factura producto 3.3.2 Modelos lógicos basados en registros Se utilizan para describir datos en los niveles conceptual y físico. Estos modelos utilizan registros e instancias para representar la realidad, así como las relaciones que existen entre estos registros. A diferencia de los modelos de datos basados en objetos, se usan para especificar la estructura lógica global de la base de datos y para proporcionar una descripción a nivel más alto de la implementación. Los tres modelos de datos más ampliamente aceptados son: - Modelo Relacional - Modelo de Red - Modelo Jerárquico Modelo relacional En este modelo se representan los datos y las relaciones entre estos, a través de una colección de tablas, en las cuales los reglones (tuplas o filas) equivalen a cada uno de los registros que contendrá la base de datos y las columnas corresponden a las características (atributos) de cada registro localizado en la tupla; Considerando nuestro el caso anterior del empleado y el artículo: Tabla: EMPLEADO Nombre Cargo DNI Dirección SALAS ARROYO María Vendedor 40950255 Av. Huancavelica No. 875 – Hyo PÉREZ ALVAREZ Carlos Vendedor 40900055 Jr. Ayacucho No. 142 – Hyo BELTRAN CHAVEZ Karen Vendedor 20802055 Av. Huancavelica No. 275 - Hyo Tabla: ARTICULO Codigo Descripcion Costo A001 LAPICERO 3.00 A002 FOLDER 7.00 A003 HOJAS 15.00 Una vez descrito las tablas estableceremos las relaciones, para lo cual es necesario definir una llave primaria Empleado Vende Articulo Descripción Costo Codigo Nombre Cargo Dirección DNI Atributos Ing. Elvis Guillermo Huarcaya Quispe Pág. 47 Gestión de informática II Llave primaria: Es un atributo el cual definimos como atributo principal, es una forma única de identificar a una entidad. Ahora si, las formas de representar las relaciones en este modelo son: Haciendo una tabla que contenga cada una de las llaves primarias de las entidades involucradas en la relación Vende. Tomando en cuenta que la llave primaria del empleado es su DNI, y la llave primaria del articulo es Codigo DNI Codigo 40950255 A001 40950255 A002 40900055 A003 40900055 A001 20802055 A002 Modelo red Este modelo representa los datos mediante colecciones de registros y sus relaciones se representan por medio de relaciones, los cuales pueden verse como registros. Los registros se organizan en un conjunto de gráficas arbitrarias. Ejemplo: Juan Pérez Vendedor 5,000 PECJ500922XYZ C001 PECJ500922XYZ C00 1 Nora Pérez Vendedor 5,000 MEAN761014ABC B300 PECJ500922XYZ B30 0 Modelo jerárquico Es similar al modelo de red en cuanto a las relaciones y datos, ya que estos se representan por medio de registros y sus relaciones. La diferencia radica en que están organizados por conjuntos de árboles en lugar de gráficas arbitrarias. Juan Pérez Vendedor 5,000 PECJ500922XYZ C001 PECJ500922XYZ C00 1 Nora Pérez Vendedor 5,000 MEAN761014ABC B300 PECJ500922XYZ B30 0 3.3.3 Modelos físicos de datos Se usan para describir a los datos en el nivel más bajo, aunque existen muy pocos modelos de este tipo, básicamente capturan aspectos de la implementación de los sistemas de base de datos. Existen dos clasificaciones de este tipo que son: Modelo unificador Memoria de elementos. 3.4 MODELO ENTIDAD RELACIÓN Este modelo se basa en una representación gráfica de una serie de entidades relacionadas entre sí, este modelo permite distinguir a simple vista, las relaciones existentes entre las distintas entidades Los elementos que lo componen son los siguientes: Entidades Es cualquier objeto del mundo real con existencia propia, sobre el cual queremos tener información en una base de datos”. Una entidad puede ser un objeto con existencia física (PERSONA, CASA, CLIENTE, EMPLEADO, etc.) o un objeto con existencia conceptual (EMPRESA, CURSO, etc.) Tipos de entidades i) Fuertes (o regulares), Son aquellas que tienen existencia por si mismas (Por ejemplo, EMPLEADO). Las entidades fuertes se representan como se ha dicho con un rectángulo con trazo simple. Nodo EMPLEADO DEPARTAMENTO CLIENTE PROVEEDOR PRODUCTO Nota: Las entidades se representan dentro de un rectángulo Ing. Elvis Guillermo Huarcaya Quispe Pág. 48 Gestión de informática II j) Débiles, cuya existencia depende de otro tipo de entidad (Por ejemplo, APODERADO depende de ALUMNO. La desaparición de un ALUMNO de la base de datos hace que desaparezcan también todos los familiares del mismo). Estos tipos de entidades se representan normalmente con un rectángulo con líneas de doble trazo. Estas entidades normalmente no tienen suficientes atributos para formar una clave primaria. Atributos Son las propiedades específicas de las entidades. Por ejemplo, una entidad PROVEEDOR puede describirse por su Nº de Ruc, su nombre o razón social de la empresa, su teléfono, etc. Los. Al conjunto de valores que puede tomar un atributo se le llama dominio del atributo. Tipos de atributos: b) Simples y compuestos: Los compuestos están formados por un conjunto de atributos, mientras que los simples no se pueden dividir. c) Monovaluados y multivaluados Los monovaluados sólo pueden tener un valor para una entidad particular, mientras que los multivaluados pueden tener más de un valor. (Por ejemplo el atributo color de la entidad COCHE es un atributo multivaluado, pues un coche puede estar pintado de varios colores). d) Almacenados o derivados: Los derivados son atributos cuyo valor para una entidad particular puede obtenerse en función de los valores almacenados en otros atributos. Se representan mediante una elipse con trazo discontinuo. (Por ejemplo el atributo edad de la entidad PERSONA es un atributo derivado porque se puede obtener en función del valor dela tributo fecha_nacimiento). Clave La clave de una entidad es un atributo de dicha entidad que identifica unívocamente una ocurrencia de una entidad, es decir los valores de los atributos claves no se pueden repetir en una misma entidad y no toman nunca el mismo valor para dos entidades particulares diferentes, a estos atributos se les llaman claves. En el diagrama E-R los atributos clave deben aparecer destacados; por ejemplo, subrayando su nombre (por ejemplo, nruc de la entidad PROVEEDOR). ALUMNO APODERADO PROVEEDOR nruc nombre telf PROVEEDOR nruc nombre telf Entidad Fuerte Entidad Débil Nota: Los atributos se representan por elipses que están conectadas a su entidad o relación mediante una línea recta COCHE matric modelo color PERSONA DNI nombre fecha_nac edad Nota: Los multivaluados se representan mediante una elipse con trazado doble. Ing. Elvis Guillermo Huarcaya Quispe Pág. 49 Gestión de informática II Relación o Vínculo Se puede definir como una correspondencia, asociación o conexión entre dos o más entidades. En los diagramas E-R se representa gráficamente como un rombo y sus nombres son verbos. Por ejemplo: VENDE, PERTENECE, etc. Una relación puede tener atributos descriptivos. Por ejemplo, en la relación anterior, podría tener como atributo descriptivo fecha_venta (la fecha en que se hace la venta). Grado de una relación Es el número de entidades que participan en la relación. Se puede restringir el modelo E-R para incluir solo conjuntos de relaciones binarias, es decir de grado 2 (es aconsejable). Correspondencia de cardinalidad, Expresa el número máximo de entidades que están relacionadas con una única entidad del otro conjunto de entidades que interviene en la relación. Aunque normalmente nos interesa sólo la cardinalidad máxima, a veces es útil especificar la cardinalidad mínima. Según su cardinalidad, podemos clasificar las relaciones de los siguientes tipos: Tipo Relación Representación 1:1 Una a una : La cardinalidad máxima en ambas direcciones es 1 1:N Una a muchas: La cardinalidad máxima en una dirección es 1 y en la otra muchos. N:M Muchas a muchas: La cardinalidad máxima en ambas direcciones en muchos Caso I: Gestión de una biblioteca Se desea establecer un modelo conceptual para la gestión de una biblioteca, para lo cual se desea tener almacenados todos los libros que la componen Para este caso se considera los siguientes aspectos: - Para cada libro interesa conocer el Código del libro, el título, el autor o autores, la editorial, el año de publicación y la materia. - De cada autor se quiere conocer su nombre, apellidos y nacionalidad - Un autor podrá haber escrito varios libros, de la misma forma que en un libro pueden participar varios autores. De la editorial se desea saber el nombre y la ciudad - A dicha biblioteca pueden suscribirse varios socios. De ellos se quiere saber su DNI, número de socio, nombre, apellidos, dirección y teléfono. - Por cuestiones directivas se limita el número de ejemplares prestados a cada usuario a uno - Se dispone a su vez de un único ejemplar de cada libro, por lo que un libro prestado a un usuario, no podrá ser prestado a otro hasta que se devuelva. - Deberá quedar constancia de la fecha de préstamo de cada ejemplar Se pide hacer el diagrama E - R para la base de datos que represente esta información. Solución PROVEEDOR PRODUCTO VENDE PROVEEDOR PRODUCTO VENDE fecha_venta 1 1 N 1 M N Ing. Elvis Guillermo Huarcaya Quispe Pág. 50 Gestión de informática II 3. 4. 5. Diseño Lógico El diseño lógico de una base de datos consta de dos etapas: el diseño lógico estándar y el diseño lógico específico En el Diseño lógico estándar, se toma el esquema conceptual resultante de la fase del diseño conceptual Para el diseño lógico, se toma el esquema conceptual resultante de la fase de diseño conceptual, esta fase se apoya en un modelo lógico estándar, se construye el diseño lógico estándar, que se apoya en un modelo lógico estándar, que será el mismo modelo de datos soportado por el SGBD a utilizar (relacional, jerárquico, etc.), En el Diseño Lógico Específico, una vez obtenido el Esquema Lógico Estándar, y considerando el modelo específico propio del SGBD a usar (Ms-Acces, Oracle, SQL Server, etc.) se elabora el esquema lógico específico Paso del esquema conceptual al esquema lógico Las reglas que permiten pasar del esquema conceptual (Modelo E/R) obtenido en la primera fase a la fase del diseño lógico son: - Cada entidad se transforma en una relación: esto es en cada entidad se genera un tabla, con sus mismos atributos, incluyendo las claves - Cada relación N- M genera una tabla, las relaciones entre entidades con cardinalidad N-M generan una tabla, con los atributos de la clave de ambas entidades. - Cada relación 1 –N importa las claves de la entidad con las que se relaciona: cada relación con cardinalidad 1- N importa los atributos clave que contiene la entidad con cardinalidad N - Cada relación dependiente importa la clave de la otra entidad, como clave Ejemplo: Del caso anterior referido a una gestión de biblioteca, transformar el esquema conceptual al modelo lógico Solución El esquema de tablas resultantes es el siguiente de acuerdo a las reglas del esquema conceptual al lógico - Diseño Lógico estándar LIBRO cod_libro cod_edit titulo materia año AUTOR cod_autor apellidos nombre nacionalidad LIBRO_AUTOR cod_libro cod_autor LIBRO AUTOR escribe cod_libro título año materia nombre nacionalidad N M EDITORIAL nombre ciudad SOCIO dni direccion nombre n_socio apellidos telefono prestamo 1 N Fecha_prestamo apellidos pertenece N 1 cod_edit cod_autor Ing. Elvis Guillermo Huarcaya Quispe Pág. 51 Gestión de informática II PRESTAMO cod_libro n_socio fecha_prestamo SOCIO n_socio apellidos nombre DNI telefono Tipo interrelación reflexiva Llamadas recursivas, las cuales asocian un tipo de entidad consigo misma, en el siguiente ejemplo la entidad TEMA se asocia con TEMA Tipo de interrelación de grado superior a dos Grado: E s el número de tipos de entidad que participan en un tipo de interrelación Interrelación redundante Se dice que una interrelación es redundante, cuando su eliminación no implica pérdida semántica de los datos (significado de los datos) porque existe la posibilidad de realizar la misma asociación por medio de otras interrelaciones EDITORIAL cod_edit nombre ciudad PROFESOR imparte CURSO DEPARTAMENTO pertenece adscrito N M 1 N 1 redundante Ciclo en el que aparece una interrelación redundante PROFESOR imparte TEMA CURSO TEMA consta s N Ing. Elvis Guillermo Huarcaya Quispe Pág. 52 Gestión de informática II Interrelación de grado superior a 2 Cuando se presenta un interrelación de grado superior a 2, es preciso analizar ya que a veces se puede descomponer en otras de menor grado Ejemplo: La interrelación Imparte que asocia tres entidades, se refiere a que un profesor imparte un tema en un curso, pero si sustituimos la interrelación por las tres Imparte1, Trata, Tema, de estas no se puede deducir los temas que trata un profesor en curso determinado ESPECIALIZACIÓN Y GENERALIZACIÓN - Se crea una tabla para el conjunto de entidades del nivel más alto. - Para conjunto de entidades de nivel. mas bajo, se crea una tabla que incluya una columna para cada uno de los atributos de ese conjunto de entidades, mas una columna que contendría la clave primaria del conjunto de entidades de nivel superior. PROFESOR imparte CURSO ESTUDIANTE Imparte1 Imparte1 asiste 1 N N M M N M M 1 Un tipo de interrelación de grado 3 que puede ser descompuesta sinr pérdida semántica PROFESOR imparte TEMA CURSO trata Imparte1 entra N M N M M N M M N Un tipo de interrelación de grado 3 que no puede ser descompuesta por pérdida semántica PROFESOR imparte CURSO DEPARTAMENTO pertenece adscrito N M M N 1 Ciclo en el que no aparece una interrelación redundante N Ing. Elvis Guillermo Huarcaya Quispe Pág. 53 Gestión de informática II - EJERCICIOS DE MODELADO DE DATOS CASO I: Universidad En la secretaría de una universidad se desea gestionar la información acerca de los alumnos, profesores, las asignaturas y las carreras ofertadas. Hay que tener en cuenta que: a) Un alumno puede estar matriculado en muchas asignaturas. b) Cada asignatura pertenece a una única carrera, aunque puede haber asignaturas de distintas carreras con el mismo nombre. c) Una carrera tiene muchas asignaturas d) Cada asignatura puede estar impartida por uno o más profesores. e) Un profesor puede impartir más de una asignatura. CASO II: Caso: Tienda de Accesorios de Computadoras “Computienda” COMPUTIENDA, es una empresa que brinda el servicio de ventas de accesorios respecto al área de computadoras, a continuación se muestra el proceso que sigue el cliente: 1. El cliente antes de hacer su pedido, es atendido por una vendedora, quien le muestra los productos que el cliente solicita 2. Una vez que el cliente determina que productos comprar, le dan un ticket de los productos que va a comprar, se acerca a caja, hace su pedido, da sus apellidos, nombres, dirección, teléfono, cancela y recibe una Boleta de Venta para recoger su pedido VEHICULO matric modelo COCHE matric AUTOBUS matric plazas MOTO matric CC VEHICULO matric modelo COCHE AUTOBUS MOTO CC plazas Ing. Elvis Guillermo Huarcaya Quispe Pág. 54 Gestión de informática II Canti dad Unid Descripción Precio Unit. S/. Valor de Venta 02 03 01 Cono x 100 Cono x 100 Cja x 1 Und CD‟S SONY CD‟S MAXELL Disquette MAXELL 70.00 50.00 7.00 140.00 150.00 7.00 TOTAL 297.00 3. Luego de unos minutos de espera el cliente se acerca con su Boleta de Venta a recoger su pedido En dicha Tienda todo el procedimiento de atención al cliente es en forma manual Para este caso desarrolle el Esquema Conceptual y el Esquema Lógico de la Base de Datos CASO III: VIDEOCLUBS GLOB-GUSTERS La cadena de Videoclubs Glob-Gusters ha decidido, para mejorar su servicio, emplear una Base de Datos para almacenar la información referente a las películas que ofrece en alquiler. Esta información es la siguiente: - Una película se caracteriza por su título, nacionalidad, productora y fecha (Ejemplo: Quo Vadis, Estados Unidos, M.G.M. , 1955) - En una película pueden participar varios actores (nombre, nacionalidad, sexo), algunos de ellos como actores principales - Una película está dirigida por un director (nombre, nacionalidad) - De cada película se dispone de uno o varios ejemplares diferenciados por un número de ejemplar y caracterizados por sus estado de conservación - Un ejemplar se puede encontrar alquilado a algún cliente (nombre, dirección, teléfono). Se desea almacenar la fecha de comienzo de alquiler y la de la devolución - Cada socio puede alquilar como máximo 4 ejemplares - Un socio tiene que ser avalado por otro socio que responda de él en caso de tener problemas en el alquiler CASO IV: GESTIÓN DE UNA FARMACIA La gestión de una farmacia requiere poder llevar el control de los medicamentos existentes, así como de los que van sirviendo, para lo cual se pretende diseñar un sistema acorde a las siguientes especificaciones: - En la farmacia se requiere una catalogación de todos los medicamentos existente, para lo cual se almacenará un código de medicamento, nombre del medicamento, tipo de medicamento (jarabe, comprimido, pomada, etc.), unidades de stock, unidades vendidas y precio. Existen medicamentos de venta libre y otros que sólo pueden dispensarse con receta médica Nombre: Dirección: Fecha de emisión: / / RUC Nº 20485979043 Nº 0003948 factura Ing. Elvis Guillermo Huarcaya Quispe Pág. 55 Gestión de informática II - La farmacia compra cada medicamento a un laboratorio, o bien los fabrica ella misma. Se desea conocer el código del laboratorio, o bien los fabrica ella misma. Se desea conocer el código del laboratorio, nombre, teléfono, dirección y fax, así como el nombre de la persona de contacto - Los medicamentos se agrupan en familias, dependiendo del tipo de enfermedades a las que dicho medicamento se aplica. De este modo, si la farmacia no dispone un medicamento concreto, puede vender otro similar de distinto laboratorio - La farmacia tiene algunos clientes que realizan los pagos de sus pedidos a fin de cada mes (clientes con créditos). La farmacia quiere mantener las unidades de cada medicamento comprado (con o sin crédito) así como la fecha de compra . Además, es necesario conocer los datos bancarios de los clientes con crédito, así como la fecha de pago de las compras que realizan 1. Diseño Conceptual Ing. Elvis Guillermo Huarcaya Quispe Pág. 56 Gestión de informática II Diseño Lógico PELICULA IdPelicula IdDirector Titulo Nacionalidad Productora Fecha ACTOR IdActor Nomb Nacionalid Sexo DIRECTOR IdDirector Nombre Nacionalid PARTICIPA IdPelicula IdActor Tipo_partic EJEMPLAR IdPeliNumEjemp IdPelicula NumEjemp Estado_con ALQUILADO IdPeliNumEjemp DNI Fecha_alqui Fecha_devo SOCIO DNI Nombre Direcc Telf IdSocAval PELÍCULA dirige DIRECTOR partcipa N ACTOR Título Nacionalidad Productora Fecha IdPelicula IdActor Nombre Nacionalid Sexo M IdDirector Nacionalid ad Nombre pertenece 1 N EJEMPLAR 1 N NumEjemp Estado_con IdPeliNumEjemp alquilado SOCIO M N Fecha_alqui Fecha_devo llu Avalado_por 1 N DNI Nombre Direcc Telf Tipo_partic Ing. Elvis Guillermo Huarcaya Quispe Pág. 57 Gestión de informática II 2. FARMACIA CASO I: GESTIÓN DE CURSOS DE UNA EMPRESA SOLUCIÓN a) Esquema Conceptual (Modelo E-R) FAMILIA ……………. ……………. LABORATORIO ……………. ……………. ……………. ……………. ……………. ……………. MEDICAMENTO ……………. ……………. ……………. ……………. ……………. ……………. ……………. ……………. COMP_CRE D ……………. ……………. ……………. ……………. ……………. COMP_EFE ……………. ……………. ……………. ……………. CLIENTE_CRED ……………. ……………. CLIENTE ……………. ……………. ……………. ……………. MEDICAMENTO FAMILIA LABORATORIO Pertenece adquiere CLIENTE CLIENTE_CRED Comp_efe Comp_cre IdFamilia NombreLab TelefonoLab DireccionLab IdLaboratorio ………. NombreMed TipoMed UnidStock ……….. Precio …………. R………. ………… … …………… ………… … ………… … DNI Ing. Elvis Guillermo Huarcaya Quispe Pág. 58 Gestión de informática II b) Esquema Lógico: CURSO cod_curso Desc_curso PROFESOR cod_prof apellidos nombre direccion despacho PROFESOR_CURSO cod_prof cod_curso ALUMNO_CURSO cod_curso cod_alumno ALUMNO cod_alumno cod_ciu apellidos nombres Direccion telefono CIUDAD cod_ciudad des_ciu PROFESOR CURSO imparte cod_prof apellidos dirección nombres Desc_curs o 1 N Des_ciu ALUMNO direccion nombre Cod_alum apellidos telefono asiste M N cod_ciu cod_curso CIUDAD vive 1 N despacho Ing. Elvis Guillermo Huarcaya Quispe Pág. 59 Gestión de informática II NORMALIZACIÓN Los modelos de datos son instrumentos que ayudan a representar la realidad. Cuando se diseña una Base de Datos mediante el modelo relacional, al igual que ocurre en otros modelos de datos, tenemos distintas opciones, es decir, podemos obtener diferentes esquema relacionales, y no todos ellos son equivalentes, ya que una va a representar la realidad mejor que otros. La normalización convierte una relación en varias sub-relaciones, cada una de las cuales obedece a reglas. Estas reglas se describen en términos de dependencia. Una vez que hayamos examinado las distintas formas de dependencia, encontraremos procedimientos a aplicar a las relaciones de modo tal que las mismas puedan descomponerse de acuerdo a la dependencia que prevalece. Esto no llevará indefectiblemente a formar varias subrelaciones a partir de la única relación preexistente. Con la teoría de normalización se consigue una formalización en el diseño lógico de bases de datos relacionales, NECESIDAD DE UN MÉTODO FORMAL DE DISEÑO RELACIONAL En el modelo relacional, como en los demás modelos de datos, el diseño de una base de datos se puede abordar de dos formas distintas: a) Obteniendo el esquema relacional directamente a partir de la observación del universo, los cuales contendrán los atributos y restricciones de integridad que representan los objetos y reglas del mudo real b) Realizando el proceso de diseño en dos fases, en la primera se lleva a cabo el diseño conceptual, por ejemplo en el modelo E/R, obteniéndose el correspondiente esquema conceptual; en la segunda, éste se transforma en un esquema relacional; siguiendo determinadas reglas de transformación Estas relaciones que resultan en el diseño del esquema relacional se pueden presentar algunos problemas tales como: - Incapacidad de almacenar cierto hechos - Redundancias y, por tanto, posibilidades de inconsistencias - Ambigüedades - Pérdida de información (aparición de tuplas espurias) - Existencia de valores nulos - Pérdida de dependencias funcionales es decir ciertas restricciones de integridad que dan lugar a dependencias entre los datos - Aparición, en la base de datos, de estados que no son válidos en el mundo real (anomalías de inserción, borrado y modificación) Ejemplo: Cód_Estud Nombre_E Apellido_E DNI Dirección Cód_Beca Nombre Requisito Fecha 012323 763476 763476 763476 012323 987765 012323 987765 012323 232457 . . . Roberto Luis Luis Luis Roberto Gregorio Roberto Gregorio Roberto Mercedes . . . Hens García García García Hens Celada Hens Celada Hens García . . . 456367 345347 345347 345347 456367 885764 456367 885764 456367 809234 . . . Jr. Libertad 452 Av. 13 de Noviembre 142 Av. 13 de Noviembre 142 Av. 13 de Noviembre 142 Jr. Libertad 452 Prol. Pachitea 189 Jr. Libertad 452 Prol. Pachitea 189 Jr. Libertad 452 Jr.Junín 1456 . . . A22321 B56784 A22321 G65434 G65434 G65434 B56784 B56784 A22321 A22321 . . . METRICA ERASMU METRICA HIMMPA HIMMPA HIMMPA ERASMU ERASMU METRICA METRICA . . . Ing. Téc. Ing. Téc Ing. Téc Ingenie. Ingenie. Ingenie. Ing. Téc Ing. Téc Ing. Téc Ing. Téc . . . 10/10/2005 12/11/2005 14/10/2005 15/09/2005 17/09/2005 21/09/2005 11/11/2005 10/10/2005 12/11/2005 17/09/2005 . . . - Gran cantidad de redundancia - Anomalías de modificación - Anomalías de inserción - Anomalías de borrado DEFINICIÓN DE LAS TRES PRIMERAS FORMAS NORMALES Los esquemas resultantes de un proceso de descomposición es que estas relaciones alcancen un nivel de normalización superior al del esquema de origen, a fin de eliminar en lo posible las redundancias y, por tanto, las anomalías de actualización - Se dice que un esquema de relación está en una determinada forma normal si satisface un cierto conjunto específico de restricciones - Cuánto más alta sea la forma normal, menores serán los problemas que aparecen en el mantenimiento de la base de datos a) PRIMERA FORMA NORMAL (1FN) La primera forma normal (1FN) es una restricción inherente al modelo relacional, por lo que su cumplimiento es obligatorio y afecta al número de valores que pueden tomar los atributos de una relación. Ing. Elvis Guillermo Huarcaya Quispe Pág. 60 Gestión de informática II Una relación está en primera forma normal si, y sólo si, todos los dominios de la misma contienen valores atómicos, es decir, no hay grupos repetitivos. Si se ve la relación gráficamente como una tabla, estará en 1FN si tiene un solo valor en la intersección de cada fila con cada columna. Si una relación no está en 1FN, hay que eliminar de ella los grupos repetitivos. Un grupo repetitivo será el atributo o grupo de atributos que tiene múltiples valores para cada tupla de la relación. Hay dos formas de eliminar los grupos repetitivos. En la primera, se repiten los atributos con un solo valor para cada valor del grupo repetitivo. De este modo, se introducen redundancias ya que se duplican valores, pero estas redundancias se eliminarán después mediante las restantes formas normales. La segunda forma de eliminar los grupos repetitivos consiste en poner cada uno de ellos en una relación aparte, heredando la clave primaria de la relación en la que se encontraban. Definición: Un conjunto de relaciones se encuentra en 1FN si ninguna de ellas tiene grupos repetitivos Ejemplo La siguiente tabla EMPLEADO, no está en 1FN debido a las columnas NPROY, NOMPROY, y FECINICIO EMPLEADO NEmp NomEmp NJefe NomJefe NDpto NomDpto NProy NomProy FecInicio 7369 Pérez Juan 7902 Navarro Luis 20 Investigación 15 Factibilidad 10/05/2005 35 Pruebas 20/05/2005 45 Control 20/06/2005 7499 Sedano Carlos 7698 Poma Carla 30 Ventas 15 Factibilidad 05/05/2005 25 Análisis 15/05/2005 45 Control 20/06/2005 La solución es “sacar” las columnas que dan problema y ponerlas en otra tabla acompañadas de su determinante: EMPLEADO NEmp NomEmp NJefe NomJefe NDpto NomDpto 7369 Pérez Juan 7902 Navarro Luis 20 Investigación 7499 Sedano Carlos 7698 Poma Carla 30 Ventas ASIGNACIÓN NEmp NProy NomProy FecIni 7369 15 Factibilidad 10/05/2005 7369 35 Pruebas 20/05/2005 7369 45 Control 20/06/2005 7499 15 Factibilidad 05/05/2005 7499 25 Análisis 15/05/2005 7499 45 Control 20/06/2005 b) SEGUNDA FORMA NORMAL (2FN) La segunda forma normal (2FN) está basada en el concepto de dependencia plena y en las interrelaciones existentes entre los atributos principales (que se encuentran en alguna de las claves) y no principales (que no se encuentran en ninguna clave) de una relación - Una relación está en segunda forma normal si, y sólo si, está en 1FN y, además, cada atributo que no está en la clave primaria es completamente dependiente de la clave primaria. - La 2FN se aplica a las relaciones que tienen claves primarias compuestas por dos o más atributos. Si una relación está en 1FN y su clave primaria es simple (tiene un solo atributo), entonces también está en 2FN. Las relaciones que no están en 2FN pueden sufrir anomalías cuando se realizan actualizaciones. - Para pasar una relación en 1FN a 2FN hay que eliminar las dependencias parciales de la clave primaria. Definición: Una tabla está en 2FN si está en 1FN y además se cumple que toda columna que no es parte de la llave de la tabla depende funcionalmente de toda la llave. En la tabla ASIGNACIÓN las dependencias funcionales son: Ing. Elvis Guillermo Huarcaya Quispe Pág. 61 Gestión de informática II NPROY NOMBPROY (NEMP, NPROY) FECINI En la tabla ASIGNACIÓN la llave es (NEMP, NPROY) por lo tanto la tabla no está en 2FN, ya que, existe una columna que no es parte de la llave NOMPROY y que no depende de toda la llave. La solución es “sacar” las columnas que dan problema y ponerlas en otra tabla acompañadas de su determinante. ASIGNACIÓN NEmp NProy FecIni 7369 15 10/05/2001 7369 35 20/05/2001 7369 45 20/06/2001 7499 15 05/05/2001 7499 25 15/05/2001 7499 45 20/06/2001 PROYECTOS NProy NomProy 15 Factibilidad 25 Análisis 35 Pruebas 45 Control c) TERCERA FORMA NORMAL (3FN) La tercera forma normal está basada en el concepto de dependencia transitiva Definición: Una tabla está en 3FN si está en 2FN y además se cumple que toda columna que no es parte de la llave de la tabla depende sólo de la llave (dependencia transitiva) EMPLEADO NEmp NomEmp NJefe NomJefe NDpto NomDpto 7369 Pérez Juan 7902 Navarro Luis 20 Investigación 7499 Sedano Carlos 7698 Poma Carla 30 Ventas Las dependencias funcionales son: NEMP NOMEMP NJEFE NOMJEFE NDPTO NOMDPTO NEMP NJEFE NEMP NDPTO NEMP NOMJEFE NEMP NOMDPTO La tabla está en 2FN, ya que, todas las columnas que no es parte de la llave dependen funcionalmente de toda la llave, es decir, (NEMP) (NOMEMP, NJEFE, NOMJEFE, NDPTO, NOMDPTO) Pero no está en 3FN debido, por ejemplo, a que NOMDPTO además de depender de NEMP (que es parte de la llave) depende de NDPTO (que no es parte de la llave). En este caso, hablamos de que existe una dependencia transitiva. Ing. Elvis Guillermo Huarcaya Quispe Pág. 62 Gestión de informática II La solución es “sacar” las columnas que dan problemas y ponerlas en otra tabla acompañadas de su determinante. EMPLEADO NEmp NomEmp NJefe NomJefe NDpto NomDpto 7369 Pérez Juan 7902 Navarro Luis 20 Investigación 7499 Sedano Carlos 7698 Poma Carla 30 Ventas Primero se soluciona el problema de la columna NOMDPTO: DEPARTAMENTO NDpto NomDpto 20 Investigación 30 Ventas Luego se soluciona el problema con la columna NOMJEFE JEFE NJefe NomJefe 7902 Navarro Luis 7698 Poma Carla Y la tabla EMPLEADO queda de la siguiente forma: EMPLEADO NEmp NomEmp NJefe NDpto 7369 Pérez Juan 7902 20 7499 Sedano Carlos 7698 30 Al proceso de “sacar” las columnas que dan problemas y ponerlas en otra tabla aparte junto con su determinante se le llama descomposición. La descomposición de una tabla es correcta si al hacer el JOIN entre las tablas resultantes se vuelve a obtener la tabla original. Se le llama descomposición sin pérdida de información. Al “llevarnos” el determinante de las columnas que se están sacando de la tabla, nos aseguramos que la descomposición sea sin pérdida de información. EJERCICIO: El centro de computación de la Facultad posee un grupo de Consultoría dedicado a la atención de usuarios. Dicho grupo está formado por alumnos regulares de la Facultad, los que tienen dominio de algún software específico. Para cada consultor existe un horario de atención preestablecido y el propio jefe del grupo está a cargo de controlar el funcionamiento del servicio. Se pide normalizar el modelo relacional hasta la 3FN. Una vez que haya normalizado el modelo relacional, infiera el modelo entidad-relación, identificando todas sus componentes. HORARIO ASISTENCIA Matricula num_dia cod_mod hora_inicio Hora_fin matricula cod_mod fecha 2039 1 1 08:50 10:00 2039 1 24/11/98 2039 2 2 10:25 11:00 2039 2 25/11/98 Ing. Elvis Guillermo Huarcaya Quispe Pág. 63 Gestión de informática II 2020 3 1 08:50 10:00 2020 1 25/11/98 CONSULTOR Cod_dpto Nom_dpto Nombre Matricula cod_soft descripcion 10 Computación Alfredo 2039 0001 Excel 5,0 0002 Word 6,0 0003 Pascal 0004 Turing 20 Matemáticas Claudia 2020 0005 C 0006 PL/SQL 0003 Pascal SOLUCIÓN La tabla asistencia se encuentra en 3FN, ya que estando la llave primaria compuesta por los campos (fecha,matricula) se tiene la siguiente dependencia funcional: (fecha,matricula) cod_mod lo cual indica que todo campo que no pertenece a la llave primaria (en este caso solamente cod_mod) depende SOLO de la llave primaria. La tabla horario y consultor, no están en ninguna forma normal ya que ambas presentan columnas con valores vectoriales. (no atómicos) En la tabla horario, estas columnas son hora_inicio,hora_fin por lo tanto hay que llevarlas a otra tabla junto con su determinante que es cod_mod. Esto se traduce en: HORARIO_DIARIO MODULO Matricula num_dia cod_mod cod_mod hora_inicio hora_fin 2039 1 1 1 08:50 10:00 2039 2 2 2 10:25 11:00 2020 3 1 De esta manera ambas tablas quedan en 3FN, siendo sus dependencias funcionales las siguientes: horario_diario: Para soportar el caso de que un alumno pueda tener dos módulos distintos un mismo día, es necesario que la llave primaria esté formada por las tres columnas (matricula,num_dia,cod_mod). modulo: Siendo cod_mod la llave primaria, se tienen las dependencias: cod_mod hora_inicio cod_mod hora_fin Para la tabla consultor, primero debemos llevar a otra tabla la columna descripción con su determinante cod_soft: CONSULTOR software Cod_dpto nom_dpto nombre matricula cod_soft cod_soft Descripción 10 Computación Alfredo 2039 0001 0001 Excel 0002 0002 Word 0003 0003 Pascal Ing. Elvis Guillermo Huarcaya Quispe Pág. 64 Gestión de informática II 0004 0004 Turing 20 Matemáticas Claudia 2020 0005 0005 C 0006 0006 PL/SQL 0003 0003 Pascal Así, la tabla software queda en 3FN. Pero la tabla consultor sigue sin ninguna forma normal, pues la columna cod_soft tiene datos repetidos. Luego se debe separar en otra tabla junto con su determinante que es matricula. consultor conocimiento Cod_dpto nom_dpto nombre matricula Matricula cod_soft 10 Computación Alfredo 2039 2039 0001 20 Matemáticas Claudia 2020 2039 0002 2039 0003 2039 0004 2020 0005 2020 0006 2020 0003 La tabla conocimiento está en 3FN si la llave primaria está formada por ambos campos (matricula,cod_soft). Las dependencias funcionales de la tabla consultor si la llave primaria es matricula, son: matricula nombre matricula nom_dpto matricula cod_dpto cod_dpto nom_dpto esto nos dice que la tabla está en 2FN (todo campo que no pertenece a la llave primaria, depende funcionalmente de TODA la llave primaria), pero no está en 3FN ya que, nom_dpto además de depender de la llave primaria depende de cod_dpto. Luego la separamos en otra tabla junto con su determinante. consultor departamento matricula nombre cod_dpto cod_dpto nom_dpto 2039 Alfredo 10 10 Computación 2020 Claudia 20 20 Matemáticas De esta forma todo queda en 3FN. Las dependencias funcionales de estas tablas son: consultor: matricula nombre departamento: cod_dpto nom_dpto matricula cod_dpto Ing. Elvis Guillermo Huarcaya Quispe Pág. 65 Gestión de informática II BASE DE DATOS ORIENTADO A OBJETOS Concepto: En una base de datos orientada a objetos, la información se representa mediante objetos como los presentes en la programación orientada a objetos. Cuando se integra las características de una base de datos con las de un lenguaje de programación orientado a objetos, el resultado es un sistema gestor de base de datos orientada a objetos (ODBMS, object database management system). Un ODBMS hace que los objetos de la base de datos aparezcan como objetos de un lenguaje de programación en uno o más lenguajes de programación a los que dé soporte. Un ODBMS extiende los lenguajes con datos persistentes de forma transparente, control de concurrencia, recuperación de datos, consultas asociativas y otras capacidades 1.1 Estructuras de Objetos. El modelo orientado a objetos se basa en encapsular código y datos en una única entidad, llamada objeto. La interfaz entre un objeto y el resto del sistema se define mediante un conjunto de mensajes. El motivo de este enfoque puede ilustrarse considerando una base de datos de documentos en la que los documentos se preparan usando uno entre varios paquetes de software con formateador de texto. Para imprimir un documento debe ejecutarse el formateador correcto en el documento. Bajo un enfoque orientado a objetos, cada documento es un objeto que contiene el texto de un documento y el código que opera sobre el objeto. Todos los objetos del documento responden al mensaje de imprimir pero lo hacen en formas diferentes. Cada documento responde ejecutando el código de formatear adecuado. Encapsulando dentro del objeto del documento la información acerca de cómo imprimir el documento, podemos tener todos los documentos con el mismo interfaz externo al usuario. En general, un objeto tiene asociado: - Un conjunto de variables que contienen los datos del objeto. El valor de cada variable es un objeto. - Un conjunto de mensajes a los que el objeto responde. - Un método, que es un trozo de código para implementar cada mensaje. Un método devuelve un valor como respuesta al mensaje. El termino de mensaje en un contexto orientado a objetos no implica el uso de un mensaje físico en una red de computadoras, sino que se refiere al paso de solicitudes entre objetos sin tener en cuenta detalles específicos de implementación. Puesto que el único interfaz externo que presenta un objeto es el conjunto de mensajes al que responde, es posible modificar la definición de métodos y variables sin afectar otros objetos. También es posible sustituir una variable por un método que calcule un valor. Por ejemplo, un objeto de documento puede contener una variable de tamaño que contenga el numero de bytes de texto en el documento o bien un método de tamaño que calcule el tamaño del documento leyendo el documento y contando el numero de bytes. La capacidad de modificar la definición de un objeto sin afectar al resto del sistema está considerada como una de las mayores ventajas del modelo de programación orientado a objetos. 1.2 Jerarquía de Clases Normalmente en una base de dato existen muchos objetos similares. Por similar queremos decir que responden a los mismos mensajes, utilizan los mismos métodos y tienen variables del mismo nombre y tipo. Sería un trabajo inútil definir cada uno de estos objetos por separado. Por tanto, agrupamos los objetos similares para que formen una clase. A cada uno de estos objetos se les llama instancias de su clase. Todos los objetos de una clase comparten una definición común. Aunque difieran en los valores asignados a las variables. Ejemplo de clases en las bases de datos del banco son los clientes, las cuentas y los préstamos. El concepto de clases es similar al concepto de tipos abstractos de datos. Sin embargo, en el concepto de clase exi sten varios aspectos adicionales más allá de los de los tipos abstractos de datos. Para representar estas propiedades adicionales, tratamos cada clase como si fuera un objeto. Un objeto clase incluye: - Una variable con valores es un conjunto cuyo valor es el conjunto de todos los objetos que son instancias de la clase. - Implementación de un método para el nuevo mensaje, el cual crea una nueva instancia de la clase. Un esquema de base de datos orientada a objetos normalmente requiere un gran numero de clases. Sin embargo, a menudo se da el caso de que varias clases son similares. Por ejemplo, supóngase que tenemos una base orientada a objetos para la aplicación bancaria. Sería de esperar que la clase de cliente del banco fuera similar a la clase de empleados del banco en la definición de variables de nombre, dirección, número de teléfono, etc. Sin embargo existen variables especificas para los empleados (por ejemplo tasa-credito). Sería deseable definir una representación para las variables comunes en un sitio. Esto puede hacerse sólo si los empleados y los clientes están combinados en una clase. Para permitir la representación directa de similaridades entre clases necesitamos colocar clases en una jerarquía de especialización como la que se definió en el modelo de datos Entidad - Relación. Los empleados y los clientes pueden representarse por clases que son especializaciones de una clase Persona. Las variables y los métodos específicos de los empleados se asocian a la clase Empleado. Las variables y los métodos específicos de los clientes se asocian a la clase Cliente. Las variables y los métodos que se aplican tanto a los empleados como a los clientes se asocian a la clase Persona. La siguiente figura muestra una jerarquía de clases que representan personas implicadas en la operación del ejemplo bancario. Las variables asociadas a cada clase del ejemplo son: Ing. Elvis Guillermo Huarcaya Quispe Pág. 66 Gestión de informática II - Persona: numero-seguridad-social, nombre, dirección, numero-telefono-particular, fecha-de-nacimiento. - Cliente: tasa-de-credito, estado-retencion-impuestos, numero-de-telefono-trabajo. - Empleado: fecha-de-contrato, salario, numero-de-dependientes. - Director: titulo, numero-despacho, numero-cuenta-de-gastos Por brevedad no presentamos los métodos asociados a estas clases, aunque estarían incluidos en la definición completa de la base de datos bancaria. Un objeto que representa a un director contiene todas las variables de la clase Director, Empleado y Persona. Esto se refiere a la herencia de las propiedades de una clase mas general. Los métodos se heredan de manera idéntica a la herencia de las variables. Las especializaciones de una clase se denominan subclases. Así, por ejemplo, Empleado es una subclase de Persona; Cajero es una subclase de Empleado. A la inversa, Empleado es una superclase de Cajero y Persona es una superclase de Empleado. Anteriormente observamos que cada clase es ella misma un objeto y que ese objeto incluye una variable que contiene el conjunto de todas las instancias de la clase. Es fácil determinar qué objetos están asociados a clases en las hojas de jerarquía. Por ejemplo, asociamos a la clase Cliente, el conjunto de todos los clientes del banco. Sin embargo, para las clases que no son hojas, la cuestión es más complicada. En la figura anterior hay dos posibles formas de asociar objetos a clases. - Podríamos asociar a la clase Empleado todos los objetos de empleado, incluyendo aquellos que sean instancias de Director, Cajero y Secretaria. - Podríamos asociar a la clase Empleado solamente aquellos objetos de empleado que no sean instancias de Director, ni de Cajero, ni de Secretaria. Normalmente, en sistemas orientados a objetos se elige la última forma. Es posible determinar el conjunto de todos los objetos de empleado en este caso tomando la unión de aquellos objetos asociados a todas las clases en el subárbol con raíz en Empleado. Como observamos anteriormente, la jerarquía de clase/subclase es similar al concepto de especialización en el modelo entidad – relación. Decimos que Cajero es una especialización de Empleado porque el conjunto de todos los cajeros es un subconjunto de todos los empleados. Es decir, cada cajero es un empleado. La especialización permite la posibilidad de que un empleado no sea un cajero, una secretaria, ni un director. Una forma alternativa de la relación es el concepto de generalización. En el modelo entidad - relación, la generalización es el resultado de tomar la unión de dos o mas conjunto de entidades (de nivel bajo) para producir un conjunto de entidades de nivel alto. Si aplicamos el concepto de generalización al modelo orientado a objetos, cada objeto debe ser una instancia de una clase hoja en la jerarquía. Esto requeriría la definición de una subclase de Empleado llamada Otro-Empleado para representar empleados que no fueran cajeros, secretarias ni directores. En la mayoría de los sistemas orientados a objetos suelen tener implícita la especialización en vez de la generalización. Así, en lo que sigue, supondremos que la jerarquía de clase/subclase está basada en la especialización. 1.3 Herencia Múltiple En la mayoría de los casos, una organización jerárquica de clases es la adecuada para describir aplicaciones. En tales casos, todas las superclases de una clase son antepasados de otra en la jerarquía. Sin embargo, existen situaciones que no pueden representarse bien en una jerarquía de clases. Supóngase que queremos distinguir entre cajeros y secretarias a tiempo completo y a tiempos partidos en el ejemplo de la figura ya mencionada. Además supóngase que necesitamos variables y métodos diferentes para representar estos dos tipos de empleados. Podemos crear las subclases: Cajero-tiempo-patido, Cajero-tiempo-completo, Secretaria-tiempo-partido, Secretaria-tiempo-completo. La jerarquía resultante que se muestra a continuación no proporciona un buen modelo de la empresa bancaria por varias razones: Persona Empleado Cliente Director Cajero Secretaria Persona Empleado Cliente Ing. Elvis Guillermo Huarcaya Quispe Pág. 67 Gestión de informática II - Como observamos anteriormente, existen ciertas variables y métodos específicos de los empleados a tiempo completos y otros específicos de los de tiempo partido. En la figura anterior las variables y los métodos para los empleados a tiempo completo deben estar definidas dos veces, una para Secretaria-tiempo-completo y otra para Cajero-tiempo-completo. Para los empleados a tiempo partidos existe una redundancia parecida. Esta redundancia no es deseable, ya que cada cambio de las propiedades de los empleados a tiempo completo o partido debe hacerse en dos sitios, lo que puede conducir a inconsistencias. - La jerarquía no tiene forma de representar empleados que no sean cajeros ni secretarias, a menos que la ampliemos de manera que incluya las clases Empleado-tiempo-completo y empleados-tiempo-partido. Si tuviéramos varias clasificaciones de trabajo en vez de las dos de este ejemplo sencillo, las limitaciones del modelo llegarían a ser más aparentes. El concepto de Herencia Múltiple trata los problemas que acabamos de observar en el modelo orientado a objetos; este concepto de refiere a la capacidad de las clases para heredar variables y métodos de múltiples superclases. La relación clase/subclase se representa por un grafo con raíz aciclica dirigido (DAG) en el que una clase puede tener más de una superclase. Volvamos al ejemplo bancario. Utilizando un DAG podemos definir propiedades de empleo a tiempo completo y a tiempo partido en un sitio. Como se muestra en la siguiente figura. Definimos una clase Tiempo-partido que define aquellas variables y métodos específicos del empleo a tiempo partido y una clase Tiempo-completo que define aquellas variables y métodos específicos del empleo a tiempo completo. Utilizando DAG en la figura mencionada, podemos representar los empleados a tiempo completo y a tiempo partido que no son cajeros ni secretarias como instancias de las clases Tiempo-completo y Tiempo-partido, respectivamente. Director Cajero Secretaria Cajero a tiempo completo Cajero a tiempo Partido Secretaria a Tiempo Completo Secretaria a Tiempo Partido Persona Empleado Cliente Director Cajero Secretaria Cajero a tiempo completo Cajero a tiempo Partido Secretaria a Tiempo completo Secretaria a Tiempo partido Persona Empleado Cliente Director Cajero Secretaria Ing. Elvis Guillermo Huarcaya Quispe Pág. 68 Gestión de informática II Cuando se emplea la herencia múltiple es posible que se dé ambigüedad en el caso en que pueda heredarse la misma variable o método de más de una superclase. En el ejemplo bancario, supóngase que en vez de definir salario para la clase Empleado, definimos una variable pago para cada una de las clases Tiempo-completo, Tiempo-partido, Cajero y Secretaria como sigue: - Tiempo-completo: pago es un entero de 0 a 100 000 que contiene el salario anual. - Tiempo-partido: pago es un entero de 0 a 20 que contiene una fracción de pago por hora. - Cajero: pago es un entero de 0 a 20 000 que contiene el salario anual. - Secretaria: pago es un entero entre 0 a 25 000 que contiene el salario anual. Considérese la clase Secretaria-tiempo-partido. Podría heredar la definición de pago de Tiempo-partido o de Secretaria. El resultado es diferente, dependiendo de la elección que se haga. Entre las opciones que pueden elegir las diversas implementaciones del modelo orientado a objetos están las siguientes: - Incluir las dos variables, renombrarlas como Tiempo-partido.pago y Secretaria.pago. - Elegir una u otra basándose en el orden en el que se crearon las clases Tiempo-partido y Secretaria. - Obligar al usuario a que haga la elección en el momento en que se define la clase secretaria-tiempo-partido. No se ha aceptado ninguna solución simple como la mejor. Cabe mencionar que no todos los casos de herencia múltiple conducen a ambigüedad. Si en vez de definir pago, conservamos la definición de la variable salario en la clase empleado, y no la definición de la variable salario en la clase Empleado, y no la definición en ningún otro sitio, entonces las clases Tiempo-partido, Tiempo-completo, Secretaria Tiempo-partido, Tiempo-completo, Secretaria y Cajero heredan todas salario de Empleado. Puesto que las cuatro clases comparten la misma definición de salario, no resulta ninguna ambigüedad cuando la Secretaria-tiempo-partido, Seecretaria-tiempo- completo, etc., heredan salario. 1.4 Identidad de objetos Los objetos en una base de datos orientada a objetos, normalmente corresponden a una entidad de la empresa que está modelando la base de datos. Una entidad conserva su identidad aun cuando algunas de sus propiedades cambien con el tiempo. Igualmente, un objeto conserva su identidad aun cuando algunos o todos los valores de las variables o las definiciones de los métodos cambi en con el tiempo. Este concepto de identidad no se aplica a las tuplas de una base de datos relacional. En los sistemas relacionales, las tuplas de una relación se distinguen únicamente por los valores que contienen. La identidad del objeto es una noción mas fuerte que la que se encuentra normalmente en los lenguajes de programación o en los modelos de datos que no están basados en la orientación a objetos. A continuación ilustramos varias formas de identidad. - Valor Se utiliza un valor de dato por identidad. Esta es la forma de identidad que se usa en los sistemas relacionales. - Nombre Se utiliza un nombre facilitado por el usuario por identidad. Esta es la forma de identidad que normalmente se usa para las variables en los procedimientos. A cada variable se le da un nombre que identifica de manera única a la variable sin importar el valor que contenga. - Incorporación Una noción de identidad es incorporar en el modelo de datos el lenguaje de programación, y no se requiere que el usuario proporcione ningún indentificador. Esta es la forma de identidad que se usa en los sistemas orientados a objetos. Un tema relacionado con el tipo de identidad es la permanencia de identidad. Una forma sencilla de lograr incorporar la identidad es por medio de punteros a localizaciones en memoria. Sin embargo, la asociación de un objeto a una localización física en memoria puede cambiar con el tiempo. A continuación listamos varios grados de permanencia de identidad. - Intraprograma. La identidad permanece solamente durante la ejecución de un único programa o consulta. Ejemplo de identidad de interprograma son los nombres de la variable en los lenguajes de programación y los identificadores de tuplas en SQL. - Interprograma. La identidad permanece de una ejecución del programa a otra. Ejemplos de identidad de interprograma son los nombres de relaciones en un lenguaje de consulta relacional del tipo del SQL. - Persistente. La identidad permanente no sólo entre las operaciones del programa sino también entre las reorganizaciones estructurales de los datos. Las relaciones en SQL no tienen identidad persistente, ya que una reorganización de la base de datos puede resultar en un nuevo esquema de bases de datos con relaciones con nuevos nombres. La forma persistente de identidad es la que se requiere en los sistemas orientados a objetos. Estas formas de identidad sirven para distinguir entre identidad en sistemas orientados a objetos y punteros en organización física de datos. Los punteros de la memoria principal o de la memoria virtual solamente ofrecen identidad de Intraprograma. Los punteros a datos de un sistema de archivos en disco solamente ofrecen identidad de interprograma. Así, la identidad de objetos – es decir, la identidad persistente es una noción más fuerte que la que proporcionan los punteros. 1.5 Contenido de Objetos Anteriormente observamos que el valor de una variable de un objeto es ella misma un objeto. Esto crea una jerarquía de contenido entre los objetos. Un objeto O2 es el hijo de un objeto O1 y si O1 contiene O2; es decir, O2 es el valor de una variable de O1. Los objetos que contienen otros objetos se denominan objetos complejos o compuestos. Para ilustrar el contenido considérese la base de datos simplificada de diseño de sistemas de computadoras de la siguiente figura. La base de datos contiene información en varios sistemas de computadoras. Cada sistema de computadoras contiene un conjunto de tarjetas, un conjunto de buses, un conjunto de dispositivos y un conjunto de chips y los buses proporcionan un conjunto de interfaces. Sistema de computadoras Ing. Elvis Guillermo Huarcaya Quispe Pág. 69 Gestión de informática II La jerarquía de la figura muestra la relación de contenido entre los objetos de una forma esquemática listando los nombres de las clases en vez de los objetos individuales. Considérese la clase Sistema-computadores. Puede incluir las variables nombre- computador, id-proyecto, gestor, fecha-terminación, las cuales contienen datos descriptivos acerca de una instancia de la clase. Aunque los valores de estas variables se consideran objetos, son instancias de tipos de datos estándar (como cadenas de caracteres) que se han implementado directamente a un nivel bajo por razones de rendimiento. La clase Sistema-computadores también incluyen las variables tarjeta, bus, dispositivo y conjunto-instrucciones. Estas variables toman como valores conjuntos de objetos de las clases Tarjeta, Bus, Dispositivo y Conjunto-instrucciones, respectivamente. En determinadas aplicaciones, un objeto puede estar contenido en varios objetos. En tales casos, la relación de contenido se representa por un DAG en vez de mediante una jerarquía. El contenido es un concepto importante en los sistemas orientados a objetos porque permite que distintos usuarios vean los datos en diferentes granualidades. Tarjeta Bus Dispositivo Conjunto Instrucciones Chips Interfaces Ing. Elvis Guillermo Huarcaya Quispe Pág. 70 Gestión de informática II LENGUAJE DE CONSULTA DE BASE DE DATOS STRUCTURED QUERY LANGUAGE EDICIONES DE SQL SERVER EDICIONES DE SQL SERVER 2005 Microsoft ha rediseñado la familia de productos SQL Server 2005 para satisfacer las necesidades de cada segmento de clientes con cuatro nuevas ediciones: Express, Workgroup, Standard y Enterprise. Como base de datos central de bajo coste, SQL Server 2005 aporta valor y funcionalidad sin precedentes en comparación con las soluciones competitivas. Las cuatro nuevas ediciones ofrecen una gama de características, desde alta disponibilidad y sólida escalabilidad hasta herramientas avanzadas de inteligencia comercial, diseñadas para ofrecer a los usuarios de una organización una plataforma productiva de gestión de datos más segura, fiable y productiva. Además, con el menor tiempo de inactividad de la aplicación, su escalabilidad y rendimiento sólidos y además los severos controles de seguridad, SQL Server 2005 representa un avance espectacular al ser compatible con los sistemas empresariales más exigentes del mundo. Debido a que SQL Server forma parte del Windows Server System, los clientes también reciben los beneficios adicionales de menor coste total de propiedad y mayor velocidad de desarrollo a través de una mejor administración y mayor integración que surgen de la estrategia común de ingeniería implementada en todos los productos Windows Server System. La tabla siguiente presenta detalles sobre cada una de las distintas ediciones. Notas: En la tabla siguiente, la columna "Comentarios" brinda comentarios sobre la característica específica. Los números al lado de las tildes indican las notas al pie que aparecen en la parte inferior de la página. SQL Server 2005 Developer Edition y Evaluation Edition no aparecen en las tablas. Estas ediciones tienen las mismas características que la Enterprise Edition; la única diferencia entre ellas radica en las políticas de otorgamiento de licencia. Escalabilidad y rendimiento Característica Express Workgroup Standard Enterprise Comentarios Número de CPU 1 2 4 Ilimitado Es compatible con procesadores multinúcleo RAM 1 GB 3 GB OS Max OS Max Memoria limitada a un máximo compatible con el sistema operativo Admite 64 bits Windows on Windows (WOW) WOW Tamaño de la base de datos 4 GB Ilimitado Ilimitado Ilimitado Partición Compatibilidad para bases de datos a gran escala Operaciones de índice paralelo Procesamiento paralelo de operaciones de indexación Vistas indizadas Se admite la creación de vista indizada en todas las ediciones. La correspondencia de vista indizada por el procesador de consulta sólo se admite en la Enterprise Edition. Alta disponibilidad Característica Express Workgroup Standard Enterprise Comentarios Reflejo de base de datos 1 2 Solución avanzada de alta disponibilidad que incluye conmutación rápida por error y redireccionamiento automático del cliente Organización en 3 Ing. Elvis Guillermo Huarcaya Quispe Pág. 71 Gestión de informática II Escalabilidad y rendimiento Característica Express Workgroup Standard Enterprise Comentarios clústeres de conmutación por error Transmisión de registros de seguridad Solución de copia de seguridad y recuperación de datos Cambios del sistema en línea Incluye Memoria Hot Add, conexión administrativa dedicada y otras operaciones en línea Indización en línea Restauración en línea Recuperación rápida Base de datos disponible cuando comienzan las operaciones para deshacer 1 Únicamente con fines de evaluación. Uso de producción programado para el primer semestre de 2006. 2 Siempre están activados el único subproceso REDO y la configuración de seguridad 3 Admite sólo dos nodos http://www.microsoft.com/spain/sql/productinfo/features/compare-features.mspx COMPARACIÓN ENTRE ENTERPRISE EDITION Y ESTÁNDARD EDITION SQL 2008 INTRODUCCIÓN A SQL SERVER INTRODUCCION El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet. SQL se utiliza para crear objetos QueryDef, como el argumento de origen del método OpenRecordSet y como la propiedad RecordSource del control de datos. También se puede utilizar con el método Execute para crear y manipular directamente las bases de datos Jet y crear consultas SQL de paso a través para manipular bases de datos remotas cliente - servidor. SQL es un lenguaje de consultas hacia bases de datos relacionales. Entre las características de SQL se tiene: - Procesa conjuntos de datos como grupos, más que como unidades individuales. - Provee navegación automática sobre los datos. - Usa instrucciones que son complejas y poderosas individualmente. Las instrucciones de flujo de control de los otros lenguajes de programación están ausentes en SQL. Sin embargo ellas se proveen por extensiones al SQL, dependientes de cada fabricante de bases 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. a) Comandos Ing. Elvis Guillermo Huarcaya Quispe Pág. 72 Gestión de informática II Existen dos tipos de comandos SQL: - Los DLL que permiten crear y definir nuevas bases de datos, campos e índices. - Los 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 b) 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 c) Operadores Operadores Lógicos: Operador Uso AND Es el "y" lógico. Evalua 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 verdar 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 ó Igual que >= Mayor ó 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 d) 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ón 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 EL LENGUAJE DE DEFINICIÓNDE DATOS (DDL) Introducción El Lenguaje de Definición de Datos (DDL); permite establecer y/o modificar el esquema relacional el esquema relacional, es decir, añadir, borrar o actualizar atributos, tablas, índices, etc. TIPOS DE DATOS Ing. Elvis Guillermo Huarcaya Quispe Pág. 73 Gestión de informática II Antes de crear una tabla, debe definir los tipos de datos de la tabla. Los tipos de datos especifican el tipo de información (caracteres, números o fechas) que se puede almacenar en una columna, así como la forma en que los datos están almacenados. Microsoft® SQL Server™ 2000 proporciona varios tipos de datos del sistema. SQL Server también permite tipos de datos definidos por el usuario que estén basados en los tipos de datos del sistema. Los tipos de datos definen el valor de datos que se permite en cada columna. SQL Server proporciona varios tipos de datos diferentes. Ciertos tipos de datos comunes tienen varios tipos de datos de SQL Server asociados. Debe elegir los tipos de datos adecuados que le permitan optimizar el rendimiento y conservar espacio en el disco. CREACIÓNDE TABLAS (CREATE TABLE …) Después de definir todos los tipos de datos de la base de datos, puede crear tablas, agregar y quitar columnas, y generar los valores de las columnas. Al crear tablas en SQL Server, debe tener en cuenta los hechos siguientes. Puede tener hasta: - Dos mil millones de tablas en cada base de datos. - 1.024 columnas por cada tabla. - 8060 bytes por fila (esta longitud máxima aproximada no se aplica a los tipos de datos image, text y ntext). Sintaxis parcial: CREATE TABLE nombreTabla ( Tipos de datos comunes Tipos de datos del sistema de SQL Server. Sinónimo ANSI Número de bytes Entero int Desde -2 147 483 648 Hasta + 2 147 483 648 4 bigint 8 smallint Desde -32 768 Hasta +32 768 2 tinyint Desde 0 hasta 255 1 Numérico exacto decimal[(p[, s])] numeric[(p[, s])] Enteros y decimales desde -1.79E308 hasta +1.79E308, donde p es el conjunto de digitos de la parte entera (precisión) y s es la parte decimal (escala)− 2–17 Numérico aproximado float[(n)] Redondeo de números desde -1.79E308 hasta +1.79E308 8 real Redondeo de números desde -340E38 hasta +340E38 4 Moneda money, Números con una precisión de cuatro decimales 8 smallmoney Desde -9223372036854475508 hasta - +9223372036854475508 4 Fecha y hora Datetime, Desde 1/01/1753 hasta 31/12/9999 8 smalldatetime Desde 01/01/1900 hasta 06/06/2079 4 Carácter char[(n)] Declarable hasta 255 caracteres 1 byte por carácter declarado varchar[(n)] Declarable hasta 255 caracteres 1 byte por carácter declarado Binario binary[(n)] Máximo 255 bytes de longitud n bytes varbinary[(n)] Máximo 255 bytes de longitud n bytes Imagen image Máximo 2 GB de longitud 0 a 2 GB Especial bit, cursor, uniqueidentifier timestamp sysname table sql_variant − rowversion − − − 1, 0–8 8 256 0–8016 Ing. Elvis Guillermo Huarcaya Quispe Pág. 74 Gestión de informática II nombre_ columna1 tipo_dato1 [NULL] | NOT NULL] , nombre_ columna2 tipo_dato2 [NULL] | NOT NULL] , nombre_ columna3 tipo_dato3 [NULL] | NOT NULL] , …) Ejemplo: El siguiente ejemplo crea la tabla CURSO y se especifican las columnas de la tabla, el tipo de datos de cada columna y si cada una de las columnas admite valores NULL. CREATE TABLE Curso ( idCurso CHAR (4) NOT NULL, nombreCurso VARCHAR (50) NOT NULL, numVacantes SMALLINT NOT NULL, numMatriculados SMALLINT NOT NULL, profesor VARCHAR (50) NULL, precioCurso MONEY NOT NULL) Para verificar la definición de la tabla ejecute la siguiente instrucción: SP_help Curso go 1. MODIFICACIÓN DE TABLAS ( ALTER TABLE …) En una tabla podemos añadir nuevas columnas, eliminar columnas, cambiar las propiedades de una columna, añadir ó eliminar restricciones Sintaxis parcial: ALTER TABLE nombre_Tabla ADD nombre_columna propiedades_columna | DROP COLUMN nombre_columna | ALTER COLUMN nombre_columna | ADD CONSTRAINT nombre_restricción PRIMARY KEY …| UNIQUE… | FOREIGN KEY … | DEFAULT …| CHECK … | DROP CONSTRAINT nombre_restricción - ADD: Permite añadir una nueva columna a la tabla - DROP COLUMN: Se usa para eliminar una columna - ALTER COLUMN: Permite modificar la definición de una columna - ADD CONSTRAINT: Permite añadir una restricción PRIMARY KEY, UNIQUE, FOREIGN KEY, DEFAULT ó CHECK a la definición de una tabla - DROP CONSTRAINT: Se usa para eliminar una restricción Ejemplo: A continuación crearemos una tabla de prueba, en la cual agregaremos una nueva columna 1. Creamos la tabla CREATE TABLE TablaPrueba ( columna1 INT NOT NULL, columna2 CHAR (10) NOT NULL, columna3 DATETIME NULL) 2. Le añadimos la columna de tipo MONEY con la propiedad NULL ALTER TABLE TablaPrueba ADD columna4 MONEY NULL go 3. Revisamos la nueva definición de la tabal Tabla_Prueba sp_help TablaPrueba go 2. BORRADO DE TABLAS La sentencia que borra una tabla es la siguiente: Sintaxis: DROP TABLE Nombre_Tabla Ejemplo: Eliminar la Tabla Tabla_Prueba DROP TABLE TablaPrueba 3. INTEGRIDAD DE DATOS Un paso importante en el diseño de una base de datos es decidir la mejor forma de implementar la integridad de los datos. La integridad de los datos hace referencia a la coherencia y la precisión de los datos que están almacenados en una base de datos. Los diferentes tipos de integridad de datos son los siguientes. Ing. Elvis Guillermo Huarcaya Quispe Pág. 75 Gestión de informática II Integridad de dominio: La integridad de dominio (o columna) especifica un conjunto de valores de datos que son válidos para una columna y determina si se permiten valores nulos. La integridad de dominio se suele implementar mediante el uso de comprobaciones de validez y, también, mediante la restricción del tipo de datos, el formato o el intervalo de los valores posibles permitidos en una columna. Integridad de entidad: La integridad de entidad (o tabla) requiere que todas las filas de una tabla tengan un identificador exclusivo, conocido como clave principal. El que se pueda modificar el valor de la clave principal o eliminar la fila entera depende del nivel de integridad requerido entre la clave principal y cualquier otra tabla. Integridad referencial: La integridad referencial asegura que siempre se mantienen las relaciones entre las claves principales (en la tabla a la que se hace referencia) y las claves externas (en las tablas que hacen referencia). No se puede eliminar una fila de una tabla a la que se hace referencia, ni se puede modificar la clave principal, si una clave externa hace referencia a la fila, salvo que se permita la acción en cascada. Puede definir relaciones de integridad referencial dentro de la misma tabla o entre tablas diferentes 4. LAS RESTRICCIONES ( CONSTRAINTS …) Las restricciones son un método declarativo de definición de la integridad de datos ya que ellas definen al momento de crear la tabla o al momento de modificar la definición de la tabla La restricción forma parte de la definición de un tabla TIPOS DE RESTRICCIONES Garantizan que los datos ingresados en las columnas sean valore válidos y que se mantengan la relaciones entre las tablas Creación de la clave primaria (PK) Sintaxis: ALTER TABLE nombre_Tabla ADD CONSTRAINT PK_nombre_tabla PRIMARY KEY (columnaX, columnaP, …) Nota: Se utiliza la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar índices - PK_nombre_tabla: Es el nombre de la restricción clave primaria. Se recomienda definir como clave primaria, el nombre de la tabla con el prefijo PK_ . Si no se especifica el nombre de la restricción, SQL Server le asigna un nombre. - ColumnaX, columnaP, : Es la columna ó combinación de columnas que se define como clave primaria. Las columnas involucradas no deben permitir valores nulos, y además no deben tener valores duplicados. En el caso de una combinación de columnas, la combinación vista como una unidad no debe tener valores duplicados. Ejercicio: Crear en la tabla CURSO definir la columna incurso como clave primaria ALTER TABLE Curso ADD CONSTRAINT PK_curso PRIMARY KEY(idCurso) Creación de una clave primaria compuesta Ejemplo: En la tabla MATRICULA la clave primaria está conformada por la columna idCurso e idAlumno, ya que para identificar una matrícula se necesita conocer al alumno matriculado y en qué curso se ha matriculado ALTER TABLE Matricula ADD CONSTRAINT PK_Matricula PRIMARY KEY(idCurso, idalumno) Tipo de integridad Tipo de restricción Descripción Dominio DEFAULT Establece el valor predeterminado para una columna cuando al insertar una fila no se especifica el valor para dicha columna CHECK Especifica los valores de los datos que se aceptan en una columna REFERENTIAL Especifica los valores de datos que se aceptan como actualización en función de los valores de una columna de otra tabla. Entidad PRIMARY KEY Identifica de forma exclusiva cada una de las filas; asegura que los usuarios no escriban valores duplicados y que se cree un índice para aumentar el rendimiento. No se permiten valores nulos. UNIQUE Impide la duplicación de claves alternativas (no principales) y asegura que se cree un índice para aumentar el rendimiento. Se permiten valores nulos. Referencial FOREIGN KEY Define una columna o combinación de columnas cuyos valores coinciden con la clave CHECK Especifica los valores de los datos que se aceptan en una columna en función de los valores de otras columnas de la misma tabla. Ing. Elvis Guillermo Huarcaya Quispe Pág. 76 Gestión de informática II Go Ejercicio: Escriba las instrucciones para crear la clave primaria de las tablas Alumno y Pago, notar de que la clave primaria de la tabla pago está compuesta por tres columnas Creación de la clave foránea Sintaxis: ALTER TABLE nombre_Tabla ADD CONSTRAINT FK_nombre_tabla_tabla_referenciada FOREIGN KEY (columnaX, columnaP, …) REFERENCES tabla_referenciada - FK_nombre_tabla_tabla_referenciada: Es el nombre de la restricción, clave foránea. - ColumnaX, columnaP, : Es la columna ó combinación de columnas que se define como clave foránea. - tabla referenciada: Es el nombre de la tabla primaria con la que se relaciona la tabla secundaria que tiene la clave foránea. Ejemplo: Creación de clave foránea en la tabla MATRÍCULA que referencia a la tabla CURSO ALTER TABLE Matricula ADD CONSTRAINT FK_Matricula_Curso FOREIGN KEY (idCurso) REFERENCES Curso go Ejercicio: - Creación de la clave foránea en la tabla MATRICULA que referencia a la tabla ALUMNO Creación de restricción valor no duplicado (UNIQUE) Sintaxis: ALTER TABLE nombre_Tabla ADD CONSTRAINT U_nombre_tabla_nombre_columna UNIQUE (columnaX, columnaP, …) - U_nombre_tabla_nombre_columna: Es el nombre de la restricción valor no duplicado o ÚNIQUE. - ColumnaX, columnaP, : Es la columna ó combinación de columnas a la que se le aplica la restricción. Ejemplo: Creación de restricción UNIQUE para la columna nombreCurso en la tabla CURSO ALTER TABLE CURSO ADD CONSTRAINT U_Curso_nombreCurso UNIQUE (nombreCurso) go Creación de valor predeterminado (DEFAULT) Sintaxis: ALTER TABLE nombre_Tabla ADD CONSTRAINT DF_nombre_tabla_nombre_columna DEFAULT valor_predeterminado FOR columnaX - DF_nombre_tabla_nombre_columna: Es el nombre de la restricción valor predeterminado ó DEFAULT.. - Valor_predeterminado: Es el valor que se almacena en columnaX cuando al insertar una fila no se especifica el valor para esa columna - ColumnaX: Es la columna a la que se le aplica la restricción. Ejemplo: Creación de restricción DEFAULT para la columna numVacantes en la tabla CURSO ALTER TABLE CURSO ADD CONSTRAINT DF_Curso_numVacantes DEFAULT 15 FOR numVacantes go Creación de regla de validación (CHECK) Sintaxis: ALTER TABLE nombre_Tabla ADD CONSTRAINT CK_nombre_tabla_nombre_columna CHECK (condicion) - CK_nombre_tabla_nombre_columna: Es el nombre de la restricción regla de validación ó CHECK. - condición: Es la expresión que determina cómo debe ser el valor a ingresar en la columna afectada por la restricción Ing. Elvis Guillermo Huarcaya Quispe Pág. 77 Gestión de informática II Ejemplo: Creación de restricción CHECK para la columna precioCurso de la tabla CURSO ALTER TABLE CURSO ADD CONSTRAINT CK_Curso_precioCurso CHECK (precioCurso >0) Go Borrado de índices (DROP INDEX) La sentencia DROP INDEX sirve para eliminar un índice de una tabla. Se elimina el índice pero no las columnas que lo forman. Sintaxis: DROP INDEX nombre_tabla.nombre_indice Ejemplo: DROP INDEX curso.pk_curso EJEMPLOS PRÁCTICOS DEL USO DEL DDL ---------------------------------- -- Creación de la base de datos ---------------------------------- USE master go CREATE DATABASE MarketWANKA go USE MarketWANKA go ---------------------------- -- Creación de las tablas ---------------------------- CREATE TABLE GUIA_DETALLE ( IdGuia int NOT NULL, IdProducto int NOT NULL, PrecioVenta money NOT NULL, Cantidad smallint NOT NULL ) go ALTER TABLE GUIA_DETALLE ADD PRIMARY KEY (IdGuia, IdProducto) go CREATE TABLE ORDEN_DETALLE ( IdOrden int NOT NULL, IdProducto int NOT NULL, PrecioCompra money NOT NULL, CantidadSolicitada smallint NOT NULL, CantidadRecibida smallint NULL, Estado varchar(10) NULL ) go ALTER TABLE ORDEN_DETALLE ADD PRIMARY KEY (IdOrden, IdProducto) go CREATE TABLE PRODUCTO ( IdProducto int IDENTITY, IdCategoria int NOT NULL, IdProveedor int NOT NULL, Nombre varchar(40) NOT NULL, UnidadMedida varchar(30) NULL, PrecioProveedor money NULL, StockActual smallint NULL, Ing. Elvis Guillermo Huarcaya Quispe Pág. 78 Gestión de informática II StockMinimo smallint NULL, Descontinuado bit ) go ALTER TABLE PRODUCTO ADD PRIMARY KEY (IdProducto) go ALTER TABLE PRODUCTO ADD UNIQUE (Nombre, UnidadMedida) Go CREATE TABLE PROVEEDOR ( IdProveedor int IDENTITY, Nombre varchar(40) NOT NULL, Representante varchar(30) NULL, Direccion varchar(60) NULL, Ciudad varchar(15) NULL, Departamento varchar(15) NULL, CodigoPostal varchar(15) NULL, Telefono varchar(15) NULL, Fax varchar(15) NULL ) go ALTER TABLE PROVEEDOR ADD PRIMARY KEY (IdProveedor) go CREATE TABLE CATEGORIA ( IdCategoria int IDENTITY, Categoria varchar(20) NOT NULL, Descripcion varchar(40) NULL ) go ALTER TABLE CATEGORIA ADD PRIMARY KEY (IdCategoria) go ALTER TABLE CATEGORIA ADD UNIQUE (Categoria) go CREATE TABLE GUIA ( IdGuia int NOT NULL, IdLocal int NOT NULL, FechaSalida datetime NOT NULL, Transportista varchar(30) NOT NULL ) go ALTER TABLE GUIA ADD PRIMARY KEY (IdGuia) go CREATE TABLE LOCAL ( IdLocal int NOT NULL, Direccion varchar(60) NULL, Distrito varchar(20) NULL, Telefono varchar(15) NULL, Fax varchar(15) NULL ) go ALTER TABLE LOCAL ADD PRIMARY KEY (IdLocal) go CREATE TABLE ORDEN ( IdOrden int NOT NULL, Ing. Elvis Guillermo Huarcaya Quispe Pág. 79 Gestión de informática II FechaOrden datetime NOT NULL, FechaEntrada datetime NULL ) go ALTER TABLE ORDEN ADD PRIMARY KEY (IdOrden) go ALTER TABLE GUIA_DETALLE ADD FOREIGN KEY (IdProducto) REFERENCES PRODUCTO go ALTER TABLE GUIA_DETALLE ADD FOREIGN KEY (IdGuia) REFERENCES GUIA go ALTER TABLE ORDEN_DETALLE ADD FOREIGN KEY (IdOrden) REFERENCES ORDEN go ALTER TABLE ORDEN_DETALLE ADD FOREIGN KEY (IdProducto) REFERENCES PRODUCTO go ALTER TABLE PRODUCTO ADD FOREIGN KEY (IdProveedor) REFERENCES PROVEEDOR go ALTER TABLE PRODUCTO ADD FOREIGN KEY (IdCategoria) REFERENCES CATEGORIA go ALTER TABLE GUIA ADD FOREIGN KEY (IdLocal) REFERENCES LOCAL go CASO: Supermercados WANKA S.A.C. es una empresa que se dedica a la comercialización al detalle de diversos productos de consumo masivo. Cuenta con una cadena de locales de autoservicio en distintas zonas del Valle del Mantaro, y planea expandir su influencia a otras zonas de Jauja y Tarma. Todas las áreas de la empresa y sus diferentes locales se interconectarán mediante una red. Cada una de las áreas tiene requerimientos específicos y se pretende resolverlos utilizando aplicaciones ofimáticas. Para efectos del desarrollo del presente caso, delimitaremos el área de estudio a todas las operaciones que llevan a cabo en el Alamacén Central, y que tienen relación con él. La base de datos que se diseñará registrará todas las operaciones que se ejecutan en el Almacén Central, y estará habilitada para que todas las áreas de la organización puedan utilizarla Almacén Central podrá controlar las entradas y salidas de productos, y las demás áreas podrán efectuar consultas a las bases de datos Procesos principales en el Almacén Central de Supermercados WANKA S.A.C. Reposición de mercadería en un Local 1. Si en el Local X, existen productos que necesitan reponerse, el responsable del inventario genera un Pedido en el que consigna los siguientes datos: - Número del Pedido - Fecha del Pedido - Código del Producto - Descripción del Producto - Unidad de Medida - Cantidad Solicitada - Cantidad de Ítems solicitados Nota de Pedido No. 06845-03 Ing. Elvis Guillermo Huarcaya Quispe Pág. 80 Gestión de informática II Fecha: 27 diciembre 2005 Item Código Descripción Unidad Cantidad 1 P00003 CARAMELOS FRUTAS ARCOR Pqte. 520gr 300 2 P00007 CHOCOLATE DOÑA PEPA FIELD Pqte. X 6 Unidades 1000 3 P00010 WAFER CHOCOLATE FIELD Pqte. X 9 Unidades 500 4 P00012 CHOCOLATE MOSTRO FIELD Pqte. X 6 Unidades 500 5 P00015 CHOCOLATE BARRA MILK DOVE Unidad 100 6 P00016 CHOCOLATE BARRA DARK DOVE Unidad 100 . . . . . . . . . . . . . . . 19 20 Total de Ítems Solicitados: 06 Firma y Sello Autorización El Número del Pedido es un correlativo seguido de un guión separador y dos dígitos adicionales. Estos últimos identifican al Local que hace el Pedido 2. El Pedido es enviado al Almacén Central Despacho de mercadería desde el Almacén hasta un Local 3. El Almacén Central recibe la solicitud de mercadería del Local X 4. El Almacén Central verifica el stock de los productos solicitados consultando a su Control de Inventarios. Actualmente el Almacén Central controla el inventario utilizando una lista de Excel en la que se registra los siguientes datos: - Código de la Categoría del Producto - Código del Producto - Descripción del Producto - Unidad de Medida - Precio del Proveedor - Precio de Venta al Público - Stock Actual - Stock Mínimo - Estado del Producto (si descontinuado o no) - Nombre del Proveedor 5. El Almacén Central verifica el stock de los productos, y genera una Guía de Remisión en la que considera solo los productos que tienen el nivel de inventario adecuado para cumplir con los requerimientos del local X. En la Guía de Remisión consigna los siguientes datos: - Número de la Guía de Remisión - Número del Pedido - Local de Destino - Fecha de Salida - Nombre del Transportista - Código del Producto - Descripción del Producto - Unidad de Medida - Cantidad despachada - Precio de venta al público (PVP) - Cantidad de ítems despachados 6. Si el Local X no recibe alguno de los productos solicitados debe reiterar su solicitud generando un nuevo Pedido con los productos no recibidos Guía de Remisión No. Guía 001-08937 No. Pedido 06845-03 Fecha 28 diciembre 2005 Transportista Aliaga Vidal, Jeremías Local 03 Item Código Descripción Unidad Cantidad 1 P00003 CARAMELOS FRUTAS ARCOR Pqte. 520gr 300 2 P00007 CHOCOLATE DOÑA PEPA FIELD Pqte. X 6 Unidades 1000 3 P00010 WAFER CHOCOLATE FIELD Pqte. X 9 Unidades 500 4 P00012 CHOCOLATE MOSTRO FIELD Pqte. X 6 Unidades 500 . . . . . . . . . . . . . . . Ing. Elvis Guillermo Huarcaya Quispe Pág. 81 Gestión de informática II 19 20 Total de Ítems Despachados: 04 Firma y Sello Autorización Solicitud de mercadería a un Proveedor 7. Cuando el Almacén Central detecta un bajo nivel de Inventario de algunos productos del Proveedor Z, genera una Orden de Compra consignando los siguientes datos: - Número de la Orden de Compra - Fecha de la Orden - Nombre del Proveedor - Código del Producto - Descripción del Producto - Unidad de Medida - Precio del Proveedor - Cantidad a Solicitar Orden de Compra No. 001-02787 Fecha 28 diciembre 2005 Proveedor Golosinas y antojos Fecha Ingreso Item Código Descripción Unidad Precio Proveedor Precio Compra Cantidad solicitada Cantidad Recibida Estado 1 P00013 CHOCOLATE BARRA MILKY WAY Barra 2.15 onzas 0.30 2000 2 P00015 CHOCOLATE BARRA MILK DOVE Unidad 1.30 5000 3 P00016 CHOCOLATE BARRA DARK DOVE Unidad 1.30 5000 . . . . . . . . . . . . . . . 19 20 Total de Ítems Solicitados: 03 Firma y Sello Autorización 8. El Almacén Central le envía la Orden de Compra al Departamento de Compras 9. Compras se comunica con el Proveedor para verificar y negociar los precios 10. Compras le envía al Proveedor la Orden de Compra consignando en ella el Precio de Compra del Producto Orden de Compra No. 001-02787 Fecha 28 diciembre 2005 Proveedor Golosinas y antojos Fecha Ingreso Item Código Descripción Unidad Precio Proveedor Precio Compra Cantidad solicitada Cantidad Recibida Estado 1 P00013 CHOCOLATE BARRA MILKY WAY Barra 2.15 onzas 0.30 0.80 2000 2 P00015 CHOCOLATE BARRA MILK DOVE Unidad 1.30 1.25 5000 3 P00016 CHOCOLATE BARRA DARK DOVE Unidad 1.30 1.25 5000 . . . . . . . . . . . . . . . Ing. Elvis Guillermo Huarcaya Quispe Pág. 82 Gestión de informática II 19 20 Total de Ítems Solicitados: 03 Firma y Sello Autorización Recepción en el Almacén Central de la mercadería enviada por el proveedor 11. El Proveedor despacha todo o parte de lo solicitado según lo acordado con Supermecados WANKA S.A.C. dependiendo de su disponibilidad 12. El Almacén central recibe lo despachado por el Proveedor y actualiza la Orden de Compra registrando la siguiente información: - Fecha de ingreso de los productos - Cantidad recibida - Estado del Producto en la Orden de Compra Orden de Compra No. 001-02787 Fecha 28 diciembre 2005 Proveedor Golosinas y antojos Fecha Ingreso Item Código Descripción Unidad Precio Proveedor Precio Compra Cantidad solicitada Cantidad Recibida Estado 1 P00013 CHOCOLATE BARRA MILKY WAY Barra 2.15 onzas 0.30 0.80 2000 0 Agotado 2 P00015 CHOCOLATE BARRA MILK DOVE Unidad 1.30 1.25 5000 5000 Entregado 3 P00016 CHOCOLATE BARRA DARK DOVE Unidad 1.30 1.25 5000 5000 Entregado . . . . . . . . . . . . . . . 19 20 Total de Ítems Solicitados: 03 Firma y Sello Autorización 13. El Almacén actualiza la siguiente información en su lista Excel para el Control de Inventarios: - Stock Actual del Producto - Precio del Proveedor 14. Almacén envía al Departamento de Compras, la Orden de Compras, y la Guía y Factura del Proveedor Se desea: Diseñar una base de datos que permita solucionar los requerimientos de información del Almacén Central EL LENGUAJE DE MANIPULACIÓN DE DATOS (DML) LA SENTENCIA SELECT LA CLÁUSULA WHERE LA CLÁUSULA GROUP BY LAS CLAÚSULA HAVING LA CLÁUSULA ORDER BY LA SENTENCIA INSERT LA SENTENCIA UPDATE LA SENTENCIA DELETE El lenguaje de Manipulación de Datos permite definir y modificar la estructura de un esquema 1. LA SENTENCIA SELECT Se emplea en las consultas de selección y se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable Sintaxis básica: SELECT * | lista_columnas Ing. Elvis Guillermo Huarcaya Quispe Pág. 83 Gestión de informática II FROM nombre_tabla [WHERE condición_filas] - lista_columnas: es la lista de columnas a mostrar en el resultado de la consulta. Si se especifica * se mostrarán todas las columnas de la tabla - condición_filas: Es una expresión lógica que indica que las filas a mostrar son aquellas para las que el valor de la expresión es verdadero A continuación se muestra la sintaxis completa: Sintaxis completa: SELECT [ ALL | DISTINCT] [ TOP n [ PERCENT ] [WITH TIES] ] lista_columnas [ INTO nueva_tabla ] FROM tabla_origen [ WHERE condición_filas ] [ GROUP BY [ ALL] expresión_agrupar_por… ] [ WITH CUBE | ROLLUP ] [ HAVING condición_grupos ] [ ORDER BY nombre_columna [ ASC | DESC ], …] [ COMPUTE AVG | COUNT | MAX | MIN | SUM (expresión) ] Lectura de todos los datos de una tabla Ejemplo: SELECT * FROM Producto Lectura de campos o columnas seleccionadas de una tabla Ejemplo: SELECT idProducto, nombre, unidadMedida, precioProveedor FROM Producto Ing. Elvis Guillermo Huarcaya Quispe Pág. 84 Gestión de informática II Definiendo alias para los nombres de columna Define títulos alternativos para los nombres de la columna. Si el alias es una frase debe escribirse entre comillas. Ejemplo: SELECT idProducto AS Código, nombre AS Descripción, unidadMedida AS Unidad, precioProveedor AS 'Precio unitario' FROM Producto Definiendo columnas computadas Una columna computada es una columna que se muestra en el resultado de una consulta, pero que no existe físicamente como tal en la tabla. La columna computada muestra el resultado de ejecutar alguna operación con las columnas de la tabla Ejemplo: SELECT idProducto, nombre, precioProveedor, 'Precio con descuento' = precioProveedor * 0.85 FROM Producto Concatenando cadenas Ejemplo: SELECT nombre, Ubicación = ciudad + ' - ' + departamento FROM Proveedor 2. LA CLÁUSULA WHERE En la cláusula WHERE, condición_filas es una expresión lógica que establece la condición que deben cumplir las filas a mostrar en el resultado de la consulta. Para construir la expresión lógica puede emplear operadores lógicos SQL como LIKE, BETWEEN e IN. Tipo de filtro Condición de búsqueda Operadores de comparación =, >, <, >=, <= y <> Comparaciones de cadenas LIKE y NOT LIKE Operadores lógicos: combinación de condiciones AND, OR ,NOT Intervalo de valores BETWEEN y NOT BETWEEN Listas de valores IN y NOT IN Ing. Elvis Guillermo Huarcaya Quispe Pág. 85 Gestión de informática II Valores desconocidos IS NULL e IS NOT NULL Al especificar filas con la cláusula WHERE, tenga en cuenta los siguientes hechos e instrucciones: - Utilice comillas simples para todos los datos de tipo char, nchar, varchar, nvarchar, text, datetime y smalldatetime. - Utilice una cláusula WHERE para limitar el número de filas que se devuelven al utilizar la instrucción SELECT. 2.1. Operadores de comparación: Ejemplo: Mostrar la lista de los productos de la categoría de higiene personal, cuyo código de categoría es 3 SELECT idProducto, nombre FROM Producto WHERE idCategoria = 3 Ejemplo: Mostrar la lista de las categorías de los productos con excepción de la categoría de Licores y gaseosas, cuyo código es 5 SELECT idCategoria, categoria FROM Categoria WHERE idCategoria <> 5 Ejemplo: Mostrar la lista de los productos cuyo precio es menor a 5.00 SELECT idCategoria, nombre, precioProveedor FROM Producto WHERE precioProveedor < 5 Ejemplo: Mostrar una lista de los productos cuyos nombres se encuentran después o en la posición de FRUNA SURTIDA DONOFRIO SELECT idproducto, Nombre FROM Producto Ing. Elvis Guillermo Huarcaya Quispe Pág. 86 Gestión de informática II WHERE nombre >= 'FRUNA SURTIDA DONOFRIO' Ejemplo: Mostrar las guías cuyas fechas de salida sean anteriores al 30 de marzo del 2006 SELECT idGuia, fechaSalida FROM Guia WHERE fechaSalida <= '30/03/2006' Nota: al ejecutar la consulta nótese de que la guías muestran con una fecha de salida anterior al 30/03/2006, pero las guías del 30/03/2006 no se muestran, esto es debido a que la fecha de salida de tipo fecha-hora, SQL asume por defecto „30/03/2006 00:00:00‟ Uso de la función CONVERT() con datos de tipo fecha-hora Sintaxis: CONVERT ( char ( n), expresión_fecha, estilo ) Convierte expresión_fecha a una cadena de formato de fecha. La cadena tiene longitud n, y el formato del dato se establece con el valor de estilo - char (n): Es el tipo y la longitud de la cadena con fomato de fecha resultante - expresión_fecha: Representa la fecha cuyo formato de presentación se desea cambiar - estilo: indica el formato de presentación de lacadena resultante El siguiente formato muestra algunos valores de estilo para la función CONVERT Año con 2 dígitos Año con 4 dígitos Formato Salida 1 101 USA mm/dd/aa 2 102 ANSI aa.mm.dd 3 103 Británico/ Francés dd/mm/aa 4 104 Alemán dd.mm.aa 5 105 Italiano dd-mm-aa 6 106 Dd mes aa 7 107 Mes dd, aa Ejemplo: Se desea obtener el listado de las guías cuya fecha de salida es anterior o igual al 30 de marzo del 2006 SELECT idGuia, fechaSalida FROM Guia WHERE CONVERT( CHAR(10), fechaSalida, 102 ) <= '2006.03.30' ORDER BY fechaSalida 2.2. Comparaciones de cadena El operador LIKE Sintaxis: SELECT * | lista_columnas FROM nombre_tabla WHERE columna LIKE expresión_cadena_a_buscar - columna: es la olumna en la que se busca la cadena de caracteres - expresión_cadena_a_buscar: Indica como debe ser la cadena que se está buscando en columna. La expresión admite comodines Ing. Elvis Guillermo Huarcaya Quispe Pág. 87 Gestión de informática II Comodines: Comodín Descripción % Indica que en la posición del comodín puede ir cualquier cadena de caracteres, incluso una cadena nula - Indica que en la posición del comodín puede ir cualquier carácter no nulo [abc] Establece el conjunto de caracteres válidos en la posición del comodín [a-b] Establece el rango de caracteres válidos en la posición del comodín ^ Excluir. Indica que el carácter, conjunto de caracteres, ó rango de caracteres que sigue al símbolo ^ no debe figurar en el resultado de la consulta. Ejemplo: Se desea obtener la relación de los productos que contienen la cadena „gloria‟ en su nombre SELECT idProducto, nombre FROM Producto WHERE nombre LIKE 'gloria' El resultado de este código mostrará 0 filas, dado que se especifica que el nombre sea exactamente la cadena „gloria‟. SELECT idProducto, nombre FROM Producto WHERE nombre LIKE '%gloria% Este código nos muestra fila como resultado dado que se indica que puede empezar con cualquier nombre seguido de la palabra gloria, y luego puede ser cualquier otra cadena de caracteres Ejemplo: Mostrar la lista de productos que contengan la palabra blanc antes del último carácter SELECT idProducto, nombre FROM Producto WHERE nombre LIKE '%blanc_' Ejemplo: Mostrar la lista de productos que empiecen con las letras p, ó d, ó f SELECT idProducto, nombre FROM Producto WHERE nombre LIKE '[pdf]%' ORDER BY nombre Ejemplo: Mostrar la lista de productos que empiecen con el caracter d hasta el carácter p SELECT idProducto, nombre FROM Producto WHERE nombre LIKE '[d-p]%' ORDER BY nombre go Ejemplo: Mostrar la lista de productos donde el primer carácter de la columna nombre puede ser cualquiera menos los caracteres : m, s, j SELECT idProducto, nombre FROM Producto WHERE nombre LIKE '[^msjg]%' ORDER BY nombre Go 2.3. Operadores Lógicos: AND, OR, NOT Ing. Elvis Guillermo Huarcaya Quispe Pág. 88 Gestión de informática II 2.4. Intervalo de valores BETWEEN y NOT BETWEEN El Operador BETWEEN Permite ejecutar consultas que ejecutan búsquedas basadas en el rango de valores numéricos, cadenas, o valores de fecha Sintaxis: SELECT * | lista_columnas FROM nombre_tabla WHERE columna BETWEEN valor_inicial AND valor_final - Columna, es la columna en la que se busca según el rango especificado por valor_inicial y valor_final - Valor_inicial, vallor_final, establecen los límites del rango de valores en el que se basa la búsqueda Ejemplo: Mostrar la lista de PRODUCTOS donde el precio del Proveedor esté entre 13.00 y 17.00 Los campos a mostrar deben ser el código del producto, nombre y precio del proveedor; donde el precio del proveedor. SELECT idProducto, nombre, precioProveedor FROM Producto WHERE precioProveedor BETWEEN 13.76 AND 17.00 ORDER BY precioProveedor Ejemplo: Mostrar la lista de PRODUCTOS cuyos nombres se encuentren en el rango que va desde el carácter „C‟ hasta el carácter „F‟. Los campos a mostrar deben ser el código del producto, nombre y precio del proveedor; donde el precio del proveedor. SELECT idProducto, nombre, precioProveedor FROM Producto WHERE nombre BETWEEN 'C' AND 'G' ORDER BY nombre Ejemplo: Mostrar la lista de PRODUCTOS cuyos nombres se encuentren en el rango que va desde el carácter „C‟ hasta el carácter „F‟. Los campos a mostrar deben ser el código del producto, nombre y precio del proveedor; donde el precio del proveedor. SELECT idProducto, nombre, precioProveedor FROM Producto WHERE nombre BETWEEN 'C' AND 'G' ORDER BY nombre Ejemplo: Mostrar la GUÍAS que fueron emitidas respecto a la fecha de salida desde el 20 de marzo del 2006 al 23 de marzo del 2006 SELECT idGuia, fechaSalida FROM Guia WHERE fechaSalida BETWEEN '20/03/2006' AND '23/03/2006' ORDER BY fechaSalida Esta instrucción mostrará desde 20/03/2006 hasta el 22/03/2006, dado que SQL por defecto considera 23/03/2006 00:00:00 lo cual cualquier guía emitida el días 23 después de las 00:00:00 estaría fuera del rango Para incluir el día 23 escribiríamos la siguiente consulta: SELECT idGuia, fechaSalida FROM Guia WHERE fechaSalida BETWEEN '20/03/2006' AND '23/03/2006 23:59:59.999' ORDER BY fechaSalida 2.5. Lista de valores IN y NOT IN El operador IN El operador IN permite ejecutar consultas que ejecutan búsquedas basadas en conjuntos de valores numéricos, valores de cadena, ó valores de fecha. Ing. Elvis Guillermo Huarcaya Quispe Pág. 89 Gestión de informática II Sintaxis: SELECT * | lista_columnas FROM nombre_tabla WHERE columna [NOT ] IN (conjunto_de_valores) - columna, es la que se busca según el conjunto de valores especificado en conjunto_de_valores - conjunto_de_valores, establece el conjunto de valores en el que se basa la búsqueda Ejemplo: Mostrar el idProducto, nombre, idProveedor de la tabla PRODUCTO cuyos códigos de Proveedores sean 11, 7 y 13 SELECT idProducto, nombre, idProveedor FROM Producto WHERE idProveedor IN ( 11, 7, 13) ORDER BY idProveedor 2.6. Valores desconocidos IS NULL e IS NOT NULL Un valor NULL indica que el valor es desconocido, no aplicable o simplemente se registrará posteriormente. Ejemplo: Crearemos una tabla EMPLEADO, lo cual contendrá una columna NULL, y en base a esta tabla realizaremos una consulta CREATE TABLE Empleado( IdEmpleado int PRIMARY KEY, Apellido varchar(30) not null, HaberBasico money not null, PorcentajeComision decimal(3,1) null ) go INSERT INTO Empleado VALUES (1, 'CASTRO ARENAS', 1200, 5) INSERT INTO Empleado VALUES(2, 'LUNA ESPEJO', 1000, 10) INSERT INTO Empleado VALUES(3, 'SOTO BUENO', 1400, NULL) INSERT INTO Empleado VALUES(4, 'MARQUEZ ARIZAGA', 1500, NULL) INSERT INTO Empleado VALUES(5, 'DAVILA SANCHEZ', 1200, 7.5) go Realizando una consulta que muestre todos los campos de la tabla EMPLEADO que tengan un porcentaje de comisión SELECT idEmpleado, apellido, haberBasico, porcentajeComision FROM Empleado WHERE porcentajeComision IS NOT NULL 3. LA CLÁUSULA GROUP BY 3.1 GROUP BY La cláusula GROUP BY se utiliza para agrupar las filas en base a determinado criterio, y luego ejecutar una operación que resume un atributo para cada uno de los grupos así formados. Por ejemplo se puede agrupar las facturas por cliente, y luego calcular el monto total facturado de cada cliente. Sintaxis: SELECT lista_columnas, función_agregación ( columna), función_agregación ( columna),… FROM nombre_tabla [ WHERE condición_filas] GROUP BY lista_columnas [HAVING condición_grupos] - Las columnas presentes en lista_columnas de la cláusula GROUP BY deben necesariamente estar presentes en la lista_columnas de SELECT - Cualquier columna presente en SELECT, y que no se encuentre en la lista_columnas de GROUP BY debe estar afectada por una función_agregación - condición_grupos en la cláusula HAVING permite establecer una expresión lógica que los grupos a mostrar en el resultado son aquellos para los que el valor de la expresión es verdadero Ing. Elvis Guillermo Huarcaya Quispe Pág. 90 Gestión de informática II - Una consulta GROUP BY solo entrega una fila por cada grupo generado. Esta fila muestra el resultado de la función_agregación aplicada sobre el grupo. No muestra el contenido del grupo - Cuando se utiliza GROUP BY sobre una columna que contiene valores NULL, éstos se procesan como un grupo Uso de la cláusula GROUP BY a) Cantidad de productos registrados para cada categoría SELECT idCategoria, count(idProducto) as 'No Productos' FROM PRODUCTO GROUP BY idCategoria b) Cantidad de productos por proveedor para las categorías 3 y 4 SELECT idCategoria, idProveedor,count(idProducto) as N_Productos FROM PRODUCTO where idCategoria IN (3,4) group by idCategoria, idProveedor order by idCategoria c) Monto total despachado por producto SELECT idproducto, SUM(precioVenta*cantidad) FROM GUIA_DETALLE GROUP BY Idproducto d) Productos cuyo monto total despachado es mayor a 15,000 SELECT idproducto, SUM(precioVenta*cantidad)AS 'Monto Total' FROM GUIA_DETALLE GROUP BY IdProducto HAVING SUM(precioVenta*cantidad)>=15000 e) Stock Actual total de Productos registrados por cada categoría, donde el stock Actual total es mayor o igual a 5,000 SELECT idCategoria, SUM(stockActual)AS 'Stock Actual Total' FROM PRODUCTO GROUP BY IdCategoria HAVING SUM(stockActual)>=5000 Ing. Elvis Guillermo Huarcaya Quispe Pág. 91 Gestión de informática II 3.2 Funciones de agregación Son funciones que permiten efectuar una operación aritmética que resume los valores de una columna de toda la tabla, o que resume los valores de la columna agrupados según determinado criterio Función 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 Uso de la función AVG ( ) La media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg no incluye ningún campo Null en el cálculo. Sintaxis: AVG ( [DISTINCT] expresión numérica) Donde: - DISTINCT: indica que debe eliminarse los valores duplicados de expresión numérica antes de evaluar la función a) Ejercicio: Obtener el precio promedio de todos los productos en la tabla PRODUCTO SELECT AVG(precioProveedor) FROM PRODUCTO GO b) Ejercicio: Obtener el precio unitario promedio de todos los productos de la categoría golosinas cuyo código es 1 SELECT AVG(PrecioProveedor) FROM PRODUCTO WHERE idcategoria=1 GO c) Ejercicio: Obtener el stock promedio de los productos cuyo precio unitario se encuentren entre 10.00 y 20.00 SELECT AVG(PrecioProveedor) FROM PRODUCTO WHERE PrecioProveedor>=10 and PrecioProveedor<=20 GO Uso de la función COUNT ( ) Sintaxis: COUNT ( [DISTINCT] expresión) COUNT(*) Donde: - DISTINCT: indica que debe eliminarse los valores duplicados de expresión antes de evaluar la función - COUNT (expresión): Ignora los valores NULL de expresión - COUNT (*) : Se utiliza para contar filas, por lo que no ignora los valores NULL f) Ejercicio: Cuenta la cantidad de productos registrados SELECT COUNT(*) FROM Producto GO g) Ejercicio: Determinar la cantidad de productos despachados a los diferentes locales de la empresa SELECT COUNT (DISTINCT idProducto) FROM GUIA_DETALLE GO Uso de las funciones MAX( ) y MIN( ) Sintaxis: MAX(expresión) MIN( expresión) Ing. Elvis Guillermo Huarcaya Quispe Pág. 92 Gestión de informática II Donde: - expresión: Indica los valores para los que debe hallar el máximo y el mínimo. Si expresión es de tipo fecha retorna la fecha final del rango de valores fecha ordenados y MIN retorna la fecha inicial. Ejercicio: Obtener el precio más alto y más bajo de los productos registrados en la tabla producto SELECT max (PrecioProveedor), min(precioproveedor) FROM producto GO Ejercicio: Obtener la guía de remisión más reciente y más antigua SELECT MAX (fechaSalida), MIN (fechaSalida) FROM GUIA GO Ejercicio: Obtener el nombre del primer producto y del último producto si se ordenaran en base al nombre SELECT MIN (nombre) AS [Primer nombre], MAX (nombre) AS 'Último nombre' FROM PRODUCTO GO Ejercicio: Obtener el menor y el mayor precio del proveedor LACTEOS DEL CENTRO (IdProveedor=1) SELECT MIN (PrecioProveedor) AS 'Menor Precio', MAX (PrecioProveedor)AS 'Mayor Precio' FROM producto WHERE idproveedor=1 Go Uso de la función SUM( ) Sintaxis: SUM ( [ DISTINCT] expresión ) - DISTINCT: Indica que debe eliminarse los valores duplicados de expresión antes de evaluar la función a) Ejercicio: Obtener el monto total de los productos salidos del almacén SELECT SUM (precioVenta*cantidad ) FROM GUIA_detalle go b) Ejercicio: Obtener el Total de unidades despachadas del producto 5 SELECT SUM (cantidad) FROM GUIA_detalle where idproducto=10 go 4. LA CLÁUSULA ORDER BY Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la claúsula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo: SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY Nombre; Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre. Se pueden ordenar los registros por mas de un campo, como por ejemplo: SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY CodigoPostal, Nombre; Incluso se puede especificar el orden de los registros: ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó descendente (DESC) SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY CodigoPostal DESC , Nombre ASC; 5. LA SENTENCIA INSERT La sentencia de INSERT se utiliza para añadir registros a las tablas de la base de datos. Sintaxis: INSERT INTO nombre_fichero [(nombre_columna, ...)] VALUES (expr, ...) Donde: nombre_fichero puede ser únicamente el nombre del fichero o el nombre completo con su camino. Si se utiliza solo el nombre del fichero se utiliza el directorio donde se encuentran los ficheros de la aplicación (C:\geiwin\datos). Ing. Elvis Guillermo Huarcaya Quispe Pág. 93 Gestión de informática II nombre_columna es una lista opcional de nombres de campo en los que se insertarán valores en el mismo número y orden que se especificarán en la cláusula VALUES. Si no se especifica la lista de campos, los valores de expr en la cláusula VALUES deben ser tantos como campos tenga la tabla y en el mismo orden que se definieron al crear la tabla. expr es una lista de expresiones o valores constantes, separados por comas, para dar valor a los distintos campos del registro que se añadirá a la tabla. Las cadenas de caracteres deberán estar encerradas entre comillas „ o " y las fechas entre llaves { }. Ejemplo para añadir un registro a la tabla creada en el ejemplo de CREATE: INSERT INTO D:\LIBROS (TITULO, PAGINAS, FECHA) VALUES („Gestión Escolar Integrada‟, 234,{12/27/95}) Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo solo se han especificado 3 campos con sus respectivos valores, el resto de campos quedaran a nulo. Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo nunca ha tenido un valor. 6. LA SENTENCIA UPDATE La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de la base de datos. Sintaxis: UPDATE nombre_fichero SET nombre_columna = expr, ... [WHERE { condición }] Donde: nombre_fichero puede ser únicamente el nombre del fichero o el nombre completo con su camino. Si se utiliza solo el nombre del fichero se utiliza el directorio donde se encuentran los ficheros de la aplicación (C:\geiwin\datos). nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar. En una misma sentencia UPDATE pueden actualizarse varios campos de cada registro de la tabla. expr es el nuevo valor que se desea asignar al campo que le precede. La expresión puede ser un valor constante o una subconsulta. Las cadenas de caracteres deberán estar encerradas entre comillas „ o " y las fechas entre llaves { }. Las subconsultas entre paréntesis. La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se modificarán. Por ejemplo, subir el precio de compra de la tabla de libros un 10% de aquellos que tengan más de 250 páginas, sería: UPDATE D:\LIBROS SET PRECIO = PRECIO * 1.1 WHERE PAGINAS > 250 Otro ejemplo, para fijar la fecha de matrícula de todos aquellos alumnos que la tienen vacía a la fecha de hoy, se pondría: UPDATE MATRICUL SET FECHA_MATRICULA = TODAY() WHERE FECHA_MATRICULA IS NULL Ejemplo utilizando una subconsulta: UPDATE D:\LIBROS SET PRECIO = (SELECT AVG(PRECIO) FROM D:\LIBROS WHERE PRECIO IS NOT NULL) WHERE PRECIO IS NULL Con esta última sentencia se ha puesto precio a todos los libros que no lo tenían. Ese precio ha sido el resultante de calcular la medía entre los libros que si lo tenían 7. LA SENTENCIA DELETE La sentencia DELETE se utiliza para borrar registros de una tabla de la base de datos. Sintaxis: DELETE FROM nombre_fichero [WHERE { condición }] En donde: nombre_fichero puede ser únicamente el nombre del fichero o el nombre completo con su camino. Si se utiliza solo el nombre del fichero se utiliza el directorio donde se encuentran los ficheros de la aplicación (C:\geiwin\datos). La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se borrarán. Cada sentencia DELETE borra los registros que cumplen la condición impuesta o todos si no se indica cláusula WHERE. DELETE FROM D:\LIBROS WHERE MOD(TODAY - FECHA,365) > 20 Con el ejemplo anterior se borrarían todos los registros de la tabla libros cuya antigüedad, desde la fecha de adquisición, fuera mayor de 20 años. Para borrar las notas de evaluaciones que, no sean la Final, de los alumnos de años anteriores se utilizaría la sentencia: DELETE FROM NOTAS WHERE ANNO < 1995 AND EVALUACION <> „F‟ CONSULTAS MULTITABLAS En la mayoría de los casos, la recuperación de los datos que los usuarios necesitan para trabajar implica la lectura de muchas tablas para que la información obtenida sea de utilidad. Consultas Correlacionadas Un join, combinación ó consulta correlacionada, es la consulta que selecciona columnas de dos tablas o conjuntos de filas, y las entrega en un único conjunto de resultados. Las filas de las tablas o conjuntos de filas se combinan relacionando valores comunes, tíìcamente valores de clave primaria y clave foránea. Sintaxis General: SELECT lista_columnas Ing. Elvis Guillermo Huarcaya Quispe Pág. 94 Gestión de informática II FROM tabla1 Tipo_join JOIN tabla2 ON condicion_del_join - lista_columnas: Es la lista de columnas a mostrar en el resultado de la consulta. Se recomienda que cada columna sea calificada con el alias de la tabla al cual pertenece - tipo_join: Indica si el join es interior (INNER), exterior (OUTER) o irrestricto (CROSS) - condicion_del_join: es una expresión que indica en base a qué columnas de cada una de las tablas se establece la relación entre ellas Una combinación (join) puede ser de cualquiera de los siguientes tipos: - inner join - left outer join - right outer join - full outer join - outer join - cross join Inner Join Un inner join es la consulta correlacionada que combina todas las filas que están relacionadas de las dos tablas ó conjuntos de tablas Ejemplo: Obtener una lista de los productos que registran salida del almacén, los campos a mostrar de la lista deben ser el código del producto, y el nombre del producto SELECT DISTINCT Guia_detalle.idproducto, nombre FROM Guia_detalle INNER JOIN Producto ON Guia_detalle.idProducto=Producto.IdProducto ORDER BY Guia_detalle.idproducto go Simplificando tenemos: SELECT DISTINCT gd.idproducto, p.nombre FROM Guia_detalle gd INNER JOIN Producto p ON gd.idProducto = p.IdProducto ORDER BY gd.idproducto go Ejemplo: Escriba una consulta que lista el catálogo de productos de la empresa. Los campos a mostrar debe ser categoría, Improducto, Nombre, UnidadMedida, PrecioProveedor, además debe estar ordenado por categoría, y luego por el código del producto Ejemplo: Escribir una consulta que muestre los datos de la cabecera de la guía de remisión de número 27, y además su monto total Ing. Elvis Guillermo Huarcaya Quispe Pág. 95 Gestión de informática II SELECT Guia.IdGuia, Guia.IdLocal, Guia.FechaSalida, sum(Guia_detalle.PrecioVenta* Guia_detalle.Cantidad) AS „Monto Total‟ FROM Guia INNER JOIN Guia_detalle ON Guia.IdGuia = Guia_detalle.IdGuia GROUP BY Guia.IdGuia, Guia.IdLocal, Guia.FechaSalida HAVING Guia.IdGuia=15 Ejemplo: Escribir la consulta anterior que muestre la dirección del local al que se enviaron los productos registrados en la guía de remisión número 18 SELECT Guia.IdGuia, Local.Direccion,Guia.FechaSalida, sum(Guia_detalle.PrecioVenta* Guia_detalle.Cantidad) AS 'Monto Total' FROM Guia INNER JOIN Guia_detalle ON Guia.IdGuia = Guia_detalle.IdGuia INNER JOIN Local ON Guia.IdLocal=Local.IdLocal GROUP BY Guia.IdGuia, Local.Direccion, Guia.FechaSalida HAVING Guia.IdGuia=18 Ejemplo: Escribir la consulta que muestre el monto total enviado a cada Distrito SELECT Local.Distrito, Monto = SUM(Guia_detalle.precioVenta * Guia_detalle.cantidad) FROM Local INNER JOIN Guia ON Local.idLocal = Guia.idLocal INNER JOIN Guia_detalle ON Guia.idGuia = Guia_detalle.idGuia GROUP BY Local.Distrito Ejemplo: Escribir la consulta que muestre el total de Unidades despachados al mes del producto de Código 7 SELECT YEAR(Guia.fechaSalida) AS Año, MONTH(Guia.fechaSalida) AS Mes, SUM (Guia_detalle. cantidad) As Unidades FROM Guia INNER JOIN Guia_detalle ON Guia.idGuia = Guia_detalle.idGuia WHERE Guia_detalle.idProducto = 7 GROUP BY YEAR(Guia.fechaSalida) , MONTH(Guia.fechaSalida) ORDER BY Año, Mes Ejemplo: Escribir la consulta que muestre el total de Unidades mensuales de cada producto SELECT producto.idproducto, Producto. nombre, YEAR(Guia.fechaSalida) AS Año, MONTH(Guia.fechaSalida) AS Mes, SUM(Guia_detalle.cantidad) As Unidades FROM Guia INNER JOIN Guia_detalle ON Guia.idGuia = Guia_detalle.idGuia INNER JOIN Producto ON Guia_detalle.idProducto = producto.idproducto GROUP BY producto.idproducto, Producto. nombre, YEAR(Guia.fechaSalida), MONTH(Guia.fechaSalida) Ing. Elvis Guillermo Huarcaya Quispe Pág. 96 Gestión de informática II ORDER BY producto.idproducto, Año, Mes Outer Join Un outer join es la consulta correlacionada que entrega todas las filas que están relacionadas, y además: - las filas no relacionadas de la tabla izquierda (LEFT OUTER JOIN), ó - las filas no relacionadas de la tabla derecha (RIGHT OUTER JOIN), ó - las filas no relacionadas de ambas tablas (FULL OUTER JOIN) Se considera como la tabla izquierda, a aquella que se menciona primero en la cláusula FROM. Ejemplo: Escribir la consulta de los productos que NO registran salida del almacén. . SELECT producto.idproducto, Producto. nombre FROM Producto LEFT OUTER JOIN Guia_detalle ON producto.idproducto = Guia_detalle.idProducto ORDER BY Producto.idproducto Al haber ejecutar la consulta se puede observar que el producto 4 aparece varias veces en el resultado. Esto indica que del producto 4 se tienen varias salidas registradas en la tabla Guia_detalle. Recuerde que una consulta OUTER JOIN entrega filas relacionadas y filas no relacionadas. La consulta es LEFT OUTER JOIN porque estamos buscando valores de idProducto que se encuentran en la tabla Producto, pero que no están en la tabla Guia_detalle. Añadimos a la consulta anterior la columna cantidad de la tabla Guia_detalle. SELECT producto.idproducto, Producto. nombre, Guia_detalle.cantidad FROM Producto LEFT OUTER JOIN Guia_detalle ON producto.idproducto = Guia_detalle.idProducto ORDER BY producto.idproducto Note que para el producto 5, el valor en cantidad es NULL. Este producto es uno de los productos que NO registra salida del almacén. Modifique la consulta anterior para que muestre solo los productos que NO registran salida del almacén. Ing. Elvis Guillermo Huarcaya Quispe Pág. 97 Gestión de informática II SELECT producto.idproducto, producto.nombre FROM Producto LEFT OUTER JOIN Guia_detalle ON producto.idproducto = Guia_detalle.idProducto WHERE Guia_detalle.cantidad IS NULL ORDER BY Producto.idProducto Hay 72 productos que NO tienen registrada salida del almacén, que sumados a los 66 productos que tienen salida registrada, nos da un total de 138 productos. Ejemplo: Escribir la consulta que muestre el reporte de unidades despachadas de cada producto SELECT producto.idproducto, Producto. nombre, SUM(Guia_detalle.cantidad) AS Unidades FROM Producto INNER JOIN Guia_detalle ON producto.idproducto = Guia_detalle.idProducto GROUP BY producto.idproducto, Producto. nombre ORDER BY producto.idproducto Note que el resultado no muestra todos los productos. Para que se muestren todos los productos convierta la consulta INNER JOIN en una consulta OUTER JOIN, y para los productos en los que cantidad es NULL que se muestre O (cero) como el valor en cantidad. SELECT Producto.idProducto, Producto.nombre, ISNULL(SUM(Guia_detalle.cantidad) , 0) AS Unidades FROM Producto LEFT OUTER JOIN Guia_detalle ON producto.idProducto = Guia_detalle.idProducto GROUP BY producto.idproducto, Producto.nombre ORDER BY producto.idproducto La instrucción SELECT...INTO Puede colocar el resultado de cualquier consulta en una nueva tabla usando la sentencia SELECT...INTO. Use la sentencia SELECT...INTO para crear nuevas tablas en la base de datos. También puede usar la sentencia SELECT INTO para solucionar problemas en los que requiere leer datos desde varias fuentes. Sintaxis: SELECT lista_columnas INTO nombre_nueva_tabla FROM tabla WHERE condición_filas - SELECT...INTO siempre crea la tabla destino. Si el nombre especificado en nombre_nueva_tabla ya existe se produce un error. Ing. Elvis Guillermo Huarcaya Quispe Pág. 98 Gestión de informática II Ejemplo: Escribir la consulta que cree una tabla de nombre Monto_guias que registre el monto de cada una de las guías de remisión. SELECT Guia.idGuia, Guia.fechaSalida, SUM(Guia_detalle.precioVenta * Guia_detalle.cantidad) AS Monto INTO Monto_guias FROM Guia INNER JOIN Guia_detalle ON Guia.idGuia = Guia_detalle.idGuia GROUP BY Guia.idGuia, Guia.fechaSalida ORDER BY Guia.idGuia Go Revisando la tabla: SELECT * from Monto_guias Go Ejemplo: Crear una tabla temporal que contenga los siguientes columnas: el código de Orden de Compra, y su fecha respectiva, además del monto por cada número de Orden Cuando en una instrucción que crea una tabla se especifica el nombre de la tabla precedido del símbolo #, el objeto se crea como una tabla temporal. SELECT Orden.idOrden, Orden.fechaOrden, SUM(Orden_detalle.precioCompra *Orden_detalle.cantidadRecibida) AS Monto INTO #Monto_ordenes FROM Orden INNER JOIN Orden_detalle ON Orden.idOrden = Orden_detalle.idOrden GROUP BY Orden.idOrden, Orden.fechaOrden ORDER BY Orden.idOrden Para consultar la tabla temporal, ejecute: SELECT * FROM #Monto_ordenes Consulta autojoin Es una consulta correlacionada en la que una tabla se combina consigo misma para generar un nuevo conjunto de resultados. Ejemplo: Para ilustrar este tipo de consulta crearemos una tabla que tenga una autorelación. . Esta tabla contiene una clave foránea que apunta a la clave primaria en la misma tabla. Ing. Elvis Guillermo Huarcaya Quispe Pág. 99 Gestión de informática II Ejecute las siguientes instrucciones para crear y cargar los datos en la tabla. -- Consulta autojoin, creación de la tabla con autorelación CREATE TABLE Trabajador ( idTrabajador int NOT NULL PRIMARY KEY, Apellidos varchar(30) NOT NULL, Jefe int NULL ) Go ALTER TABLE Trabajador ADD CONSTRAINT fk_Trabajador_Trabajador FOREIGN KEY(Jefe) REFERENCES Trabajador Go INSERT INTO Trabajador VALUES(102, 'Ardiles Soto', NULL) INSERT INTO Trabajador VALUES(101, 'Camacho Saravia',102) INSERT INTO Trabajador VALUES(105, 'Vilchez Santos',102) INSERT INTO Trabajador VALUES(103,'Sánchez Aliaga',101) INSERT INTO Trabajador VALUES(104,'Castro Avila',101) INSERT INTO Trabajador VALUES(107,'Urrunaga Tapia',101) INSERT INTO Trabajador VALUES(106,'Juárez Pinto',105) go SELECT * FROM Trabajador Go La columna jefe de la tabla Trabajador registra el código del jefe de un trabajador. Por ejemplo, el trabajador 101 (Camacho Saravia) es el jefe de los trabajadores 103, 104 Y 107. Se desea crear una consulta que muestre una lista de trabajadores. La lista debe mostrar los apellidos del jefe de cada trabajador. SELECT Tr.idTrabajador, Tr.apellidos, Trj.apellidos AS Jefe FROM Trabajador Tr INNER JOIN Trabajador Trj ON Tr.jefe = Trj.idTrabajador Ing. Elvis Guillermo Huarcaya Quispe Pág. 100 Gestión de informática II Note que el resultado muestra a todos los trabajadores con su respectivo jefe, pero el trabajador 102 (Ardiles Soto) no aparece en la lista porque él no tiene jefe. Modificar la consulta para que se muestre también el trabajador 102 SELECT Tr.idTrabajador, Tr.apellidos, Trj.apellidos AS Jefe FROM Trabajador Tr LEFT OUTER JOIN Trabajador Trj ON Tr.jefe = Trj.idTrabajador SUBCONSULTAS Un subconsulta es una declaración SELECT anidada dentro una sentencia SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta. Si la respuesta a un requerimiento de datos requiere la ejecución de una serie de pasos lógicos, utilice subconsultas para tratar de resolver el requerimiento con una sola sentencia. Las subconsultas son de los tipos siguientes: - Subconsulta que entrega un solo valor (1 fila, 1 columna) - Subconsulta que entrega un conjunto de valores (varias filas, 1 columna) Una subconsulta se especifica entre paréntesis, y se puede especificar en cualquier parte donde la sintáxis permite una expresión. Subconsulta que entrega un solo valor (1 fila, 1 columna) Cuando la subconsulta se especifica: - en la lista de columnas del SELECT externo, ó - en la cláusula WHERE del SELECT externo usando un operador relacional (test de comparación), la subconsulta debe ser una que entregue un solo valor. Ejemplo: Escribir una consulta que entregue la lista de precios de todos los productos, especificando en una columna adicional la diferencia entre el precio de cada producto y el precio promedio de todos los productos. Primero, especifique la consulta que entrega el precio promedio de todos los productos. SELECT AVG(precioProveedor) FROM Producto go Ahora, escriba la consulta que entrega la lista de precios solicitada teniendo en cuenta la fórmula que determina la diferencia entre el precio de cada producto y el precio promedio de todos los productos. SELECT idproducto, nombre, precioProveedor, Diferencia = precioProveedor - (SELECT AVG(precioProveedor) FROM Producto) FROM Producto Ing. Elvis Guillermo Huarcaya Quispe Pág. 101 Gestión de informática II Go Ejemplo: Escribir una consulta que muestre el Porcentaje de unidades despachadas de cada producto de la categoría 4 respecto al total despachado de la categoría Primero, escriba la consulta que calcula el total despachado para la categoría 4. SELECT SUM(cantidad) FROM Guia_detalle INNER JOIN Producto ON Guia_detalle.idProducto = producto.idproducto WHERE Producto.idCategoria = 4 Go Ahora, escriba la consulta que, utilizando la consulta anterior, presente el listado requerido. SELECT producto.idproducto, Producto. nombre, Despachado = ISNULL(SUM(Guia_detalle.cantidad), 0), Porcentaje = CONVERT(float, ISNULL(SUM(Guia_detalle.cantidad), 0)) / (SELECT SUM(cantidad) FROM Guia_detalle INNER JOIN Producto ON Guia_detalle.idProducto = producto.idproducto WHERE Producto.idCategoria = 4) * 100 FROM Producto LEFT OUTER JOIN Guia_detalle ON producto.idproducto = Guia_detalle.idProducto WHERE Producto.idCategoria = 4 GROUP BY producto.idproducto, Producto. nombre go Ejemplo: Escriba una consulta que entregue una lista de los productos que se despacharon en la fecha que se despachó la última salida del almacén. Tenga en cuenta que en dicha fecha se puede haber registrado más de una salida. Primero, obtenga la fecha de la última salida SELECT MAX(fechaSalida) FROM Guia go Ahora, utilizando adecuadamente la consulta anterior, escriba la consulta que responde al requerimiento especificado. SELECT DISTINCT Guia_detalle.idProducto, Producto. nombre FROM Guia_detalle INNER JOIN Producto ON Guia_detalle.idProducto = Producto.idproducto INNER JOIN Guia ON Guia_detalle.idGuia = Guia.idGuia WHERE CONVERT(char(10), Guia.fechaSalida, 103) = (SELECT CONVERT(char(10), MAX(fechaSalida), 103) FROM Guia) Ing. Elvis Guillermo Huarcaya Quispe Pág. 102 Gestión de informática II go Subconsulta que entrega un conjunto de valores (varias filas, 1 columna) Cuando la subconsulta se define en la cláusula WHERE del SELECT externo utilizando el operador IN (test de pertenencia), puede ser una subconsulta que entrega un conjunto de valores. Ejemplo: Escriba una consulta que entregue una lista de los productos que no registran salida del almacén. Use la cláusula NOT IN SELECT idProducto, nombre FROM Producto WHERE idProducto NOT IN (SELECT idproducto FROM Guia_detalle) ORDER BY idproducto go Subconsulta correlacionada Se presenta cuando la consulta externa debe entregar datos a la consulta interna para que se pueda ejecutar. La consulta interna se evalúa repetidamente, una vez por cada fila de la consulta externa. Se puede definir en la cláusula WHERE de la consulta externa usando el operador EXISTS (Test de existencia). Ejemplo: Genere la lista de productos que registran salida del almacén. SELECT producto.idproducto, Producto. nombre FROM Producto WHERE EXISTS (SELECT * FROM Guia_detalle WHERE producto.idproducto = Guia_detalle.idProducto) ORDER BY producto.idproducto go Ing. Elvis Guillermo Huarcaya Quispe Pág. 103 Gestión de informática II ADMINISTRACIÓN DE BASES DE DATOS GESTIÓN DE BASE DE DATOS - Bases de datos predeterminadas en SQL Server - Archivos de una base de datos - Creación de una Base de Datos - Recopilación de información de la Base de Datos - Configuración de opciones de la Base de Datos - Administración de los archivos de la Base de Datos - Renombrar una Base de Datos - Trabajar con grupos de archivos de Base de Datos - Eliminación de una Base de Datos Una Base de datos es una colección de tablas que contienen datos y además otros objetos tales como vistas, índices, procedimientos almacenados, funciones definidas por el usuario, definidos para soportar las operaciones a ejecutar con los datos. Bases de datos Predeterminadas Después de instalar SQL Server 2000, se instalan las bases de datos siguientes - Bases de datos del Sistema Estas bases de datos del sistema no las puede quitar - Master: Es la clave para ejecutar SQL Server - Model: Es como si fuera una plantilla para la creación de una nueva base de datos. Por lo tanto cualquier objeto que exista en la base de datos model se copia a la nueva base de datos - Tempdb: Es el lugar donde se realizan los ordenamientos, las uniones y demás actividades que requieren un espacio temporal - Base de Datos Ejemplos Las siguientes Bases de datos son ejemplos propios de SQL Server, si desea puede quitarles y no ocasionará problemas en sus servidores SQL Server - Pubs: Es una herramienta de aprendizaje acerca de una editorial que incluye información acerca de los autores, libros y ventas - Northwind (Neptuno): Ha sido la base de datos de ejemplo que se proporciona con Microsoft Access Archivos de una Base de Datos Una Base de Datos SQL está formada por tres tipos de archivos: a) Archivo primario Es el archivo de inicio de una base de datos. Almacena las tablas de sistema de la base de datos, y puede también almacenar las tablas de usuario y otros objetos de la base de datos. Cada base de datos tiene un solo archivo primario, siendo .mdf la extensión del archivo b) Archivos secundarios Se usan para almacenar tablas de usuario y demás objetos de la base de datos. Si el archivo primario almacena todos los objetos, entonces el uso de los archivos secundarios no es necesario. Sin embargo en ocasiones, la base de datos es muy grande siendo necesario distribuir en múltiples archivos secundarios, pudiendo distribuirse en diferentes discos. La extensión de los archivos secundarios es .ndf c) Archivo de registro de transacciones (transact log) Este archivo registra todas las transacciones a ejecutar sobre la base de datos y es un mecanismo de seguridad para recuperar la base de datos ante la eventualidad de una falla en el sistema. Toda Base de Datos debe tener por lo menos un archivo de transacciones. La extensión del archivo es .ldf ¿Cómo trabaja el registro de transacciones? El archivo de registro de transacciones almacena todas las transacciones llevadas a cabo con las sentencias INSERT, UPDATE, y DELETE; es decir graba todas las modificaciones de datos a medida que se producen Ing. Elvis Guillermo Huarcaya Quispe Pág. 104 Gestión de informática II SQL Server graba todas las transacciones en un registro de transacciones para mantener la coherencia de la base de datos y facilitar la recuperación. El registro es un área de almacenamiento que efectúa automáticamente el seguimiento de todos los cambios en la base de datos. SQL Server graba las modificaciones al registro en disco cuando se ejecutan, El proceso de registro es el siguiente: 1. La aplicación envía una modificación de datos. 2. Cuando la modificación se ejecuta, las páginas de datos afectadas se cargan en la caché del búfer desde el disco. 3. Cada instrucción de modificación de datos se graba en el registro mientras se ejecuta. El cambio siempre se graba en el registro y se escribe en disco antes de hacer la modificación en la base de datos. Este tipo de registro se denomina registro de preescritura. 4. De forma repetitiva, el proceso de punto de comprobación escribe en disco todas las transacciones completadas en la base de datos. Si se produce un error del sistema, el proceso automático de recuperación utiliza el registro de transacciones para aplicar todas las transacciones confirmadas y deshacer las transacciones incompletas. CREACIÓN DE UNA BASE DE DATOS Puede definir una base de datos mediante el Administrador corporativo de SQL Server o mediante la instrucción CREATE DATABASE en el Analizador de consultas SQL. El proceso de definición de una base de datos crea también un registro de transacciones para esa base de datos. Sintaxis: CREATE DATABASE nombre_base_datos ON [ PRIMARY] ( NAME = nombre_lógico_data, FILENAME = „ubicación _y_nombre_archivo_data‟, SIZE= tamaño [KB|MB|GB|TB], MAXSIZE= tamaño_máximo [KB|MB|GB|TB|UNLIMITED %], FILEGROWTH=incremento_crecimiento [KB|MB|%] ) LOG ON ( NAME = nombre_lógico_log, FILENAME = „ubicación _y_nombre_archivo_log‟, SIZE= tamaño [KB|MB|GB|TB], MAXSIZE= tamaño_máximo [KB|MB|GB|TB|UNLIMITED %] , FILEGROWTH=incremento_crecimiento [KB|MB|%] ) Donde: - ON PRIMARY: Define las propiedades del archivo primario. El grupo de archivos principal o primario contiene todas las tablas del sistema de la base de datos. Todas las bases de datos tienen un archivo de datos principal. - LOG ON: Define las propiedades del archivo de registro de transacciones - nombre_lógico_data, nombre_lógico_log: Es el nombre a utilizar cuando en una sentencia SQL se tiene que hacer referencia al archivo de datos o al archivo log respectivamente - ubicación _y_nombre_archivo: es una cadena que incluye la ruta y el nombre de archivo - tamaño: especifica el tamaño del archivo, el tamaño especificado para el archivo de datos principal debe ser, al menos, como el tamaño del archivo principal de la base de datos model Ing. Elvis Guillermo Huarcaya Quispe Pág. 105 Gestión de informática II - tamaño_máximo: es el máximo tamaño que puede alcanzar el archivo si se requiere de espacio adicional, Si no se especifica el tamaño, el archivo crece hasta que el disco esté lleno. - incremento_crecimiento: es la cantidad de espacio que se añade al archivo cada vez que se necesita espacio adicional. El valor de FILEGROWTH de un archivo no puede sobrepasar el valor de MAXSIZE. Un valor de 0 indica que no hay crecimiento. Ejemplo: El siguiente ejemplo crea una base de datos denominada BDEjemplo con un archivo de datos principal de 10 MB con un 20 % de crecimiento, con tamaño máximo de 15 MB y un archivo de registro de 3 MB CREATE DATABASE BDEjemplo ON PRIMARY ( NAME=BDEjemplo_Data, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\BDEjemplo_Data.mdf', SIZE=10 MB, MAXSIZE= 15MB, FILEGROWTH=20% ) LOG ON ( NAME=BDEjemplo_log, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\BDEjemplo_Log.ldf', SIZE=3MB, MAXSIZE=5MB, FILEGROWTH=1MB ); Nota: Cuando se crea una Base de Datos se añade una entrada con el nombre de la base de datos en la tabla de sistema sysdatabases de la base de datos master Ejemplo: Crear una Base de Datos de nombre AlquilerVideos que almacene dos archivos de datos, con tamaño normal de 8MB con un máximo tamaño de 15MB, y un crecimento del 18%. Debe almacenar también dos archivos de registros de tamaño normal de 4MB CREATE DATABASE AlquilerVideos ON PRIMARY ( NAME=AlquilerVideos_Data1, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\AlquilerVideos_Data1.mdf', SIZE=8MB, MAXSIZE=15MB, FILEGROWTH=18% ), ( NAME=AlquilerVideos_Data2, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\AlquilerVideos_Data2.ndf', SIZE=8MB, MAXSIZE=15MB, FILEGROWTH=18% ) LOG ON ( NAME=AlquilerVideos_Log1, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\AlquilerVideos_Log1.ldf', SIZE=4MB, MAXSIZE=15MB, FILEGROWTH=1MB ), ( NAME=AlquilerVideos_Log2, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\AlquilerVideos_Log2.ldf', SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=2MB ) GO RECOPILACIÓN DE INFORMACIÓN DE LA BASE DE DATOS Ing. Elvis Guillermo Huarcaya Quispe Pág. 106 Gestión de informática II Puede recopilar información de su base de datos de varias formas. Puede utilizar el Administrador Corporativo o el Analizador de Consultas de SQL Server y ejecutar algunos procedimientos almacenados del sistema. Ejemplo: EXEC sp_helpdb Go Ejemplo: EXEC sp_helpdb AlquilerVideos Go CONFIGURACIÓN DE OPCIONES DE LA BASE DE DATOS Después de haber creado una base de datos, puede definir opciones de base de datos con el Administrador corporativo de SQL Server o por medio de la instrucción ALTER DATABASE. Puede configurar varias opciones de base de datos, pero sólo se puede hacer en una sola base de datos al mismo tiempo. Para que las opciones afecten a todas las bases de datos nuevas, cambie la base de datos model. Mediante el Administrador Corporativo 1. Ubicar la Base de Datos con la que desea trabajar (Emplearemos la Base de Datos Alquiler de Videos) 2. Hacer clic con el botón derecho y seleccionar la opción Propiedades del menú contextual 3. Luego se mostrará el cuadro de diálogo Propiedades 4. Hacer clic en la ficha opciones 5. Activar el acceso como un único usuario EXEC sp_helpdb EXEC sp_helpdb baseDeDatos Ing. Elvis Guillermo Huarcaya Quispe Pág. 107 Gestión de informática II ADMINISTRACIÓN DE LOS ARCHIVOS DE LA BASE DE DATOS ALTER DATABASE .. Permite añadir o eliminar archivos de una base de datos. Se puede utilizar también para modificar los atributos de los archivos, tales como el nombre o el tamaño de un archivo. También se puede usar para cambiar el nombre de una base de datos, y para configurar las opciones de configuración de una base de datos. Sintaxis: ALTER DATABASE nombre_base_datos ADD FILE especificación_archivo, … | ADD LOG FILE especificación_archivo | REMOVE FILE nombre_lógico_archivo | MODIFY FILE especificación archivo - especificación_archivo: son los atributos del archivo de base de datos tal como se definieron en el comando CREATE DATABASE - opción_configuración_base_datos: es una de las opciones de configuración de base de datos definidas en el procedimiento sp_dboption Ejemplo: Incrementar el tamaño de la Base de Datos BDEjemplo: 1. Visualizamos el tamaño de la Base de Datos USE Master go sp_helpdb BDEjemplo go Ing. Elvis Guillermo Huarcaya Quispe Pág. 108 Gestión de informática II 2. Cambiamos el tamaño del archivo primario ALTER DATABASE BDEjemplo MODIFY FILE ( NAME=BDEjemplo_Data, SIZE=20MB ) go sp_helpdb BDEjemplo go Ejercicio: Incrementar el tamaño de la Base de Datos AlquilerVideos Ejemplo: Añadir un archivo secundario a la Base de Datos BDEjemplo ALTER DATABASE BDEjemplo ADD FILE ( NAME=BDEjemplo_Data2, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\BDEjemplo_Data2.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=1MB ) Go sp_helpdb BDEjemplo go Ejemplo: Añadir un archivo de registro de tamaño 6MB a la base de datos BDEjemplo ALTER DATABASE BDEjemplo ADD LOG FILE ( NAME=BDEjemplo_Log2, FILENAME='C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\BDEjemplo_Log2.ldf', SIZE=6MB, MAXSIZE=10MB, FILEGROWTH=2MB Ing. Elvis Guillermo Huarcaya Quispe Pág. 109 Gestión de informática II ) sp_helpdb BDEjemplo go Ejemplo: Eliminación de un archivo de la base de datos BDEjemplo ALTER DATABASE BDEjemplo REMOVE FILE BDEjemplo_Data2 Go RENOMBRAR UNA BASE DE DATOS Para cambiar el nombre de la base de datos deberá ejecutar el siguiente procedimiento almacenado del sistema llamado sp_renamedb Sintaxis: EXEC sp_renamedb „nombre_anterior‟ , „nombre_nuevo‟ Previamente debe tomar en cuenta lo siguiente: - Algunas secuencia de comando de SQL podrían depender del nombre de la base de datos para ejecutarse correctamente - La base de datos debe encontrarse en modo de un único usuario - Si cambia el nombre de la base de datos los nombres de los archivos, así como los de los grupos de archivos no saldrán afectados - Para ejecutar el procedimiento almacenado del sistema llamado sp_renamedb, debe encontrarse en la base de datos Master REDUCCIÓN DEL TAMAÑO DE UNA BASE DE DATOS La instrucción DBCC SHRINKFILE Reduce el tamaño de un archivo de base de datos para la base de datos activa Sintaxis: DBCC SHRINKFILE ( nombre_lógico_archivo, tamaño_final_en_MB) Solo pueden ejecutar esta instrucción los miembros del rol fijo de servidor sysadmin y del rol fijo de base de datos db_owner La instrucción DBCC SHRINKDATABASE Reduce el tamaño de los archivos de datos de la base de datos especificada Sintaxis: DBCC SHRINKDATABASE (nombre_base_datos, porcentaje_espacio_libre_después_reducción) Solo pueden ejecutar esta instrucción los miembros del rol fijo de servidor sysadmin y del rol fijo de base de datos db_owner Ejemplo: Reducir el tamaño del archivo primario de la base de datos BDEjemplo hasta 10MB Use BDEjemplo Go DBCC SHRINKFILE(BDEjemplo_Data, 10) Go Ing. Elvis Guillermo Huarcaya Quispe Pág. 110 Gestión de informática II Ejemplo: Reducir el tamaño de registros BDEjemplo_Log2 hasta 4MB DBCC SHRINKFILE(BDEjemplo_Log2, 4) Go Sp_helpdbBDEJEMPLO Go Ejemplo: Reducir toda la Base de Datos hasta que quede sólo 50% de espacio libre DBCC SHRINKDATABASE (BDEjemplo, 50) ELIMINACIÓN DEL TAMAÑO DE UNA BASE DE DATOS Cuando eliminamos una base de datos, se eliminan los archivos que conforman la base de datos. Si no se dispone de copia de seguridad de estos archivos, la base de datos se pierde definitivamente La instrucción DROP DATABASE Elimina una o más bases de datos de un servidor SQL. La operación elimina los archivos que conforman la base de datos. Sintaxis: DROP DATABASE nombre_base_datos, … GESTIÓN DE LA SEGURIDAD DE BASE DE DATOS 1. IMPLEMENTACIÓN DEL MODO DE AUTENTICACIÓN Se puede proteger SQL Server 2000 mediante la implementación del Modo de autenticación o del Modo mixto de Windows. Proceso de autenticación SQL Server puede delegar en Windows la autenticación de las cuentas de inicio de sesión o puede autenticar las cuentas de inicio de sesión por sí mismo. Ing. Elvis Guillermo Huarcaya Quispe Pág. 111 Gestión de informática II ¿Cómo procesa SQL Server las cuentas de inicio de sesión que autentica Windows? A continuación se describe cómo procesa SQL Server las cuentas de inicio de sesión que autentica Windows : - Cuando un usuario se conecta con SQL Server, el cliente abre una conexión de confianza con SQL Server, que pasa las credenciales de seguridad de Windows del usuario a SQL Server. - Como el cliente tiene abierta una conexión de confianza, SQL Server sabe que Windows ya ha validado la cuenta de inicio de sesión. - Si SQL Server encuentra la cuenta de usuario o de grupo de Windows del usuario en la lista de cuentas de inicio de sesión de SQL Server que se encuentra en la tabla del sistema sysxlogins, acepta la conexión. SQL Server no necesita volver a validar la contraseña porque Windows 2000 ya la ha validado. ¿Cómo procesa SQL Server las cuentas de inicio de sesión que él mismo autentica? SQL Server emplea los siguientes pasos para procesar las cuentas de inicio de sesión que él mismo autentica: - Cuando un usuario conecta con una cuenta de inicio de sesión y contraseña de SQL Server, éste comprueba si existe la cuenta de inicio de sesión en la tabla sysxlogins y si la contraseña especificada coincide con la contraseña registrada. - Si SQL Server no tiene configurada una cuenta de inicio de sesión para el usuario, la autenticación falla y la conexión se rechaza. Elección del modo de seguridad o autenticación de SQL Server SQL Server proporciona dos modos de seguridad distintos: a) El Modo Integrado de Windows b) El Modo Mixto (Autenticación integrada de Windows como autenticación de SQL Server) Los modos de seguridad determina si sólo Windows, o tanto Windows como SQL Server son responsables de validar solicitudes de conexión de SQL Server Modo de Autenticación SQL Server Es el modo en el cual acepta un ID de inicio de sesión y una contraseña de un usuario, y verifica la validación sin ayuda de Windows. Si se conecta por medio del inicio de sesión, entonces está utilizando el Modo de autenticación SQL Server. Por lo tanto la tabla de sistema sysxlogins contiene una entrada para el ID de inicio de sesión sa, junto con una contraseña Contraseña: Las contraseñas de inicio de sesión en Modo autenticación de SQL Server se mantienen en la columna password de la tabla en la base de datos master Use Master Ing. Elvis Guillermo Huarcaya Quispe Pág. 112 Gestión de informática II go SELECT name, password FROM sysxlogins Go BUILTIN\ Administradores: Representa el grupo local de administradores de Windows sa: Se agrega de manera predeterminada en el momento de la instalación, para este caso la contraseña es nula (NULL) carla: tiene una contraseña representada por el texto cifrado Ventajas del Modo de autenticación de Windows Utilice el modo de Autenticación de Windows en entornos de red en los que todos los clientes admiten conexiones de confianza. La autenticación de Windows ofrece varias ventajas frente a la autenticación de SQL Server, ya que: - Proporciona más características, como la validación y el cifrado seguros de contraseñas, la auditoria, la caducidad de las contraseñas, la longitud mínima de la contraseña y el bloqueo de las cuentas después de contraseñas no válidas. - Permite agregar grupos de usuarios a SQL Server con sólo agregar una única cuenta de inicio de sesión. - Permite que los usuarios tengan acceso a SQL Server rápidamente, sin necesidad de recordar otra cuenta de inicio de sesión y contraseña. Ventajas del Modo mixto - Un usuario puede conectarse a SQL Server utilizando ya sea el Modo integrado de Windows, o el Modo de autenticación de SQL Server - Es la mejor selección para obtener compatibilidad con versiones anteriores de SQL Server. - Proporciona mayor conectividad con clientes que no utilicen Windows que estén conectados en red, como los usuarios Novell Netware Cifrado El cifrado es un método de protección de la información confidencial que se crea pasando los datos a un formato ilegible. Garantiza la seguridad de los datos, incluso si se ven directamente. Cifrado interno SQL Server puede cifrar: - Las contraseñas de inicio de sesión almacenadas en SQL Server. Cifrado de red SQL Server permite que se cifren los datos que se envían entre el cliente y el servidor. Esto garantiza que cualquier aplicación o usuario que intercepte los paquetes de datos de la red no pueda ver los datos confidenciales, por ejemplo, contraseñas enviadas a través de la red cuando los usuarios inician sesión en SQL Server, o datos personales que contienen información acerca de los salarios. Pasos para implementar un modo de autenticación Ing. Elvis Guillermo Huarcaya Quispe Pág. 113 Gestión de informática II Creación de cuentas de inicio de sesión Puede crear cuentas de inicio de sesión a partir de usuarios y grupos de Windows existentes, o puede crear nuevas cuentas de inicio de sesión en SQL Server. También puede utilizar una de las cuentas de inicio de sesión predeterminadas. Las cuentas de inicio de sesión están almacenadas en la tabla del sistema master.sysxlogins. Cuentas de inicio de sesión predeterminadas SQL Server tiene dos cuentas de inicio de sesión predeterminadas: - BUILTIN\Administradores: Se proporciona como cuenta de inicio de sesión predeterminada para todos los administradores de Windows. Tiene todos los derechos sobre SQL Server y todas las bases de datos. - El administrador del sistema (sa): Es una cuenta de inicio de sesión especial que tiene todos los derechos sobre SQL Server y todas las bases de datos. Configurar el modo de seguridad Para establecer qué modo de seguridad está utilizando su servidor, inicie el Administrador Corporativo ya haga clic con el botón derecho del Mouse en su servidor, el cual se encuentra en el panel izquierdo. Seleccione la opción Propiedades del menú contextual y haga clic en la ficha de seguridad Agregar una cuenta de inicio de sesión de Windows XP a SQL Server Puede utilizar el Administrador corporativo de SQL Server o el procedimiento almacenado del sistema sp_grantlogin para permitir que una cuenta de usuario o de grupo de Windows se conecte con SQL Server. Sólo los administradores del sistema o de seguridad pueden ejecutar sp_grantlogin. Ing. Elvis Guillermo Huarcaya Quispe Pág. 114 Gestión de informática II El nombre especificado al crear una cuenta es el nombre del usuario o grupo de Windows que se va a agregar. a) Configuración de grupos y usuarios de Windows XP b) Otorgar permiso a las cuentas de Windows XP para iniciar sesión en SQL Server Después de establecer los usuarios y grupos, se otorga a esos grupos el acceso a SQL Server. Hay dos formas utilizando procedimientos almacenados y mediante el administrador corporativo Utilizando procedimientos almacenados de sistema sp_grantlogin „inicio_sesión‟ Otorga el derecho de iniciar sesión en SQL Server al grupo o usuarios de de Windows sp_revokelogin „inicio_sesión‟ Permite quitar el derecho de inicio de sesión en SQL Server a un usuario o grupo de usuarios Sp_denylogin „inicio_sesión‟ Niega el derecho de iniciar sesión en SQL Server a un usuario o grupo de usuarios Agregar una cuenta de inicio de sesión de SQL Server Puede utilizar el Administrador corporativo de SQL Server o el procedimiento almacenado del sistema sp_addlogin para crear una cuenta de inicio de sesión de SQL Server. Sólo los administradores del sistema o de seguridad pueden ejecutar sp_addlogin. Al crear una nueva cuenta de inicio de sesión de SQL Server se agrega un registro a la tabla sysxlogins de la base de datos master. sp_addlogin „sunombre‟, „su_contraseña‟ Otorga el derecho de iniciar sesión en SQL Server sp_password „anterior‟, „nueva‟, „ini_sesión‟ Cambia la contraseña de inicio sesión en SQL Server Los administradores del sistema pueden cambiar la contraseña de cualquier usuario mediante sp_password con NULL como contraseña antigua. Los usuarios y administradores del sistema también pueden cambiar las contraseñas con Propiedades de inicio de sesión. SQL Server tiene dos tipos de inicio de sesión: - Inicios de sesión de Windows, ya sea por medio de ID‟s de usuarios individuales o grupos - Inicio de sesión de SQL Server, los cuales se guardarán en la tablas sysxlogins que se encuentra en la base de datos Master 2. ASIGNACIÓN DE CUENTAS DE INICIO DE SESIÓN A USUARIOS Y FUNCIONES Después de agregar cuentas de inicio de sesión a SQL Server puede asignarlas a cuentas de usuarios o funciones de cada una de las bases de datos a las que los usuarios tengan acceso Ing. Elvis Guillermo Huarcaya Quispe Pág. 115 Gestión de informática II Después de agregar cuentas de inicio de sesión a SQL Server, puede asignarlas a cuentas de usuario o funciones en cada una de las bases de datos a las que los usuarios tengan acceso. La tabla del sistema sysusers de una base de datos contiene una fila por cada usuario de Windows, grupo de Windows, usuario de SQL Server o función de la base de datos. Los permisos se aplican a las entradas de la tabla sysusers y se almacenan en la tabla sysprotects de la base de datos actual. 2.1 ASIGNACIÓN DE CUENTAS DE INICIO DE SESIÓN A CUENTAS DE USUARIOS DE BASES DE DATOS Una vez configurada la seguridad de inicio de sesión y establecidos los inicios de sesión, puede empezar a configurar el acceso a las bases de datos. Tener un inicio de sesión en SQL Server no le proporciona acceso a ninguna base de datos al servidor. Para ello debe tener un nombre de usuario de base de datos. Para tener acceso a una base de datos, una cuenta de inicio de sesión puede ser utilizada a una cuenta de usuario asignada o una predeterminada. a) Agregar cuentas de usuario a una base de datos Para agregar una cuenta de usuario a una base de datos, puede utilizar el Administrador corporativo de SQL Server o ejecutar el procedimiento almacenado del sistema sp_grantdbaccess. También puede agregar cuentas de usuario a bases de datos al crear cuentas de inicio de sesión. Sólo los propietarios de la base de datos o los administradores del acceso a la base de datos pueden ejecutar el procedimiento sp_grantdbaccess. En el árbol de consola del Administrador corporativo de SQL Server, cada base de datos tiene una carpeta Users. Aquí se muestra la lista de usuarios actual de la base de datos y se le permite agregar y quitar usuarios y personalizar sus propiedades. En la tabla siguiente se enumeran otros procedimientos almacenados del sistema que se pueden utilizar para administrar el acceso a la base de datos. Procedimiento almacenado de sistema Descripción sp_grantdbaccess „inicio_de_sesión‟ Otorga una cuenta de seguridad a la base de datos actual. Sp_revokedbaccess „inicio_de_sesión‟ Quita una cuenta de seguridad de la base de datos actual. sp_helpuser Visualiza la información de todos los usuarios que tienen acceso a la Base de Datos sp_helpuser [nombre_usuario] Obtiene un informe para un informe para un usuario específico b) Cuenta de usuario dbo Al crear una base de datos, ya se tiene un usuario. Uno de estos se llama dbo (propietario de la base de datos). El usuario dbo asigna de manera predeterminada al inicio de sesión sa. Al instalar SQL Server, el inicio de sesión sa Ing. Elvis Guillermo Huarcaya Quispe Pág. 116 Gestión de informática II considera como el propietario de todas las bases de datos. Si otro inicio de sesión crea una base de datos, ese inicio de sesión es el propietario de base de datos Cualquier objeto que cree un administrador del sistema pertenece automáticamente a dbo. El usuario dbo es una cuenta predeterminada y no se puede eliminar. c) Cuenta de usuario guest La cuenta de usuario guest permite inicios de sesión sin cuentas de usuario para tener acceso a una base de datos. Las cuentas de inicio de sesión asumen la identidad del usuario guest cuando se cumplen las dos condiciones siguientes: Se pueden aplicar permisos al usuario guest como si se tratara de cualquier otra cuenta de usuario. Puede eliminar y agregar el usuario guest a cualquier base de datos excepto a las bases de datos master y tempdb. Nota: Al iniciar una sesión puede acceder a todas las bases de datos del sistema, así como a las bases de datos Pubs y Northwind, esto es gracias al nombre de usuario guest 2.2 ASIGNACIÓN DE CUENTAS DE INICIO DE SESIÓN A FUNCIONES Las funciones proporcionan un medio para agrupar usuarios en una sola unidad a la que se pueden aplicar permisos. SQL Server proporciona funciones de servidor y de base de datos predefinidas para las funciones administrativas comunes, de forma que pueda conceder fácilmente una selección de permisos administrativos a un usuario específico. a) Funciones fijas de servidor Las funciones fijas del servidor permiten agrupar los privilegios administrativos en el nivel del servidor. Se administran de forma independiente de las bases de datos de usuario en el nivel del servidor y se almacenan en la tabla del sistema master.sysxlogins. b) Funciones fijas de base de datos Las funciones fijas de base de datos permiten agrupar los privilegios administrativos en el nivel de base de datos. Las funciones fijas de base de datos están almacenadas en la tabla del sistema sysusers de cada base de datos. Ing. Elvis Guillermo Huarcaya Quispe Pág. 117 Gestión de informática II La función public La función public es una función de base de datos especial a la que pertenecen todos los usuarios de la base de datos y que no se puede quitar. La función public: - Mantiene todos los permisos predeterminados de los usuarios de una base de datos. - No puede tener usuarios, grupos o funciones asignados, ya que los usuarios, grupos y funciones ya pertenecen a ella de forma predeterminada. - Se encuentra en todas las bases de datos, incluidas las bases de datos master, msdb, tempdb, model y todas las bases de datos de usuario. - No se puede eliminar. Asignación de una cuenta de seguridad a una función fija de base de datos Para agregar una cuenta de seguridad como miembro de una función fija de base de datos, utilice el Administrador corporativo de SQL Server o el procedimiento almacenado del sistema sp_addrolemember. Sólo los miembros de la función db_owner pueden ejecutar el procedimiento almacenado del sistema sp_addrolemember para cualquier función de la base de datos. Al asignar cuentas de seguridad a una función fija de base de datos, tenga en cuenta los siguientes hechos: - Las funciones fijas de base de datos no se pueden agregar, modificar ni quitar. - Cualquier miembro de una función fija de base de datos puede agregar otras cuentas de inicio de sesión a esa función. También puede utilizar el procedimiento almacenado del sistema sp_droprolemember para eliminar una cuenta de seguridad de una función. c) Funciones de base de datos definidas por el usuario La creación de una función de base de datos definida por el usuario permite crear un grupo de usuarios con un conjunto de permisos comunes. Debe agregar una función definida por el usuario a la base de datos en los casos siguientes: - Cuando un grupo de personas necesite realizar un conjunto de actividades especificado en SQL Server y no exista un grupo de Windows 2000 aplicable. - Si no tiene permisos para administrar las cuentas de usuario de Windows 2000. Creación de una función de base de datos definida por el usuario Para crear una nueva función de base de datos, utilice el Administrador corporativo de SQL Server o el procedimiento almacenado del sistema sp_addrole. Por cada función definida por el usuario se agrega una entrada a la tabla sysusers de la base de datos actual. Sólo los miembros de la función db_securityadmin o db_owner pueden ejecutar sp_addrole. Ing. Elvis Guillermo Huarcaya Quispe Pág. 118 Gestión de informática II Al crear una función de base de datos, tenga en cuenta lo siguiente: - Cuando aplique permisos a la función, todos los miembros de la función obtendrán el efecto del permiso, igual que si el permiso se hubiera aplicado directamente a las propias cuentas de los miembros. Asignación de una cuenta de seguridad a una función de base de datos definida por el usuario Después de crear una función, utilice el Administrador corporativo de SQL Server o el procedimiento almacenado del sistema sp_addrolemember para agregar usuarios o funciones como miembros de la función. Sólo los miembros de la función fija del servidor sysadmin o de las funciones fijas de base de datos db_securityadmin y db_owner, o el propietario de la función pueden ejecutar sp_addrolemember para agregar un miembro a una función de base de datos definida por el usuario. En la tabla siguiente se enumeran procedimientos almacenados del sistema adicionales que se pueden utilizar para administrar funciones de base de datos. Procedimiento almacenado de sistema Descripción sp_addrole „función‟ Agrega una función de SQL Server de la base de datos actual. sp_droprole „función‟ Quita una función de SQL Server de la base de datos actual. sp_addrolemember „función‟, „usuario‟ Agrega un miembro a una función de base de datos definida por el usuario sp_droprolemember „función‟, „usuario‟ Quita un miembro a una función de base de datos definida por el usuario 3. ASIGNACIÓN DE PERMISOS A USUARIOS Y FUNCIONES Después de haber asignado cuentas de inicio de sesión a cuentas de usuario y funciones, debe asignar permisos para exigir la seguridad de la base de datos. Los permisos especifican para qué objetos de la base de datos tienen autorización los usuarios y qué pueden hacer los usuarios con esos objetos. Los permisos que un usuario tiene en una base de datos dependen de los permisos de la cuenta de usuario y de las funciones a las que pertenezca el usuario. Es importante diseñar los permisos que vaya a conceder a cada usuario o cada grupo. Todas las bases de datos tienen su propio sistema de permisos independiente. Tipos de permisos a) Permisos de instrucción Las actividades relativas a la creación de bases de datos o de elementos en una base de datos requieren una clase de permisos llamada permisos de instrucción. Los permisos de instrucción ofrecen a los usuarios el privilegio de emitir ciertas instrucciones Transact-SQL. Los permisos de instrucción, como CREATE DATABASE, se aplican Ing. Elvis Guillermo Huarcaya Quispe Pág. 119 Gestión de informática II a la misma instrucción, no al elemento específico que se define en la base de datos. Sólo los miembros de la función sysadmin, db_owner o db_securityadmin pueden conceder permisos de instrucción. b) Permisos de objeto Las actividades relacionadas con los datos o la ejecución de procedimientos requieren una clase de permisos conocida como permisos de objeto. c) Permisos predefinidos Sólo los miembros de funciones fijas o los propietarios de los objetos de base de datos pueden desempeñar ciertas actividades. Los permisos que ejecutan dichas actividades se conocen como permisos predefinidos o implícitos. Concesión, denegación y revocación Los permisos de un usuario o una función pueden estar en uno de tres estados: concedido, denegado o revocado. Los permisos que no se han concedido ni denegado a un usuario son neutros, como si se hubieran revocado. Los permisos se almacenan como entradas de la tabla del sistema sysprotects en cada base de datos. En la tabla siguiente se describen los tres estados de un permiso. Instrucción Estado de la entrada en la tabla sysprotects Descripción GRANT Positivo Puede ejecutar una acción. DENY Negativo No puede ejecutar una acción y no puede ser sobrescrito por la pertenencia a una función. REVOKE Ninguno No puede ejecutar una acción, pero puede ser sobrescrito por la pertenencia a una función. Los permisos concedidos son acumulativos; los usuarios pueden ejecutar todas las acciones para las que se les haya concedido permiso individualmente y todas las acciones para las que se haya concedido permiso a las funciones a las que pertenezcan. La instrucción DENY impide que los usuarios realicen acciones. Sobrescribe un permiso de una función a la que el usuario pertenece, tanto si se ha concedido el permiso al usuario directa como indirectamente. Los usuarios tienen permiso para ejecutar una acción si se dan las dos condiciones siguientes: Ing. Elvis Guillermo Huarcaya Quispe Pág. 120 Gestión de informática II - Se les ha concedido el permiso directamente o pertenecen a una función a la que se ha concedido el permiso. - El permiso no se ha denegado directamente al usuario o a una de las funciones a las que el usuario pertenece. Concesión de permisos para permitir el acceso Puede conceder permisos a cuentas de seguridad y permitir que las cuentas realicen actividades o trabajen con los datos de una base de datos. Al conceder permisos, tenga en cuenta los siguientes hechos: - Sólo puede conceder permisos en la base de datos actual. - El derecho para conceder permisos corresponde de forma predeterminada a los miembros de las funciones sysadmin, db_owner y db_securityadmin, y a los propietarios de objetos. Puede conceder permisos con el Administrador corporativo de SQL Server o con la instrucción GRANT. Los permisos disponibles varían en función de los objetos seleccionados. Por ejemplo, un procedimiento almacenado tiene permisos EXECUTE; una tabla o una vista tienen los permisos SELECT, INSERT, UPDATE, DELETE y permisos de integridad referencial; y las columnas individuales de una tabla o vista tienen los permisos SELECT y UPDATE. Denegación de permisos para impedir el acceso Puede que, ocasionalmente, desee limitar los permisos de un usuario o una función; para ello, puede denegar los permisos a esa cuenta de seguridad. La denegación de permisos de una cuenta de seguridad: - Quita los permisos previamente concedidos al usuario o función. - Desactiva los permisos heredados de otra función. - Asegura que el usuario o función no herede permisos de otra función en el futuro. Al denegar permisos, tenga en cuenta los siguientes hechos: - Sólo puede denegar permisos en la base de datos actual. - El permiso para denegar permisos corresponde de forma predeterminada a los miembros de las funciones sysadmin, db_owner y db_securityadmin, y a los propietarios de los objetos. Para denegar permisos, puede utilizar el Administrador corporativo de SQL Server o la instrucción DENY. Revocación de permisos Ing. Elvis Guillermo Huarcaya Quispe Pág. 121 Gestión de informática II Para desactivar un permiso concedido o denegado, puede revocarlo. La revocación de permisos es similar a la denegación de permisos en que ambas acciones quitan un permiso concedido. La diferencia estriba en que mientras la revocación de un permiso quita un permiso concedido, no impide que el usuario o la función hereden ese permiso en el futuro. Para quitar un permiso previamente concedido o denegado, puede utilizar el Administrador corporativo de SQL Server o la instrucción REVOKE. Ing. Elvis Guillermo Huarcaya Quispe Pág. 122 Gestión de informática II PROGRAMACIÓN EN SQL 1. Introducción a los procedimientos almacenados Definición de procedimientos almacenados Un procedimiento almacenado son instrucciones precompiladas de Transact-SQL que se almacena en la base de datos del servidor. Debido a que los procedimientos almacenados son precompilados, por lo general ofrecen mejor desempeño que cualquier consulta. Los procedimientos almacenados en SQL Server son similares a los procedimientos de otros lenguajes de programación ya que pueden: - Contener instrucciones que realizan operaciones en la base de datos; incluso tienen la capacidad de llamar a otros procedimientos almacenados. - Aceptar parámetros de entrada. - Devolver un valor de estado a un procedimiento almacenado que realiza la llamada para indicar que se ha ejecutado correctamente o que se ha producido algún error - Devolver varios valores al procedimiento almacenado o al proceso por lotes que realiza la llamada en forma de parámetros de salida. Procesamiento y ejecución de los procedimientos almacenados El procesamiento de un procedimiento almacenado conlleva crearlo y ejecutarlo la primera vez, lo que coloca su plan de consultas en la caché de procedimientos. La caché de procedimientos es un bloque de memoria que contiene los planes de ejecución de todas las instrucciones de Transact-SQL que se están ejecutando actualmente. El tamaño de la caché de procedimientos fluctúa dinámicamente de acuerdo con los grados de actividad. La caché de procedimientos se encuentra en el bloque de memoria que es la unidad principal de memoria de SQL Server. Contiene la mayor parte de las estructuras de datos que usan memoria en SQL Server. Creación Cuando se crea un procedimiento almacenado, las instrucciones que hay en él se analizan para ver si son correctas desde el punto de vista sintáctico. A continuación, SQL Server almacena el nombre del procedimiento almacenado en la tabla del sistema sysobjects y su texto en la tabla del sistema syscomments en la base de datos activa. Si se detecta un error de sintaxis, se devuelve un error y no se crea el procedimiento almacenado. Ejecución (por primera vez o recompilación) La primera vez que se ejecuta un procedimiento almacenado o si el procedimiento almacenado se debe volver a compilar, el procesador de consultas lo lee en un proceso llamado resolución. Ciertos cambios en una base de datos pueden hacer que un plan de ejecución sea ineficaz o deje de ser válido. SQL Server detecta estos cambios y vuelve a compilarlo automáticamente cuando se produce alguna de las situaciones siguientes: - Se realiza algún cambio estructural en una tabla o vista a la que hace referencia la consulta (ALTER TABLE y ALTER VIEW). - Se quita un índice usado por el plan de ejecución. - Se realizan cambios importantes en las claves (la instrucción INSERT o DELETE) de una tabla a la que hace referencia una consulta. Optimización Cuando un procedimiento almacenado pasa correctamente la etapa de resolución, el optimizador de consultas de SQL Server analiza las instrucciones de Transact-SQL del procedimiento almacenado y crea un plan que contiene el método más rápido para obtener acceso a los datos. Para ello, el optimizador de consultas tiene en cuenta lo siguiente: - La cantidad de datos de las tablas. - La presencia y naturaleza de los índices de las tablas, y la distribución de los datos en las columnas indizadas. - Los operadores de comparación y los valores de comparación que se usan en las condiciones de la cláusula WHERE. - La presencia de combinaciones y las cláusulas UNION, GROUP BY u ORDER BY. Ing. Elvis Guillermo Huarcaya Quispe Pág. 123 Gestión de informática II Compilación La compilación hace referencia al proceso consistente en analizar el procedimiento almacenado y crear un plan de ejecución que se encuentra en la caché de procedimientos. La caché de procedimientos contiene los planes de ejecución de los procedimientos almacenados más importantes. Entre los factores que aumentan el valor de un plan se incluyen los siguientes: - Tiempo requerido para volver a compilar (costo de compilación alto) - Frecuencia de uso Ventajas de los procedimientos almacenados Los procedimientos almacenados ofrecen varias ventajas. Pueden: - Compartir la lógica de la aplicación con las restantes aplicaciones, lo que asegura que el acceso y la modificación de los datos se hace de una forma coherente. Los procedimientos almacenados pueden encapsular la funcionalidad del negocio. Las reglas o directivas empresariales encapsuladas en los procedimientos almacenados se pueden cambiar en una sola ubicación. Todos los clientes pueden usar los mismos procedimientos almacenados para asegurar que el acceso y modificación de los datos es coherente. - Apartar a los usuarios de la exposición de los detalles de las tablas de la base de datos. Si un conjunto de procedimientos almacenados permite llevar a cabo todas las funciones de negocio que los usuarios necesitan, los usuarios no tienen que tener acceso a las tablas directamente. - Proporcionar mecanismos de seguridad. Los usuarios pueden obtener permiso para ejecutar un procedimiento almacenado incluso si no tienen permiso de acceso a las tablas o vistas a las que hace referencia. - Mejorar el rendimiento. Los procedimientos almacenados implementan muchas tareas como una serie de instrucciones de Transact-SQL. Se puede aplicar lógica condicional a los resultados de las primeras instrucciones de Transact-SQL para determinar cuáles son las siguientes que deben ejecutarse. Todas estas instrucciones de Transact-SQL y la lógica condicional pasa a ser parte de un único plan de ejecución del servidor. - Reducir el tráfico de red. En lugar de enviar cientos de instrucciones de Transact-SQL por la red, los usuarios pueden realizar una operación compleja mediante el envío de una única instrucción, lo que reduce el número de solicitudes que se pasan entre el cliente y el servidor. Recomendaciones para la creación de procedimientos almacenados - Evitar situaciones en las que el dueño de un procedimiento almacenado y el dueño de las tablas referenciadas sean distintos, se recomienda que los usuarios estén mapeados como dbo, para todos los objetos de una base de datos Debe tener permisos apropiados en todas las tablas o vistas que son referenciadas Evite situaciones en las que el dueño de un procedimiento almacenado y el dueño de las tablas referenciadas sean distintos - Diseñe el procedimiento almacenado de manera tal que ejecute una sola tarea - Cree, pruebe, y ponga a punto a su procedimiento almacenado en el servidor; luego pruébelo en el cliente - Para distinguir fácilmente a un procedimiento almacenado del sistema de un procedimiento creado por el usuario , evite el uso del prefijo sp_ al nombrar el procedimiento - Si no desea que los usuarios puedan ver el texto de sus procedimientos almacenados, debe crearlos con la opción WITH ENCRYPTION. Si no usa WITH ENCRYPTION, los usuarios pueden usar el procedimiento almacenado del sistema sp_helptext para ver el texto de procedimientos almacenados en la tabla de sistema syscomments 2. Creación, ejecución, definición, modificación y eliminación de procedimientos almacenados Creación y ejecución de procedimientos almacenados Debe crear el procedimiento almacenado en la base de datos actual. La creación de un procedimiento almacenado es similar a la creación de una vista. Primero, escriba y pruebe las sentencias Transact-SQL que desea incluir en el procedimiento almacenado. A continuación, si recibe los resultados esperados, cree el procedimiento almacenado Uso de CREATE PROCEDURE Los procedimientos almacenados se crean con la instrucción CREATE PROCEDURE. Considere los hechos siguientes cuando cree procedimientos almacenados: - Los procedimientos almacenados pueden hacer referencia a tablas, vistas, funciones definidas por el usuario y otros procedimientos almacenados, así como a tablas temporales. - Si un procedimiento almacenado crea una tabla local temporal, la tabla temporal sólo existe para atender al procedimiento almacenado y desaparece cuando finaliza la ejecución del mismo. - Una instrucción CREATE PROCEDURE no se puede combinar con otras instrucciones de Transact-SQL en un solo proceso por lotes. - La definición de CREATE PROCEDURE puede incluir cualquier número y tipo de instrucciones de Transact-SQL, con la excepción de las siguientes instrucciones de creación de objetos: CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER y CREATE VIEW. En un procedimiento almacenado se pueden crear otros objetos de la base de datos y deben calificarse con el nombre del propietario del objeto. - Para ejecutar la instrucción CREATE PROCEDURE, debe ser miembro de la función de administradores del sistema (sysadmin), de la función de propietario de la base de datos (db_owner) o de la función de administrador del lenguaje de definición de datos (db_ddladmin), o debe haber recibido el permiso CREATE PROCEDURE. - El tamaño máximo de un procedimiento almacenado es 128 megabytes (MB), según la memoria disponible Ing. Elvis Guillermo Huarcaya Quispe Pág. 124 Gestión de informática II Procedimiento que no recibe ni devuelve parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento [WITH ENCRYPTION] AS sentenciasSQL Ejemplo: Crear un procedimiento almacenado que genere la lista de precios de los Productos de Minimarket USE Minimarket go CREATE PROCEDURE usp_ListaPrecios AS SELECT c.Categoria,p.IdProducto, p.Nombre, p.UnidadMedida FROM PRODUCTO as p INNER JOIN CATEGORIA as c ON p.IdCategoria=c.IdCategoria ORDER BY 1,3 go Para ejecutar el procedimiento: EXEC usp_ListaPrecios go Ejemplo: Crear un procedimiento almacenado que genere la lista de precios de los Productos de que registran salida del almacén, los campos a mostrar de la lista deben ser el código del producto, y el nombre del producto. El usuario no debe ver el texto del procedimiento Use Minimarket go CREATE PROCEDURE usp_ListaProductosSalidaAlmacen WITH ENCRYPTION AS SELECT DISTINCT Guia_detalle.idproducto, nombre FROM Guia_detalle INNER JOIN Producto ON Guia_detalle.idProducto=Producto.IdProducto ORDER BY Guia_detalle.idproducto go Para ejecutar el procedimiento: EXEC usp_ListaProductosSalidaAlmacen go Procedimientos que reciben parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [ = valor], @parámetro2 tipo_dato [ = valor], … AS sentenciasSQL Ejemplo: Crear un procedimiento que entregue la lista de productos del proveedor X, respecto a una determinada categoría de producto Y, donde x es el código del proveedor e y es el código de la categoría del producto USE Minimarket go CREATE PROCEDURE usp_ListaProveedorCategoria @proveedor int, @categoria int AS SELECT idProducto, nombre FROM PRODUCTO WHERE idProveedor=@proveedor AND idCategoria=@categoria go --Para ejecutar el procedimiento Ing. Elvis Guillermo Huarcaya Quispe Pág. 125 Gestión de informática II DECLARE @codProv int, @codCat int SET @codProv =14 SET @codCat=1 EXEC usp_ListaProveedorCategoria @codProv,@codCat go --Otra forma de ejecutar el procedimiento EXEC usp_ListaProveedorCategoria 14,1 go --También tenemos EXEC usp_ListaProveedorCategoria @categoria=1, @proveedor=14 go Ejemplo: Crear un procedimiento que muestre el código de la Guía de remisión, la dirección del local, la fecha de salida, el monto total de la guía de remisión X, donde x es el código de la guía de remisión CREATE PROCEDURE usp_Guia_direccion_fecha @nguia int AS SELECT Guia.IdGuia, Local.Direccion, Local.Distrito, Guia.FechaSalida, sum(Guia_detalle.PrecioVenta* Guia_detalle.Cantidad) AS 'Monto Total' FROM Guia INNER JOIN Guia_detalle ON Guia.IdGuia = Guia_detalle.IdGuia INNER JOIN Local ON Guia.IdLocal=Local.IdLocal GROUP BY Guia.IdGuia, Local.Direccion,Local.Distrito, Guia.FechaSalida HAVING Guia.IdGuia=@nguia --Para ejecutar el procedimiento DECLARE @n_guia int SET @n_guia=4 EXEC usp_Guia_direccion_fecha @n_guia go --Otra forma de ejecutar el procedimiento EXEC usp_Guia_direccion_fecha 4 go --También tenemos EXEC usp_Guia_direccion_fecha @nguia=4 Go Procedimientos que recibe y entrega parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [ = valor], @parámetro2 tipo_dato [ = valor], @parámetro3 tipo_dato [ = valor] OUTPUT, … AS sentenciasSQL Ejemplo: Crear un procedimiento que devuelva el monto mensual total de las guías de remisión correspondientes al año Y respecto al mes Z USE Minimarket go CREATE PROCEDURE usp_MontoGuiasMes @año int, @mes int, @monto money OUTPUT AS SELECT @monto= ( SELECT sum(Guia_detalle.cantidad*Guia_detalle.precioVenta) FROM Guia_detalle INNER JOIN Guia ON Guia_detalle.idGuia=Guia.idGuia WHERE year(Guia.fechaSalida)=@año AND month(Guia.fechaSalida)=@mes) go Ing. Elvis Guillermo Huarcaya Quispe Pág. 126 Gestión de informática II --Para ejecutar el procedimiento DECLARE @monto1 money EXEC usp_MontoGuiasMes 2006,03,@monto1 OUTPUT SELECT 'Monto Marzo 2005'=@monto1 go Obtención de la definición de un procedimiento almacenado Puede usar los procedimientos almacenados del sistema para obtener información sobre la definición de los procedimientos almacenados de la base de datos Tabla del Sistema Almacena Procedimiento sys.sysobjects Nombre del procedimiento almacenado sp_help nombre_procedimiento sp_stored_procedures sys.sysdepends Nombre de los objetos dependientes al procedimiento almacenado sp_depends nombre_procedimiento sys.syscomments Sentencia que definió al procedimiento almacenado sp_helptext nombre_procedimiento Ejemplo: Obtener la información del procedimiento almacenado usp_MontoGuiasMes Use Minimarket; EXEC sp_help usp_MontoGuiasMes; Ejemplo: Obtener los nombres de los procedimientos almacenados de la base de datos Minimarket Use Minimarket; EXEC sp_stored_procedures; Ejemplo: Obtener los objetos dependientes del procedimientos almacenado usp_MontoGuiasMes de la base de datos Minimarket Use Minimarket; EXEC sp_depends usp_MontoGuiasMes; Ejemplo: Obtener la sentencia que definió el procedimiento almacenado usp_MontoGuiasMes de la base de datos Minimarket Use Minimarket; EXEC sp_helptext usp_MontoGuiasMes; Ing. Elvis Guillermo Huarcaya Quispe Pág. 127 Gestión de informática II Modificación y eliminación de procedimientos almacenados Modificación de un procedimiento almacenado Para modificar un procedimiento almacenado conservando su asignación de permisos, ejecute la sentencia ALTER PROCEDURE. La definición previa del procedimiento será reemplazada por la definición establecida en ALTER PROCEDURE Sintaxis: ALTER PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [ =valor], @parámetro2 tipo_dato [ =valor], @parámetro3 tipo_dato [ =valor] OUTPUT, … AS sentenciasSQL Eliminación de un procedimiento almacenado (DROP PROCEDURE) Use la sentencia DROP PROCEDURE para eliminar los procedimientos almacenados definidos por el usuario de la base de datos actual Antes de eliminar un procedimiento almacenado, ejecute el procedimiento almacenado sp_depends para determinar los objetos que dependen del procedimiento almacenado Sintaxis: DROP PROCEDURE nombreProcedimiento DESENCADENADORES (TRIGGERS) Definición de desencadenadores Funcionamiento de los desencadenadores Ejemplos de desencadenadores Consideraciones acerca del rendimiento 1. Introducción a los desencadenadores Definición de desencadenadores Un desencadenador es una clase especial de procedimiento almacenado que se ejecuta siempre que se intenta modificar los datos de una tabla que el desencadenador protege. Los desencadenadores están asociados a tablas específicas. Asociación a una tabla Los desencadenadores se definen para una tabla específica, denominada tabla del desencadenador. Invocación automática Cuando se intenta insertar, actualizar o eliminar datos de una tabla en la que se ha definido un desencadenador para esa acción específica, el desencadenador se ejecuta automáticamente. No es posible evitar su ejecución. Imposibilidad de llamada directa A diferencia de los procedimientos almacenados del sistema normales, no es posible invocar directamente los desencadenadores, que tampoco pasan ni aceptan parámetros. Uso de los desencadenadores Consideraciones acerca de los desencadenadores Tipos de desencadenantes DML a) Desencadenantes AFTER Ing. Elvis Guillermo Huarcaya Quispe Pág. 128 Gestión de informática II Son disparados después que una acción INSERT, UPDATE ó DELETE es ejecutada. Este tipo de desencadenante sólo se puede especificar para tablas b) Desencadenantes INSTEAD OF Son ejecutadas en lugar de la acción de disparo habitual. Este desencadenante se puede definir también sobre vistas que tienen una o más tablas subyacentes Creación de desencadenadores DML Los desencadenantes son creados con la declaración CREATE TRIGGER. La declaración especifica la tabla en la que el desencadenante se define, los eventos que hacen que se ejecute, y las instrucciones particulares para el desencadenante Sintaxis: CREATE TRIGGER nombre_desencadenante ON nombre_tabla | nombre_vista FOR [INSERT] [,] [UPDATE] [,][DELETE] | AFTER [INSERT] [,] [UPDATE] [,] [DELETE] | INSTEAD OF [INSERT] [,] [UPDATE] [,] [DELETE] AS sentenciasSQL - FOR y AFTER definen desencadenantes AFTER, FOR se conserva por compatibilidad con versiones anteriores de SQL Server - Los dueños de las tablas, así como los miembros de los roles db_owner y sysadmin, tienen permiso para crear un desencadenante - SQL Server no permite usar las declaraciones siguientes en una definición de desencadenante: - CREATE DATABASE, ALTER DATABASE y DROP DATABASE - LOAD DATABASE Y LOAD LOG - RESTORE DATABASE - RESTORE LOG - RECONFIGURE Preparación de las tablas: Ejemplo: Crear una base de datos de Prueba que contendrá la tablas en la que diseñarán y probarán los desencadenantes Luego actualice mediante las instrucciones transact SQL el monto de la tabla Factura Use Prueba go Ing. Elvis Guillermo Huarcaya Quispe Pág. 129 Gestión de informática II UPDATE Factura SET MontoFactura = ( SELECT SUM (PrecioUnitario*Cantidad) FROM DetalleFactura WHERE DetalleFactura.IdFactura=Factura.IdFactura) Go Al ejecutar tenemos: Desencadenante AFTER INSERT Ejemplo: Crear un desencadenante AFTER INSERT que recalcule y actualice el monto de una factura cada vez que se inserta un detalle para dicha factura Use Prueba go CREATE TRIGGER tg_insert_DetalleFactura ON DetalleFactura AFTER INSERT AS DECLARE @nfactura int DECLARE @nmonto money SET @nfactura=( SELECT IdFactura FROM inserted) SET @nmonto = ( SELECT sum(PrecioUnitario*Cantidad) FROM DetalleFactura WHERE DetalleFactura.IdFactura=@nfactura ) UPDATE Factura SET MontoFactura=@nmonto WHERE IdFactura=@nFactura go Para probar el desencadenante codifique y ejecute los siguientes batch -- Registrando la factura 3 SET DATEFORMAT dmy ; INSERT INTO Factura VALUES (3,‟06/07/2006‟, „C003‟, NULL) ; -- Insertando los valores para probar el desencadenante INSERT DetalleFactura VALUES (3, 1001, 12.5, 20); INSERT DetalleFactura VALUES (3, 1002, 20.5, 40); -- verificando la actualización del monto de la tabla factura SELECT * FROM factura; Mecanismo de un desencadenante AFTER INSERT – La tabla INSERTED Cuando se ejecuta una declaración INSERT en una tabla que tiene definido un desencadenante AFTER INSERT, se crea automáticamente una tabla temporal INSERTED que tiene la misma estructura que la tabla con el desencadenante. La tabla temporal INSERTED contiene una copia de la fila insertada por la declaración INSERT ejecutada en la tabla con el desencadenante. TABLA: INSERTED Idfactura Improducto PrecioUnitario Cantidad 3 1001 12.5 20 Desencadenante AFTER DELETE Ing. Elvis Guillermo Huarcaya Quispe Pág. 130 Gestión de informática II Crear un desencadenante AFTER DELETE que recalcule y actualice el monto de una factura cada vez que se elimina un detalle para dicha factura Use Prueba go --Desencadenante por ELIMINACIÓN para Detallefactura --Recalcule el monto de la factura por cada detalle eliminado CREATE TRIGGER tg_delete_DetalleFactura ON DetalleFactura AFTER DELETE AS DECLARE @nfactura int DECLARE @nmonto money SET @nfactura=( SELECT IdFactura FROM deleted) SET @nmonto = ( SELECT sum(PrecioUnitario*Cantidad) FROM DetalleFactura WHERE DetalleFactura.IdFactura=@nfactura ) UPDATE Factura SET MontoFactura=@nmonto WHERE IdFactura=@nFactura go -- Prueba del desencadenante mediante la eliminación -- del primer detalle de la factura 1 DELETE FROM DetalleFactura WHERE IdFactura=1 AND IdProducto=1001; -- Verificando la data SELECT * FROM DetalleFactura; SELECT * FROM Factura; Mecanismo de un desencadenante AFTER DELETE – La tabla DELETED Cuando se ejecuta una declaración DELETE en una tabla que tiene definido un desencadenante AFTER DELETE, se crea automáticamente una tabla temporal DELETED que tiene la misma estructura que la tabla con el desencadenante. La tabla temporal DELETED contiene a las filas que la declaración DELETE ejecutada en la tabla con el desencadenante ha eliminado. TABLA: DELETED Idfactura Improducto PrecioUnitario Cantidad 3 1001 12.5 20 Desencadenante AFTER UPDATE Crear un desencadenante AFTER UPDATE que recalcule el monto de una factura cada vez que se actualiza la cantidad o él precio de un detalle de dicha factura Use Prueba go Ing. Elvis Guillermo Huarcaya Quispe Pág. 131 Gestión de informática II --Desencadenante por ACTUALIZACIÓN para Detallefactura --Recalcule el monto de la factura por cada detalle actualizado respecto al --- --precio y a la cantidad CREATE TRIGGER tg_update_DetalleFactura ON DetalleFactura AFTER UPDATE AS IF UPDATE (PrecioUnitario) OR UPDATE(cantidad) BEGIN DECLARE @nfactura int DECLARE @nmonto money SET @nfactura=( SELECT IdFactura FROM inserted) SET @nmonto = ( SELECT sum(PrecioUnitario*Cantidad) FROM DetalleFactura WHERE DetalleFactura.IdFactura=@nfactura ) UPDATE Factura SET MontoFactura=@nmonto WHERE IdFactura=@nFactura END go --Probando el desencadenante triplicando la cantidad para --el segundo producto (1008) del detalle de la factura Nº2 UPDATE Detallefactura SET cantidad=cantidad*3 WHERE IdFactura =2 AND IdProducto=1008 go --Verificando la data SELECT * FROM DetalleFactura; SELECT * FROM Factura; Mecanismo de un desencadenante AFTER UPDATE Cuando se ejecuta una declaración UPDATE en una tabla que tiene definido un desencadenante AFTER UPDATE, se crea automáticamente las tabla temporales INSERTED y DELETED que tiene la misma estructura que la tabla con el desencadenante. La tabla temporal DELETED contiene a las filas afectadas por la declaración UPDATE, pero con los valores anteriores a la ejecución de UPDATE. La tabla temporal INSERTED contiene las filas afectadas pero con los valores actualizados. Ing. Elvis Guillermo Huarcaya Quispe Pág. 132 Gestión de informática II BIBLIOGRAFÍA Date C.J. Introducción a los Sistemas de Base de Datos, Edición Pearson Education 7 . Ed. México 2001 JHONSON, JAMES L. , Base de Datos. Ediciones Oxford University Press- Mexico 2000 LUQUE IRENE/ GOMEZ NIETO ÁNGEL / LOPEZ ENRIQUE / CERRUELA GONZALO, Base de Datos desde Chen hasta Codd con Oracle. Edición AlfaOmega - España 2002 DE MIGUEL ADORACION /PIATTINI MARIO/ ESPERANZA MARCOS. Diseño de base de datos relacional edición alfaomega España 2000. RECURSOS DE INTERNET: http://www.monografias.com http://www.solocursos.net http://www.programacion.com