Servidor de Base de Datos Programación · deben estar conectadas entre sí mediante una red. ......

84
Servidor de Base de Datos Programación

Transcript of Servidor de Base de Datos Programación · deben estar conectadas entre sí mediante una red. ......

Servidor de Base de DatosProgramación

Un servidor es una aplicación que ofrece un servicio; unUn servidor es una aplicación que ofrece un servicio; un cliente es el que pide ese servicio. Una aplicación consta de una parte servidor y una cliente.

Los usuarios invocan la parte cliente de la aplicación, que construye una solicitud para ese servicio (peticion) y se la envía al servidor de la aplicación.

El servidor es un programa que recibe una solicitud, realizaEl servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta (provee el servicio).

• ¿Dónde se encuentran fisicamente estas¿Dónde se encuentran fisicamente estas aplicaciones?

N i t t d á i dif t• No siempre se trata de máquinas diferentes; un computador por sí solo puede ser ambos cliente y servidor.

• Si estan fisicamente en distintos equipos, ambas partes deben estar conectadas entre sí mediante una red.

• Un único servidor típicamente sirve a una multitud de clientes al mismo tiempo, ahorrando a cada uno de ellos l bl d t l i f ió i t l del problema de tener la información instalada y

almacenada localmente.

• Caracteristicas:

• El cliente interactúa con el usuario, y un servidor interactúa con los recursos compartidos.

• El proceso del cliente proporciona la interfaz entre el i l t d l i tusuario y el resto del sistema.

• El proceso del servidor actúa como un motor de software que maneja recursos compartidos tales como b d d t i ód tbases de datos, impresoras, módems, etc.

• Los clientes corresponden a procesos activos: son éstos los que hacen peticiones de servicios a los servidores.

• Los servidores tienen un carácter pasivo ya que esperan las peticiones de los clientes.

Database Server

Un servidor de base de datos es un programa que provee servicios de base de datos a otros programas u otras p gcomputadoras.

Normalmente el servidor es una máquina bastante potenteNormalmente el servidor es una máquina bastante potente que actúa de depósito de datos y funciona como un sistema gestor de base de datos (SGBD).

• Aplicación se divide en:Aplicación se divide en:

• Cliente: parte cercana al usuario, recogida y p g ypresentación de la información.

• Servidor: parte cercana a los datos, ejecuta el gestor de bases de datosbases de datos.

Esta arquitectura necesita tres tipos de software para su correcto funcionamiento:

Software de gestión de datos: Este software se encargaSoftware de gestión de datos: Este software se encarga de la manipulación y gestión de los datos almacenados y requeridos por las diferentes aplicaciones. Normalmente este software se aloja en el servidoreste software se aloja en el servidor.

Software de desarrollo: este tipo de software se aloja en los clientes y solo en aquellos que se dedique al desarrollo de aplicaciones.

Software de interacción con los usuarios: También reside en los clientes y es la aplicación gráfica de usuario para la manipulación de datos siempre claro a nivelpara la manipulación de datos, siempre claro a nivel usuario (consultas principalmente).

• Por qué programar en el servidor de BD???

• Qué es un programa?• Finalidad de un programa?• Ventaja de un programa?

• Se puede almacenar los programas localmente y crear p p g yaplicaciones que envían los comandos al Servidor y procesan los resultados.

Cliente

P

Servidor

P

ClienteP

ClienteP

ClienteP

• Se puede almacenar los programas en el Servidor ySe puede almacenar los programas en el Servidor y crear aplicaciones que los ejecutan y procesan los resultados.

Cliente

P

Servidor

P

Cli tCliente

Cliente

Cliente

Q é ió j ???• Qué opción es mejor???

• Ventajas de almacenar un programa en el servidor:j p g

• Al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases dees ejecutado directamente en el motor de bases de datos, bajo el control de éste, aumentando con ello la rapidez de procesamiento de requerimientos:

• Posee acceso directo a los datos que necesitaPosee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos

li t t t d i l t áfi d dsalientes y entrantes: reducir el tráfico de red.

• Cuando una base de datos es manipulada desde pmuchos programas externos, se simplifica la creación y, particularmente, el mantenimiento de los programas involucrados.

• Se reduce la probabilidad de que los datos sean corrompidos por el uso de programas clientes defectuosos o erróneos.defectuosos o erróneos.

• Puede asegurar la integridad de los datos y la consistencia.

• Pueden incluir atributos de seguridad (como permisos)Pueden incluir atributos de seguridad (como permisos).• Permiten una programación modular: se crea el

programa una vez y se llama tantas veces como desee.• Independencia de la situación física de los datos• Independencia de la situación física de los datos

• Usuario no necesita conocer el lenguaje para acceder a la informacion requeridala informacion requerida.

• Usos típicos...

• Validación de datos (disparadores o triggers).• Encapsulación de procesos grandes y complejos. p p g y p j

– Esto se ejecutará más rápido almacenado en el servidor que como un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.

Lenguaje de ProgramaciónLenguaje de Programación• Hasta ahora sólo se ha utilizado SQL…• Qué es SQL?

St t d Q L l j d• Structured Query Language es un lenguaje de consulta para los sistemas de bases de datos relacionales.

• Está compuesto por comandos (DDL: create, drop; DML: select, insert, delete), cláusulas (from, where….),select, insert, delete), cláusulas (from, where….), operadores (and, or, not) y funciones de agregado (avg, sum, max).

• Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

/* i d t bl *//*creacion de tabla*/create table pelicula(titulo_p nombre2 not null primary key,( _p p y ynacionalidad_p nombre1 not null,productora nombre1 not null,año p año not nullaño_p año not null,nombre_director nombre not null)

/*consulta*/select nombre_s, apellido_s from alquila, socio where socio.carnet_s=alquila.carnet_s and

alquila.titulo_p='Arma mortal 3' and alquila.nr_ejemplar=1

• Un programa es un conjunto de instrucciones escritas en algún lenguaje de programación.

• Es SQL un lenguaje de programacion??E lt ??• Es una consulta un programa??

• SQL no posee la potencia de los lenguajes de Q p p g jprogramación.

• No permite el uso de variables, estructuras de control de flujo, bucles ... y demás elementos caracteristicos de la programación.programación.

• SQL es un lenguaje de consulta, no un lenguaje de programación.

• Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos.

• Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta jnecesario utilizar alguna herramienta que soporte la capacidad de consulta de SQL y la versatilidad de los lenguajes de programación tradicionales. g j p g

• Luego se necesita un lenguaje de programación que extienda el SQL estándar con otro tipo de instruccionesextienda el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación .

Tipos de LenguajesTipos de Lenguajes• Su implementación de estos programas varía de un

SGBD t El l j tili d d d é tSGBD a otro: El lenguaje a utilizar dependera de éste y cada lenguaje tendrá sus instrucciones y formatos específicos.

• PL-SQL - Oracle• T-SQL (Transact SQL) – SQL Server• PgSQL - PostgreSQL• Java??? -> La base de dato que se use es

independiente. Y la plataforma de hardware tambien. p p

PL-SQLPL SQL

• CREATE PROCEDURE credit (acc_no IN NUMBER, amount IN NUMBER)AS BEGINUPDATE accountsSET balance = balance + amountSET balance balance amountWHERE account_id = acc_no;END;

T-SQLT SQL

• CREATE PROCEDURE conocerempleado• @LastName nvarchar(50), @FirstName nvarchar(50)

AS• SELECT LastName, FirstName, Title • FROM Employees • WHERE FirstName = @FirstName• WHERE FirstName = @FirstName • AND LastName = @LastName

PL-PgSQLPL PgSQL• CREATE OR REPLACE FUNCTION ejemplo(integer, integer)

RETURNS integer AS $$ • DECLARE • numero1 ALIAS FOR $1; $ ;• numero2 ALIAS FOR $2; • constante CONSTANT integer := 100; • resultado integer;• resultado integer; • BEGIN • resultado := (numero1 * numero2) + constante; • RETURN resultado; • END; • $$ LANGUAGE plpgsql; $$ p pg q ;

Algunos ConceptosAlgunos Conceptos.

EsquemaEsquema• Database Schema• Describe la estructura de una Base de datos, en un

lenguaje formal soportado por un Sistema administrador de Base de datos (DBMS).de Base de datos (DBMS).

• En una Base de datos Relacional, el Esquema define sus tablas (nombres), sus campos en cada tabla, tipos de datos y las relaciones entre cada campo y cada tablade datos y las relaciones entre cada campo y cada tabla (claves primaria y foranea).

• Aunque generalmente el esquema es definido en un l j d B d d t l té i dlenguaje de Base de datos, el término se usa a menudo para referirse a una representación gráfica de la estructura de base de datos.

Vistas• Una vista es el resultado de una consulta SQL de una o

i t bl ( ltit bl )

Vistas

varias tablas (multitabla).• Se especifica a través de una expresión de consulta

(sentencia SELECT). U i ú fil d l bl b• Una vista actúa como filtro de las tablas subyacentes a las que se hace referencia en ella.

• Tiene la misma estructura que una tabla (filas y l )columnas).

• Estas filas y columnas de datos proceden de tablas a las que se hace referencia en la consulta que define la vista

se prod cen de forma dinámica c ando se hacey se producen de forma dinámica cuando se hace referencia a la vista.

• Sólo se almacena la definición de la vista, no los datos. Se le puede considerar una tabla virtualSe le puede considerar una tabla virtual.

Vistas• Se puede utilizar haciendo referencia a su nombre en

instrucciones de un lenguaje de programación, de la

Vistasinstrucciones de un lenguaje de programación, de la misma forma en que se hace referencia a las tablas.

• Sobre un conjunto de tablas relacionales se puede t b j ú l i d i ttrabajar con un número cualquiera de vistas.

• La mayoría de los SGBD soportan la creación y manipulación de vistasmanipulación de vistas.

• Suelen utilizarse para centrar, simplificar y personalizar la percepción de la base de datos para cada usuario.

• Mecanismos de seguridad: permiten a los usuarios obtener acceso a los datos por medio de la misma, pero no les conceden el permiso de obtener acceso directo ano les conceden el permiso de obtener acceso directo a las tablas base subyacentes de la vista: limitación del acceso a datos.

Procedimiento Almacenado• Stored Procedure (SP).

Procedimiento Almacenado

• Objeto de una BD.• Programa que se almacena físicamente en el servidor.• Permite agrupar en forma exclusiva una tarea específica g p p

que se desee realizar sobre la BD. • Sus instrucciones realizan operaciones en la base de

datos (puede llamar a otros procedimientos):(p p )– Pueden devolver un conjunto de resultados, es decir, los

resultados de un comando SELECT.– Pueden recibir parámetros de entrada y retornar valores a la

aplicaciónaplicación. – Pueden devolver un valor de estado para indicar si la operación

se ha realizado correctamente o se han producido errores (y el motivo de éstos).

– Pueden verificar condiciones, verificar el rendimiento o calcular resultados.

Procedimiento Almacenado• Una vez creado se puede invocar directamente desde

Procedimiento AlmacenadoUna vez creado se puede invocar directamente desde una aplicación (cliente).

• Se usan a menudo para realizar consultas SQL, insertar, li li i i b l bj d lactualizar o eliminar registros sobre los objetos de la

base de datos de una manera transparente, desde el punto de vista del cliente de la aplicación. p p

• Son precompilados al ejecutarse por primera vez, y no vuelven a ser compilados con las subsiguientes ejec cionesejecuciones.

• Mejora en el rendimiento.

Procedimiento Almacenado

• Los SGBD manejan procedimientos

Procedimiento Almacenado

• Los SGBD manejan procedimientos almacenados del sistema.

• Se relacionan con actividades administrativas e• Se relacionan con actividades administrativas e informativas de las respectivas BD.

• Se agrupan en categoríasSe agrupan en categorías.

• sp_addtype. Crea un tipo de datos definido por el usuariousuario.

• Sintaxis• sp_addtype [ @typename = ] type,

[ @phystype = ] system_data_type[ , [ @nulltype = ] 'null_type' ] [ [ @ ] ' ' ][ , [ @owner = ] 'owner_name' ]

• EXEC sp_addtype ssn, 'VARCHAR(11)', 'NOT NULL' • EXEC sp_addtype birthday, datetime, 'NULL'

• sp droptypesp_droptype• EXEC sp_droptype 'birthday' • sp_rename

EXEC sp rename 'c stomers' 'c sts'• EXEC sp_rename 'customers', 'custs'

• CREATE PROCEDURE prod_1 • AS • SELECT * FROM CLIENTES• SELECT FROM CLIENTES

• CREATE PROCEDURE prod_2 • @p CodIni CHAR (6), @p_ ( ),• @p_CodFin CHAR (6) • AS • SELECT * FROM CLIENTE• SELECT FROM CLIENTE • WHERE IDCLIENTE BETWEEN @p_CodIni AND

@p_CodFi

Funciones• Porción de código generalmente dentro de un programa. • Realiza una determinada tarea y es independiente del

Funcionesy p

resto del código. • Devuelve un valor.• Permite operar sobre los datos de la BD.p• Se llama por su nombre, acepta parámetros de entrada

opcionales.• Se pueden usar dentro de consultasSe pueden usar dentro de consultas….

SQL Server suministra funciones integradas que no se• SQL Server suministra funciones integradas, que no se pueden modificar.

• Acepta funciones definidas por el usuario (los usuarios las pueden crear y modificar)las pueden crear y modificar).

• Estas pueden tener varias instrucciones SELECT.

Funciones• Funciones del sistema, la mayoría de las cuales

devuelven información de las tablas del sistema

Funciones

devuelven información de las tablas del sistema.

• COL_LENGTH: Devuelve la longitud definida de la columna. • select col length('alumno' 'dni') as nr• select col_length( alumno , dni ) as nr

• DATALENGTH: Devuelve la longitud de la expresión en bytes. expression suele ser un nombre de columna. p

• select datalength (nombre), nombre• from asignatura

• ISNULL: Sustituye el valor indicado en expression2 cuando en expression1 da como resultado NULL.

• select avg(isnull(price,$10.00)) from titlesfrom titles

Funciones• Funciones de cadena, que manipulan valores char ,

nchar , varchar , nvarchar , binary y varbinary .

Funciones

• SUBSTRING( expression , start , length ): Devuelve parte de una cadena de caracteres o binaria. Especificar los caracteres 2, 3 y 4 p yde la constante de caracteres "abcdef":

• select x = substring("abcdef", 2, 3)

• select (au_lname + "," + " " + substring(au_fname, 1, 1) + ".") from authors

Green, M. Straight, D. Stringer, D.

Funciones• Funciones de texto, que manipulan valores text e image.

F i t áti li i

Funciones

• Funciones matemáticas, que realizan operaciones trigonométricas y geométricas, además de otros tipos de manipulaciones de números.

• Funciones de conversión de tipos de datos que• Funciones de conversión de tipos de datos, que convierten expresiones de un tipo de datos a otro y que asignan formato a las fechas en una variedad de estilos.

Funciones• Funciones de fecha, que manipulan valores datetime y

smalldatetime

Funciones

smalldatetime.

• GETDATE: Fecha y hora actuales del sistema.

• select getdate()• select datepart(month, getdate()) p ( , g ())• select datepart(year, getdate())

• select interval = datediff(year 'Nov 30 1985'• select interval = datediff(year, Nov 30 1985 , getdate())

Secuencias• Objeto de la Base de Datos.• Permite generar auto incrementos

Secuencias

• Permite generar auto incrementos.• No se asocia directamente a una Tabla de la BD.

U tí i d l i l• Un uso típico de las secuencias es para crear un valor de una clave primaria (único para cada fila)

• La secuencia es generada e incrementada (o decrementada) por una rutina interna.

• El número de la secuencia es almacenado y generado de forma independiente a las tablas.

• La misma secuencia puede ser utilizada en diferentes tablas.

Secuencias• CREATE SEQUENCE nombre_secuencia

Secuencias

• [INCREMENT BY numero] [START WITH numero]• [MAXVALUE numero | NOMAXVALUE ] [MINVALUE numero |

NOMINVALUE]• [CYCLE | NOCYCLE ] [CACHE numero | NOCACHE ] [ORDER |[CYCLE | NOCYCLE ] [CACHE numero | NOCACHE ] [ORDER |

NOORDER]

• CREATE SEQUENCE misecuencia• CREATE SEQUENCE misecuencia• INCREMENT BY 1• START WITH 1

• INSERT INTO mitabla (at1, ...) VALUES (misecuencia.NEXTVAL, ...);

SecuenciasSecuencias

SQL SERVER no maneja secuencias• SQL SERVER no maneja secuencias.

Secuencias

• Autonumeración y columnas de identificación

Secuencias

• Autonumeración y columnas de identificación

• Una identidad común es una clave principal "autogenerada“autogenerada .

• Es simplemente un valor entero que autoincrementa.• Cada nueva fila se agrega a su tabla. • Puede especificar cuándo debe comenzar y cómo se

debe incrementar.• Para cada tabla, se puede crear una sola columna de

identificación.

SecuenciasSecuencias

• Por ejemplo, una columna de identificación podría generar automáticamente un número único de recibo de compra a medida que las filas son insertadas en la tabla.

• Una tabla que contiene columnas de identificación pueden contener los mismos valores de identificación pque los usados por otras tablas.

Secuencias• Crear columnas de identificación• Propiedad IDENTITY

Secuencias

• Propiedad IDENTITY• Las columnas de identificación pueden ser

implementadas usando la propiedad IDENTITY.• Especifica el primer número de identificación a ser• Especifica el primer número de identificación a ser

usado en la primera fila que se ingrese y un incremento (propiedad Identity Increment) que se agregará al último usado para generar un nuevo número de identificaciónusado para generar un nuevo número de identificación para una fila cualquiera que sea agregada.

• Cuando se insertan valores en una tabla con una columna de identificación, SQL Server automáticamentecolumna de identificación, SQL Server automáticamente genera el próximo número de identificación adicionando el incremento al último generado.

Secuencias• Se debe considerar lo siguiente:

Secuencias

• Una tabla puede tener solamente una columna con la propiedad IDENTITY property, y la columna debe ser definida utilizando los tipos de datos int numericdefinida utilizando los tipos de datos int, numeric, smallint, bigint, o tynint.

• Se pueden especificar el número inicial y el incremento de la secuencia siendo ambos por defecto iguales ade la secuencia, siendo ambos por defecto iguales a uno.

• La columna de identificación no debe permitir valores nulos y no debe contener una definición u objeto pornulos y no debe contener una definición u objeto por defecto.

Secuencias• El siguiente ejemplo utiliza el comando CREATE TABLE

para crear la tabla Empleados.

Secuenciaspara crear la tabla Empleados.

• Ninguna columna acepta valores nulos. Además, la columna Emp_ID es una columna de identificación. El valor inicial es 101, y el incremento 1., y

• CREATE TABLE Empleados• CREATE TABLE Empleados(Emp_ID SMALLINT IDENTITY(101,1) NOT NULL,EmpNombre varchar(50) NOT NULLEmpNombre varchar(50) NOT NULL

• )

Construcción de VistasConstrucción de Vistas

• Los datos accesibles a través de una vista no están almacenados. Lo que está almacenado en la base de datos es una instrucción SELECT.

• Las vistas se utilizan para alguna de estas funciones:– Restringir el acceso del usuario a filas concretas de una tabla. – Restringir el acceso del usuario a columnas específicasRestringir el acceso del usuario a columnas específicas. – Combinar columnas de varias tablas de forma que parezcan una

sola tabla.Agregar información en lugar de presentar los detalles Por– Agregar información en lugar de presentar los detalles. Por ejemplo, presentar la suma de una columna o el valor máximo o mínimo de una columna.

Construcción de VistasConstrucción de Vistas

Construcción de VistasConstrucción de Vistas

• No intentar modificar….

• Sysconstraints Contiene correspondencias entre• Sysconstraints. Contiene correspondencias entre restricciones y los objetos que las poseen. Este catálogo del sistema se almacena en cada base de datos.

• Syssegments. Contenía una fila para cada segmento (que recibía el nombre de colección de fragmentos de disco)disco).

• Para ver el codigo…• Sp HelpText nombre vistaSp_HelpText nombre_vista

Construcción de VistasConstrucción de Vistas

create view [[ database .] owner .] iview_name

[( column_name [, column_name ]...)] asas select_statement

• view name: nombre de la vista Especificar el propietario de la vistaview_name: nombre de la vista. Especificar el propietario de la vista es opcional.

• Column: Es el nombre que se va a utilizar para una columna en una vista. Sól i d l i d• Sólo es necesario p.e. cuando una columna proviene de una expresión aritmética, una función o una constante; cuando una columna de una vista recibe un nombre distinto al de la columna de la que proviene.

• Tambien se pueden asignar también en la instrucción SELECT. • Si no se especifica column, las columnas de la vista adquieren los

mismos nombres que las columnas de la instrucción SELECT. • AS: Son las acciones que va a llevar a cabo la vista• AS: Son las acciones que va a llevar a cabo la vista.• select_statement: instrucción SELECT que define la vista. Puede

utilizar más de una tabla y otras vistas. Una vista no tiene por qué ser un simple subconjunto de filas y de columnas de una tabla determinada Una ista se p ede crear con más de na tabla o condeterminada. Una vista se puede crear con más de una tabla o con otras vistas, mediante una cláusula SELECT de cualquier complejidad.

• Se pueden utilizar funciones en select_statement.

• SELECT * FROM nombre vista• SELECT FROM nombre_vista

• Sin nombre de columna específico• Sin nombre de columna específico

• create view datospersona• as • select nombre apellido direccioncalle direccionnumselect nombre, apellido, direccioncalle, direccionnum,

ciudad • from persona

• Con nombre de columna

• create view datospersona (PrimerNombre, PrimerApellido, Calle, Numero, Ciudad)PrimerApellido, Calle, Numero, Ciudad)

• as • select nombre, apellido, direccioncalle, direccionnum,

ciudadciudad • from persona

• create view datospersona2 • as • select nombre as PrimerNombre, apellido as

PrimerApellido, direccioncalle as Calle, direccionnum as Numero, ciudad as Ciudad

• from persona

t i d t 1 (N b A llid• create view datospersona1 (Nombre_y_Apellido, Direccion)

• as • select nombre+' '+apellido, direccioncalle+'

'+direccionnum+', '+ciudad• from persona

• Debe especificarse nombre de columna.

• create view horas asig (Numero horas, Creditos,create view horas_asig (Numero_horas, Creditos, Nombre_asignatura)

• as• select (creditos*10) Creditos nombreselect (creditos 10), Creditos, nombre• from asignatura

• create view costebasico (Costo, Asignatura)• as• SELECT COUNT(CosteBasico), idasignatura• FROM ASIGNATURA• group by idasignaturagroup by idasignatura

Con condiciones• Con condiciones

• create view costosmedios• as• SELECT NombreSELECT Nombre• FROM ASIGNATURA• WHERE CosteBasico >= 25 AND CosteBasico <= 35

Combinacion (multitabla)• Combinacion (multitabla)

• create view asig_logroño• as• SELECT Asignatura Nombre• SELECT Asignatura.Nombre• FROM ASIGNATURA, PROFESOR, PERSONA• WHERE ASIGNATURA.IdProfesor =

PROFESOR IdP fPROFESOR.IdProfesor• AND PROFESOR.DNI = PERSONA.DNI• AND Ciudad = 'Logroño'

Vi t d t i t• Vistas de otras vistas

• create view datospersona (PrimerNombre, PrimerApellido, Calle, Numero, Ciudad)

• as • select nombre, apellido, direccioncalle, direccionnum,

ciudad f• from persona

• create view datospersona4create view datospersona4• as• select nombre, apellido

f d t• from datospersona

• FUNCIONA?

• create view datospersona5create view datospersona5• as• select PrimerNombre, PrimerApellido

f d t• from datospersona

• create view datospersonavaroncreate view datospersonavaron• as• select PrimerNombre, PrimerApellido• from datospersona• from datospersona• Where varon=1

• FUNCIONA?

• create view datospersonacons• as• select PrimerNombre PrimerApellido• select PrimerNombre, PrimerApellido• from datospersona• Where PrimerApellido like ‘s%’

• Vistas distinct

• create view otro• as• SELECT DISTINCT(IdTitulacion)• FROM ASIGNATURA, ALUMNOASIGNATURA,

ALUMNOALUMNO• WHERE ASIGNATURA.IdAsignatura =

ALUMNOASIGNATURA.IdAsignatura• AND ALUMNOASIGNATURA IdAlumno =• AND ALUMNOASIGNATURA.IdAlumno =

ALUMNO.IdAlumno• AND ALUMNO.DNI = '20202020A'

• CREATE VIEW <Nombre de la vista> [Encabezado1• CREATE VIEW <Nombre de la vista> [Encabezado1, ....]

• [WITH ENCRYPTION]AS• AS

• Sentencias Select

• La cláusula WITH ENCRYPTION permite ocultar la implementación de la vista: especifica que la definición de la vista (la instrucción SELECT que define la vista)

if dsea cifrada. • SQL Server usa el mismo método para cifrar las

instrucciones SQL que para las contraseñas. • Esta técnica de seguridad puede ser útil si no se quiere

que ciertas clases de usuarios sepan a qué tablas se está accediendo.

• Modificar datos en una tabla a través de una i tvista

• Si se modifican los datos de una vista se modifica laSi se modifican los datos de una vista, se modifica la tabla base.

• Se puede insertar, actualizar o eliminar datos de una tabla a través de una vista.tabla a través de una vista.

• Las modificaciones que se realizan a las vistas:• No pueden afectar a más de una tabla consultada. Pueden

modificarse datos de una vista que combina varias tablas pero la q pmodificación solamente debe afectar a una sola tabla.

• No se pueden cambiar los campos resultado de un cálculo.• Pueden generar errores si afectan a campos a las que la vista no

hace referencia Por ejemplo si se ingresa un registro en una vistahace referencia. Por ejemplo, si se ingresa un registro en una vista que consulta una tabla que tiene campos not null que no están incluidos en la vista.

• Para eliminar datos de una vista solamente UNA tabla puede ser li t d l "f " d l d fi i i d l ilistada en el "from" de la definicion de la misma.

• create view uno• asas• select idasignatura, nombre, creditos, costebasico• from asignatura

h t b i >40• where costebasico>40

• insert into uno values (443584, ‘matematicas', 3, 80)• Update uno set costebasico=75 where

nombre=‘matematicas‘• Delete from uno where nombre=‘matematicas’• Se modifica la tabla y la vista.

• insert into uno values (463584 ‘ingles' 3 10)insert into uno values (463584, ingles , 3, 10)• Update uno set costebasico=20 where

nombre=‘matematicas‘• Se modifica la tabla con los datos, y la vista simplemente noSe modifica la tabla con los datos, y la vista simplemente no

muestra las filas que no cumplen con la condicion.

CREATE VIEW N b d l i t [E b d 1• CREATE VIEW <Nombre de la vista> [Encabezado1, ....]

• AS• Sentencias Select• [WITH CHECK OPTION]

• La palabra clave WITH CHECK OPTION especifica que las operaciones de modificación de datos que se realizan en una vista deben seguir el criterio contenido gen la instrucción SELECT que define la vista. Por ejemplo, no estaría permitida una operación de modificación de datos realizada en una vista para crear

fil d l t bl i ibl d t d l i tuna fila de la tabla que no sea visible dentro de la vista. • Obliga a todas las instrucciones de modificación que se

ejecutan en la vista a cumplir ciertos criterios que se especifican al definir la vistaespecifican al definir la vista.

• create view dos• asas• select idasignatura, nombre, creditos, costebasico• from asignatura• where costebasico>40• where costebasico>40• With check option

• insert into uno values (443584, ‘matematicas', 3, 80)• Update uno set costebasico=75 where

nombre=‘matematicas‘• Delete from uno where nombre=‘matematicas’• Se modifica la tabla y la vista.

• insert into uno values (463584, ‘ingles', 3, 10)• Update uno set costebasico=20 where

nombre=‘matematicas‘• No se modifica la tabla con estos datos puesto que no cumplen

con la condicion de la vista. Menos aun se muestran en la vista.

• Cambio de nombre de las vistas

• Se puede cambiar el nombre de una vista con el• Se puede cambiar el nombre de una vista con el procedimiento del sistema sp_rename:

• sp rename ojbname newname• sp_rename ojbname , newname

• Para cambiar el nombre titleview a bookview :

• sp_rename titles_view, bookview

• Modificar vistas• Modificar vistas

• Se puede modificar una vista.

• Alter view nombre vista• Alter view nombre_vista• As• Sentencias_select…

• Eliminar vistas

• Drop view nombre vista• Drop view nombre_vista

• Ejercicios de Vistas.1 Genere una vista que permita conocer el1. Genere una vista que permita conocer el

nombre, apellido y ciudad de todas las profesoras (mujeres). Debe mostrar el nombre y apellido en una columna llamaday apellido en una columna llamada Nombre_Completo.

2. Conocer todos los datos de las personas cuyo llid i ‘ ’apellido comience con ‘c’.

3. Igual que el ejemplo anterior, pero en vez de la fecha de nacimiento conocer la edad No sefecha de nacimiento, conocer la edad. No se requiere conocer el sexo de la persona ni su dni.

4 Conocer la cantidad de creditos total que4. Conocer la cantidad de creditos total que existen por cada titulacion. Debe aparecer el nr (creditos_total) y al lado el nombre de la tit l i ( b tit l i ) ltitulacion (nombre_titulacion) a la que pertenecen.

Ej i i d Vi t• Ejercicios de Vistas.

5 M t l b d l li d5. Mostrar el nombre de los ramos realizados por la profesora Rosario Díaz.

6. Encripte la vista anterior.6. Encripte la vista anterior.7. Mostrar por cada profesor (nombre y apellido

en una columna) la cantidad de ramos que dictandictan.

8. Mostrar nombre y apellido en una columna, edad y telefono de todas los alumnos varones.y

9. Generar una vista de la vista anterior, que muestre a aquellos alumnos mayores de 30 añosaños.

Uso de Identity

• Implementar las columnas de identificadores mediante la

Uso de Identity

• Implementar las columnas de identificadores mediante la propiedad IDENTITY.

• Permite especificar un número de identidad para la primera fila insertada en la tabla (propiedad Identityprimera fila insertada en la tabla (propiedad Identity Seed) y un incremento (propiedad Identity Increment).

• Cuando se insertan valores en una tabla con una columna de identificadores SQL Server generacolumna de identificadores, SQL Server genera automáticamente el siguiente valor de identidad al agregar el incremento al valor de inicialización.

• Dos tablas distintas, cada una con sus propias columnasDos tablas distintas, cada una con sus propias columnas de identificadores, pueden generar los mismos valores.

Uso de Identity• Una tabla sólo puede tener una columna IDENTITY, y

esa columna sólo se puede definir con los tipos de datos

Uso de Identityesa columna sólo se puede definir con los tipos de datos decimal, int, numeric, smallint o tinyint.

• Se pueden especificar los valores de inicialización e i t El l d t i d 1 bincremento. El valor predeterminado es 1 para ambos.

• La columna de identificadores no debe aceptar valores NULL ni contener ningun DEFAULTNULL ni contener ningun DEFAULT.

• Es posible hacer referencia a la columna de una lista de selección mediante la palabra clave IDENTITYCOL.

• Es posible utilizar la función OBJECTPROPERTY para determinar si una tabla tiene una columna IDENTITY, y la función COLUMNPROPERTY para determinar ella función COLUMNPROPERTY para determinar el nombre de la columna IDENTITY.

Uso de Identity• CREATE TABLE Empleado

(

Uso de Identity

• (Emp_ID SMALLINT IDENTITY(2,2) NOT NULL primary key,EmpNombre varchar(20) NOT NULL,

• EmpApellido varchar(20) NOT NULL,p p ( ) ,• Direccion varchar (30) NOT NULL• )

• INSERT into empleado (empnombre, empapellido, direccion) values (‘juan', 'hernandez', 'las casitas 34343')

• INSERT into empleado (empnombre empapellido direccion) values• INSERT into empleado (empnombre, empapellido, direccion) values ('esteban', ‘perez', 'las casitas 34343')

• INSERT into empleado (empnombre, empapellido, direccion) values (‘julio', ‘ramos', 'las casitas 34343')

Uso de IdentityUso de Identity

• Select * from empleado • Select * from empleado where identitycol=4Select from empleado where identitycol 4• update empleado set empnombre='omar' where

identitycol=4• delete empleado where identitycol=4

Uso de Identity

• SELECT

Uso de Identity

• SELECT OBJECTPROPERTY(OBJECT_ID('empleado'),'TableHasIdentity')

• (devuelve un ‘1’ si la tabla tiene identity)(devuelve un 1 si la tabla tiene identity)

• select COLUMNPROPERTY (OBJECT_ID('empleado'), 'empnombre' 'IsIdentity' )empnombre , IsIdentity )

• (devuelve un ‘1’ si la columna de la tabla tiene identity, en este caso ‘0’)

• select COLUMNPROPERTY (OBJECT_ID('empleado'), 'emp_id', 'IsIdentity' ) ( t ‘1’)• (en este caso ‘1’)