Sunteți pe pagina 1din 39

PLAN DE ESTUDIO SQL SERVER 2008

Transact-SQL o Crear una base de datos sin usar Transact-SQL

o Creacin de las tablas sin usar Transact-SQL


o o o Tipos de datos Lenguaje de definicin de datos Consultas

o Modificacin del contenido de tablas


o Procedimientos almacenados y funciones definidas por el usuario

o Catlogo del sistema


o o o o o ndices Vistas Sistema de seguridad del motor de base de datos Control de concurrencia Desencadenadores

Administracin del sistema o o Entorno del sistema del motor de base de datos Manejo de instancias y mantenimiento a bases de datos

o Copias de seguridad y recuperacin o Automatizacin de tareas de administracin del sistema o Replicacin de datos
o o Optimizadores de consultas Optimizadores de desempeo

Business Intelligence o Inteligencia de negocios

o Analysis Services
o o Inteligencia de negocios y Transact-SQL Reporting Services

o Optimizacin de tcnicas de inteligencia de negocios


XML

o Descripcin XML o SQL Server y XML 1

o Introduccin a datos espaciales

Transact-SQL Transact SQL es el lenguaje de programacin que proporciona SQL Server para ampliar SQL con los elementos caractersticos de los lenguajes de programacin: variables, sentencias de control de flujo, bucles Cuando se desea realizar una aplicacin completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programacin tradicionales. Transact SQL es el lenguaje de programacin que proporciona SQL Server para extender el SQL estndar con otro tipo de instrucciones. SQL es un lenguaje de consulta para los sistemas de bases de datos relacinales, pero que no posee la potencia de los lenguajes de programacin. No permite el uso de variables, estructuras de control de flujo, bucles y dems elementos caractersticos de la programacin. No es de extraar, SQL es un lenguaje de consulta, no un lenguaje de programacin. Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando se desea realizar una aplicacin completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programacin tradicionales. Transact SQL es el lenguaje de programacin que proporciona Microsoft SQL Server para extender el SQL estndar con otro tipo de instrucciones y elementos propios de los lenguajes de programacin. Con Transact SQL vamos a poder programar las unidades de programa de la base de datos SQL Server, estn son: Procedimientos almacenados Funciones Triggers Scripts

Pero adems Transact SQL nos permite realizar programas usando Service Broker

Crear una base de datos sin usar TRANSACT SQL

Para crear una base de datos use el explorador derecho de objetos y haga clic

Una vez hecho esto crearemos la base de datos asignndole un nombre

Si desea puede asignar un propietario de la base de datos en este caso ser el Administrador de la base de datos para lo cual seleccione la opcin Propietario y pulse el botn a la derecha como se muestra en la imagen

Creacin de tablas sin usar TRANSACT SQL

Una vez creada la base de datos lo siguiente que hay que hacer es crear las tablas que le pertenecen. Para lo cual haga clic derecho sobre la opcin tabla del panel de la nueva base de datos y seleccione la opcin Nueva Tabla, en este punto ya debe tener un sistema relacional normalizado, as mismo haber determinado cules sern las llaves primarias y sus llaves forneas y los ndices de cada una de las tablas

Tipos de datos Todos los valores de los datos de una columna deben ser de el mismo tipo de datos especficamente cuando estamos creando las tablas del modelo relacional, es decir que si en la tabla cliente el IdCliente es de Cadena a un tamao especifico, la tabla factura debe tener el mismo tipo y tamao; el nombre del campo si puede ser otro, sin embargo es recomendable manejar aun el mismo nombre a fin de evitar confusiones de parte del diseador A continuacin veremos los tipos de datos que se manejan Numricos Caracteres Temporales Diversos Formatos Decimales

Para crear los campos de la tabla escriba el nombre del campo, a continuacin el tipo de dato, tal como se muestra en la grfica. Vera tambin el panel de las propiedades del campo que est creando en la parte inferior, donde puede especificar el tamao del campo y otras propiedades de diseo.

Se presentan casos en que necesitamos que un campo sea auto numrico es decir que se llene a medida que ingresemos registros, para lo cual entonces nuestro campo deber ser de tipo Int y en el panel de propiedades especificar

Ahora vamos a aplicar la llave principal, para ello seleccione con clic derecho el campo y la opcin Establecer clave principal

Para campos de tipo cadena especificamos el tipo nchar al tamao indicado, en el caso de valores numricos que harn parte de algn clculo matemtico es preferible que sea numeric con una precisin suficiente de acuerdo al volumen del producto; los valores de moneda se tipan con Money Y por ultimo una tabla debe tener un campo de control el cual servir para muchas ocasiones en diversas consultas, para lo cual se usara el tipo bit. Se puede permitir valores nulos o no, pero esto es si es necesario. Por ejemplo necesitaremos que el registro se haga completo en ocasiones sobre los campos que no lo permiten pues es lo que estara estipulado en el proyecto que va a disear. En otros casos vemos como en la grfica, nuestro campo disponible Permite Nulos pues a lo mejor necesitemos que se filtren datos activos o inactivos y que es necesario que se vean en una consulta Creacin de ndices Los sistemas de bases de datos suelen utilizar ndices para ofrecer acceso inmediato a datos relacionales. Un ndice es una estructura de datos fsica independiente que permite a las consultas acceder con rapidez a una o ms filas de datos. Por consiguiente, la correcta optimizacin de los ndices es clave para el buen desempeo de las consultas. De muchas maneras un ndice es semejante al ndice de un libro. Cuando busca un tema, son utilizados para hallar la pgina donde se encuentra el registro. De manera es igual cuando se encuentra un registro. El motor de la base de datos utiliza los ndices para hallar la ubicacin fsica. Si una tabla no tiene un ndice apropiado, el sistema de base de datos utiliza el mtodo de exploracin de tablas para recuperar la fila. Significa que cada fila se recupera y examina en secuencia desde la primera a la ltima y se devuelve en el conjunto de resultados si la condicin de bsqueda de la clusula WHERE se evala a verdadera. Por lo tanto todas las filas se recuperan segn la ubicacin en la memoria fsica. Este mtodo es menos eficiente que el acceso a un ndice.

Para construir ndices seleccione el campo o campos que desee uno a uno, y a continuacin clic derecho y la opcin ndices o claves

Si existe un ndice como es el caso de la clave principal podemos modificar el nombre del ndice, tambin podemos agregar ndices y ajustarlos al campo deseado

Agreguemos los ndices, cambiemos sus nombres y asignmosles el campo en la opcin Columnas veamos

Seleccione el campo para indexar

Ejercicio No 1 Diseo de una base de datos sin Transact-SQL En este ejercicio haremos un proceso de reconocimiento del modelo ambiental de los datos, es decir veremos de donde partir el diseo del sistema, conocer los almacenes de la base de datos correspondiente. Una empresa dedicada al comercio al por mayor desea disear un sistema de datos de sus operaciones, de acuerdo a la investigacin hecha por el analista se tom la siguiente informacin: La empresa es surtidora de toda clase de productos a clientes Pyme, ellos a travs de una solicitud hacen el pedido de los productos que desean adquirir, las empresas como tal si ya han hecho pedidos se

consultan de forma inmediata, las nuevas empresas se registran. Una vez hecho esto el pedido es enviado a Bodega donde se comprueba si los productos solicitados estn disponibles, en un caso de que lo estn se envan al almacn mediante una remisin; los productos que no se encuentren se solicitan a proveedores registrados los cuales en un lapso de 5 das aproximadamente envan el lote junto con la factura correspondiente. En el almacn los productos son registrados en la factura correspondiente a la solicitud presentada y son enviados al cliente a la mayor brevedad posible. A continuacin comenzaremos el diseo del modelo ambiental para conocer las actividades del negocio a disear

Diagrama de contexto y flujo de datos En este diagrama representaremos las entidades externas e internas del sistema, es decir los departamentos, clientes que manejan los documentos y los movimientos que se presentan entre ellos veamos
Solicitud PYME Envo de solicitud Factura OrdenCompra Proveedores

Remisin

Inventario y facturaci n

Solicitud bodega

Bodega

Producto

FacturaProveedor Envo de remisin

Envo de orden Proveedor

Envo de factura

Explicacin: Los rectngulos corresponden a las entidades fsicas que realizan las transacciones en este caso representa a clientes pyme, bodega y proveedores. Las flechas son las acciones hechas por cada entidad y veremos dos clases, las flechas de un sentido indican que se hace la accin la cual viene explicada por ejemplo El cliente Hace el envo de la solicitud; por otro lado las flechas de doble sentido indican que se est haciendo una consulta de datos buscando clientes, productos y proveedores, o simplemente una Actualizacin de datos. Los rectngulos con bordes indican a los almacenes en este caso son las tablas del sistema que estamos diseando actualmente. El circulo en la mitad representa el ambiente en este caso es el sistema como tal y del que partiremos el diseo de la base de datos Diagrama Cero Siguiendo el curso de nuestros hallazgos nos encontraremos con un diagrama que nos especificara en si la relacin de las tablas de datos arriba diseadas y con este modelo procedemos a conocer adems los procesos que se realizan en la captura y consulta de la informacin pues veremos que entidades

10

estn ntimamente ligadas a los datos. En este diagrama haremos el anlisis de todo lo que se escribi arriba en materia del funcionamiento de la empresa, pero tomaremos las acciones de forma independiente ejemplo El cliente hace la solicitud, la solicitud es enviada a bodega, etc. Iremos entonces numerando cada una de estas actividades y veremos que ocurre. El enunciado que tenamos es este Una empresa dedicada al comercio al por mayor desea disear un sistema de datos de sus operaciones, de acuerdo a la investigacin hecha por el analista se tom la siguiente informacin: La empresa es surtidora de toda clase de productos a clientes Pyme, ellos a travs de una solicitud hacen el pedido de los productos que desean adquirir, las empresas como tal si ya han hecho pedidos se consultan de forma inmediata, las nuevas empresas se registran. Una vez hecho esto el pedido es enviado a Bodega donde se comprueba si los productos solicitados estn disponibles, en un caso de que lo estn se envan al almacn mediante una remisin; los productos que no se encuentren se solicitan a proveedores registrados los cuales en un lapso de 5 das aproximadamente envan el lote junto con la factura correspondiente. En el almacn los productos son registrados en la factura correspondiente a la solicitud presentada y son enviados al cliente a la mayor brevedad posible. Como vemos hemos marcado con negrita las acciones que realiza la entidad ahora es el turno de hacer el diagrama para cada proceso 1. Los clientes hacen el pedido de productos (tabla solicitud, producto)

Cliente Hacer pedido

Solicitud

11

2. Los pedidos son enviados a bodega para verificar los productos solicitados (tabla solicitud,
producto)

Solicitud

Productos

Enviar a bodeg a

Bodega

3. La bodega solicita a proveedores registrados los productos (tabla producto, proveedor,


orden)

Proveedores

Productos

Solicit ar a provee dores

Bodega

Orden

4. Los proveedores envan el producto a la bodega (tabla facturaproducto, orden, producto)

Proveedores

Productos

Enviar a bodeg a

Bodega

facturaProvedor

12

5. La bodega enva producto al almacn (tabla remisin, producto)

Productos

Enviar a almac n

Bodega

Remisin

6. El almacn enva el producto al cliente de acuerdo al pedido solicitado (tabla producto,


factura, solicitud)
Productos enviados Solicitud

Enviar a almac n

Cliente

Factura

Bueno hemos hecho el diagrama Cero y vemos de forma ms clara el grupo de tablas que se relacionan, as mismo vemos quienes estn implicados en el manejo de la informacin, a continuacin veremos el modelo relacional a fin de poder establecer las relaciones que se forman entre las tablas, y comprobaremos con datos ficticios la forma de cmo se agrupa la informacin

13

Diagrama Entidad Relacin En este segmento veremos cmo se relacionan las tablas aplicando la cardinalidad correspondiente, una vez hecho esto vamos comprobando por cada tabla con registros de qu forma se distribuyen y combinan entre s. Para este ejemplo tomaremos de cada uno de los procesos en los numerales anteriores de cada proceso del diagrama Cero 1. Los clientes hacen el pedido de productos y son enviados a bodega para verificar los productos solicitados (SOLICITUD Vs PRODUCTO) La Solicitud CONTIENE como MINIMO un producto MAXIMO muchos productos; y un producto APARECE registrado como MINIMO una vez en una solicitud MAXIMO en muchas solicitudes

SOLICITUD

PRODUCTO

2. La bodega solicita a proveedores registrados los productos (PRODUCTO Vs PROVEDOR Vs ORDEN) El producto es adquirido a un proveedor mediante una orden de compra respectivamente, de lo cual entonces decimos que: Un Producto es ADQUIRIDO a un proveedor como MINIMO una vez, mximo muchas veces; y un Proveedor DISTRIBUYE un producto como MINIMO una vez MAXIMO muchas veces. En la Orden APARECE como MINIMO un producto, MAXIMO muchos productos; y un producto est CONTENIDO como MINIMO una vez en la orden, MAXIMO muchas veces. El Proveedor ES DUEO como MINIMO una vez de una orden, MAXIMO de muchas ordenes; y la Orden PERTENECE como MINIMO a un proveedor, MAXIMO un proveedor

PRODUCTO

PROVEEDOR

PRODUCTO

ORDEN

ORDEN

PROVEEDOR

3. Los proveedores envan el producto a la bodega (FACTURAPROVEEDOR Vs ORDEN Vs 14

PRODUCTO) Los proveedores envan los productos CONTENIDOS en la factura correspondiente, la cual corresponde a la orden de compra de dichos productos, cada orden de compra debe ser facturada por separado y as evitar inconsistencias al momento de clasificar los productos, de esta forma deducimos que: Un Producto APARECE como MINIMO en una factura de proveedor, MAXIMO en muchas facturas; y la Factura de proveedor CONTIENE como MINIMO un producto, MAXIMO muchos productos contenidos en una orden de compra correspondiente. La Factura de proveedor CONTIENE como MINIMO un registro de la orden de compra, MAXIMO un registro; y la Orden APARECE como MINIMO en una factura de proveedor, MAXIMO una vez.
FACTURAPROV

PRODUCTO

FACTURAPROV

ORDEN

4. La bodega enva producto al almacn (REMISION Vs PRODUCTO)


La remisin es un documento que contiene la cantidad de productos que van a ser llevados a otra dependencia, de lo cual deducimos que: Un Producto APARECE como MINIMO una vez, MAXIMO muchas veces dentro de la remisin; y la Remisin CONTIENE como MINIMO un producto, MAXIMO muchos productos
REMISION

PRODUCTO

5. El almacn enva el producto al cliente de acuerdo al pedido solicitado (PRODUCTO Vs 15

FACTURA Vs SOLICITUD) Cuando el cliente solicita un producto o varios, estos sern facturados de acuerdo a la solicitud presentada, eso quiere decir que en caso de reclamaciones bastara solamente con mostrar la solicitud y la factura de solo esa solicitud; los productos comprados sern variados indistintamente y registrados en las facturas que se generen por cada solicitud; de acuerdo a lo anterior tenemos que: Una Factura CONTIENE como MINIMO el registro de una solicitud, MAXIMO una solicitud, y la Solicitud PERTENECE a la factura como MINIMO una vez, MAXIMO una vez El Producto APARECE como MINIMO en una factura, MAXIMO en muchas facturas; y la Factura CONTIENE como MINIMO un registro de producto, MAXIMO muchos registros de productos
SOLICITUD FACTURA

PRODUCTO

FACTURA

Establecer las llaves principales y forneas En toda tabla es necesario determinar las llaves primarias y forneas a fin de hacer la conexin de los datos; una llave principal en un campo asegura que el registro en la tabla no se repita, es decir que haremos que un campo tenga un registro nico, que no permita nulos y duplicados, ejemplo, los nmeros de factura son nicos, las cedulas, y cualquier consecutivo en documentos. La tabla que contenga la llave principal ser una tabla Maestra. Las llaves forneas por otro lado corresponden a campos en otras tablas que permiten duplicados pero no es recomendable que permitan nulos; cuando decimos que un Registro de una tabla A ESTA CONTENIDO en una tabla B decimos que la llave principal de la tabla A aparecer muchas veces o una vez en la tabla B, entonces la tabla A CONTIENE la llave principal y la tabla B CONTIENE la llave fornea generando una correspondencia o cardinalidad o mejor an una combinacin entre tablas; la tabla que contenga la llave Fornea se denomina Detalle Para establecer cules sern las llaves principales y forneas concentrmonos por un momento en la deduccin de que existirn datos que sern nicos, por ejemplo los consecutivos de los documentos, identificaciones de clientes, etc. y dichos campos se repetirn de nuevo en otras tablas un ejemplo tpico sera Un registro Cedula de la tabla maestra cliente que aparezca contenido en la tabla Factura. Con base a lo anterior realizaremos el diccionario de datos correspondiente para determinar cules sern las propiedades de los campos y ms an cuales sern Campos Llaves e ndices

16

respectivamente Diccionario de datos El diccionario de datos es el medio eficaz de conocer las caractersticas de los campos de una tabla, as mismo conocer de qu forma un campo se combinara con el campo de otra tabla, a continuacin traigo este modelo que aunque no es oficial es un acercamiento al desarrollo. Tenga presente que esto no es oficial en un anlisis, y que adems los campos del diccionario se contemplan con base a los documentos recopilados durante una investigacin TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Cedula No Nombre No Apellido No Direccion1 No Direccion2 No Telefono1 No Telefono2 No Email1 No Email2 No Celular1 No Celular2 No IdDespachador Si Estado Relacionar con Tabla

Campo NumeroSolicitud FechaSolicitud Cedula Nombre Apellido Direccion1 Direccion2 Telefono1 Telefono2 Email1 Email2 Celular1 Celular2 IdDespachador Estado

Tipo Int Date Char Char Char Char Char Char Char Char Char Char Char Int Bit

Tamao

15 50 50 100 100 100 100 100 100 100 100

Campo Nit Empresa JefeCompra Direccion1 Direccion2 Telefono1 Telefono2

Tipo Char Char Char Char Char Char Char

Tamao 15 100 50 100 100 100 100

TABLA PROVEEDOR Tipo Nulos ndice llave No Principal Nit No Empresa No JefeCompra No Direccion1 No Direccion2 No Telefono1 No Telefono2

Relacionar con Tabla

17

Email1 Email2 Celular1 Celular2 Estado

Char Char Char Char Bit

100 100 100 100

No No No No Si TABLA PRODUCTO Tipo Nulos llave No Principal No No No No Si TABLA ORDEN Tipo Nulos llave No Principal No No Fornea No Si

Email1 Email2 Celular1 Celular2 Estado

Campo Cdigo Detalle Cantidad ValorUnitario Categora Disponible

Tipo Int Char Numeric Money Char Bit

Tamao 100 5 100

ndice Cdigo Detalle Cantidad ValorUnitario Categora Disponible

Relacionar con Tabla

Campo NumeroOrden FechaOrden Nit IdDespachador Estado

Tipo Int Date Char Int Bit

Tamao

ndice NumeroOrden FechaOrden Nit IdDespachador Estado

Relacionar con Tabla Proveedor

15

Campo NumeroFactura FechaFactura NumeroOrden ValorFactura Iva Descuento ValorTotal Pagado

Tipo Int Date Int Money Numeric Numeric Money Bit

TABLA FACTURAPROV Tipo Tamao Nulos ndice llave No Principal NumeroFactura No FechaFactura No Fornea NumeroOrden No ValorFactura 3 No Iva 3 No Descuento No ValorTotal Si Pagado TABLA REMISION Tipo Nulos ndice llave No Principal NumeroRemision No FechaRemision No IdDespachador No Nombre No Apellido Si Estado TABLA FACTURA Nulos Tipo

Relacionar con Tabla Orden

Campo NumeroRemision FechaRemision IdDespachador Nombre Apellido Estado

Tipo Int Date Int Char Char Bit

Tamao

Relacionar con Tabla

50 50

Campo

Tipo

Tamao

ndice

Relacionar con

18

NumeroFactura Int FechaFactura Date NumeroSolicitud Int ValorFactura Money Iva Numeric 3 Descuento Numeric 3 ValorTotal Money IdDespachador Int Pagado Bit Ahora con este modelo vamos a proceder Relacin diseado en la parte de arriba Aplicacin de la cardinalidad

Tabla NumeroFactura FechaFactura Fornea NumeroSolicitud Solicitud ValorFactura Iva Descuento ValorTotal IdDespachador Si Pagado a practicar la cardinalidad, de acuerdo al Diagrama Entidad No No No No No No No

llave Principal

Ahora veamos lo relacionado con la cardinalidad, en este caso veamos la forma de cmo las filas de cada tabla se combinan con las filas de otras tablas, haremos un breve relato de los tipos de cardinalidad antes de proceder con nuestro ejemplo, una vez hecho esto entonces modificaremos los diccionarios de datos correspondientes y para cada uno de los casos haremos con datos ficticios un anlisis Cardinalidad de Uno a Varios: Explica que un solo registro de una tabla A APARECE como MINIMO una vez, MAXIMO muchas veces en la tabla B; y un registro de la tabla B le CORRESPONDE como MINIMO una vez MAXIMO una vez. Este es el caso ms particular y ms fcil de cimentar. La llave principal de la tabla A es heredada por la tabla B convirtindose entonces en una llave FORANEA que garantiza la conexin de las filas, dicha llave fornea Debe tener duplicados Cardinalidad de Uno a Uno: Explica que un solo registro de la tabla A APARECE como MINIMO una vez, MAXIMO una vez en la tabla B; y un registro de la tabla B le corresponde como MINIMO una vez MAXIMO una vez. Este caso es un poco raro, sin embargo si consideramos por ejemplo que se hace un pedido a proveedores por dos rdenes de compra, entonces sern dos las facturas que se reciben para cada una, por lo tanto diramos que Una sola factura va a contener nicamente Una Orden de compra. La llave principal de la tabla A es heredada por la tabla B y esta llave es un ndice SIN DUPLICADOS Cardinalidad de Muchos a Muchos: Explica que un solo registro de la tabla A APARECE como MINIMO una vez MAXIMO muchas veces en la tabla B; y un registro de la tabla B esta CONTENIDO como MINIMO una vez MAXIMO muchas veces en la tabla A. Esto usualmente puede ocurrir, esto es denominado una Indefinida y afecta la integridad de la informacin de la base de datos; la solucin a esto es crear una tabla C, la cual va a heredar las llaves Principales de las tablas A y B, una vez hecho esto si persiste la cardinalidad entonces repetiremos el proceso de crear una tabla D y as sucesivamente Ahora procedemos a analizar nuestro sistema de diseo con base a lo explicado aqu:

19

1. Los clientes hacen el pedido de productos y son enviados a bodega para verificar los productos solicitados (SOLICITUD Vs PRODUCTO) La Solicitud CONTIENE como MINIMO un producto MAXIMO muchos productos; y un producto APARECE registrado como MINIMO una vez en una solicitud MAXIMO en muchas solicitudes
SOLICITUD PRODUCTO

Se hacen muchas solicitudes a muchos productos pero a cules?, lo que necesitamos es hacer la tercera tabla que DETALLA que productos son los que aparecen en la solicitud, que cantidades se solicitan y colocaremos las llaves de las tablas Solicitud y Producto respectivamente
SOLICITUD PRODUCTO

DETALLESOLICITUDPRODUCTO

TABLA DETALLESOLICITUPRODUCTO Tipo Campo Tipo Tamao Nulos ndice llave NumeroSolicitud Int No Fornea NumeroSolicitud CodigoProducto Int No Fornea CodigoProducto CantidadSolicitada Numeric No CantidadSolicitada Registrado Bit Si Registrado

Relacionar con la tabla Solicitud Producto

20

2. La bodega solicita a proveedores registrados los productos (PRODUCTO Vs PROVEDOR Vs ORDEN) Un Producto es ADQUIRIDO a un proveedor como MINIMO una vez, mximo muchas veces; y un Proveedor DISTRIBUYE un producto como MINIMO una vez MAXIMO muchas veces. En la Orden APARECE como MINIMO un producto, MAXIMO muchos productos; y un producto est CONTENIDO como MINIMO una vez en la orden, MAXIMO muchas veces. El Proveedor ES DUEO como MINIMO una vez de una orden, MAXIMO de muchas ordenes; y la Orden PERTENECE como MINIMO a un proveedor, MAXIMO un proveedor Cuando se hace el pedido de productos a proveedores, es por medio de un documento o una orden de compra, para lo cual entonces tenemos que:
PRODUCTO PROVEEDOR

ORDEN

Realizando algunos ajustes entonces al final tenemos esto:


PRODUCTO PROVEEDOR

DetalleProOrden

ORDEN

Campo

Tipo

NumeroOrden Int CodigoProducto Int CantidadSolicitada Numeric Valor Money Subtotal Money Registrado Bit

TABLA DETALLEPROORDEN Tipo Tamao Nulos ndice llave No Fornea NumeroOrden No Fornea CodigoProducto No CantidadSolicitada No Valor No Subtotal Si Registrado

Relacionar con la tabla Orden Producto

21

3. Los proveedores envan el producto a la bodega (FACTURAPROVEEDOR Vs ORDEN Vs PRODUCTO) Un Producto APARECE como MINIMO en una factura de proveedor, MAXIMO en muchas facturas; y la Factura de proveedor CONTIENE como MINIMO un producto, MAXIMO muchos productos contenidos en una orden de compra correspondiente. La Factura de proveedor CONTIENE como MINIMO un registro de la orden de compra, MAXIMO un registro; y la Orden APARECE como MINIMO en una factura de proveedor, MAXIMO una vez. Vemos que la tabla Producto y FacturaProv tienen una cardinalidad Indefinida, por lo tanto se necesita saber que productos se deben cargar con Detalle a nuestra Factura, entonces crearemos una tercera tabla que contenga el Detalle correspondiente. Como anteriormente se hizo un pedido en la orden de compra y obtuvimos el DetalleProOrden, resultante de la combinacin entre la tabla Orden y Producto, y como la FacturaProv se genera nicamente para una sola Orden de Compra entonces lo nico que hacemos es Derivar el campo NumeroOrden dentro de la factura con la cardinalidad UNO A UNO
PRODUCTO FACTURAPROV

DetalleProOrden

ORDEN

4. La bodega enva producto al almacn (REMISION Vs PRODUCTO) Un Producto APARECE como MINIMO una vez, MAXIMO muchas veces dentro de la remisin; y la Remisin CONTIENE como MINIMO un producto, MAXIMO muchos productos Crearemos como en otros casos una tabla de Detalle para saber cules son los productos de la remisin, pero como tenemos DetalleSolicitudProducto resultado de la combinacin de Solicitud y Producto, entonces al momento Detalle
PRODUCTO

de hacer la remisin tomaremos este


REMISION

22

Una fase previa seria as


SOLICITUD PRODUCTO REMISION

DETALLESOLICITUDPRODUCTO

DETALLEREMISIONPRODUCTO

Pero nos encontramos con el dilema a la hora de recuperar la informacin de los productos de la solicitud, obligndonos a volver a registrar en el DetalleRemisionProducto dicho material. Entonces lo que tenemos que hacer es fusionar los dos Detalles en uno Solo a fin de poder satisfacer la solicitud y la remisin respectivamente, y podemos derivar el NumeroSolicitud en la tabla Remisin con una cardinalidad de UNO A UNO, luego en el detalle agregar otros campos CantidadDespachada, Saldo y Registrado. Esta medida es tomada a raz de que la bodega accede a la solicitud y es de esta misma la que obtiene los productos para la remisin veamos cmo queda
SOLICITUD PRODUCTO

DETALLESOLICITUDPRODUCTO

REMISION

La nueva tabla de detalle quedara as TABLA DETALLESOLICITUPRODUCTO Tipo Campo Tipo Tamao Nulos ndice llave NumeroSolicitud Int No Fornea NumeroSolicitud CodigoProducto Int No Fornea CodigoProducto CantidadSolicitada Numeric No CantidadSolicitada CantidadRemitida Numeric No CantidadRemitida Subtotal Money No Subtotal Saldo Numeric No Saldo Observaciones MaxVarchar Si Registrado Bit Si Registrado Relacionar con la tabla Solicitud Producto

5. El almacn enva el producto al cliente de acuerdo al pedido solicitado (PRODUCTO Vs


FACTURA Vs SOLICITUD) Una Factura CONTIENE como MINIMO el registro de una solicitud, MAXIMO una solicitud, y la

23

Solicitud PERTENECE a la factura como MINIMO una vez, MAXIMO una vez El Producto APARECE como MINIMO en una factura, MAXIMO en muchas facturas; y la Factura CONTIENE como MINIMO un registro de producto, MAXIMO muchos registros de productos La solicitud y la factura permanecen estndar, pero tenemos que crear el Detalle de los productos solicitados, pero como nosotros habamos hecho el DetalleSolicitudProducto entonces haremos la derivacin de ah
SOLICITUD FACTURA

DETALLESOLICITUDPRODUCTO

PRODUCTO

Normalizacin de datos En este punto haremos la normalizacin de los datos, aplicando el concepto de las 5 formas, solo que tratare de ser abreviado a fin de poder comprender de que se trata este captulo. Aplicaremos las formas normales para cada una de las tablas a fin de evitar aglomeraciones veamos Veamos la tabla solicitud y notaremos que los datos de uno o muchos clientes aparecen registrados de forma inherente a esta, lo que podemos hacer es extraer los datos del cliente aparte , colocndole un campo llave principal por Cedula y esta la heredamos en la Solicitud veamos TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Fornea Cedula No IdDespachador Si Estado Relacionar con Tabla Cliente

Campo NumeroSolicitud FechaSolicitud Cedula IdDespachador Estado

Tipo Int Date Char Int Bit

Tamao

15

Campo Cedula Nombre Apellido Direccion1 Direccion2

Tipo Char Char Char Char Char

Tamao 15 50 50 100 100

TABLA CLIENTE Tipo Nulos llave No Principal No No No No

ndice Cedula Nombre Apellido Direccion1 Direccion2

Relacionar con Tabla

24

Telefono1 Telefono2 Email1 Email2 Celular1 Celular2

Char Char Char Char Char Char

100 100 100 100 100 100

No No No No No No

Telefono1 Telefono2 Email1 Email2 Celular1 Celular2

Ahora tenemos esto resuelto de esta forma sin embargo veamos que tenemos an por resolver; si podemos notar en la tabla Cliente, la informacin de las Direcciones, se muestra en columna, esto significa que si se necesitan agregar ms direcciones tendramos que redisear la tabla agregndole columnas y eso no estara bien pues atenta contra la integridad de la tabla como tal, adems las direcciones no estn acompaadas de ninguna ubicacin como Ciudad. La solucin a esto es extraer todas las columnas de Direccin en una nueva tabla, crear un campo llave Forneo y ligarlo con la llave principal Cedula TABLA CLIENTE Tipo Nulos llave No Principal No No Relacionar con Tabla

Campo Cedula Nombre Apellido

Tipo Char Char Char

Tamao 15 50 50

ndice Cedula Nombre Apellido

Campo Cedula Direccion1 Direccion2 Telefono1 Telefono2 Email1 Email2 Celular1

Tipo Char Char Char Char Char Char Char Char

Tamao 15 100 100 100 100 100 100 100

TABLA DIRECTORIO Tipo Nulos llave No Fornea No No No No No No No

ndice Cedula Direccion1 Direccion2 Telefono1 Telefono2 Email1 Email2 Celular1

Relacionar con Tabla Cliente

La tabla directorio satisface hasta aqu todo, pero seguimos con problemas, el directorio para iniciar esta nicamente vinculando direcciones de clientes olvidndonos de los Proveedores, empleados etc., otro aspecto, las direcciones no poseen una ciudad donde ubicar las direcciones, y adems tenemos los

25

medios de comunicacin incrustados aun ah. La solucin a esto es Anular una columna de direcciones (ejemplo Direccion1) y la restante que sea la direccin nica, adems de esto agregar un campo nuevo ciudades que vaya ligado a una tabla con un campo llave Ciudades; y por ultimo extraer los medios de comunicacin colocndoles un campo clave fornea Cedula veamos TABLA DIRECTORIO Tipo Nulos ndice llave No Fornea Identificacin No No Direccin Ciudad Relacionar con Tabla Cliente, Proveedor, Empleado Direccin Ciudad Char Char 100 100 Fornea Ciudades

Campo Identificacin

Tipo Char

Tamao 15

Campo Ciudad

Tipo Char

Tamao 100

TABLA CIUDADES Tipo Nulos llave No Principal

ndice Principal

Relacionar con Tabla

El mismo tratamiento sufre la tabla comunicacin en materia de que nos sirva no solo para clientes sino para otras entidades sean proveedores, empleados, etc. TABLA COMUNICACIONES Tipo Tamao Nulos ndice llave 15 No Fornea Identificacin Relacionar con Tabla Cliente, Proveedor,

Campo Identificacin

Tipo Char

Telefono1 Char Telefono2 Char Email1 Char Email2 Char Celular1 Char Y ahora lo nico es analizar

Empleado 100 No Telefono1 100 No Telefono2 100 No Email1 100 No Email2 100 No Celular1 que los medios de comunicacin (Telefono1, Telefono2, etc.) pueden

tiparse en una tabla llamada MediosComunicacion como nico registro eliminando los datos redundantes, y volvemos a decir si deseamos agregar un Telefono3 No podemos modificar el diseo de la tabla, lo mejor es extraer eso y que se maneje en una nica columna, adems cada columna maneja su Descripcin o valor (ejemplo Email1=glock@..., Email2=Josep@..) por lo tanto junto con la nica columna de MedioComunicacion asociaremos su Descripcin veamos cmo queda TABLA COMUNICACIONES Tipo Tamao Nulos ndice llave 15 No Fornea Identificacin

Campo Identificacin

Tipo Char

Relacionar con Tabla Cliente, Proveedor, Empleado

26

MedioCom Descripcin

Char Char

100 100

No No

Fornea

MedioCom Descripcin

MediosComunicaciones

TABLA MEDIOCOMUNICACION Tipo Campo Tipo Tamao Nulos ndice Relacionar con Tabla llave MedioCom Char 100 No Principal MedioCom De acuerdo a lo anterior tendremos un sistema normalizado aplicando varias formas normales, la clave de todo es saber cmo Distribuir los datos, saber manejar la independencia de los datos
Cliente Solicitud

Directorio

Comunicaciones

Ciudades

Comunicaciones

A continuacin vamos a normalizar los documentos (factura, orden, remisin) de la misma forma la tabla Proveedores. Dado que tenemos el Directorio y Comunicaciones entonces lo que haremos con Proveedores es eliminar los campos redundantes y enlazar la clave principal con el campo forneo Identificacin TABLA PROVEEDOR Tipo Nulos ndice llave No Principal Nit No Empresa No JefeCompra Si Estado Relacionar con Tabla

Campo Nit Empresa JefeCompra Estado

Tipo Char Char Char Bit

Tamao 15 100 50

Pasemos a los documentos; notemos que dichos documentos poseen un campo IdDespachador el cual corresponde a un empleado que despacho algn documento durante el ejercicio, para lo cual entonces es buena idea crear una tabla Empleados con el fin de clasificar a cada uno de ellos en funcin de sus propiedades (Cargo, Sueldo, FechaIngreso, Tipo de contrato, etc.). Esto sugiere si es posible que normalicemos todos los nuevos campos, veamos cmo puede quedar la tabla empleado TABLA EMPLEADO Tipo Nulos llave No Principal No No No No No Relacionar con Tabla

Campo Cdigo Nombre Apellido Cargo Funcion1 Funcion2

Tipo Char Char Char Char Char Char

Tamao 15 50 50 100 100 100

ndice Cdigo Nombre Apellido Cargo Funcion1 Funcion2

27

Sueldo FechaIngreso TipoContrato Estado

Money Date Char Bit

100

No No No Si

Sueldo FechaIngreso TipoContrato Estado

Normalizamos las Funciones y el Tipo de contrato y as queda TABLA EMPLEADO Tipo Nulos ndice llave No Principal Cdigo No Nombre No Apellido No Cargo No Sueldo No FechaIngreso No TipoContrato Si Estado Relacionar con Tabla

Campo Cdigo Nombre Apellido Cargo Sueldo FechaIngreso TipoContrato Estado

Tipo Char Char Char Char Money Date Char Bit

Tamao 15 50 50 100 100

TipoContrato

Campo Cdigo Funcin Descripcin

Tipo Char Char Char

TABLA FUNCIONESEMPLEADO Tipo Tamao Nulos ndice llave 15 No Fornea Cdigo 100 No Funcin 100 No Descripcin TABLA FUNCIONES Tipo Nulos llave No Primaria

Relacionar con Tabla Empleado Funciones

Campo Funcin

Tipo Char

Tamao 100

ndice Funcin

Relacionar con Tabla

Campo TipoContrato

Tipo Char

TABLA TIPOCONTRATO Tipo Tamao Nulos ndice llave 100 No Primaria TipoContrato

Relacionar con Tabla

28

Enlazamos la llave principal de Cdigo con los documentos los cuales sern claves Forneas quedndonos el diseo final de los documentos as: TABLA REMISION Tipo Nulos ndice llave No Principal NumeroRemision No FechaRemision No IdDespachador Si Estado TABLA FACTURA Tipo Nulos llave No Principal No No Fornea No No No No Si Relacionar con Tabla Empleado

Campo NumeroRemision FechaRemision IdDespachador Estado

Tipo Int Date Int Bit

Tamao

Campo NumeroFactura FechaFactura NumeroSolicitud ValorFactura Iva Descuento ValorTotal IdDespachador Pagado

Tipo Int Date Int Money Numeric Numeric Money Int Bit

Tamao

ndice NumeroFactura FechaFactura NumeroSolicitud ValorFactura Iva Descuento ValorTotal IdDespachador Pagado

Relacionar con Tabla Solicitud

3 3

Empleado

Campo NumeroSolicitud FechaSolicitud Cedula IdDespachador Estado

Tipo Int Date Char Int Bit

Tamao

15

TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Fornea Cedula No IdDespachador Si Estado

Relacionar con Tabla Cliente Empleado

Una vez tengamos el diseo listo procederemos a crear cada una de las tablas en el explorador como aparece especificado en la Pgina 5 del correspondiente manual agregando los ndices indicados para la operacin. Existe otra forma de hacer el diseo y es mediante el uso de Transact SQL veamos cmo se hace un diseo de una base de datos sencilla y al menos dos tablas Creacin de una base de datos y tablas usando Transact SQL La organizacin de la base de datos implica diferentes objetos, los cuales pueden ser fsicos o lgicos. Los primeros estn relacionados con la organizacin de los datos en el dispositivo fsico (disco). Los objetos fsicos del motor de base de datos son archivos y grupos de archivos. Por su parte, los objetos lgicos

29

representan la vista de un usuario de las bases de datos. Estas, junto con las tablas, columnas y vistas (tablas virtuales) son ejemplos de objetos lgicos. El primer objeto de la base de datos que se tiene que crear es una base de datos. El motor de la base de datos maneja base de datos del sistema y usuario. Este, cuando est autorizado puede crear base de datos de usuario, mientras que la base de datos del sistema se genera durante la instalacin del sistema de base de datos. Las bases de datos del sistema son Master Tempdb Model Msdb Resource

Se utilizaran mtodos bsicos para la creacin de la base de datos. El primero est relacionado con el explorador de objetos de SQL Management Studio, el segundo implica la construccin por la instruccin CREATE DATABASE de Transact SQL A continuacin para entender un poco como se hace se pide al lector que para aprender las instrucciones de forma general disee una base de datos y cada una de sus tablas e ndices correspondientes, as mismo la relacin de las tablas entre s.

Una vez hecho esto seleccione cada componente haga clic derecho y seleccione la opcin Incluir la base de datos como Create To ventana del Editor de consultas Nueva

30

Aparece un editor y veremos que he seleccionado un codigo el cual es el que crea la base de datos, este codigo es suficiente para disear la base de datos MDF y un archivo de soporte LOG
CREATE DATABASE [Facturacion] ON PRIMARY ( NAME = N'Facturacion', FILENAME = N'c:\Archivos de programa\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Facturacion.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'Facturacion_log', FILENAME = N'c:\Archivos de programa\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Facturacion_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) GO

El nombre de nuestra base de datos es Facturacion el parametro ON PRIMARY especifica el primer archivo creado y mas importante, el cual contendra las tablas del sistema y otra informacion interna relacionada con la estructura de la base, el tamao incial esta dado por el parametro SIZE y el parametro MAXSIZE con un valor unlimited indica que el crecimiento se hara progresivo, si colocamos un tamao final el tamao se limitara a ese valor solamente, esto es importante cuando se maneja volumen de informacion a nivel de empresas grandes y sobre todo con almacenamientos en disco superiores, no recomendable para modelos de almacenamiento limitados (ejemplo un pc normal) solamente servidores de alto almacenamiento de disco. El parametro LOG ON define uno o mas archivos como destino fisicio del registro de transacciones de la base de datos y es necesario que este archivo sea creado pues al menos debe haber uno o varios, mas adelante en otro manual especificare esto con mas detalle

31

Continuando con nuestro procedimiento veremos como se crean las tablas y los indices correspondientes de cada tabla, esto lo haremos usando la estructura de las tablas asi: TABLA FACTURA Tipo Nulos llave No Principal No No Fornea No No No No Si Relacionar con Tabla Solicitud

Campo NumeroFactura FechaFactura NumeroSolicitud ValorFactura Iva Descuento ValorTotal IdDespachador Pagado

Tipo Int Date Int Money Numeric Numeric Money Int Bit

Tamao

ndice NumeroFactura FechaFactura NumeroSolicitud ValorFactura Iva Descuento ValorTotal IdDespachador Pagado

3 3

Empleado

Campo NumeroSolicitud FechaSolicitud Cedula IdDespachador Estado

Tipo Int Date Char Char Bit

Tamao

15 15

TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Fornea Cedula No Fornea IdDespachador Si Estado

Relacionar con Tabla Cliente Empleado

Campo Cdigo Nombre Apellido Cargo Sueldo FechaIngreso Estado

Tipo Char Char Char Char Money Date Bit

Tamao 15 50 50 100

TABLA EMPLEADO Tipo Nulos ndice llave No Principal Cdigo No Nombre No Apellido No Cargo No Sueldo No FechaIngreso Si Estado TABLA CLIENTE Tipo Nulos llave No Principal No

Relacionar con Tabla

Campo Cedula Nombre

Tipo Char Char

Tamao 15 50

ndice Cedula Nombre

Relacionar con Tabla

32

Apellido

Char

50

No TABLA PRODUCTO Tipo Nulos llave No Principal No No No No Si

Apellido

Campo Cdigo Detalle Cantidad ValorUnitario Categora Disponible

Tipo Int Char Numeric Money Char Bit

Tamao 100 5 100

ndice Cdigo Detalle Cantidad ValorUnitario Categora Disponible

Relacionar con Tabla

Campo NumeroSolicitud CodigoProducto CantidadSolicitada CantidadRemitida Subtotal Saldo Observaciones Registrado He colocado las Llaves haremos.

TABLA DETALLESOLICITUPRODUCTO Tipo Relacionar Tipo Tamao Nulos ndice llave con la tabla Int No Fornea NumeroSolicitud Solicitud Int No Fornea CodigoProducto Producto Numeric No CantidadSolicitada Numeric No CantidadRemitida Money No Subtotal Numeric No Saldo MaxVarchar Si Bit Si Registrado Primarias en color NEGRO y las Llaves Forneas en Azul para reconocer lo que

En este paso lo primero que haremos son las tablas con Campo llave Primario, luego haremos las tablas con campo forneo, luego veremos el cdigo que se genera del diseo correspondiente. Comenzare por las tablas Empleado, Cliente y Producto; luego por las tablas Solicitud seguida de Factura y por ltimo la tabla DetalleSolicitudProducto ya que usaremos Transact SQL lo mejor es no tener errores por alguna llave que no se haya incluido. Tambin modificaremos los nombres de los campos principales para un mejor entendimiento, Tabla Empleado

33

CREATE TABLE [dbo].[Empleado]( [Codigo] [nchar](15) NOT NULL, [Nombre] [nchar](50) NOT NULL, [Apellido] [nchar](50) NOT NULL, [Cargo] [nchar](100) NOT NULL, [Sueldo] [money] NOT NULL, [FechaIngreso] [date] NOT NULL, [Estado] [bit] NULL, CONSTRAINT [IndicePrincipalCodigoEmpleado] PRIMARY KEY CLUSTERED ( [Codigo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Tabla Cliente
CREATE TABLE [dbo].[Cliente]( [Cedula] [nchar](15) NOT NULL, [Nombre] [nchar](50) NOT NULL, [Apellido] [nchar](50) NOT NULL, CONSTRAINT [IndicePrincipalCedulaCliente] PRIMARY KEY CLUSTERED ( [Cedula] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Tabla Producto
CREATE TABLE [dbo].[Producto]( [Codigo] [int] IDENTITY(1,1) NOT NULL, [Detalle] [nchar](100) NOT NULL, [Cantidad] [numeric](5, 0) NOT NULL, [ValorUnitario] [money] NOT NULL, [Categoria] [nchar](100) NOT NULL, [Disponible] [bit] NULL, CONSTRAINT [IndicePrincipalCodigoProducto] PRIMARY KEY CLUSTERED ( [Codigo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Veamos un poco lo que se hizo aqu, utilizamos Create Table para crear el objeto correspondiente, veremos que se hace mediante un esquema DBO, luego colocamos cada uno de los campos correspondientes; los campos auto numricos por lo general son de tipo Entero y se especifica la propiedad IDENTITY como en la tabla Producto, veremos que habrn campos que no permiten NULOS como si los hay en el caso de un campo de tipo BIT que utilizaremos para controlar bsquedas en

34

consultas. El parmetro CONSTRAINT / PRIMARY KEY CLUSTERED encierra el nombre del ndice del campo llave, para nuestra comodidad hemos colocado un nombre adecuado para as poderlo enlazar fcilmente sin complicaciones algunas, cada uno de los campos Indexados estarn organizando registros por esa columna de forma ASC de menor a mayor; las dems sern propiedades anexadas en tiempo de diseo; el parmetro PRIMARY escrito al final especifica que se est haciendo la tabla en la base de datos actual A continuacin crearemos las tablas que estarn relacionadas a los campos llaves Principales, en este caso comenzaremos por la solicitud que se enlaza con la tabla Cliente y la tabla Empleado con la cardinalidad UNO A VARIOS veamos

CREATE TABLE [dbo].[Solicitud]( [NumeroSolicitud] [int] IDENTITY(1,1) NOT NULL, [FechaSolicitud] [date] NOT NULL, [Cedula] [nchar](15) NOT NULL, [IdDespachador] [nchar](15) NOT NULL, [Estado] [bit] NULL, CONSTRAINT [IndicePrincipalNumeroSolicitud] PRIMARY KEY CLUSTERED ( [NumeroSolicitud] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

Creacion del indice


ALTER TABLE [dbo].[Solicitud] WITH CHECK ADD CONSTRAINT [RelacionClienteSolicitudPorCedula] FOREIGN KEY([Cedula]) REFERENCES [dbo].[Cliente] ([Cedula]) GO

Creacion de la relacion
ALTER TABLE [dbo].[Solicitud] CHECK CONSTRAINT [RelacionClienteSolicitudPorCedula] GO ALTER TABLE [dbo].[Solicitud] WITH CHECK ADD CONSTRAINT [RelacionEmpleadoSolicitudPorIdDespachador] FOREIGN KEY([IdDespachador]) REFERENCES [dbo].[Empleado] ([Codigo]) GO ALTER TABLE [dbo].[Solicitud] CHECK CONSTRAINT [RelacionEmpleadoSolicitudPorIdDespachador] GO

Con ALTER TABLE tras crear la tabla correspondiente, modificaremos y crearemos la llave Fornea con el parmetro FOREIGN KEY con REFERENCES a la tabla que tiene la llave principal,

35

Luego de crear la llave Fornea procedemos entonces a hacer la relacin entre las tablas usando el parmetro CHECK CONSTRAINT esto entonces ligara los campos llave principal y fornea de ambas tablas. Repetiremos este mismo proceso ahora con la tabla Factura pero tendremos en cuenta que el campo NumeroSolicitud de la tabla Solicitud se liga a el campo NumeroSolicitud de la tabla Factura de UNO A UNO, en este caso haremos que nuestro campo NumeroSolicitud de la tabla Factura sea UNICO a fin de mantener la cardinalidad veamos cmo queda

CREATE TABLE [dbo].[Factura]( [NumeroFactura] [int] NOT NULL, [FechaFactura] [date] NOT NULL, [NumeroSolicitud] [int] NOT NULL, [ValorFactura] [money] NOT NULL, [Iva] [numeric](2, 0) NOT NULL, [Descuento] [numeric](3, 0) NOT NULL, [ValorTotal] [money] NOT NULL, [IdDespachador] [nchar](15) NOT NULL, [Pagado] [bit] NULL, CONSTRAINT [IndicePrincipalNumeroFactura] PRIMARY KEY CLUSTERED ( [NumeroFactura] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],

Especificacion de la llave foranea UNICA


CONSTRAINT [IndiceForaneoNumeroSolicitud] UNIQUE NONCLUSTERED ( [NumeroSolicitud] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Factura] WITH CHECK ADD CONSTRAINT [RelacionEmpleadoFacturaPorIdDespachador] FOREIGN KEY([IdDespachador]) REFERENCES [dbo].[Empleado] ([Codigo]) GO ALTER TABLE [dbo].[Factura] CHECK CONSTRAINT [RelacionEmpleadoFacturaPorIdDespachador] GO ALTER TABLE [dbo].[Factura] WITH CHECK ADD CONSTRAINT [RelacionSoliciudFacturaPorNumeroSolicitud] FOREIGN KEY([NumeroSolicitud]) REFERENCES [dbo].[Solicitud] ([NumeroSolicitud]) GO

36

ALTER TABLE [dbo].[Factura] CHECK CONSTRAINT [RelacionSoliciudFacturaPorNumeroSolicitud] GO

Vemos un nuevo parmetro CONSTRAINT / UNIQUE NONCLUSTERED donde crearemos el ndice con el nombre especifico y asignamos esto a el campo NumeroSolicitud de forma ASC, los dems son propiedades del diseo ya vistas durante el proceso

Por ultimo nos queda la tabla DetalleSolicitudProducto veamos


CREATE TABLE [dbo].[DetalleSolicitudProducto]( [NumeroSolicitud] [int] NOT NULL, [CodigoProducto] [int] NOT NULL, [CantidadSolicitada] [numeric](18, 0) NOT NULL,

[CantidadRemitida] [numeric](18, 0) NOT NULL, [Subtotal] [money] NOT NULL, [Saldo] [numeric](18, 0) NOT NULL, [Observaciones] [nvarchar](max) NULL, [Registrado] [bit] NULL ) ON [PRIMARY] GO

37

ALTER TABLE [dbo].[DetalleSolicitudProducto] WITH CHECK ADD CONSTRAINT [RelacionProductoDetalleSolicitudPorCodigoProducto] FOREIGN KEY([CodigoProducto]) REFERENCES [dbo].[Producto] ([Codigo]) GO ALTER TABLE [dbo].[DetalleSolicitudProducto] CHECK CONSTRAINT [RelacionProductoDetalleSolicitudPorCodigoProducto] GO ALTER TABLE [dbo].[DetalleSolicitudProducto] WITH CHECK ADD CONSTRAINT [RelacionSolicitudDetalleSolicitudPorNumeroSolicitud] FOREIGN KEY([NumeroSolicitud]) REFERENCES [dbo].[Solicitud] ([NumeroSolicitud]) GO ALTER TABLE [dbo].[DetalleSolicitudProducto] CHECK CONSTRAINT [RelacionSolicitudDetalleSolicitudPorNumeroSolicitud] GO

Al final vamos a crear un Diagrama relacional dentro de la base de datos y veremos este resultado

Si durante el diseo de cada tabla usted incorpora los ndices est bien, para lo cual consideremos solamente un diseo de una de las tablas para que veamos como seria la colocacin de dichos ndices, tomando como referencia la tabla Factura para el caso veamos IndiceFechaFactura
USE [Facturacion] GO CREATE NONCLUSTERED INDEX [IndiceFechaFactura] ON [dbo].[Factura] ( [FechaFactura] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

= =

OFF, ON,

38

GO

IndiceValorTotal
USE [Facturacion] GO CREATE NONCLUSTERED INDEX [IndiceValorTotal] ON [dbo].[Factura] ( [ValorTotal] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO

= =

OFF, ON,

IndicePagado
USE [Facturacion] GO /****** Object: Index [IndicePagado] Script Date: 03/15/2012 00:16:56 ******/ CREATE NONCLUSTERED INDEX [IndicePagado] ON [dbo].[Factura] ( [Pagado] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO

Lgicamente a medida que disee su tabla har dicho trabajo, aqu vemos que usamos la clusula USE que nos abre la tabla en diseo para aadir el ndice,

39

S-ar putea să vă placă și