Вы находитесь на странице: 1из 40

Curso SQL Server 2000 Captulo 3

CURSO SQL SERVER 2000


Dictado por Horacio Peafiel

Mdulo 3: Administracin de SQL SERVER 2000

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

MDULO 3 ADMINISTRACIN DE SQL SERVER 2000 En este mdulo se presentarn las distintas herramientas que proporciona SQL Server 2000 para su administracin. Luego de completar este mdulo, el alumno estar en condiciones de: Detallar las distintas herramientas de administracin que proporciona SQL Server. Analizar los distintos objetos que brinda SQL Server como administrador de bases de datos (DBMS).

3.1 HERRAMIENTAS DE ADMINISTRACIN Microsoft SQL Server 2000 incluye muchas herramientas grficas que permiten que los usuarios, los programadores y los administradores desempeen las siguientes tareas de forma eficiente: Administrar y configurar SQL Server. Determinar la informacin de catlogo de una copia de SQL Server. Disear y probar consultas para la obtencin de datos.

Adems de estas herramientas, SQL Server contiene muchos asistentes para guiar a los administradores y los programadores por los pasos necesarios para realizar las ms complejas tareas administrativas. Bsicamente, analizaremos el siguiente conjunto de herramientas que son las principales a la hora de administrar nuestro servidor SQL Server: El Administrador Corporativo de SQL Server (SQL Server Enterprise Manager). El Analizador de Consultas (SQL Server Query Analyzer). El Analizador de SQL Server (SQL Server Profiler). La herramienta OSQL de lnea de comandos.

3.2 EL ADMINISTRADOR CORPORATIVO El Administrador Corporativo (Enterprise Manager) es la principal herramienta para la administracin de nuestro servidor de bases de datos. Es uno de los principales programas dentro del grupo de programas de SQL Server, y se encuentra disponible desde el men Inicio en Windows. Cuando lanzamos el Administrador Corporativo desde el men Inicio, se nos abre una instancia de la ventana de la Consola Administrativa de Microsoft (MMC Microsoft Management Console), con un plug-in para la administracin de SQL Server 2000. Luego de abrir el Administrador Corporativo por primera vez, debemos familiarizarnos con la interfase, como vemos en la siguiente figura:

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

En esta figura vemos el nodo Bases de Datos abierto y mostrando las diferentes bases de datos que residen en nuestro servidor. Dentro de la base de datos CURSOSQL, tenemos las distintas tablas que la componen. La consola del Administrador Corporativo de SQL Server contiene el rbol de servidores en el panel izquierdo. Este rbol registra el contenedor de Grupos de Servidores de SQL Server 2000. Este es el grupo por defecto para todos los servidores registrados en esta consola para su administracin. Cuando instalamos una instancia de SQL Server 2000, el programa de Instalacin automticamente registra esa instancia para administracin en la computadora local y lo ubica en el grupo de servidores por defecto. Cada instancia de SQL Server 2000 tiene su propio contenedor. Podemos crear grupos separados conteniendo servidores seleccionados para su administracin cuando administramos mltiples servidores. Cuando hacemos click en un objeto en el rbol de consola, el panel derecho de la consola MMC (llamado el panel de detalle) muestra los detalles del objeto seleccionado. Podemos customizar la vista en el panel de detalle, incluyendo modificar items que aparecen en la barra de herramientas cuando el objeto es seleccionado. Una consola MMC contiene dos tipos de barras de herramientas. La primera es la barra de herramientas de MMC. Esta es usada principalmente en modo de autor. El segundo tipo de barra de herramienta es especfica a cada rbol de consola. Si nos posicionamos dentro del rbol de consola, la correspondiente barra de herramientas contendr items de men y herramientas especficas al Administrador Corporativo de SQL Server. Si seleccionamos otro rbol dentro de la misma consola, la barra de herramientas ser la especfica de ese rbol de consola. La consola raz del Administrador Corporativo contiene tres mens sensibles al contexto: Accin, Ver y Herramientas. Estos items de men nos permiten realizar diferentes tareas, como ser lanzar otras herramientas de SQL Server como ser el Analizador de Consultas o el Profiler

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

Para establecer una conexin a una instancia de SQL Server 2000 que se encuentra registrada en el Administrador Corporativo, simplemente expandiremos el contenedor para esta instancia. Podemos tambin hacer click derecho sobre una instancia de SQL Server 2000 para iniciar, detener, pausar o desconectar a dicha instancia. Por defecto, el Administrador Corporativo se conectar usando Autenticacin Integrada de Windows e iniciar el servicio MSSQLServer si no estuviera iniciado. Podemos cambiar esta configuracin haciendo click derecho en el container de una instancia de SQL Server determinada, y editando las propiedades de la registracin. Por ejemplo, podemos elegir conectarnos al servidor y administrar el mismo usando la cuenta sa. Tambin podemos elegir ocultar todas las bases de datos y objetos del sistema como parte de la configuracin de registro del servidor. Finalmente, debemos tener en cuenta que el Administrador Corporativo de SQL Server se conecta a una instancia del servidor como un cliente. Por defecto, el Administrador Corporativo consulta al servicio cada 10 segundos para verificar su estado. A su vez, los cambios realizados a objetos de una instancia de SQL Server no se vern automticamente en la pantalla. Para actualizar el contenido de un tem en particular, hacemos click derecho en el mismo y seleccionaremos Actualizar. Para refrescar todos los objetos de una instancia de SQL Server, deberemos desconectarnos de la instancia y luego reconectarnos.

3.3 EL ANALIZADOR DE CONSULTAS El Analizador de Consultas de SQL Server es usado para crear y administrar objetos de base de datos y para testear sentencias Transact-SQL, lotes y scripts interactivamente. El Analizador de Consultas de SQL Server es uno de los principales programas dentro del grupo de SQL Server en el men Inicio. Cuando lanzamos el Analizador de Consultas, podemos elegir conectarnos a instancias locales o remotas de SQL Server 2000 (a la vez que con versiones anteriores). En la caja de dilogo Conectar a SQL Server, podemos tipear o buscar una instancia de SQL Server a la que nos conectaremos. Por ejemplo, si tipeamos (local) estaremos seleccionando la instancia local de SQL Server; el resultado es el mismo que tipear un punto (.) o dejar en blanco la casilla de texto.Tambin podemos elegir el tipo de autenticacin: Autenticacin Windows Integrada o Autenticacin de SQL Server. Finalmente, si la instancia a la que nos estamos conectando no se encuentra ejecutando, tenemos la opcin de iniciar el servicio del servidor. La figura siguiente nos muestra la ventana tpica del Analizador de Consultas de SQL Server 2000. A la izquierda podemos ver el Examinador de Objetos. A la derecha tenemos la ventana del Editor de Cdigo. Abajo vemos la Ventana de Resultados.

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

El Examinador de Objetos El Examinador de objetos es una herramienta basada en rbol que se utiliza para desplazarse entre los objetos de una base de datos. Adems del desplazamiento, el Examinador de objetos ofrece secuencias de comandos de objeto, ejecucin de procedimientos almacenados y acceso a objetos tabla y vista. El Examinador de objetos se compone de dos paneles: Panel Objetos, que enumera los objetos de una base de datos y los objetos comunes, como las funciones integradas y los tipos de datos base. Panel Plantillas, que proporciona acceso al directorio Templates.

El Examinador de Objetos nos permite arrastrar y pegar en la ventana del Editor de Transact-SQL distintos objetos. Por ejemplo, si tipeamos SELECT y luego desde la ventana del Examinador de Objetos arrastramos y pegamos una tabla de usuario, el editor del Analizador de Consultas muestra el valor correspondiente como si lo hubisemos tipeado. Si lo que arrastramos resulta ser una carpeta, se agregarn todos los items que hubieran dentro de la misma. Por ejemplo, en la siguiente figura vemos el Analizador de Consultas luego de arrastrar y pegar la carpeta Tablas de Usuario:

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

1. Podemos abrir una tabla directamente en la Ventana de Resultados. 2. Podemos crear sentencias Transact-SQL directamente si tipearlas. Por ejemplo, si seleccionamos del men contextual la opcin Crear secuencia de comandos del objeto en una nueva ventana como, podemos generar sentencias SQL que nos permitan reconstruir el objeto (CREATE TABLE), eliminar el mismo (DROP TABLE), o generar las consultas y modificaciones con las sentencias SELECT, INSERT, UPDATE y DELETE. 3. Tambin podemos redirigir estas sentencias hacia un archivo de texto donde se guardarn las sentencias Transact-SQL generadas. 4. Tambin podemos generar cdigo para ejecutar Procedimientos Almacenados. Estos procedimientos son conjuntos de sentencias Transact-SQL que residen en el servidor de SQL Server 2000. Slo tenemos que seleccionar en el men contextual la opcin Execute. Si en cambio deseamos ejecutar directamente un Procedimiento Almacenado, haremos click en la opcin Abrir. El Examinador de Objetos se encargar de solicitarnos los parmetros correspondientes en caso de que fuera necesario. Esta capacidad de generacin de cdigo del Examinador de Objetos es posible gracias a las denominadas Plantillas del Analizador de Consultas. Estas plantillas, ubicadas en la carpeta G:\Archivos de programa\Microsoft SQL Server\80\Tools\Templates\SQL Query Analyzer, son las que le informan al Analizador de Consultas la forma que deben tener las sentencias T-SQL generadas. La ventana de cdigo Cada vez que ejecutamos una porcin de cdigo dentro de la ventana de cdigo, se nos muestra un resultado en forma de cuadrcula, a la vez que pueden aparecer mensajes del servidor en una ventana por separado. Esto puede modificarse desde el men Consulta, seleccionando Mostrar resultados como Texto. De esta manera, podemos configurar la vista de resultado si va a mostrarse como una grilla (o ms de una), o como texto plano. Entre las funciones ms importantes del Analizador de Consultas de SQL Server, estn las herramientas que nos permiten analizar las consultas para obtener un rendimiento ptimo. Estas herramientas incluyen: Mostrar el plan de ejecucin de una consulta. Mostrar el plan de ejecucin estimado de una consulta. Mostrar la traza del servidor. Mostrar estadsticas de clientes. El Asistente para Optimizacin de Indices.

Para mostrar el Plan de Ejecucin de una consulta, seleccionaremos Mostrar Plan de Ejecucin en el men Consulta. Un ejemplo de plan de ejecucin se ve a continuacin:

Tambin podemos desear ver el plan de ejecucin estimado. La diferencia con el anterior es que para ver el primero debemos ejecutar la sentencia o sentencias SQL, en cambio podemos ver el plan estimado antes de ejecutar el lote.

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

La Traza del servidor nos permite observar en detalle los distintos comandos que se le envan al servidor. Como veremos ms adelante, esta funcin es muy similar a lo que hace el Analizador (Profiler). Tambin podemos observar las Estadsticas de cliente de forma anloga. Finalmente, tenemos en Asistente para Optimizacin de Indices. Este asistente es muy valioso a la hora de recomendar una estrategia de ndices para nuestra aplicacin. Para ejecutarlo, debemos suministrar un conjunto de sentencias Transact-SQL que se consideren que representan la carga de trabajo habitual de nuestro servidor. Basndose en esa entrada, el asistente generar una recomendacin de ndices a crear, eliminar o modificar. El Depurador de Transact-SQL Para activar el Depurador de Transact-SQL para depurar Procedimientos Almacenados, hacemos click derecho en el Examinador de Objetos y seleccionamos Depurar. La ventana de Edicin cambiar como muestra la figura siguiente:

Dentro de estos nuevos paneles, encontramos la Barra de Herramientas de Depuracin:

Por medio de esta barra de herramientas, podemos agregar o quitar puntos de interrupcin, moverse paso a paso o por procedimientos, reiniciar o detener la depuracin, etc.

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

3.4 EL ANALIZADOR DE SQL SERVER (PROFILER) El Analizador de SQL es una herramienta que captura los sucesos de Microsoft SQL Server 2000 de un servidor. Los sucesos se guardan en un archivo de traza que posteriormente se puede analizar o utilizar para reproducir pasos consecutivos concretos cuando se intenta diagnosticar un problema. El Analizador de SQL se utiliza en actividades como: Seguir los pasos de consultas con problemas para buscar la causa de los mismos. Buscar y diagnosticar consultas de bajo rendimiento. Capturar el conjunto de instrucciones SQL que causaron un problema. La traza guardada se puede utilizar despus para duplicar el problema en un servidor de prueba en el que se pueda diagnosticar el problema. Supervisar el rendimiento de SQL Server para ajustar las cargas de trabajo.

Para iniciar el Analizador de SQL Server, hacemos click dentro del grupo de programas Microsoft SQL Server y seleccionaremos Analizador. Se nos muestra la ventana principal. Dentro de la misma, seleccionaremos Nueva y Traza. En la ventana que se nos muestra, seleccionaremos el servidor y el tipo de autenticacin a utilizar. A continuacin, el Analizador de SQL Server nos muestra la siguiente ventana:

FAGDUT

CCI

Curso SQL Server 2000 Captulo 3

Dentro de esta ventana tenemos varias secciones: General, Sucesos, Columnas de datos, y Filtros. La primera pestaa, General, nos permite darle un nombre a la traza que va a generar el Analizador de SQL Server. Podemos especificar una plantilla a utilizar, a la vez que establecer las opciones en caso de querer guardar la traza en un archivo en disco. En la seccin Sucesos tenemos los distintos eventos que puede monitorear el Analizador, agrupados en sus clases de funciones principales. Como ejemplo de los sucesos que se pueden monitorear tenemos: Base de datos: Log File Auto Grow o Sesiones: Existing Connection. Dentro de Columnas de datos especificaremos los distintos campos de datos a ser monitoreados. Dentro de las columnas de datos seleccionadas tenemos: Columnas: Event class o Grupos: Object ID. Los items que seleccionemos en esta pestaa aparecern como columnas dentro de la ventana principal de la traza del Analizador. Finalmente, en la seccin Filtros, establecemos las diferentes condiciones que debern cumplir los items de la traza a obtener. Una vez finalizada la configuracin de la traza, haremos click en Ejecutar para que el Analizador de SQL Server comience a obtener los datos. Por ejemplo, podemos desde el Analizador de Consultas ejecutar algunas sentencias Transact-SQL de ejemplo y ver cmo se reflejan dentro de la traza seleccionada del Analizador de SQL Server. En la siguiente figura vemos una posible traza obtenida a partir de una sesin del Analizador de Consultas de SQL Server:

3.5 INTRODUCCIN A LOS OBJETOS DE SQL SERVER 3.5.1 BASES DE DATOS Ahora que tenemos instalada una instancia de SQL Server 2000, estamos listos para crear bases de datos de usuario usando el Administrador Corporativo as como la sentencia CREATE DATABASE de Transact-SQL en el Analizador de Consultas. Tambin aprenderemos a usar el Administrador Corporativo para generar scripts de Transact-SQL que nos permitan recrear un objeto de base de datos (por ejemplo, en una situacin de recuperacin de desastres).

CREACIN DE UNA BASE DE DATOS Cuando creamos una nueva base de datos de usuario, seleccionamos un nombre para la misma que sea nico en la instancia actual de SQL Server 2000. No se requiere definir explcitamente ninguna otra propiedad. El nombre de base de datos a elegir debera conformar
FAGDUT 10 CCI

Curso SQL Server 2000 Captulo 3

las reglas de SQL Server 2000 para identificadores (aunque esto no es estrictamente requerido): El primer carcter debe comenzar con una letra, un signo de subrayado (_), el signo @ (que significa que el objeto es una variable local o parmetro), o el signo de cardinal #, que significa que el objeto es una tabla o procedimiento temporario. Caracteres subsiguientes pueden incluir nmeros y el signo $. Los identificadores no pueden incluir espacios y caracteres especiales. No podemos usar palabras reservadas de SQL Server, como ser BACKUP o PLAN.

Nota: si un identificador no sigue estas reglas, debemos referenciar al mismo usando comillas dobles o corchetes (por ejemplo, sp_helpdb Mi base de datos o sp_helpdb [Mi base de datos]. Propiedades adicionales que definiremos con frecuencia son el tamao, el nombre de archivo fsico y lgico, y la ubicacin fsica tanto del archivo primario de datos como del archivo que contiene el registro de transacciones. Podemos especificar mltiples archivos de datos, as como mltiples archivos de registro de transacciones (generalmente en discos separados), en el momento de crear la base de datos (tambin se lo puede hacer ms tarde). Asimismo, podemos agrupar archivos en grupos de archivos y cambiar el grupo de archivos por defecto. Tambin, para cada archivo de datos o registro, podemos especificar si tal archivo crece automticamente cuando se queda sin espacio, cun grande es cada incremento, y el tamao mximo que puede crecer un archivo. Si no definimos estas propiedades adicionales, SQL Server utiliza los siguientes valores por defecto (para una base de datos llamada Empleados): Propiedad de base de datos Nombre lgico del archivo de datos primario Nombre fsico del archivo de datos primario Ubicacin fsica del archivo de datos primario Tamao fsico del archivo de datos primario Valor Empleados_Data Empleados_Data.mdf c:\Archivos de Programa\Microsoft SQL Server\Mssql\Data Si la base de datos se cre por medio de Transact-SQL, el tamao por defecto es el de la base de datos Model: 640 KB. Si se creo por medio del Administrador Corporativo, el tamao por defecto sera de 1 MB o mltiplos de 1 MB. La opcin Autogrowth se establece como verdadero, con un incremento de 10% del tamao original, y no se establece ningn lmite mximo de crecimiento. Empleados_Log Empleados_Log.ldf c:\Archivos de Programa\Microsoft SQL Server\Mssql\Data El tamao del archivo de transacciones de la base de datos Model: 512 KB, si la base de datos se cre por medio de TSQL, sino el tamao inicial es de 1 MB o un mltiplo de 1 MB. La opcin Autogrowth se establece como verdadero, con un incremento de 10% del tamao original, y no se establece ningn lmite mximo de crecimiento.

Crecimiento del archivo de datos primario Nombre lgico del archivo de registro Nombre fsico del archivo de registro Ubicacin fsica del archivo de registro Tamao fsico del archivo de registro Crecimiento del archivo de registro

Cuando SQL Server 2000 crea una base de datos, realiza dicha tarea en dos pasos. Primero, copia la base de datos Model al archivo primario de datos para inicializar la nueva base de datos y sus metadatos. Los objetos que son copiados incluyen los objetos de sistema y todo objeto de usuario que haya sido agregado a la base de datos Model (como ser tablas, vistas, procedimientos almacenados, o tipos de datos definidos por el usuario). A continuacin,
FAGDUT 11 CCI

Curso SQL Server 2000 Captulo 3

SQL Server 2000 llena el resto del archivo de datos con pginas en blanco. El archivo primario de datos siempre tiene que tener espacio para agregar nueva informacin de catlogo a las tablas de sistema. Las tablas de sistema siempre estn contenidas en el archivo de datos primario. Nota: La base de datos Tempdb se vuelve a crear siempre cada vez que se inicia el servicio SQL Server a partir de la base de datos Model como plantilla. Adems de heredar los objetos de base de datos de la base de datos Model, cada nueva base de datos de usuario hereda la configuracin de las opciones de dicha base de datos (Tempdb no hereda las opciones). Cambiaremos la configuracin de la base de datos Model para cambiar las opciones de configuracin de todas las nuevas bases de datos. Tambin podemos cambiar dichas opciones luego de que la base datos de usuario haya sido creada. Finalmente, por defecto, cada nueva base de datos hereda la intercalacin por defecto de la base de datos Model. La intercalacin por defecto de Model es la misma que para el resto de las bases de datos de sistema (la intercalacin definida durante la instalacin de SQL Server). La intercalacin por defecto para bases de datos de sistema no puede cambiarse con facilidad tenemos que tener acceso a todos los scripts e informacin necesaria para recrear las bases de usuario y sus objetos, todos los datos de usuario deben ser exportados, todas las bases de datos de usuario deben ser eliminadas, las bases de datos de sistema ser reconstruidas con la nueva intercalacin, y finalmente todos los datos de usuario deben ser recuperados. Sin embargo, en entornos internacionales puede ser necesario tener bases de datos con distintas intercalaciones. Para cambiar la intercalacin de una nueva base de datos, especificaremos dicha intercalacin a la hora de crear la base de datos. Para cambiar la intercalacin en una base de datos ya creada, tenemos que exportar los datos, recrear la base de datos, y volver a importar los datos correspondientes. Nota: Para crear una base de datos de usuario debemos ser parte de las funciones sysadmin o db_creator.

FAGDUT

12

CCI

Curso SQL Server 2000 Captulo 3

CREACIN DE UNA BASE DE DATOS Podemos crear una base de datos de tres formas diferentes: Usar el Administrador Corporativo con el Asistente de Creacin de Bases de Datos Usar el Administrador Corporativo sin asistentes. Usar Transact-SQL.

Usar el Asistente de Creacin de Bases de Datos El Asistente de Creacin de Bases de Datos es til para principiantes, pero limita la complejidad de nuestro diseo de base de datos. Si planeamos utilizar mltiples discos y mltiples archivos y grupos de archivos, no podemos usar este asistente. Los asistentes del Administrador Corporativo estn disponibles en el men Herramientas\Asistentes. Cuando seleccionamos esta opcin se nos abre la siguiente ventana:

Cuando iniciamos el Asistente de Creacin de Bases de datos, se nos pregunta por el nombre que le queremos dar a nuestra base de datos. Tambin aqu podremos especificar la ubicacin fsica tanto del archivo de datos como del archivo de registro de transacciones.

FAGDUT

13

CCI

Curso SQL Server 2000 Captulo 3

En la siguiente pgina, definiremos el nombre que tendr nuestro archivo fsico de datos, as como el tamao inicial que tendr el mismo; tambin podremos indicar ms de un archivo para nuestra base de datos:

FAGDUT

14

CCI

Curso SQL Server 2000 Captulo 3

En la siguiente ventana, tendremos la pgina de Crecimiento del Archivo, donde especificaremos las caractersticas de nuestros archivos de datos. Notemos que la opcin por defecto es que nuestro archivo crezca en incrementos del 10% y permita un crecimiento ilimitado. Notemos tambin que no podemos especificar distintas opciones de crecimiento para cada archivo de nuestra base de datos.

Tambin hacemos lo mismo con el registro de transacciones. Las pantallas que aparecern son casi idnticas a las de los datos:

FAGDUT

15

CCI

Curso SQL Server 2000 Captulo 3

Al finalizar, se crear la nueva base de datos y se nos dar la oportunidad de crear un Plan de Mantenimiento para la misma.

FAGDUT

16

CCI

Curso SQL Server 2000 Captulo 3

Usar el Administrador Corporativo directamente Para crear una base de datos directamente usando el Administrador Corporativo, hacemos click en el contenedor Bases de Datos de la consola administrativa, y seleccionamos Nueva Base de Datos. Se nos muestra la caja de dialogo Propiedades de la Base de Datos. Aqu ingresaremos el nombre de nuestra nueva base de datos, as como la intercalacin por defecto para todos los objetos de la misma.

Ya dentro de la otra pestaa, veremos las mismas opciones que nos daba el asistente en cuanto al tamao inicial del/los archivos de base de datos, as como sus opciones de crecimiento:

FAGDUT

17

CCI

Curso SQL Server 2000 Captulo 3

Tenemos una ventana similar para el registro de transacciones. Para finalizar hacemos click en Aceptar y se nos crear la nueva base de datos.

Crear una base de datos con Transact-SQL Para crear una nueva base de datos en nuestro servidor usando Transact-SQL, usamos la sentencia CREATE DATABASE. La sintaxis de CREATE DATABASE requiere slo el nombre de la base de datos. Todos los otros parmetros son opcionales. La sintaxis Transact-SQL nos permite definir las propiedades a mltiples archivos de datos, crear conjuntos de archivos definidos por el usuario, ubicar archivos de datos secundarios en grupos especficos, y definir las propiedades de mltiples archivos de registro de transacciones. El siguiente ejemplo, cuando es ejecutado desde el Analizador de Consultas, crea una base de datos llamada TSQLDB sin especificar opciones para los archivos de datos y registro: CREATE DATABASE TSQLDB El siguiente ejemplo crea una base de datos llamada TSQLDB, la cual consiste en un archivo primario de datos de 100 MB, un archivo secundario de 500 MB, y un registro de transacciones de 250 MB. Las propiedades del archivo primario de datos en este ejemplo incluyen el tamao inicial de 100 MB, un incremento de 25 MB, y un tamao mximo de 250 MB. Las propiedades del archivo secundario incluyen un tamao inicial de 500 MB, un incremento de 50 MB y un tamao mximo de 1000 MB (1 GB). Las propiedades del archivo de registro de transacciones en este ejemplo incluyen un tamao inicial de 250 MB, un incremento del 40%, y un tamao mximo de 500 MB.

FAGDUT

18

CCI

Curso SQL Server 2000 Captulo 3

CREATE DATABASE TSQLDB ON ( NAME = TSQLDB1 , FILENAME = 'D:\SQL_Data\TSQLDB1.mdf' , SIZE = 100 , MAXSIZE = 250 , FILEGROWTH = 25 ) , ( NAME = TSQLDB2 , FILENAME = 'E:\SQL_Data\TSQLDB2.ndf' , SIZE = 500 , MAXSIZE = 1000 , FILEGROWTH = 50 ) LOG ON ( NAME = TSQLDB_Log , FILENAME = 'F:\SQL_Log\TSQLDB2.ledf' , SIZE = 250, MAXSIZE = 500 , FILEGROWTH = 40% ) PRCTICA 3.1 CREACIN DE UNA BASE DE DATOS UTILIZANDO T-SQL En esta prctica, crearemos una nueva base de datos utilizando Transact-SQL y el Analizador de Consultas: 1. Abrimos el Analizador de Consultas y nos logueamos al mismo usando nuestra cuenta de usuario. 2. Dentro de la ventana de cdigo, generaremos un script para crear una base de datos con las siguiente propiedades: Nombre: CURSOSQL. Archivo de Datos: CURSOSQL_DATA. Tamao Inicial del Archivo de Datos: 10 MB Tamao Mximo del Archivo de Datos: 25 MB Crecimiento: 5 MB Archivo de Registro de Transacciones: CURSOSQL_LOG Tamao Inicial del Archivo de Registro: 4 MB Tamao mximo del Archivo de Registro: 12 MB Crecimiento: 40%.

El script con el resultado lo vemos a continuacin: CREATE DATABASE CURSOSQL ON ( NAME = CURSOSQL_DATA , FILENAME = 'C:\Archivos de Programa\ Microsoft SQL Server\MSSQL\Data\TSQLDB.mdf' , SIZE = 10 , MAXSIZE = 25 , FILEGROWTH = 5 ) LOG ON ( NAME = CURSOSQL_LOG , FILENAME = 'C:\Archivos de Programa\ Microsoft SQL Server\MSSQL\Data\TSQLDB.ldf' , SIZE = 4 , MAXSIZE = 12 , FILEGROWTH = 40% ) 3. Controlamos la sintaxis del lote y finalmente ejecutamos el script. Se crear una nueva base de datos con los parmetros especificados.

FAGDUT

19

CCI

Curso SQL Server 2000 Captulo 3

Para eliminar una Base de Datos Para eliminar una base de datos desde el Administrador Corporativo, slo tenemos que hacer click derecho sobre la misma en el rbol de administracin, y seleccionar Eliminar. Desde T-SQL, ejecutamos la siguiente sentencia: DROP DATABASE TSQLDB

3.5.2 TABLAS Luego de crear la base de datos, estamos en condiciones de crear los objetos de tabla que guardan los datos en la misma. Cuando creamos una tabla, su definicin debera incluir, como mnimo, el nombre de la tabla, los nombres de columna, los tipos de datos (y longitudes de ser necesario), y si la columna acepta o no valores nulos (NULL). Podemos configurar otras opciones ms tarde, aunque la mayor cantidad de propiedades que configuremos durante el proceso de creacin de la tabla, ms eficiente ser todo el proceso.

TIPOS DE DATOS EN SQL SERVER En SQL Server, cada columna en una tabla tiene un tipo de dato relacionado, el cual es un atributo que especifica el tipo de dato (entero, carcter, monetario, etc) que el objeto puede contener. Ciertos objetos diferentes a las columnas en una tabla tambin pueden tener asociados tipos de datos. Los siguientes objetos en SQL Server tienen asociados tipos de datos: Columnas en Tablas y Vistas. Parmetros en Procedimientos Almacenados. Variables. Funciones T-SQL que retornan uno o ms valores con un tipo de datos especfico. Procedimientos Almacenados que retornan un cdigo (siempre del tipo Integer).

La siguiente tabla nos muestra una descripcin breve de cada tipo de dato que soporta SQL Server, agrupados por categora: Categora Binary Descripcin Guarda datos binarios. Los datos consisten en nmero en hexadecimal. Por ejemplo, el nmero decimal 245 se convierte en el hexadeciman F5. Tipo de Dato Binary Descripcin Los datos pueden tener un tamao fijo hasta 8 KB.

Varbinary

Image

Character

Los datos pueden consistir en cualquier combinacin de letras, nmeros, y smbolos especiales

Char

Los datos pueden variar en su nmero de dgitos (hasta 8 KB) Los datos pueden tener un tamao variable que puede exceder los 8 KB. Datos de longitud fija hasta 8 KB.

Varchar Text
FAGDUT 20

Datos de longitud variable. No puede exceder los 8 KB. Puede contener caracteres
CCI

Curso SQL Server 2000 Captulo 3

Date and Time

Consiste en combinaciones vlidas de fecha y hora (SQL Server no proporciona tipos fecha y hora por separado).

Datetime

ASCII que excedan los 8 KB. Fecha y Hora desde el 1 de enero de 1753 al 31 de diciembre del 9999 (requiere 8 bytes por valor).

SmallDatetime

Decimal

Datos numricos exactos con o sin decimales. Numrico aproximado punto flotante

Decimal

Fecha y Hora desde el 1 de enero del 1900 hasta el 31 de diciembre del 2079 (requiere 4 bytes por valor). Mximo de 38 dgitos, incluyendo el punto decimal. Equivalente al tipo Decimal. Nmeros de punto flotante desde -1.79E+308 hasta 1.79E+308. Punto flotante desde -3.40 E+38 hasta 3.40 E+38. Datos en el rango de -2 ^ 63 hasta 2 ^ 63 - 1 Datos desde 2,147,483,648 hasta 2,147,483,647 Datos desde -32768 hasta 32767. Datos desde 0 hasta 255. Requiere 8 Bytes. Puede contener datos desde -922,337,203,685,477.5808 hasta +922,337,203,685,477.5807 Valor monetario desde 214,748.3648 hasta +214,748.3647 Contiene un valor 1 o 0.

Punto Flotante

Numeric Float de

Real

Enteros

Datos positivos negativos.

enteros, y

BigInt

Int

SmallInt TinyInt Money

Monetario

Representa montos en moneda positivos o negativos

SmallMoney

Especial

Tipos de datos especiales que no caen en las categoras antedichas.

Bit

Cursor

TimeStamp

UniqueIndentifier

SQL_Variant

Contiene una referencia a un cursor. Utilizada como parmetro de salida (OUTPUT) en los procedimientos almacenados. Se trata de un nmero entero que se autoincrementa para indicar actividad secuencial en una fila. Consiste en un entero de 16 bytes que indica un GUID (Global Unique ID). Permite guardar datos de otros tipos de datos de SQL
CCI

FAGDUT

21

Curso SQL Server 2000 Captulo 3

Table

Unicode

Tipos de datos que utilizan Unicode.

Nchar NvarChar

NText

Server, con la excepcin de Text, Ntext, TimeStamp, Image y SQL_Variant. Usado para contener un conjunto de resultado para procesar ms adelante. Este tipo de datos puede ser utilizado slo para devolver una variable o como resultado de una funcin de usuario. Tamao fijo de datos (aprox. 4000 caracteres Unicode). Puede variar el tamao (mximo de aprox. 4000 caracteres Unicode). Los datos pueden exceder los 4000 caracteres Unicode.

CREACIN DE TABLAS Creacin de Tablas utilizando el Administrador Corporativo Para crear una tabla en el Administrador Corporativo, debemos expandir el Servidor y seleccionar una Base de Datos. A continuacin, sobre el nodo Tablas, hacemos click derecho y seleccionamos la opcin Nueva Tabla. SQL Server nos mostrar la siguiente ventana:

Para establecer la Clave Primaria en nuestra tabla, seleccionaremos una fila, hacemos click derecho y seleccionamos Establecer Clave Principal. Tambin podemos establecer relaciones, ndices, y restricciones CHECK. Cuando finalizamos de editar nuestra nueva tabla, hacemos click en el botn de Guardar y le daremos un nombre a la misma.

FAGDUT

22

CCI

Curso SQL Server 2000 Captulo 3

Creacin de Tablas usando T-SQL Podemos usar la sentencia SQL CREATE TABLE para crear una tabla en una base de datos SQL Server. Cuando usamos esta sentencia, debemos definir, como mnimo, el nombre de la tabla, sus columnas, y sus tipos de datos (y sus valores de ser necesario). El siguiente ejemplo ilustra cmo crear una tabla bsica: CREATE TABLE Clientes ( CodClte Char( 4 ), Nombre VarChar( 50 ), ) Adems de los elementos bsicos de la tabla (como ser nombre de la tabla, columnas y tipos de datos), la sentencia CREATE TABLE tambin nos permite definir un nmero de propiedades adicionales. Por ejemplo, podemos especificar el grupo de archivos en el cual se crea la tabla, o podemos definir restricciones que se aplican a columnas individuales y a la tabla como un todo.

MODIFICAR TABLAS Una vez que hayamos creado una tabla en una base de datos SQL Server, podemos ver informacin sobre la misma, modificar las caractersticas de una tabla, o eliminar una tabla de la base de datos. Ver Informacin de Tablas Podemos necesitar obtener informacin de las propiedades de una tabla (por ejemplo, el nombre o tipo de datos de una columna, la naturaleza de sus ndices, etc). Podemos tambin mostrar las dependencias de una tabla para determinar cules objetos, como ser vistas, procedimientos almacenados, o triggers, dependen de la tabla. Si realizamos cambios en la tabla, los objetos dependientes podran verse afectados. SQL Server incluye varios mtodos para ver las caractersticas de una tabla y sus dependiencias: Para ver la definicin de una tabla, usaremos el procedimiento almacenado de sistema sp_help o usaremos el Administrador Corporativo para ver las propiedades de la tabla. Para ver las dependencias de una tabla, usaremos el procedimiento almacenado de sistema sp_depends o tambin podremos usar la opcin Mostrar Dependencias dentro del Administrador Corporativo. Para ver las propiedades de una columna, usaremos la sentencia COLUMNPROPERTY para retornar informacin sobre la columna o el parmetro de procedimiento.

Modificar Tablas en SQL Server Luego de que la tabla fuera creada, podemos cambiar muchas de las opciones que fueran definidos para la tabla cuando fuera originalmente creada, incluyendo lo siguiente: Las columnas pueden ser agregadas, modificadas o eliminadas. Por ejemplo, el nombre de columna, longitud, tipo de datos, precisin, escala y nullabilidad pueden ser cambiadas, aunque existen algunas restricciones. Se pueden agregar o eliminar Claves Primarias y Forneas (PRIMARY KEY / FOREIGN KEY). Se pueden agregar o eliminar restricciones de tipo UNIQUE, CHECK y DEFAULT. Podemos agregar o eliminar una columna que usa las propiedades IDENTITY o ROWGUIDCOL. La propiedad ROWGUIDCOL puede ser agregada o removida de una
23 CCI

FAGDUT

Curso SQL Server 2000 Captulo 3

columna existente, aunque una sla columna de una tabla puede tener la propiedad ROWGUIDCOL por vez. El nombre o propietario de una tabla tambin puede ser cambiado. Cuando realizamos esta accin, debemos cambiar tambin el nombre de la tabla en todos los trigger, procedimientos almacenados, scripts T-SQL, o cualquier otro cdigo que haga referencia al nombre anterior de la tabla. La siguiente tabla proporciona una lista de varios tipos de modificaciones que pueden realizarse sobre las propiedades de una tabla. La tabla tambin lista los mtodos que pueden ser usados para completar dichas tareas. Tipo de Modificacin Renombrar una tabla Cambiar el propietario de una tabla Modificar propiedades de una columna Renombrar una columna Mtodo utilizado El procedimiento almacenado sp_rename o en Administrador Corporativo, la opcin Cambiar Nombre. El procedimiento almacenado sp_changeobjectowner.

el

La sentencia ALTER TABLE, o la opcin Disear Tabla en el Administrador Corporativo. El procedimiento almacenado sp_rename o la opcin Disear Tabla en el Administrador Corporativo.

Eliminar Tablas de una Base de Datos A veces, necesitamos eliminar una tabla (por ejemplo, cuando queremos implementar un nuevo diseo o slo liberar espacio en la base de datos). Cuando eliminamos una tabla, su definicin estructurada, datos, ndices y restricciones son permanentemente eliminados de la base de datos, y el espacio antes utilizado para contener la tabla y sus ndices son liberados para otras tablas. Podemos explcitamente eliminar una tabla temporaria, si no deseamos esperar a que SQL Server la elimine automticamente. Si necesitamos eliminar tablas que estn relacionadas por Claves Forneas (FOREIGN KEY), restricciones de tipo UNIQUE, o Claves Primarias (PRIMARY KEY), deberemos eliminar las tablas con las restricciones FOREIGN KEY primero. Si necesitamos eliminar una tabla que es referenciada por una restriccin FOREIGN KEY pero no podemos eliminar toda la tabla completa, debemos eliminar la restriccin FOREIGN KEY como primer paso. Para eliminar una tabla desde Transact-SQL, usaremos la sentencia DROP TABLE. De otro modo, podemos usar el Administrador Corporativo para remover la tabla desde el nodo Tablas.

PRCTICA 3.2 CREACIN DE TABLAS En este ejercicio, crearemos una tabla usando la sentencia T-SQL CREATE TABLE. Cuando creamos la tabla, podemos definir nombre de tabla, columnas, tipos de datos, longitudes (cuando sea necesario), y nullabilidad. Tambin estaremos definiendo las propiedades IDENTITY y valores por DEFAULT para las correspondientes columnas. Para crear la tabla AUTORES en la Base de Datos CURSOSQL 1. Abrir el Analizador de Consultas de SQL Server 2000. 2. En el editor del Analizador de consultas, tipear el siguiente script:

FAGDUT

24

CCI

Curso SQL Server 2000 Captulo 3

USE bookshopdb CREATE TABLE AUTORES ( IDAutor SMALLINT IDENTITY( 101,1 ) NOT NULL, Apellido VARCHAR(30) NOT NULL DEFAULT 'Desconocido', Nombre VARCHAR(30) NOT NULL, AnioNac CHAR(4) NOT NULL DEFAULT ' N/A ', AnioMuerte CHAR(4) NOT NULL DEFAULT ' N/A ', Descripcion VARCHAR(200) NOT NULL DEFAULT 'N/A' ) En esta sentencia, estamos creando la tabla AUTORES, la cual contiene seis columnas, todas las cuales no permiten nulos. A su vez, la columna IDAutor es definida como IDENTITY. La primera fila agregada a la tabla le ser asignada el valor 101 a dicha columna (valor semilla). Los valores del campo IDAutor sern generados automticamente en incrementos de uno. 3. Ejecutar la sentencia T-SQL recin creada. 4. Abrir el Administrador Corporativo y controlar que la tabla fue creada con sus correspondientes campos.

Para crear las tablas AUTORESLIBROS y CONDICIONES en la Base de Datos CURSOSQL 1. En el editor del Analizador de Consultas, tipearemos lo siguiente: USE CURSOSQL CREATE TABLE AUTORESLIBROS ( IDAutor SMALLINT NOT NULL, IDTitulo CHAR(8) NOT NULL ) CREATE TABLE CONDICIONES ( IDCondicion TINYINT NOT NULL, NombreCondicion CHAR(10) NOT NULL, Descripcion VARCHAR(50) NOT NULL DEFAULT 'N/A' ) 2. 3. 4. 5. Retornar al Administrador Corporativo. Hacer click en la barra de herramientas, en el botn Actualizar. Abrir cada tabla y ver sus propiedades. Cerrar el Administrador Corporativo.

Para crear la tabla LIBROS en la Base de Datos CURSOSQL 1. Finalmente, crearemos la tabla LIBROS en nuestra base de datos. Los campos correspondientes seran los siguientes: Columna IDTitulo Titulo Editorial FechaPub Edicion Costo IDCondicion
FAGDUT

Tipo de Dato Char(8) Varchar(70) Varchar(50) Char(4) Char(4) Money Tinyint


25 CCI

Curso SQL Server 2000 Captulo 3

Nuestro modelo de datos quedara como el siguiente:

3.5.3 - RESTRICCIONES Una restriccin es una propiedad asignada a una tabla o columna dentro de una tabla que previene que datos no vlidos sean guardados en una columna en particular. Por ejemplo, las restricciones UNIQUE o PRIMARY KEY impiden que insertemos un valor que est duplicado; una restriccin del tipo CHECK previene la insercin de un valor que no cumpla con una condicin de bsqueda, y una restriccin de tipo FOREIGN KEY relaciona dos tablas separadas. En este apartado veremos las restricciones del tipo PRIMARY KEY, UNIQUE, FOREIGN KEY y CHECK.

INTRODUCCIN Las restricciones nos permiten tener una manera de que SQL Server automticamente mantenga la integridad de una base de datos. Las restricciones definen reglas en relacin a los valores permitidos en las columnas y son el mecanismo estndar para mantener la integridad. El uso de restricciones es preferible a usar Triggers, Reglas o Defaults. El optimizador de consultas usa las restricciones para construir planes de ejecucin de alta performance. Una restriccin puede ser de columna o de tabla: Una restriccin de columna es especificada como parte de una definicin de columna y se aplica solamente a dicha columna. Una restriccin de tabla es declarada independientemente de la definicin de columna y puede aplicarse a ms de una columna por tabla.

Las restricciones de tabla deben ser usadas cuando ms de una columna es includa en una restriccin. Por ejemplo, si una tabla tiene dos o ms columnas en una clave primaria (PRIMARY KEY), debemos usar una restriccin que incluya ambas columnas como clave primaria. Consideremos una tabla que registre eventos que ocurren en una computadora en una fbrica. Asumiremos que eventos de diverso tipo pueden ocurrir al mismo tiempo, pero dos eventos del mismo tipo no pueden ocurrir en el mismo momento. Esta regla puede ser implementada como una restriccin que incluya tanto los campos tipo y hora en una clave primaria de dos columnas, como veremos en el siguiente ejemplo: CREATE TABLE FactoryProcess
FAGDUT 26 CCI

Curso SQL Server 2000 Captulo 3

( EventType INT, EventTime DATETIME, EventSite CHAR(50), EventDesc CHAR(1024), CONSTRAINT event_key PRIMARY KEY (EventType, EventTime) ) SQL Server 2000 soporta cuatro tipos principales de restricciones: PRIMARY KEY, UNIQUE, FOREIGN KEY, y CHECK.

PRIMARY KEY (CLAVE PRIMARIA) Una tabla usualmente tiene una columna (o combinacin de columnas), cuyos valores identifican unvocamente a cada fila en la tabla. Esta columna (o columnas) es llamada clave primaria (PRIMARY KEY) de la tabla y refuerza la integridad de entidad de la tabla. Podemos crear una clave primaria definiendo la restriccin PRIMARY KEY cuando creamos o alteramos la tabla. Una tabla puede tener slo una clave primaria, y una columna que participa de una clave primaria no puede aceptar valores nulos. Ya que las restricciones PRIMARY KEY aseguran la unicidad de los datos, muchas veces se definen como columnas de tipo Identity. Cuando especificamos una restriccin de clave primaria para una tabla, SQL Server refuerza la unicidad de los datos creando un ndice de tipo agrupado (clustered). Este ndice nos brinda un acceso ms rpido cada vez que la clave primaria es utilizada en consultas. Si una clave primaria es definida usando ms de una columna, los valores pueden ser duplicados dentro de una columna pero cada combinacin de valores para todas las columnas de la clave primaria debe ser nica. Creacin de restricciones PRIMARY KEY Podemos crear una clave primaria de dos formas distintas: Crear la restriccin cuando la tabla es creada. Agregar la restriccin a una tabla ya creada (asumiendo que no haya otra restriccin PRIMARY KEY).

Podemos modificar o eliminar una restriccin del tipo PRIMARY KEY una vez que haya sido creada. Por ejemplo, podramos desear tener una restriccin de clave primaria para referenciar otras columnas, o podramos querer cambiar el orden de las columnas, el nombre del ndice asociado, o el factor de llenado de la restriccin PRIMARY KEY. No podemos cambiar el tamao de la columna definida por una restriccin PRIMARY KEY. Nota: Para cambiar una restriccin del tipo PRIMARY KEY, primero debemos eliminarla de la tabla y luego recrearla con la nueva definicin. El siguiente ejemplo de T-SQL crea la tabla CLIENTES y define la columna cod_clte como PRIMARY KEY: CREATE TABLE CLIENTES ( COD_CLTE INT PRIMARY KEY, NOM_CLTE VARCHAR( 50 ) ) Tambin podemos definir la misma clave primaria usando una restriccin a nivel de tabla:

FAGDUT

27

CCI

Curso SQL Server 2000 Captulo 3

CREATE TABLE CLIENTES ( COD_CLTE INT, NOM_CLTE VARCHAR( 50 ), CONSTRAINT PK_CLIENTES PRIMARY KEY (COD_CLTE) ) Asimismo, podemos usar una sentencia ALTER TABLE para agregar una clave primaria a una tabla ya existente: ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTE PRIMARY KEY (COD_CLTE)

Cuando una restriccin del tipo PRIMARY KEY es agregada a una columna existente (o columnas) en una tabla, SQL Server 2000 controla que los datos existentes en dichas columnas cumplan con las reglas de las claves primarias: Valores no nulos. Valores no duplicados.

Si una restriccin de clave principal es agregada a una columna que tiene valores duplicados o nulos, SQL Server retorna un error y no permite agregar la restriccin. No podemos agregar una restriccin PRIMARY KEY que viole estas reglas. SQL Server automticamente agrega un ndice del tipo UNIQUE para la restriccin de clave primaria. Si un ndice de tipo agrupado (clustered) no existe con anterioridad en la tabla (o un ndice no agrupado no es explcitamente especificado), un ndice de tipo UNIQUE CLUSTERED es creado. Importante: Una restriccin de clave primaria (PRIMARY KEY) no puede ser eliminada si es referenciada por una clave fornea (FOREIGN KEY) en otra tabla. La restriccin de clave fornea debe ser eliminada primero.

RESTRICCIONES UNIQUE Podemos usar restricciones UNIQUE para asegurarnos que no se ingresen valores duplicados en columnas especficas que no participen en una clave primaria. Aunque tanto las claves primarias como las restricciones UNIQUE aseguran unicidad, deberamos usar una restriccin UNIQUE en lugar de una PRIMARY KEY en las siguientes situaciones: Si una columna (o combinacin de columnas) no es la clave primaria. Se pueden definir mltiples restricciones UNIQUE en una tabla, mientras que slo una clave primaria puede ser definida por tabla. Si una columna permite valores nulos. Las restricciones UNIQUE pueden ser definidas para columnas que permiten nulos, mientras que las restricciones PRIMARY KEY pueden ser definidas slo para columnas donde no se permitan valores nulos.

Nota: Una restriccin UNIQUE tambin puede ser referenciada por una restriccin FOREIGN KEY. Creacin de restricciones UNIQUE Podemos crear restricciones UNIQUE de la misma manera en que creamos claves primarias: Creando la restriccin cuando la tabla es creada.

FAGDUT

28

CCI

Curso SQL Server 2000 Captulo 3

Agregando la restriccin a una tabla existente, siempre y cuando la columna o combinacin de columnas contenga slo valores nicos (no duplicados) o nulls. Una tabla puede contener mltiples restricciones UNIQUE.

Cuando una restriccin UNIQUE es agregada a una columna (o columnas) existente(s) en una tabla, SQL Server 2000 (por defecto) controla los datos existentes en las columnas para asegurarse que todos los valores (excepto los nulos) son nicos. Si una restriccin UNIQUE es agregada a una columna que tiene valores duplicados, SQL Server retorna un error y no agrega la restriccin. SQL Server automticamente crea un ndice del tipo UNIQUE para hacer cumplir el requerimiento de unicidad de la restriccin UNIQUE. Por lo tanto, si se hace un intento de insertar una fila duplicada, SQL Server retorna un mensaje de error diciendo que la restriccin UNIQUE ha sido violada y no se permitir agregar dicha fila a la tabla. A menos que un ndice del tipo agrupado es explcitamente especificado, una restriccin UNIQUE crea un ndice del tipo no agrupado para hacer cumplir la restriccin.

CLAVES FORNEAS (FOREIGN KEY) Una clave fornea (FOREIGN KEY) es una columna o combinacin de columnas usadas para establecer un enlace entre datos de dos tablas diferentes. Creamos un enlace entre dos tablas agregando una columna (o columnas) en una de las tablas y definiendo dichas columnas con la restriccin FOREIGN KEY. Las columnas contendrn valores de la clave primaria (PRIMARY KEY) de la segunda tabla. Una tabla puede contener ms de una restriccin de clave fornea. Por ejemplo, la tabla Titles en la base de datos Pubs tiene un enlace a la tabla Publisher porque hay una relacin lgica entre libros y editoriales. La columna pub_id en la tabla Titles se corresponde con la clave primaria de la tabla Publishers. La columna pub_id en la tabla Titles es la clave fornea de la tabla Publishers. En la siguiente figura vemos la relacin de clave primaria-clave fornea entre las tablas Titles y Publishers.

FAGDUT

29

CCI

Curso SQL Server 2000 Captulo 3

Podemos crear una clave fornea definiendo la restriccin FOREIGN KEY cuando creamos o alteramos una tabla. Aparte de una clave primaria, una restriccin FOREIGN KEY puede referenciar columnas con restricciones UNIQUE en la otra tabla. Una restriccin FOREIGN KEY puede contener valores nulos; sin embargo, si una columna de una clave fornea compuesta contiene valores nulos, entonces la verificacin de la restriccin ser omitida. Nota: Una clave fornea puede referenciar columnas en la misma tabla (esto se conoce como self-referencing). Aunque el propsito primario de una FOREIGN KEY es controlar los datos que pueden ser guardados en la tabla de la clave fornea, tambin controla cambios a datos en la tabla de la clave primaria. Por ejemplo, si una fila de una editorial (Publishers) es eliminada de la tabla Publishers y el ID de editorial es usado para libros en la tabla Titles, la integridad relacional entre las dos tablas se rompe. En la tabla Titles, las publicaciones de la editorial eliminada quedaran hurfanos, sin un enlace a la tabla primaria. Una restriccin FOREIGN KEY previene esta situacin. La restriccin obliga a cumplir la integridad referencial, asegurndonos que no se hagan cambios a los datos en la tabla primaria cuyos cambios invaliden en enlace a la tabla de la clave fornea. Si se intenta borrar un registro en la tabla primaria o cambiar el valor de una clave primaria, la accin fallar si dicho valor corresponde con uno en la tabla de la clave fornea. Para realizar este tipo de operaciones, primero debemos borrar los datos de la tabla de la clave fornea o cambiar los datos en dicha tabla, de esta manera enlazando los datos a otros registros de la tabla primaria. Creacin de Claves Forneas Podemos crear una restriccin de clave fornea usando cualquiera de los siguientes mtodos: Crear la restriccin cuando se crea la tabla (como parte de la definicin de tabla). Agregar la restriccin a una tabla existente, en el caso de que la restriccin FOREIGN KEY es enlazada a una restriccin PRIMARY KEY o UNIQUE en otra (o la misma) tabla. Podemos modificar o eliminar restricciones FOREIGN KEY una vez que hayan sido creadas. Por ejemplo, podramos desear que la clave fornea referencia otras columnas. No podemos cambiar la longitud de una columna definida con una restriccin de clave fornea.

Nota: Para modificar una restriccin FOREIGN KEY usando Transact-SQL, primero debemos eliminar la restriccin FOREIGN KEY existente y entonces re-crear la misma con la nueva definicin. La siguiente sentencia CREATE TABLE crea la tabla CLIENTES y define la columna COD_POSTAL con la restriccin FOREIGN KEY que referencia la columna COD_POSTAL en la tabla LOCALIDADES, la cual es PRIMARY KEY en dicha tabla. CREATE TABLE CLIENTES ( COD_CLTE INT PRIMARY KEY, COD_POSTAL INT REFERENCES LOCALIDADES(COD_POSTAL) ) Tambin podemos definir la misma restriccin usando una restriccin a nivel de tabla: CREATE TABLE Table1 ( COD_CLTE INT PRIMARY KEY, COD_POSTAL INT,
FAGDUT 30 CCI

Curso SQL Server 2000 Captulo 3

CONSTRAINT COD_POSTAL_FK FOREIGN KEY (COD_POSTAL) REFERENCES LOCALIDADES(COD_POSTAL) ) Finalmente, podemos usar la sentencia ALTER TABLE para agregar la restriccin: ALTER TABLE CLIENTES ADD CONSTRAINT COD_POSTAL_FK FOREIGN KEY (COD_POSTAL) REFERENCES LOCALIDADES (COD_POSTAL)

RESTRICCIONES CHECK Las restricciones CHECK hacen cumplir la Integridad de Dominio, limitando los valores que son aceptados por una columna. Sin similares a las claves forneas en que controlan los valores guardados en una especfica columna. La diferencia est en cmo determinan qu valores son vlidos. Las restricciones FOREIGN KEY toman una lista de valores vlidos de otra tabla, y las restricciones CHECK determinan los valores vlidos de una expresin lgica que no est basada en datos de otra columna. Por ejemplo, es posible limitar el rango de valores para una columna salario creando una restriccin CHECK que permita slo valores en el rango de $1500 a $10000. Esta caracterstica previene el ingreso de salarios fuera de este rango de valores. Podemos crear una restriccin CHECK con una expresin lgica (booleana) que retorna TRUE o FALSE basada en operadores lgicos. Para permitir slo datos en rangos desde $1500 a $10000, la expresin lgica sera: salario >= 1500 AND salary <= 10000 Podemos aplicar mltiples restricciones CHECK a una sla columna. Las restricciones son evaluadas en el orden en el que fueron creadas. A su vez, podemos aplicar una sla restriccin CHECK a mltiples columnas crendola a nivel de tabla. Creacin de restricciones CHECK Podemos crear restricciones CHECK de dos formas diferentes: Crear la restriccin cuando la tabla es creada (como parte de la definicin de tabla). Agregar la restriccin a una tabla existente.

Podemos modificar o eliminar restricciones CHECK una vez que haya sido creada. Por ejemplo, podemos modificar la expresin usada en la restriccin CHECK en una columna de una tabla. Nota: Para modificar la restriccin CHECK usando Transact-SQL, debe primero eliminar la restriccin existente y luego re-crearla con la nueva definicin. La siguiente sentencia CREATE TABLE crea la tabla EMPLEADOS y define la columna SALARIO con una restriccin CHECK que limita los valores ingresados en la columna desde 0 a 5000: CREATE TABLE EMPLEADOS ( NRO_LEGAJO INT PRIMARY KEY, SALARIO INT CONSTRAINT MONTO_LIMITE CHECK (SALARIO BETWEEN 0 AND 5000), NOMBRE VARCHAR(30) ) Tambin podemos usar una restriccin a nivel de tabla:

FAGDUT

31

CCI

Curso SQL Server 2000 Captulo 3

CREATE TABLE EMPLEADOS ( NRO_LEGAJO INT PRIMARY KEY, SALARIO INT, NOMBRE VARCHAR(30), CONSTRAINT MONTO_LIMITE CHECK (SALARIO BETWEEN 0 AND 5000), ) Tambin podemos escribir un ALTER TABLE para agregar la restriccin: ALTER TABLE EMPLEADOS ADD CONSTRAINT MONTO_LIMITE CHECK (SALARIO BETWEEN 0 AND 5000)

PRCTICA 3.3 CREACIN DE RESTRICCIONES EN UNA BASE DE DATOS En esta prctica, agregaremos restricciones a las tablas que hemos creado en la base de datos CURSOSQL. Hay que notar que todas las tablas cuentan con una clave primaria (PRIMARY KEY). En algunos casos, dicha clave primaria est compuesta por ms de una columna. A su vez, varias tablas requerirn claves forneas, y la tabla AUTORES requerir de una restriccin CHECK. Para crear una clave primaria en la tabla AUTORES 1. Abrimos el Analizador de Consultas de SQL Server 2000. 2. En el editor de cdigo, tipearemos lo siguiente: USE CURSOSQL GO ALTER TABLE AUTORES ADD CONSTRAINT AUTORES_PK PRIMARY KEY (IDAutor) 3. Controlamos la sintaxis y ejecutamos el lote. Para crear una clave primaria en la tabla AUTORESLIBROS 1. En el Analizador de Consultas, tipearemos el siguiente cdigo: ALTER TABLE AUTORESLIBROS ADD CONSTRAINT AUTORESLIBROS_PK PRIMARY KEY (IDAutor, IDTitulo) 2. Finalmente, ejecutaremos el lote. Ntese que en este caso estamos creando una clave primaria compuesta. Para crear las restantes claves primarias 1. Abrir el Analizador de Consultas. 2. Tipear los ALTER TABLEs correspondientes. Crearemos claves primarias para las tablas LIBROS (IDTitulo) y CONDICION (IDCondicion). 3. Ejecutaremos el lote. Para agregar una clave fornea (FOREIGN KEY) a la tabla AUTORESLIBROS 1. En el panel de edicin en el Analizador de Consultas, tipearemos y ejecutaremos lo siguiente: ALTER TABLE AUTORESLIBROS ADD CONSTRAINT IDAUTOR_FK FOREIGN KEY (IDAutor) REFERENCES AUTORES (IDAutor)

FAGDUT

32

CCI

Curso SQL Server 2000 Captulo 3

2. A continuacin, tipearemos y ejecutaremos lo siguiente: ALTER TABLE AUTORESLIBROS ADD CONSTRAINT IDTITULO_FK FOREIGN KEY (IDTitulo) REFERENCES LIBROS (IDTitulo) 3. Finalmente, agregaremos claves forneas a la tabla Libros, columna IDCondicion que referencia a la tabla CONDICIONES. ALTER TABLE LIBROS ADD CONSTRAINT ID_CONDICION_FK FOREIGN KEY (IDCondicion) REFERENCES CONDICIONES (IDCondicion) Para agregar una restriccin del tipo CHECK a la tabla AUTORES 1. En el editor del Analizador de Consultas, tipearemos lo siguiente: ALTER TABLE AUTORES ADD CONSTRAINT AUTORES1_CK CHECK (AnioNac LIKE ('[1-2][0,6-9][0-9][0-9]') OR (AnioNac = 'N/A')) ALTER TABLE AUTORES ADD CONSTRAINT AUTORES2_CK CHECK (AnioNac NOT LIKE '[1][0][0-9][0-9]') ALTER TABLE AUTORES ADD CONSTRAINT AUTORES3_CK CHECK (AnioNac NOT LIKE '[2][6-9][0-9][0-9]') ALTER TABLE AUTORES ADD CONSTRAINT AUTORES4_CK CHECK (AnioMuerte LIKE ('[1-2][0,6-9][0-9][0-9]') OR (AnioMuerte = 'N/A')) ALTER TABLE AUTORES ADD CONSTRAINT AUTORES5_CK CHECK (AnioMuerte NOT LIKE '[1][0][0-9][0-9]') ALTER TABLE AUTORES ADD CONSTRAINT AUTORES6_CK CHECK (AnioMuerte NOT LIKE '[2][6-9][0-9][0-9]') Para verificar que se han agregado las restricciones 1. En el editor del Analizador de Consultas, tipear lo siguiente: sp_helpconstraint AUTORES 2. El resultado de este procedimiento almacenado debera ser un listado de las restricciones, tanto claves primaria y forneas, como restricciones CHECK, que hemos agregado a nuestra base de datos CURSOSQL. 3. Finalmente, cerraremos el Analizador de Consultas. Nuestra base de datos contendr ahora las restricciones ingresadas y su esquema se ver como sigue:

FAGDUT

33

CCI

Curso SQL Server 2000 Captulo 3

3.5.4 VISTAS Una vista es una tabla virtual cuyo contenido es definido por una consulta SQL. Como si fuera una tabla real, una vista consiste en un conjunto de columnas y filas de datos. Sin embargo, una vista no existe como un conjunto de datos almacenados en la base de datos. Las filas y columnas de datos provienen de tablas referenciadas en la consulta que define la vista y son producidos dinmicamente cuando la vista es referenciada. INTRODUCCIN Las vistas se usan generalmente para focalizar, simplificar y personalizar cada percepcin de la base de datos por parte del usuario. Podemos usar vistas como un mecanismo de seguridad, permitiendo a los usuarios acceder datos a travs de una vista sin tener que garantizar permisos directamente a las tablas base. Asimismo, podemos usar vistas para mejorar la performance y particionar datos cuando copiamos datos desde y hacia SQL Server. Una vista acta como un filtro sobre las tablas base referenciadas por la misma. La consulta que define una vista puede estar formada por varias tablas o por otras vistas en la misma base de datos o en otras bases de datos. Podemos usar consultas distribudas para definir vistas que usen datos desde orgenes de datos heterogneos. Esta funcionalidad es til, por ejemplo, cuando queremos combinar datos estructuralmente semejantes que residen en diferentes servidores. Una vista puede ser pensada como una tabla virtual o una consulta almacenada. Los datos accesibles a travs de una vista estndar no se guardan en la base de datos como un objeto propio. Lo que se guarda en la base de datos es la consulta SELECT. El resultado de esta consulta SELECT forma la tabla virtual que es retornada por la vista. Un usuario puede usar esta tabla virtual referenciando el nombre de la vista en sentencias Transact-SQL de la misma forma en que es referenciada. Podemos definir una vista para realizar una o varias de las siguientes funciones: Restringir a un usuario de filas especficas de una tabla. Restringir a un usuario de columnas especficas de una tabla.
34 CCI

FAGDUT

Curso SQL Server 2000 Captulo 3

Juntar columnas de distintas tablas para que aparezcan como una sola. Agregar informacin de distintos orgenes.

Las vistas pueden ser usadas para particionar datos entre mltiples bases de datos o servidores SQL Server 2000. Las vistas particionadas nos permiten distribuir el procesamiento de una base de datos entre mltiples servidores. SQL Server 2000 tambin soporta vistas indexadas, las que mejoran en gran medida la performance de vistas complejas que se suelen encontrar en Data Warehouses u otros sistemas de soporte a decisiones. En una vista normal, los resultados no se guardan en la base de datos; en cambio, son recreados en el momento de abrir la vista en el momento de ejecutarse la aplicacin que la contiene. SQL Server soporta la creacin de ndices agrupados (slo agrupados) en una vista que implementa consultas complejas. Cuando se ejecuta una sentencia CREATE INDEX sobre una vista, el conjunto de resultados de la sentencia SELECT de la vista se guarda permanentemente en la base de datos. Futuras sentencias SQL que referencien la vista tendrn as una mejor performance.

ADMINISTRACIN DE VISTAS Como vimos hasta ahora, una vista es simplemente una consulta SELECT guardada en la base de datos. Podemos crear una vista as como creamos los diferentes objetos en nuestra base de datos, y una vez que es creada, podemos modificar o eliminarla. Creacin de Vistas Podemos crear vistas slo en la base de datos actual. Las tablas y vistas referenciadas por la nueva vista pueden existir en otras bases de datos o an en otros servidores, si la vista fue definida con consultas distribudas. Los nombres de las vistas deben cumplir con las reglas para identificadores y deben ser nicos para cada usuario. Adicionalmente, el nombre no debe ser el mismo que el de alguna tabla ya creada. SQL Server 2000 permite vistas anidadas de hasta 32 niveles distintos. Debemos especificar el nombre de cada columna en nuestra vista si alguna de dichas columnas son derivadas de una expresin aritmtica, una funcin, una constante, o si dos o ms de estas columnas en la vista podra llegar a tener el mismo nombre (usualmente porque la definicin de la vista incluye un join y las columnas de dos o mas tablas diferentes tienen el mismo nombre). Adicionalmente, debemos especificar el nombre de cada columna en la vista si deseamos darle a cada columna un valor distinto al de la columna de la que es derivada. Una columna de una vista hereda el tipo de datos de la columna de la tabla base, an si la misma se encuentra renombrada. Ntese que esta restriccin no se aplica si la vista est basada en una consulta conteniendo un outer join, ya que las columnas pueden permitir nulos an si se encuentran definidas para no aceptarlos. Para crear una vista, debemos tener los permisos correspondientes del propietario de la base de datos, y deberemos tener los permisos adecuados para las tablas y vistas referenciadas por la definicin de nuestra vista. Por defecto, a medida de que las filas se van agregando a la vista, desaparecern del mbito de la misma cuando no cumplan con el criterio con que se defini la vista. Por ejemplo, una vista puede estar definida con la condicin de que el salario de los empleados sean menores que $1500. Si el salario de un empleado es aumentado a $2000, entonces la consulta de la vista ya no lo incluye en su conjunto de resultados. Para estos casos contamos con la opcin WITH CHECK OPTION para las vistas. Esta clusula fuerza a todas las modificaciones ejecutadas contra la vista a adherir a la restriccin impuesta por la instruccin SELECT original. Si usamos WITH CHECK OPTION, las filas no pueden ser modificadas en tal forma que
FAGDUT 35 CCI

Curso SQL Server 2000 Captulo 3

desaparezcan de la vista. Cada modificacin que cause este comportamiento es cancelado, y un error es devuelto como resultado. Creacin de Vistas usando el Administrador Corporativo Para crear una vista usando el Administrador Corporativo, slo tenemos que hacer click derecho sobre la base de datos actual, seleccionar Nuevo, y Vista. Alternativamente, podemos movernos hasta el nodo de Vistas y hacer click derecho y seleccionar Nueva vista. Se nos muestra la siguiente ventana de creacin de vistas:

: Tenemos cuatro paneles principales: un panel superior llamado Diagrama, donde aparecern las distintas tablas que forman la vista junto con las relaciones respectivas entre ellas. Ms abajo, tenemos la seleccin de columnas y la especificacin de los criterios para seleccionar las columnas que compondrn la vista en el panel Cuadrcula. Como tercer panel, tenemos la representacin de la vista en una sentencia SQL, el panel llamado SQL. Finalmente, tenemos el panel inferior llamado Resultados, que mostrar una vista previa de los datos que compondrn la vista en el momento de su creacin. Para agregar una tabla al panel de Diagrama, hacemos click derecho sobre el mismo y seleccionaremos Agregar tabla. Se nos abre la siguiente ventana de seleccin de tablas (ntese que estamos creando una vista en la base de datos CURSOSQL):

FAGDUT

36

CCI

Curso SQL Server 2000 Captulo 3

Seleccionaremos las tablas AUTORES, AUTORESLIBROS y LIBROS. El Administrador Corporativo de SQL Server 2000 nos mostrar la siguiente ventana:

Hay que notar algunas particularidades de esta ventana: 1. Se muestran las tablas con sus relaciones, vindose la tabla de juncin AUTORESLIBROS como fue definida.

FAGDUT

37

CCI

Curso SQL Server 2000 Captulo 3

2. En el panel de SQL, se muestra la sentencia SQL que compondr la consulta en la que se basar la vista. 3. En el panel de Diagrama, las tablas aparecen con los nombres de campos precedidos de una casilla de seleccin. Seleccionaremos de este modo los distintos campos para nuestra vista. Seleccionaremos de la tabla AUTORES los campos IDAutor, Apellido y Nombre. De la tabla LIBROS seleccionaremos: IDTitulo, Titulo y Editorial. Finalmente, cuando tengamos armada la vista, hacemos click en Guardar, dndole un nombre a la misma cuando lo pida el Administrador Corporativo. Creacin de Vistas usando Transact-SQL Tambin podemos usar Transact-SQL para crear nuestras vistas. Para esto usaremos la sentencia CREATE VIEW. Por ejemplo, el siguiente script crea una vista llamada CustomerOrders en la base de datos Northwind: USE Northwind GO CREATE VIEW CustomerOrders AS SELECT o.OrderID, c.CompanyName, c.ContactName FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID En esta sentencia SQL, estamos creando la vista CustomerOrders, la cual usa una instruccin SELECT para obtener las columnas OrderID de la tabla Orders y el nombre de la compaa y el nombre del contacto de la tabla Customers. Un join conecta las dos tablas. Modificacin de Vistas Una vez que hayamos definido nuestra vista, podemos cambiar su nombre o modificar su definicin sin eliminar y volver a crearla, lo que causara la prdida de los permisos asociados. Cuando renombramos una vista, adherimos a las siguientes restricciones: La vista que debe ser renombrada debe mantenerse en la misma base de datos. El nuevo nombre de vista debe cumplir con las restricciones para identificadores. Slo podemos renombrar vistas de las que seamos propietarios. El propietario de la base de datos puede cambiar el nombre de cualquier vista de usuario. Alterar una vista no afecta a los objetos dependientes (como ser procedimientos almacenados o triggers), a menos que la definicin de vista cambie de tal forma que los objetos dependientes no sean ya vlidos.

Para modificar una vista, podemos hacerlo desde el Administrador Corporativo o desde Transact-SQL. En el primer caso, si queremos cambiar el nombre de una vista, debemos hacer click derecho sobre la misma y seleccionar Cambiar Nombre. Si lo que deseamos es cambiar la definicin de nuestra vista, hacemos click derecho sobre la misma y seleccionamos Disear Vista. Para modificar una vista en Transact-SQL, deberemos usar la sentencia ALTER VIEW. En el siguiente script veremos un ejemplo de su uso: ALTER VIEW CustomerOrders AS SELECT o.OrderID, o.OrderDate, c.CompanyName, c.ContactName FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID
FAGDUT 38 CCI

Curso SQL Server 2000 Captulo 3

En este script, estamos modificando la instruccin SELECT para incluir la fecha de la orden. Esta nueva definicin reemplaza la definicin anterior de la vista. Eliminacin de Vistas Toda vista que haya sido creada puede ser eliminada si no se la necesita o si deseamos limpiar la definicin de la misma con los permisos asociados. Cuando se elimina una vista, las tablas y los datos en la que fue basada no son afectados. Todo query que utilice objetos que dependan de la vista eliminada fallarn cuando se intente ejecutarlos (a menos que una vista con el mismo nombre fuera creada). Para eliminar una vista, podemos usar el Administrador Corporativo o la clusula DROP VIEW de Transact-SQL. Para eliminar una vista usando el Administrado Corporativo, hacemos click derecho en la misma y seleccionamos Eliminar. El siguiente script nos muestra un ejemplo de eliminacin de la vista lv_autores: DROP TABLE lv_autores PRCTICA 3.4 CREACIN, MODIFICACIN Y ELIMINACIN DE VIST AS Creacin de la Vista 1. Abrimos el Analizador de Consultas y seleccionamos nuestro servidor local. 2. En el panel de edicin, ingresaremos el siguiente script SQL y lo ejecutaremos: USE CURSOSQL GO CREATE VIEW NombresDeAutor AS SELECT Apellido, Nombre FROM AUTORES GO Con este script estamos creando una vista que nos devuelve en Apellido y el Nombre de los distintos autores. Uso de la Vista 1. En el editor del Analizador de Consultas, ingresaremos lo siguiente: USE CURSOSQL SELECT * FROM NombresDeAutor ORDER BY Apellido GO Este script selecciona todos los autores en nuestra tabla de Autores, y muestra su Apellido y Nombre ordenador por Apellido. Uso de la vista para insertar datos 1. En el editor ingresaremos y ejecutaremos el siguiente script: USE CURSOSQL INSERT INTO NombresDeAutor VALUES ( Borges, Jorge Luis ) GO

FAGDUT

39

CCI

Curso SQL Server 2000 Captulo 3

Esta sentencia Transact-SQL crear un nuevo registro en la tabla de Autores. Notemos que podemos hacer esto porque la vista se encuentra basada en slo una tabla y los campos restantes no son requeridos. De otra forma, se generara un error al insertar un nuevo registro en la Vista. 2. Ejecutaremos el siguiente comando SQL: SELECT * FROM NombresDeAutor GO Se deber mostrar el resultado correspondiente en la ventana de resultados, con el nuevo registro insertado al final. 3. De forma similar, podemos hacer lo mismo para las sentencias UPDATE y DELETE. Eliminacin de la Vista 1. En el editor del Analizador de Consultas, tipearemos lo siguiente: USE CURSOSQL GO DROP VIEW NombresDeAutor GO De esta forma nos aseguramos que se elimine la vista que creamos de la base de datos CURSOSQL.

3.5.5 - PROCEDIMIENTOS ALMACENADOS Y TRIGGERS Veremos en detalle estos dos objetos en el mdulo 9: Procedimientos Almacenados y Triggers.

FAGDUT

40

CCI

Вам также может понравиться