Módulo II: Introducción Bases de Datos Trabajo con un SGBDR Creación de Bases de Datos © Maximiliano Odstrcil - 1 Bases de Datos Tipos de Bases de Datos Objetos de Bases de Datos © Maximiliano Odstrcil - 2 Tipos de Bases de Datos Bases de Datos del Sistema master model tempdb msdb pubs northwind usuario1 Las LasBD BDdel delsistema sistema Bases de Datos de Usuario almacenan almacenaninformación informacióndel del SGBDR SGBDR(NO (NOBORRAR) BORRAR) © Maximiliano Odstrcil - 3 distribution Son Sonlas lasBD BD de deproducción. producción.El El SGBDR SGBDRpuede puede manejar manejarmuchas muchasde de éstas. éstas. Objetos de Bases de Datos (1) Clustered Index PK EmpNum integer Anderson Anderson Barr ... LastName FK FirstName Stored Procedure UpdatePhone Trigger CtryCode Extension LastMod longstring varchar(20) char(2) char(6) longstring 10191 Labrie Angela FR x19891 \HR\KarlD 10192 Labrie Eva FR x19433 \HR\KarlD 10202 Martin Jose SP x21467 \HR\AmyL EmployeePhoneView SELECT lastname, firstname, extension FROM employee © Maximiliano Odstrcil - 4 Check x##### Objetos de Bases de Datos (2) Tablas: colección de filas con la misma cantidad de columnas. Tipos de Datos: valores permitidos para cada columna. Restricciones (Constraints): reglas que rigen los valores permitidos para las columnas. Proporcionan el mecanismo de integridad de datos. Valores por defecto: valores que toman las columnas cuando no se proporciona alguno. © Maximiliano Odstrcil - 5 Objetos de Bases de Datos (3) Reglas: información que define los valores para las columnas. Índices: estructura de almacenamiento que provee un acceso rápido a los datos y fuerza la integridad de los mismos. Vistas: forma de ver los datos de una o más tablas. © Maximiliano Odstrcil - 6 Objetos de Bases de Datos (4) Procedimientos Almacenados: colección de sentencias SQL, con un nombre, que se ejecutan como un todo. Admiten parámetros de entrada y/o salida. Desencadenadores (Triggers): procedimientos almacenados que se ejecutan automáticamente después de producida una acción. © Maximiliano Odstrcil - 7 Objetos de Bases de Datos (5) Formas para referenciar los objetos: Nombres completos (absolutos) Nombres parciales (relativos) © Maximiliano Odstrcil - 8 Objetos de Bases de Datos (6) Nombres completos (absolutos): En SQL Server incluye 4 identificadores: nombre del servidor, nombre de la BD, nombre del esquema y nombre del objeto. Ej: server1.ventas.dbo.facturas Cada objeto creado en SQL Server tiene un nombre único. © Maximiliano Odstrcil - 9 Objetos de Bases de Datos (7) Nombres parciales (relativos): No siempre hay que especificar el nombre completo: se pueden emplear nombres relativos. Si no se especifica el servidor, se asume el servidor al cual se realizó la conexión actualmente. Si no se especifica la base de datos, se asume la actual. Si no se especifica el esquema, se busca en el esquema por defecto, o en el esquema dbo. © Maximiliano Odstrcil - 10 Objetos de Bases de Datos (8) En MySQL también existen las 2 formas de referenciar objetos: Nombres absolutos: bd.tabla.columna Nombres relativos: tabla.columna o columna © Maximiliano Odstrcil - 11 Trabajo con un SGBDR Diseño de aplicaciones Implementación de BDs Administración de BDs © Maximiliano Odstrcil - 12 Diseño de aplicaciones (1) Intelligent Intelligent Server Server(2(2Capas) Capas) Intelligent Intelligent Client Client(2(2Capas) Capas) NNCapas Capas Presentación Presentación Presentación Presentación Negocio Negocio Negocio Negocio Presentación Presentación Negocio Negocio Datos Datos Datos Datos © Maximiliano Odstrcil - 13 Cliente Cliente Browser Browser Presentación Presentación Negocio Negocio Datos Datos Internet Internet Datos Datos Diseño de aplicaciones (2) Se requiere: Conocimiento de las funciones de negocio que se quieren modelar Conocimiento de los requisitos de estas funciones. Una buena BD proviene de un buen diseño. © Maximiliano Odstrcil - 14 Diseño de aplicaciones (3) Las diferentes arquitecturas para implementar un modelo C/S presentan las siguientes capas: Presentación: lógica para presentar los datos a los usuarios (lógica de interfaz). Casi siempre es implementada en el cliente. Negocio: lógica de la aplicación y reglas de negocio. El SGBDR puede estar involucrado en esta capa. Datos: definición de la BD, integridad, procedimientos almacenados y cualquier otra cosa relacionada a los datos. El SGBDR se involucra estrechamente con esta capa. © Maximiliano Odstrcil - 15 Diseño de aplicaciones (4) Las opciones de arquitectura típicas son: Intelligent Client (2 Capas): la mayoría de los procesos ocurre en el cliente con los datos residiendo en el servidor. La performance es mala por el tráfico en la red. Intelligent Server (2 Capas): la mayoría de los procesos ocurre en el servidor con la lógica de interfaz en el cliente. La lógica de negocios es implementada casi por completo en la BD. © Maximiliano Odstrcil - 16 Diseño de aplicaciones (5) Las opciones de arquitectura típicas son: N Capas: el procesamiento es dividido en un servidor de BD, uno o varios servidores de aplicación y los clientes. Es complejo pero muy escalable. Internet: el proceso es dividido en tres capas con los servicios de negocio y de presentación residiendo en un servidor web, y los clientes usando simples browsers. © Maximiliano Odstrcil - 17 Implementación de BDs (1) Implementar una base de datos significa: 1) Diseñar la BD: para que use el hardware eficientemente y permita el futuro crecimiento, identificando y modelando los objetos de BD y la lógica de la aplicación, la información de cada objeto y sus relaciones. 2) Crear la BD y sus objetos: incluyendo tablas, integridad de datos, entrada de datos, procedimientos almacenados, vistas, índices apropiados y seguridad. © Maximiliano Odstrcil - 18 Implementación de BDs (2) Implementar una base de datos significa: 3) Probar y poner a punto la aplicación y la BD: debe hacer las tareas de forma rápida y correcta. Junto a un buen diseño, correcto uso de índices y RAID se consigue un buen rendimiento. 4) Planear el desarrollo: incluye analizar la carga de trabajo con el sistema en producción para recomendar una óptima configuración de índices. © Maximiliano Odstrcil - 19 Implementación de BDs (3) Implementar una base de datos significa: 5) Administrar la aplicación: incluye configurar los servidores y clientes, monitorizar la performance en todo momento, gestionar los trabajos, alertas y operadores, manejar la seguridad y las copias de respaldo. © Maximiliano Odstrcil - 20 Administración de BDs (1) Administrar una BD involucra: Instalar y configurar el SGBDR Establecer la seguridad de la red Construir las BDs: Reservar espacio en disco. Crear trabajos automatizados. © Maximiliano Odstrcil - 21 Administración de BDs (2) Administrar una BD involucra: Manejar las actividades del día a día: Importación y exportación de datos. Copias de respaldo y restauraciones. Monitorizar y poner a punto la BD. Automatizar las actividades descriptas arriba. © Maximiliano Odstrcil - 22 Creación de Bases de Datos Almacenamiento y Transacciones Creación de Bases de Datos Modificación de Bases de Datos Creación de Tipos de datos y Tablas Planificación de la capacidad © Maximiliano Odstrcil - 23 Almacenamiento y Transacciones (1) Transacción: unidad de trabajo en una BD. Atomicidad. Se completan todas las operaciones de la transacción, o ninguna. Consistencia. Una transacción siempre deja los datos en estado consistente. Aislamiento: Cualquier otra actividad concurrente con la transacción no tiene efecto sobre esta última. Durabilidad: Cuando se ejecuta una transacción, sus resultados se guardan. © Maximiliano Odstrcil - 24 Almacenamiento y Transacciones (2) Tanto SQL Server como MySQL implementan las características de una transacción mediante un registro de transacciones. Cada SGBDR implementa este registro de transacciones de manera diferente. © Maximiliano Odstrcil - 25 Almacenamiento y Transacciones (3) Funcionamiento del registro de transacciones (RT) en SQL Server: 1. Una aplicación envía una modificación de datos (inserción, borrado o modificación). 2. Cuando se ejecuta la modificación, las páginas de datos afectadas son cargadas desde el disco a la memoria (buffer cache), si es que no fueron cargadas ya previamente por otra consulta. © Maximiliano Odstrcil - 26 Almacenamiento y Transacciones (3) Funcionamiento del registro de transacciones (RT) en SQL Server: 3. Cada modificación de datos es grabada en el registro de transacciones mientras se realiza. El cambio siempre se guarda en el registro y se escribe en el disco antes que el cambio sea hecho en la base de datos. 4. El proceso de checkpoint escribe todas las transacciones procesadas y completas a la BD en el disco. Esto se hace secuencial y continuamente. © Maximiliano Odstrcil - 27 Almacenamiento y Transacciones (4) Si el sistema falla, el proceso de recuperación automático usa el registro para completar una transacción completa o bien retrotraerla si es que quedó incompleta. En general, si el disco duro de la computadora tiene un cache de disco en la controladora, conviene deshabilitarla pues puede causar errores en la integridad de los datos. © Maximiliano Odstrcil - 28 Almacenamiento y Transacciones (5) En el caso de MySQL existen 2 registros de transacciones: Registro para rehacer: para aplicar los cambios que se hicieron en memoria y todavía no se escribieron en los registros de la tabla (archivo con los datos de la tabla). Registro para deshacer: para deshacer los cambios realizados por una transacción incompleta. © Maximiliano Odstrcil - 29 Almacenamiento y Transacciones (6) En SQL Server, todas las BD tienen: Un archivo de datos primario (.mdf) Uno o más archivos del registro de transacciones (.ldf) Opcionalmente, archivos de datos secundarios (.ndf) Estos archivos tienen un nombre físico (dado por el file system) y un nombre lógico usado por SQL Server. © Maximiliano Odstrcil - 30 Almacenamiento y Transacciones (7) BaseDatos Datos Datos(archivo) (archivo) .mdf .mdf oo .ndf .ndf Tablas,Índices .ldf .ldf Extent (8 páginas contiguas de 8KB) Datos Página (8 KB) Máx. tamaño fila = 8060 bytes © Maximiliano Odstrcil - 31 Log Log (archivo) (archivo) Almacenamiento y Transacciones (8) Los datos son almacenados en bloques de 8KB contiguos en el disco llamados páginas (en 1MB se pueden tener 128 páginas). Las filas de las tablas no pueden compartir páginas (el máximo tamaño de una fila es aproximadamente 8060 bytes). © Maximiliano Odstrcil - 32 Almacenamiento y Transacciones (9) Las tablas y los índices se almacenan en bloques de 8 páginas (64KB) llamados extents (en 1MB se pueden tener 16 extents). Las tablas pequeñas comparten extents. © Maximiliano Odstrcil - 33 Almacenamiento y Transacciones (10) En SQL Server, por defecto, el tamaño de un registro de transacciones es un 25% del tamaño de los datos, y puede ajustarse para mejorar rendimiento. © Maximiliano Odstrcil - 34 Creación de Bases de Datos (1) Se puede crear una BD usando algún asistente o mediante la sentencia CREATE DATABASE. En SQL Server, crear una BD requiere: El nombre (lógico) El tamaño Los archivos donde residirá (físico) © Maximiliano Odstrcil - 35 Creación de Bases de Datos (2) CREATE CREATE DATABASE DATABASE sample sample ON ON PRIMARY PRIMARY (( NAME=sample_data, NAME=sample_data, FILENAME='c:\mssql7\data\sample.mdf', FILENAME='c:\mssql7\data\sample.mdf', SIZE=10MB, SIZE=10MB, MAXSIZE=15MB, MAXSIZE=15MB, FILEGROWTH=20%) FILEGROWTH=20%) LOG LOG ON ON (( NAME=sample_log, NAME=sample_log, FILENAME='c:\mssql7\data\sample.ldf', FILENAME='c:\mssql7\data\sample.ldf', SIZE=3MB, SIZE=3MB, MAXSIZE=5MB, MAXSIZE=5MB, FILEGROWTH=1MB) FILEGROWTH=1MB) Cada vez que se crea, modifica o borra una BD, es conveniente realizar una copia de seguridad de la BD master. © Maximiliano Odstrcil - 36 Creación de Bases de Datos (3) PRIMARY: especifica los archivos en el grupo de archivos primario. Una BD solo puede tener un grupo de archivos primario. La extensión de archivo recomendada es .mdf. Si es omitido, el primer archivo listado pasa a ser el archivo primario. NAME: nombre lógico del archivo. FILENAME: el nombre físico (completo) del archivo para el sistema operativo. Debe ser local al servidor. © Maximiliano Odstrcil - 37 Creación de Bases de Datos (4) SIZE: tamaño de los archivos de datos y del registro. Se puede especificar el tamaño en MB (por defecto) o en KB. El tamaño mínimo es de 512 KB para ambos archivos. El tamaño especificado para el archivo primario de datos debe ser más grande que la BD model. MAXSIZE: tamaño máximo al que puede crecer un archivo. Se lo puede especificar en MB o KB. Si no se lo especifica se habla de un crecimiento sin restricciones (hasta que se llene el disco). © Maximiliano Odstrcil - 38 Creación de Bases de Datos (5) FILEGROWTH: incremento de crecimiento del archivo. Este valor no debe exceder al de MAXSIZE. Un valor de 0 indica sin crecimiento. El valor puede ser especificado en MB, KB o porcentajes. El valor por defecto es fijado en un 10% y el mínimo, de 64 KB (1 extent). © Maximiliano Odstrcil - 39 Creación de Bases de Datos (6) En el caso de MySQL, para crear una BD se debe especificar su nombre: CREATE DATABASE Prueba © Maximiliano Odstrcil - 40 Creación de Bases de Datos (7) Después de crear una BD, se pueden cambiar sus opciones usando un asistente o mediante algún comando. Algunas opciones (SQL Server): read only: para lectura únicamente (Data Warehousing). autoshrink: determina si los archivos de BD reducen su tamaño automáticamente. © Maximiliano Odstrcil - 41 Modificación de Bases de Datos Crecimiento de los archivos Expansión del registro de transacciones Reducción de archivos o de la BD Eliminación de BDs © Maximiliano Odstrcil - 42 Crecimiento de los archivos (1) Cuando los archivos crecen, o las modificaciones de datos se incrementan, surge la necesidad de aumentar el tamaño de los archivos de datos o del registro. En el caso de SQL Server, se puede hacer mediante un asistente o con la sentencia ALTER DATABASE (desde la BD master). © Maximiliano Odstrcil - 43 Crecimiento de los archivos (2) Se puede controlar el tamaño de la BD: Configurando el crecimiento automático de los archivos: de esta forma se reducen las tareas de administración. Incrementando manualmente el tamaño máximo de los archivos: se puede incrementar el tamaño de los archivos sin que estos crezcan automáticamente . Aumentando manualmente archivos secundarios: se pueden crear archivos secundarios en diferentes discos para aumentar el tamaño. Esto no debe usarse si se tienen sistemas de almacenamiento con RAID. © Maximiliano Odstrcil - 44 Crecimiento de los archivos (3) 7 MB 3 MB © Maximiliano Odstrcil - 45 ALTER ALTER DATABASE DATABASE sample sample MODIFY MODIFY FILE FILE (( NAME NAME == 'sample_log', 'sample_log', SIZE SIZE == 10MB) 10MB) GO GO ALTER ALTER DATABASE DATABASE sample sample ADD ADD FILE FILE (NAME (NAME == sample_data2 sample_data2 ,, FILENAME='c:\mssql7\data\sample2.ndf', FILENAME='c:\mssql7\data\sample2.ndf', SIZE=10MB SIZE=10MB ,, MAXSIZE=20MB) MAXSIZE=20MB) GO GO Expansión del registro de transacciones (1) Cuando crece la BD o la actividad de modificación de datos, se debe expandir el registro de transacciones (se debe monitorizar el RT para encontrar su tamaño óptimo). Si el registro de transacciones se llena, SQL Server no puede guardar las transacciones y las mismas no se procesan, quedando la BD sin actividad. © Maximiliano Odstrcil - 46 Expansión del registro de transacciones (2) En SQL Server se puede monitorizar el RT mediante el Management Studio. Se puede expandir el RT usando el Management Studio o mediante la sentencia ALTER DATABASE. © Maximiliano Odstrcil - 47 Expansión del registro de transacciones (3) Situaciones que producen gran actividad en el RT: Guardar información en una tabla que contiene índices. Transacciones masivas (INSERT, UPDATE y DELETE) que conducen a la modificación de muchas filas en una sola sentencia. Agregar o modificar datos de tipo text o image con la opción WITH LOG. © Maximiliano Odstrcil - 48 Reducción de archivos o de la BD (1) Cuando hay mucho espacio reservado, o bien el espacio de datos decrece, conviene reducir la BD o los archivos de la misma. En SQL Server se puede hacerlo usando un asistente o mediante la sentencia DBCC SHRINKDATABASE. © Maximiliano Odstrcil - 49 Reducción de archivos o de la BD (2) En SQL Server se puede reducir un archivo de datos de la BD mediante la sentencia DBCC SHRINKFILE. Se puede establecer una opción para que la BD se reduzca automáticamente (se debe hacer antes un respaldo). © Maximiliano Odstrcil - 50 Eliminación de BDs (1) Se puede borrar una BD: Mediante un asistente. Mediante la sentencia DROP DATABASE. DROP DROP DATABASE DATABASE northwind, northwind, pubs pubs © Maximiliano Odstrcil - 51 Eliminación de BDs (2) No se puede eliminar una BD cuando: Está siendo restaurada. Un usuario está conectada a ella. Se está publicando como parte de una replicación. © Maximiliano Odstrcil - 52 Creación de Tipos de datos y Tablas Tipos de datos del sistema Tipos de datos de usuario Creación y borrado de tablas Agregado o borrado de columnas Generación de valores de columnas © Maximiliano Odstrcil - 53 Tipos de datos del sistema (1) SQL Server y MySQL proveen diferentes tipos de datos. La tabla muestra los tipos para SQL Server: Tipo de Datos Binary Character Unicode character Date and Time © Maximiliano Odstrcil - 54 Sistema ANSI Nº Bytes binary [(n)] - 0-8000 varbinary[(n)] binary VARYING [(n)] char [(n)] character [(n)] varchar [(n)] char VARYING [(n)] nchar [(n)] - 0-8000 nvarchar [(n)] - 4000 carac. datetime - 8 smalldatetime - 4 0-8000 Tipos de datos del sistema (2) Tipo de Datos Exact Numeric Sistema ANSI Nº Bytes decimal [p,s] dec numeric [p,s] - Approximate numeric float [(n)] double precision 8 real float [(n)] 4 Global identifier uniqueidentifier - 16 Integer int integer 4 smallint,tinyint - 2,1 money - 8 smallmoney - 4 Text and Image text, image - 0-2 GB Unicode Text ntext - 0-2 GB Monetary © Maximiliano Odstrcil - 55 2-17 Tipos de datos de usuario (1) Los tipos de datos definidos por el usuario están basados en los tipos de datos del sistema (permiten refinarlos y hacerlos más específicos). Creación: con sp_addtype tipo, tdsistema, nulo EXEC sp_addtype isbn, 'smallint’, 'NOT NULL' CREATE TYPE dbo.isbn FROM smallint NOT NULL Borrado: con sp_droptype tipo EXEC sp_droptype isbn DROP TYPE dbo.isbn © Maximiliano Odstrcil - 56 Tipos de datos de usuario (2) Guías para la creación de tipos de datos. Si la longitud de la columna varía, usar tipos variables (varchar) Para tipos de datos numéricos, tener en cuenta el almacenamiento y la precisión. En general, usar decimal. Si el almacenamiento supera los 8000 bytes, se deben usar los tipos text o image. © Maximiliano Odstrcil - 57 Creación y borrado de tablas (1) Cuando se crea una tabla, se debe especificar: Su nombre Los nombres y tipos de datos de las columnas (deben ser únicos dentro de una tabla específica) Se puede especificar en cada columna si admite o no valores nulos (NULL o NOT NULL). © Maximiliano Odstrcil - 58 Creación y borrado de tablas (2) La sentencia para crear tablas es CREATE TABLE. Nombre de Columna Tipo de Dato CREATE TABLE member ( member_no lastname firstname middleinitial photograph member_no shortstring shortstring letter image NULL o NOT NULL NOT NULL, NOT NULL, NOT NULL, NULL, NULL ) Para borrar una tabla se usa la sentencia DROP TABLE. © Maximiliano Odstrcil - 59 Agregado o borrado de columnas ALTER TABLE TABLE sales sales Agregar ALTER ADD ADD customer_name customer_name char(30) char(30) null null Commission Commission Sales_amount Sales_amount Sales_date Sales_date Borrar ALTER ALTER TABLE TABLE sales sales DROP DROP COLUMN COLUMN sales_date sales_date © Maximiliano Odstrcil - 60 Customer CustomerIDID Customer_name Customer_name Generación de valores de columnas (1) Se pueden generar valores de columnas de diferentes maneras: En SQL Server se puede emplear la propiedad IDENTITY o la función NEWID() junto con el tipo de datos uniqueidentifier. En MySQL se auto_increment. © Maximiliano Odstrcil - 61 puede emplear la propiedad Generación de valores de columnas (2) Uso de la propiedad IDENTITY: Se fija el valor de la semilla Se fija el valor del incremento. Se usa @@identity para determinar el valor más reciente. Ej: create table tabla (col, tipo_dato, identity semilla, incremento not null) © Maximiliano Odstrcil - 62 Generación de valores de columnas (3) Uso de la función NEWID(): Se aseguran valores globales únicos Se usa con la restricción DEFAULT. Ej: create table tabla (columna uniqueidentifier not null default newid(), ... © Maximiliano Odstrcil - 63 Generación de valores de columnas (4) Uso de la propiedad auto_increment: Ej: create table auto_increment, ... © Maximiliano Odstrcil - 64 tabla (columna int(11) not null Generación de valores de columnas (5) Se debe considerar lo siguiente: Solo un tipo de columna identidad es permitida por tabla. No puede ser modificado su valor. En SQL Server no admite valores nulos. Se usa con los tipos de datos numéricos. La columna identidad no asegura unicidad (usar índices). © Maximiliano Odstrcil - 65 Planificación de la Capacidad Determinación del tamaño de la BD Estimación de la cant. de datos por tabla © Maximiliano Odstrcil - 66 Determinación del tamaño de la BD (1) Cuando se planea la creación de una BD, se debe tener en cuenta el espacio que ocupará en disco en forma de archivos (el espacio incluye el RT, tablas e índices). Cada objeto que se crea en la BD ocupa lugar (procedimientos almacenados, desencadenadores, vistas, etc.). © Maximiliano Odstrcil - 67 Determinación del tamaño de la BD (2) Factores a considerar: Tamaño de la BD model y cantidad de datos en las tablas. Número y tamaño de índices y tamaño del RT Tamaño de las tablas del sistema. © Maximiliano Odstrcil - 68 Estimación de la cant. de datos por tabla (1) Luego de planificar la cantidad de espacio que necesita la BD, se debe estimar la cantidad de espacio que ocuparán los datos en las tablas. Se puede calcular determinando la cantidad de filas, tamaño de la fila, número de filas que llenan una página y total de páginas necesarias para cada tabla. © Maximiliano Odstrcil - 69 Estimación de la cant. de datos por tabla (2) 1. Calcular el número de bytes por fila: Sumar la cantidad de bytes de cada columna, tomando un promedio en las columnas variables. 2. Determinar el número de filas por página: Dividir 8060 por el número de bytes de cada fila. Redondear al entero más bajo. 3. Dividir el número de filas estimados en la tabla por el número de filas por página. 4. Hacer esto por cada tabla y sumar todo para obtener el número de páginas total. © Maximiliano Odstrcil - 70