Documente Academic
Documente Profesional
Documente Cultură
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
o Analysis Services
o o Inteligencia de negocios y Transact-SQL Reporting Services
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
Para crear una base de datos use el explorador derecho de objetos y haga clic
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
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
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
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)
Solicitud
11
2. Los pedidos son enviados a bodega para verificar los productos solicitados (tabla solicitud,
producto)
Solicitud
Productos
Enviar a bodeg a
Bodega
Proveedores
Productos
Bodega
Orden
Proveedores
Productos
Enviar a bodeg a
Bodega
facturaProvedor
12
Productos
Enviar a almac n
Bodega
Remisin
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
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
PRODUCTO
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
TABLA PROVEEDOR Tipo Nulos ndice llave No Principal Nit No Empresa No JefeCompra No Direccion1 No Direccion2 No Telefono1 No Telefono2
17
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
Tamao
15
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
Tamao
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
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
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
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
22
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
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
Tamao
15
24
No No No No No No
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
Tamao 15 50 50
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
ndice Principal
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
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
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
27
100
No No No Si
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
TipoContrato
TABLA FUNCIONESEMPLEADO Tipo Tamao Nulos ndice llave 15 No Fornea Cdigo 100 No Funcin 100 No Descripcin TABLA FUNCIONES Tipo Nulos llave No Primaria
Campo Funcin
Tipo Char
Tamao 100
ndice Funcin
Campo TipoContrato
Tipo Char
TABLA TIPOCONTRATO Tipo Tamao Nulos ndice llave 100 No Primaria TipoContrato
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
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
3 3
Empleado
Tamao
15
TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Fornea Cedula No IdDespachador Si Estado
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
Tamao
15 15
TABLA SOLICITUD Tipo Nulos ndice llave No Principal NumeroSolicitud No FechaSolicitud No Fornea Cedula No Fornea IdDespachador Si Estado
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
Tamao 15 50
32
Apellido
Char
50
Apellido
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 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],
36
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
[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