Upload
jose-antonio-sandoval-acosta
View
226
Download
3
Embed Size (px)
Citation preview
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
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.
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
• 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
• 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
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
• 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
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;
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();
}
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
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
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
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
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
• 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:
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
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
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
-- 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;
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
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
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
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
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
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
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
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