Bases de datos Universidad de Los Andes Escuela de Ingeniería de Sistemas Departamento de Computación Lenguajes de consulta. Algebra relacional. SQL Lenguajes de consulta ● Contenido ● – Algebra relacional – SQL 25/7/16 Actividades – Leer capítulos 6 y 8 de Elmasri y Navathe (5ta edición) – Leer capítulos 3 y 4 de Silberschatz (4ta edición) S. Solé - Bases de Datos 2 Ejercicio AR Persona(ci, nombre, telefono, direccion) Medico(ci, numcolegio, especialidad) Paciente(ci, numhistoria, fecha_nac) Cita(id, fecha, motivo, tratamiento, diagnostico, cipaciente) Examen(nroexamen, tipo, fechaentrega, fecharealizacion, resultado) Solicita(cimedico, nroexamen, fechasol) Restricciones: fecha_nac < fecha para todo Paciente con Cita, fecha_nac < fechaentrega y fecha_nac < fecharealizacion para todo Paciente al que le soliciten examenes, fecha_nac < fechasol para todo Paciente con solicitu de examenes, fecharealizacion <= fechaentrega para todo Examen 25/7/16 S. Solé - Bases de Datos 3 Ejercicio AR Escriba las expresiones de álgebra relacional para: 1.Buscar todos los médicos 2.Consultar los exámenes realizados este año 3.Buscar los tipos de exámenes que se realizaron el año pasado 4.Buscar número de las historias y cédula de las personas que tuvieron cita en Febrero 2016 con cédula menor a 10.000.000 5.Genere una lista de los nombres de los números del colegio de médicos y los números de lo exámenes. 6.Liste los médicos que no han solicitado exámenes. 25/7/16 S. Solé - Bases de Datos 4 Renombramiento ρ Le da un nuevo nombre a una relación y/o a sus atributos Se usa para unificar esquemas de relación antes de usar operadores de conjuntos. También se usa para eliminar ambiguedades cuando se hacen “auto joins” ρ (ExpresionRelacional) Relacion(at1, at2,..., atn) 25/7/16 S. Solé - Bases de Datos 5 Inserción Insertar una nueva tupla en una relación, para ello el esquema de la nueva tupla debe coincidir con el esquema de la relación Εins = (listaDeValores) Relación Εins = (“12489758”, “Maria Arroyo”,”0274-9875212”, “Urb. El Encanto. Casa #22”) Persona 25/7/16 S. Solé - Bases de Datos 6 Eliminación Eliminar una o más tuplas de la relación, si cumplen con la condición que se establece. Εdel = Relación [condición] Εdel = Medico [ci==”14875940”] 25/7/16 S. Solé - Bases de Datos 7 SQL Lenguaje estructurado de consulta Lenguaje estándar de consulta para BD relacionales. ● Es la versión comercial del lenguaje SEQUEL creado por IBM. ● Lenguaje declarativo ● Puede usarse en cónsola, usando una IGU del SGBD o embebido en programas de aplicación. ● Soportado por los principales SGBD comerciales ● Basado en álgebra relacional ● 25/7/16 S. Solé - Bases de Datos 8 SQL-89 ● Su primera versión se denominó SQL-89 y estaba compuesta por tres partes: ● LDD: contiene las instrucciones para definir el esquema de una BD (create, alter y drop). ● LMD: contempla las instrucciones de gestión de tablas )(select, insert, delete y update), y para control de concurrencia (commit y rollback). ● LCD (Lenguaje de Control de Datos): tiene instrucciones para dar y revocar permisos de acceso a los datos de la BD (grant y revoke) 25/7/16 S. Solé - Bases de Datos 9 SQL2 ● Segunda versión de SQL, también denominada SQL-92. ● Incluyó el uso de agentes de software, nuevos tipos básicos de datos como: Date, Time, Timestamp, BLOB, Varchar. ● Para sesiones concurrentes se establecen conexiones cliente-servidor en sesiones concurrentes ● Tiene SQL dinámico ● Aumentó la granularidad a nivel de transacciones ● Crearon nuevas versiones de la operación producto ● Usa un catálogo estandarizado, se manejan códigos de error estandarizados ● Se utilizan nuevos lenguajes de programación como: C, ada y mumps 25/7/16 S. Solé - Bases de Datos 10 SQL3 ● Última versión de SQL que contiene tipos abstractos de datos definidos por el diseñador de la BD ● manejo de roles de usuarios ● consultas recursivas ● disparadores o triggers ● procedimientos almacenados ● encadenamiento tardío ● manejo de interoperabilidad a través de un API u ODBC para acceso a bases de datos basado en el estándar SAG (SQL Access Group) ● manejo de transacciones anidadas ● 25/7/16 S. Solé - Bases de Datos 11 LDD en SQL3 ● Objetos de la BD (varían según la implementación del SGBD) Para crear objetos: CREATE ● Para destruir objetos: DROP ● Para modificar objetos: ALTER ● ● Objetos de la BD en Postgresql: server, database, table, schema, tablespace, view, function, operator, cast, sequence, extension, data type, domain, trigger 25/7/16 S. Solé - Bases de Datos 12 LMD en SQL3 Para consultar tuplas: SELECT ● Para insertar tuplas: INSERT ● Para eliminar tuplas: DELETE ● Para modificar tuplas: UPDATE ● 25/7/16 S. Solé - Bases de Datos 13 Tipos de datos en Postgresql json textual JSON data jsonb Binary JSON data, decomposed real float4 single precision floating-point number (4 bytes) smallint int2 signed two-byte integer smallseri al serial2 autoincrementin g two-byte integer serial serial4 autoincrementin g four-byte integer text variable-length character string time [ (p) ] [ without time zone ] time of day (no time zone) timestam p [ (p) ] with time zone uuid 25/7/16 S. Solé - Bases de Datos xml timestamp tz date and time, including time zone universally unique identifier XML data 14 Crear Relaciones CREATE TABLE <nomRelacion> (<nomAt> <tipo> [NOT NULL | WITH DEFAULT],...); CREATE TABLE Persona ( ci VARCHAR(10) NOT NULL, nombre VARCHAR(30) NOT NULL, direccion VARCHAR(70), telefono VARCHAR(12), fechaNac DATE ); 25/7/16 S. Solé - Bases de Datos 15 CREATE en Postgresql CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ]) [ INHERITS ( parent_table [, ... ] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace_name ] CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name OF type_name [ ( { column_name WITH OPTIONS [ column_constraint [ ... ] ] | table_constraint } [, ... ] )] [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace_name ] 25/7/16 S. Solé - Bases de Datos 16 Restricciones ● ● ● ● Atributo único (unique): no hay dos filas con el mismo valor en esa columna, Atributo clave primaria (primary key), es única y no acepta nulos, Atributo clave foránea (foreign key), hace referencia a la clave primaria de otra tabla, aceptando nulos. Restriciones de verificación (check) especifica una condición de búsqueda CREATE TABLE Persona ( CREATE TABLE Medico ( ci VARCHAR(10) PRIMARY KEY, ci VARCHAR(10) NOT NULL FOREIGN nombre VARCHAR(30) NOT NULL, KEY (ci) REFERENCES Persona, direccion VARCHAR(70), numcolegio VARCHAR(30) NOT NULL telefono VARCHAR(12), UNIQUE, fechaNac DATE, especialidad VARCHAR(70) numHijos smallint, ); CHECK (numHijos>0) S. Solé - Bases de Datos 17 ); 25/7/16 Restricciones atributos de una relación CREATE TABLE Paciente ( ci VARCHAR(10) PRIMARY KEY, numhistoria VARCHAR(30) NOT NULL UNIQUE, fechaNac DATE, CHECK (fechaNac >= TODAY()), CONSTRAINT pkPersona FOREIGN KEY ci REFERENCES Persona(ci) ); también CONSTRAINT fechaNac_const CHECK (fechaNac >= TODAY()) 25/7/16 S. Solé - Bases de Datos 18 Restricciones globales en la BD CREATE ASSERTION nomAser CHECK (condición) CREATE ASSERTION cantidades CHECK (cantVen <= (SELECT cantExistencia FROM Producto P, Ventas V WHERE p.nroPro = V.nroProVen)); Las aserciones permiten asegurar condiciones globales en toda la base de datos durante su tiempo de vida. 25/7/16 S. Solé - Bases de Datos 19 Políticas de mantenimiento de integridad referencial ● ● ● Devolver actualizaciones que la violan (por omisión) Actualizaciones en cascada (CASCADE) Colocar en nulo (SET NULL) CREATE TABLE Ventas ( nroVen CHAR(8) UNIQUE, fechaVen DATE NOT NULL, nomCli VARCHAR(32), nroProVen CHAR(6) REFERENCES Producto(nroPro) ON DELETE SET NULL ON UPDATE CASCADE, cantVen int ); 25/7/16 S. Solé - Bases de Datos 20 Restricciones de dominio CREATE DOMAIN colores CHAR(8) CHECK (VALUE IN (‘verde’, ‘negro’, ‘rojo’, ‘azul’)); CREATE TABLE Producto ( nroPro CHAR(6) PRIMARY KEY, nombrePro VARCHAR(64), cantidad int, color colores ); CREATE TYPE colores AS ENUM (’verde’, ’rojo’, ’gris’); 25/7/16 S. Solé - Bases de Datos 21 SELECT SELECT A1, A2, A3,..., An FROM R1, R2, ..., Rm WHERE condicion ΠA1, A2,..., An 25/7/16 ( σcondicion (R1 x R2 x ... x Rm)) S. Solé - Bases de Datos 22