27
TECNOLÓGICO NACIONAL DE MÉXICO Ingeniería en Sistemas Computacionales Programación de Base de Datos Unidad III: Programación de Base de Datos Material de clase desarrollado para la asignatura de Programación de Base de Datos para Ingeniería en Sistemas Computacionales PROGRAMACIÓN DE BASE DE DATOS

Programacion de base de datos - unidad 3 Programacion de base de datos

Embed Size (px)

Citation preview

Page 1: Programacion de base de datos - unidad 3 Programacion de base de datos

TECNOLÓGICO NACIONAL DE MÉXICOIngeniería en Sistemas Computacionales

Programación de Base de DatosUnidad III: Programación de Base de Datos

Material de clase desarrollado para la asignatura de Programación de Base de Datospara Ingeniería en Sistemas Computacionales

PROGRAMACIÓN DE BASE DE DATOS

Page 2: Programacion de base de datos - unidad 3 Programacion de base de datos

PROGRAMACIÓN DE BASE DE DATOS

Competencia:• Manejar un lenguaje de programación visual y la conexión a la base de

datos mediante código SQL embebido.

Page 3: Programacion de base de datos - unidad 3 Programacion de base de datos

Introducción

• La Programación del lado del servidor es una tecnología que consiste enel procesamiento de una petición de un usuario mediante lainterpretación de un conjunto de instrucciones en el servidor de BD paragenerar un conjunto de datos procesados como respuesta.

• Todo lo que suceda dentro del servidor es llamado procesamiento dellado del servidor, o server-side processing.

PROGRAMACIÓN DE BASE DE DATOS

Page 4: Programacion de base de datos - unidad 3 Programacion de base de datos

• Cuando tu aplicación necesita interactuar con el servidor (por ejemplo,para cargar o guardar datos), ésta realiza una petición del lado del cliente(client-side request) y puede ser desde una aplicación o desde elnavegador. Mientras la aplicación continúa trabajando, el servidor estáejecutando código del lado del servidor.

• La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

PROGRAMACIÓN DE BASE DE DATOS

Page 5: Programacion de base de datos - unidad 3 Programacion de base de datos

• Cuando se utiliza un servicio en Internet, como consultar una base dedatos, transferir un archivo o participar en un foro de discusión, seestablece un proceso en el que entran en juego dos partes:

Por un lado: El usuario, quien ejecuta una aplicación en procesadorlocal, el denominado programa cliente. Este programa cliente seencarga de ponerse en contacto con el procesador remoto parasolicitar el servicio deseado.

Por otro lado: El procesador remoto por su parte responderá a losolicitado mediante un programa que esta ejecutando. Este último sedenomina programa servidor.

• Los términos cliente y servidor se utilizan tanto para referirse a losprogramas que cumplen estas funciones, como a las computadorasdonde son ejecutados esos programas.

PROGRAMACIÓN DE BASE DE DATOS

Page 6: Programacion de base de datos - unidad 3 Programacion de base de datos

Creación de vistas

• Una vista es una consulta, que refleja el contenido de una o más tablas,desde la que se puede acceder a los datos como si fuera una tabla. Dosson las principales razones por las que podemos crear vistas.

Seguridad, nos pueden interesar que los usuarios tengan acceso auna parte de la información que hay en una tabla, pero no a toda latabla.

Comodidad, como ya sabemos el modelo relacional no es el máscómodo para visualizar los datos, lo que nos puede llevar a tener queescribir complejas sentencias SQL, tener una vista nos simplifica estatarea.

PROGRAMACIÓN DE BASE DE DATOS

Page 7: Programacion de base de datos - unidad 3 Programacion de base de datos

• Las vistas no tienen una copia física de los datos, son consultas a losdatos que hay en las tablas, por lo que si actualizamos los datos de unavista, estamos actualizando realmente la tabla, y si actualizamos la tablaestos cambios serán visibles desde la vista.

• No siempre podremos actualizar los datos de una vista, esto dependeráde la complejidad de la misma (dependerá de si el conjunto de resultadostiene acceso a la clave principal de la tabla o no), y del gestor de base dedatos.

• No todos los gestores de bases de datos permiten actualizar vistas,ORACLE, por ejemplo, no lo permite, mientras que SQL Server sí.

PROGRAMACIÓN DE BASE DE DATOS

Page 8: Programacion de base de datos - unidad 3 Programacion de base de datos

Creación de vistas en SQL ServerPara crear una vista debemos utilizar la sentencia CREATE VIEW,debiendo proporcionar un nombre a la vista y una sentenciaSQL SELECT válida.

Sintaxis:

CREATE VIEW <nombre_vista> AS

(<sentencia_select>);

PROGRAMACIÓN DE BASE DE DATOS

Ejemplo en SQL ServerCREATE VIEW vAlquileres AS (

SELECT nombre, apellidos, folioFROM tAlquileres, tClientes

WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ))

Consultar datos de la Vista SELECT * FROM vAlquileres

Eliminar una VistaDROP VIEW vAlquileres;

Page 9: Programacion de base de datos - unidad 3 Programacion de base de datos

Ejemplo de como extraer información de una vista usando C#

PROGRAMACIÓN DE BASE DE DATOS

String consulta = "SELECT * FROM vAlquileres;"

SqlCommand commando = new SqlCommand(consulta, conectar);

connectar.Open();

SqlDataReader reader = command.ExecuteReader();

try {

while (reader.Read()) {

Console.WriteLine(String.Format("{0}, {1} , {2}", reader[0], reader[1], reader[2]));

}

} finally {

reader.Close();

}

Page 10: Programacion de base de datos - unidad 3 Programacion de base de datos

Cursores en SQL Server• En SQL Server un cursor puede definirse como un elemento que representará

a un conjunto de datos determinado por una consulta T-SQL, el cursorpermitirá recorrer fila a fila, leer y eventualmente modificar dicho conjunto deresultados.

• La creación y utilización de un cursor estará compuesta, como es de esperarse,por una serie de instrucciones T-SQL, las cuales podrán separarse en gruposbien diferenciados, los cuales son:

Declaración,

Apertura,

Acceso a datos,

Cierre y

Desalojo.

PROGRAMACIÓN DE BASE DE DATOS

Page 11: Programacion de base de datos - unidad 3 Programacion de base de datos

DECLARE @Desc AS nvarchar(400)

DECLARE ProdInfo CURSOR FOR SELECT [Description] FROM ProductDesc

OPEN ProdInfo

FETCH NEXT FROM ProdInfo INTO @Desc

WHILE @@fetch_status = 0

BEGIN

PRINT @Description

FETCH NEXT FROM ProdInfo INTO @Description

END

CLOSE ProdInfo

DEALLOCATE ProdInfo

PROGRAMACIÓN DE BASE DE DATOS

Ejemplo del uso de cursores en SQL Server

Page 12: Programacion de base de datos - unidad 3 Programacion de base de datos

Creación de Funciones en SQL Server• Una función definida por el usuario es una rutina de Transact-SQL o Common

Language Runtime (CLR) que acepta parámetros, realiza una acción, como uncálculo complejo, y devuelve el resultado de esa acción como un valor. El valordevuelto puede ser un valor escalar (único) o una tabla.

Sintaxis

CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name

( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type

[ = default ] [ READONLY ] }

[ ,...n ]

] )

RETURNS return_data_type

PROGRAMACIÓN DE BASE DE DATOS

Page 13: Programacion de base de datos - unidad 3 Programacion de base de datos

CREATE FUNCTION dbo.inventario(@ProductID int)RETURNS numeric(6,4)AS-- La function regresa el nivel de Stock de un productoBEGIN

DECLARE @ret numeric(6,4);SELECT @ret = SUM(p.Quantity)FROM Production.ProductInventory pWHERE p.ProductID = @ProductID

AND p.LocationID = '6';IF (@ret IS NULL)

SET @ret = 0;RETURN @ret;

END;

PROGRAMACIÓN DE BASE DE DATOS

Ejemplo del uso de funciones en SQL Server

Page 14: Programacion de base de datos - unidad 3 Programacion de base de datos

Triggers en SQL Server

• Un desencadenador (trigger) es una clase especial de procedimientoalmacenado que se ejecuta automáticamente cuando se produce unevento en el servidor de bases de datos.SQL Server permite crear varios desencadenadores para una instrucciónespecífica.

PROGRAMACIÓN DE BASE DE DATOS

Page 15: Programacion de base de datos - unidad 3 Programacion de base de datos

• Desencadenadores DML: se ejecutan cuando un usuario intentamodificar datos mediante un evento de lenguaje de manipulación dedatos (DML). Los eventos DML son instrucciones INSERT, UPDATE oDELETE de una tabla o vista (puede usar INSERTE o DELETED).

• Desencadenadores DDL: se ejecutan en respuesta a una variedad deeventos de lenguaje de definición de datos (DDL). Estos eventoscorresponden principalmente a instrucciones CREATE, ALTER y DROP deTransact-SQL, y a determinados procedimientos almacenados del sistemaque ejecutan operaciones de tipo DDL.

• Desencadenadores logon: se activan en respuesta al evento LOGON quese genera cuando se establece la sesión de un usuario.

PROGRAMACIÓN DE BASE DE DATOSSegún el tipo de evento que los desencadena se clasifican en:

Page 16: Programacion de base de datos - unidad 3 Programacion de base de datos

CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_nameON { table | view }[ WITH <dml_trigger_option> [ ,...n ] ]{ FOR | AFTER | INSTEAD OF }{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }[ WITH APPEND ][ NOT FOR REPLICATION ]AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }<dml_trigger_option> ::=

[ ENCRYPTION ][ EXECUTE AS Clause ]

<method_specifier> ::=assembly_name.class_name.method_name

PROGRAMACIÓN DE BASE DE DATOSSintaxis de un triguer en SQL Server: funciona sobre un INSERT,DELETE, o UPDATE a una tabla o vista

Page 17: Programacion de base de datos - unidad 3 Programacion de base de datos

USE Gestion

GO

CREATE TRIGGER ActualizaVentasEmp

ON pedidos FOR INSERT

AS

UPDATE empleados SET ventas=ventas + inserted.importe

FROM empleados, inserted

WHERE numemp=inserted.rep;

GO

PROGRAMACIÓN DE BASE DE DATOS

Ejemplo del uso de triggers en SQL Server

Page 18: Programacion de base de datos - unidad 3 Programacion de base de datos

Procedimientos Almacenados en SQL Server

• Un procedimiento almacenado de SQL Server es un grupo de una o variasinstrucciones Transact-SQL. Los procedimientos se asemejan a lasconstrucciones de otros lenguajes de programación, porque pueden: Aceptar parámetros de entrada y devolver varios valores en forma de

parámetros de salida al programa que realiza la llamada. Contener instrucciones de programación que realicen operaciones en la

base de datos. Entre otras, pueden contener llamadas a otrosprocedimientos.

Sintaxis:CREATE [PROCEDURE|PROC] nombre_procedimiento [#|##] [( parámetro1,parámetro2,... )][{FOR REPLICATION|WITH RECOMPILE}][WITH ENCRYPTION] AS<bloque de sentencias>

PROGRAMACIÓN DE BASE DE DATOS

Page 19: Programacion de base de datos - unidad 3 Programacion de base de datos

-- actualización de precios de productos: se recibe como parámetro

-- el tipo de cambio del dólar; por medio del procesamiento almacenado

-- se modifica el precio en pesos de los productos con base en su

-- valor en dólares.

USE almacen;

GO

CREATE PROCEDURE ProdPrecio

@tCambio numeric(6,4) AS

UPDATE productos set pt_precio = p_precio_dllr * tCambio;

GO

PROGRAMACIÓN DE BASE DE DATOS

Creación de Procedimientos Almacenados en SQL Server

Ejecución de un SPUSE almacen;GOEXEC dbo. ProdPrecio @tCambio = 21.57;

Page 20: Programacion de base de datos - unidad 3 Programacion de base de datos

Elementos de Transac-SQL

• SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales,pero que no posee la potencia de los lenguajes de programación. No permite el usode variables, estructuras de control de flujo, bucles y demás elementoscaracterísticos de la programación. No es de extrañar, SQL es un lenguaje deconsulta, no un lenguaje de programación.

• Transact-SQL es el lenguaje de programación que proporciona Microsoft SQLServer para extender el SQL estándar con otro tipo de instrucciones y elementospropios de los lenguajes de programación .

• Con Transact-SQL vamos a poder programar las unidades de programa de la basede datos SQL Server, están son: Procedimientos almacenados Funciones Triggers (disparadores) Scripts

PROGRAMACIÓN DE BASE DE DATOS

Page 21: Programacion de base de datos - unidad 3 Programacion de base de datos

Tipos de datos numéricos: SQL Server dispone de varios tipos de datos numéricos.Cuanto mayor sea el número que puedan almacenar mayor será en consecuencia elespacio utilizado para almacenarlo. Como regla general se recomienda usar el tipode dato mínimo posible. Todos los dato numéricos admiten el valor NULL.

bit: puede almacenar el rango de valores de 1 a 0.

tinyint: puede almacenar el rango de valores de 0 a 255.

smallint: puede almacenar el rango de valores -32768 a 32767.

int: puede almacenar el rango de valores -231 a 231-1 .

bigint: puede almacenar el rango de valores -263 a 263-1.

decimal(p,s): puede almacenar datos numéricos decimales sin redondear. Donde p esla precisión (número total del dígitos) y s la escala (número de valores decimales).

Money: Almacena valores numéricos monetarios de -263 a 263-1, con una precisión dehasta diez milésimas de la unidad monetaria.

PROGRAMACIÓN DE BASE DE DATOS

Page 22: Programacion de base de datos - unidad 3 Programacion de base de datos

Tipos de datos de carácter

• Char(n): Almacena n caracteres en formato ASCII, un byte por cada letra. Cuandoalmacenamos datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si laentrada de datos es inferior. Por ejemplo, si en un char(5), guardamos el valor 'A', sealmacena 'A ', ocupando los cinco bytes.

• Varchar(n): Almacena n caracteres en formato ASCII, un byte por cada letra. Cuandoalmacenamos datos en el tipo varchar, únicamente se utilizan los caracteres necesarios. Porejemplo, si en un varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo unbyte bytes.

• Varchar(max): Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.• Nchar(n): Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es

recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedanpertenecer a diferente idiomas.

• Nvarchar(n): Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Esrecomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedanpertenecer a diferente idiomas.

• Nvarchar(max): Igual que varchar, pero al declararse como max puede almacenar 231-1bytes.

PROGRAMACIÓN DE BASE DE DATOS

Page 23: Programacion de base de datos - unidad 3 Programacion de base de datos

Tipos de datos de fecha

• Datetime: Almacena fechas con una precisión de milisegundo. Debeusarse para fechas muy especificas.

• SmallDatetime: Almacena fechas con precisión de minutos, por lo queocupa la mitad de espacio de que el tipo datetime, para tablas quepuedan llegar a tener muchos datos es un factor a tener muy en cuenta.

• TimeStamp: Se utiliza para marcar un registro con la fecha de inserción -actualización. El tipo timestamp se actualiza automáticamente cada vezque insertamos o modificamos los datos.

PROGRAMACIÓN DE BASE DE DATOS

Page 24: Programacion de base de datos - unidad 3 Programacion de base de datos

DECLARE @bit bit, @tinyint tinyint,

@smallint smallint, @int int,

@decimal decimal(10,3),

@money money

set @bit = 1

print @bit

set @tinyint = 255

print @tinyint

set @smallint = 32767

print @smallint

set @int = 642325

print @int

set @decimal = 56565.234

print @decimal

set @money = 12.34

print @moneyPR

OG

RA

MA

CIÓ

N D

E B

ASE

DE

DA

TOS DECLARE @char char,

@varchar varchar(255),

@smallDatetime smallDatetime

set @char = ‘x’

print @char

set @varchar = ‘Tecnológigo’

print @varchar

set @smalldatetime = '1998-12-13 12:43:00‘

print @smalldatetime

Ejemplos de datos tipo numéricos

Ejemplos de datos tipo carácter y

tipo fecha

Page 25: Programacion de base de datos - unidad 3 Programacion de base de datos

Proyecto de la unidad: Programación de base de datos (Programación dellado del servidor)

1: En la BD AlumnosDB que ya tiene en la instancia que tiene instalado elSQL cear una tabla llamada AlumControl, cuya función es contabilizar elnúmero de alumnos por carrera. Debe contener los campos:

- Carrera; cadena de 5 caracteres (se admiten solo: IIND, IIA, IGE, ISC,IIAS, IMEC)

- Total; numérico entero (solo admite números >= 0)

2: Por medio de query generar un registro por carrera con las iniciales de la carrera y con CERO en el campo Total.

3: Eliminar el contenido de la tabla Alumnos.

PROGRAMACIÓN DE BASE DE DATOS

Page 26: Programacion de base de datos - unidad 3 Programacion de base de datos

4: generar los triggers necesarios para llevar a cabo el conteo de alumnos:

- Cuando un registro es agregado a la tabla Alumnos se debe sumar 1 a lacarrera correspondiente en la tabla AlumControl.

- Cuando un registro es eliminado de la tabla Alumnos se debe sumar 1 a lacarrera correspondiente en la tabla AlumControl.

- Cuando un registro es modificado de la tabla Alumnos se debe restar 1 ala carrera correspondiente en la tabla AlumControl y debe sumar 1 a lanueva carrera en la tabla AlumControl.

5: Generar una pantalla adicional llamada por un botón, en la GUI quemuestre el contenido de la tabla AlumControl a manera de reporte.

6: Verificar por medio de queries en SQL que el contenido de la tablaAlumControl es correcto.

PROGRAMACIÓN DE BASE DE DATOS

Page 27: Programacion de base de datos - unidad 3 Programacion de base de datos

Bibliografía

• Patrick LeBlanc. 2015. Microsoft Visual C# 2013 Step by Step. EE. UU. OctalPublishing, Inc. ISBN: 978-0-7356-8183-5.

• John Sharp. 2013. Microsoft SQL Server 2012 Step by Step PrePress. EE. UU.Sevastopol, CA. O’Reilly Media, Inc.

PROGRAMACIÓN DE BASE DE DATOS