Vistas a la página totales

lunes, 10 de octubre de 2016

PASO 1 PLANTEAMIENTO DEL PROBLEMA

El proceso de creación de una base de datos comienza guiándonos bajo ciertas reglas y normas que el cliente (persona u organización) deseen, generalmente llamadas Reglas de Negocio que son prácticamente aquellas reglas, restricciones, procesos, necesidades y requerimientos impuestos por los usuarios o administradores de la Base de Datos.

Pero antes de comenzar tenemos que entender algunos conceptos básicos para que no tengamos complicaciones en el transcurso de la explicacion:

Entidad: una entidad es la representación de un objeto del mundo real que se describe en una base de datos.

Atributo: se representa como atributo a las características que constituyen y que son de interés en una entidad por ej.: “Profesor” (el cual es la entidad) puede tener como atributos: nombre, apellido, Fecha de nacimiento, etc.

Relación: en una o más entidades la relación es una descripción sobre alguna interacción entre ellas mismas.

Caso Practico

Para poner en practica lo anterior aprendido utilizaremos un caso practico sencillo, el cual nos ayudara a afinar y a comprender cada uno de los conceptos, abrirá nuestra mente al análisis detallista en el cual deberemos identificar lo que necesitaremos para darnos a la tarea de crear una base de datos.

Leamos el siguiente planteamiento del problema propuesto:


La Empresa, S.A. ha contratado nuestros servicios para que creemos la base de datos llamada FACTURACION que sera implementada en ella para un mejor control de  inventarios, compras y ventas de producto que se efectúan en cada sucursal. Mediante el control de la existencia por productos  y teniendo en cuenta que estos se almacenan en diferentes bodegas con la opción de que se cambie la ubicación de los productos a otras bodegas de lo que también se llevara registro de ello, adicionalmente se tendrá que contar con los cálculos de los máximos y mínimos de existencias, el punto re-orden y la existencia actual por bodega , la información de cada producto constara ademas de su código, el costo, la cantidad total que se encuentra disponible, entre otros aspectos que se consideren necesarios. Se requiere también que se identifique el proveedor correspondiente a cada producto.

Por otra parte, también se quiere tener registro de los clientes que hay por sucursal que sera utilizado también para los registros de facturas que se hagan por sucursal y por cliente teniendo en cuenta que estas pueden ser créditos fiscales, factura consumidor final, factura de importación, entre otros, en la especificación de los productos a vender dentro de una factura, se especifica en ella de que bodega se descargará la existencia y el precio de estos que sera determinado por el registro de nivel de precios.

Del caso anterior tenemos que deducir cuales serán las entidades (tablas) que se crearan para satisfacer las necesidades planteadas. Para poder identificarlas tenemos que comprender muy bien los que se nos pide, es de mucha ayuda que mientras se comienza a leer se escriban o se hagan apuntes de lo relevante que sobresalga en el texto.


IDENTIFICACIÓN DE ENTIDADES Y ATRIBUTOS

Recordemos que una Entidad es aquello que represente un objeto del mundo real y por lo tanto posee características que lo describan. 


--Un ejemplo claro dentro del texto anterior es la identificación de que lo que se necesita es llevar un registro de facturas, la cual requiere de ciertos datos que describan a una factura como lo son:


*numero de factura

*tipo de documento
*nombre del cliente
*dirección del cliente
*total a pagar
*total impuesto
*fecha
*etc...

De esta forma deducimos que FACTURA es una entidad y por lo tanto pasara a formar parte de nuestra base de datos.


--También nos damos cuenta que la empresa necesita llevar registro sobre los artículos que tiene en bodega, primeramente sabemos que un articulo esta descrito por las siguientes características:


*código de articulo

*descripción del articulo
*costo
*tipo
*etc...

Y así es como añadiremos la entidad ARTICULO a la lista de entidades de nuestra base de datos.


--Identificaremos también que la empresa necesita llevar el control de clientes por sucursal, tenemos que clientes esta descrito por las siguientes características:

*nombre del cliente
*teléfono
*edad
*dirección
*etc...

y también sabemos que las sucursales tiene características propias que las describen, entre las que están:

*numero de sucursal
*descripción de sucursal
*teléfono
*etc...

Agregaremos CLIENTE y SUCURSAL como entidades. 

Y así sucesivamente nos daremos a la tarea de identificar cada una de las Entidades necesarias y adecuadas que conformaran la estructura de nuestra base de datos, es un trabajo algo tedioso pero con la practica, se incrementara nuestra capacidad de identificarlas mas fácilmente. Es así como tenemos la lista de todas la entidades que compondrán nuestra base de datos:

**PROVEEDOR
**TBLBODEGA
**TBLCLIENTE
**TBLFACTURA
**TBLFACTURALINEA
**TBLNIVELPRECIO
**TBLTIPODEDOCUEMENTO
**TBLTRANSINVENTARIO
**TLBARTICULO
**TBLSUCURSAL

Nótese que agregamos "TBL" al principio de cada nombre de las entidades haciendo referencia a "TABLA" y que el nombre de las entidades esta escrito en singular, por cuestiones de estandarización se utiliza esta forma que es la mas correcta y hará que nuestro trabajo sea mas profesional.

Ademas de todo eso, también identificaremos las características ó ATRIBUTOS de cada una así como lo hicimos anteriormente.

NORMALIZACIÓN

Como parte del proceso de diseño de una base de datos, entra en juego otro procesos importante que no ayudara a establecer algunas restricciones y estándares en ella.


Hay que comprender un nuevo concepto llamado Normalización, el cual se define de la siguiente manera:

La normalizacion es el proceso de organizar los datos de una base de datos. Se incluye la creación de tablas y el establecimiento de relaciones entre ella según las reglas diseñadas tanto para proteger los datos como para hacer que la base de datos sea mas flexible el eliminar la redundancia y las dependencias incoherentes.

En otras palabras la normalización es el proceso de simplificación de una base de datos que ayudara a obtener los mejores resultados de ella.

Existen una serie de reglas establecidas denominadas "FORMAS NORMALES" (FN) para poder obtener esos resultados, las que se numeran de la siguiente manera: 1FN, 2FN, 3FN, FNBC, 4FN, 5FN. Pero para nuestro caso solo se aplicaran las primeras 3 de ellas descritas por una serie de normas en cada una así:

---Primera forma normal (1FN)

*-Elimine los grupos repetidos de las tablas individuales.
*-Cree una tabla independiente para cada conjunto de datos relacionados.
*-Identifique cada conjunto de datos relacionados con una clave principal.

Para describir de manera simple esta primera forma, usaremos un ejemplo muy sencillo, pensemos en los datos de un CLIENTE, y usemos el campo DIRECCIÓN, sabemos por simple determinación que una dirección esta conformada por el país, departamento (ó provincia), ciudad, colonia, calle, numero de casa; por lo tanto si nos damos cuenta cada uno de estos posee características que lo describen a cada uno asi:

PAÍS esta compuesto por ====> CÓDIGO DE PAÍS y NOMBRE DE PAÍS.

PROVINCIA esta compuesto por ====> CÓDIGO DE PROVINCIA y NOMBRE DE PROVINCIA.

CIUDAD esta compuesta por ====> CÓDIGO DE PROVINCIA y NOMBRE DE PROVINCIA.

COLONIA esta compuesta por ====> CÓDIGO DE CIUDAD y NOMBRE DE CIUDAD.

Por lo tanto estas pasaran a convertirse en nuevas Tablas que se relacionaran entre si, con respecto a calle y numero de casa estos si serán datos propios del cliente, y se preguntaran ¿porque?, es simple, es porque estos si serán datos propios del clientes, y se identificara de los demás con el complemento de las otras partes de la DIRECCION, que es lo mismo que sucede con calle.

---Segunda forma normal (2FN)

*-Cree tablas independientes para conjuntos de valores que se apliquen a varios registros.

*-Relacione estas tablas con una clave externa.

Aplica que para cada Entidad deberá existir un campo que se convertirá en llave primaria y que la identificará de todas las demás, y que estrictamente deberá poseer un valor y este por ningún motivo podrá repetirse.

Ademas de eso se especifica que se deberá relacionar cada tabla que se relacionen cada tabla independiente para no perder información en la base de datos.


---Tercera forma normal (3FN)

*-Elimine los campos que no dependan de la clave.

*-Los valores de un registro que no sean parte de la clave de ese registro no pertenecen a la tabla. 


PASO 2 DIAGRAMA RELACIONAL

Ahora tenemos lo necesario para continuar con el siguiente paso, es el desarrollo de nuestro DIAGRAMA RELACIONAL, este no es de mucha ayuda ya que describe de manera gráfica la forma en la que estará estructurada, y nos brinda un mejor entorno para poder manipularla, para realizarlo hay que respetar ciertas reglas y conceptos dentro de esto.

Conceptos importantes que debemos conocer:

Super llave: aplica una llave o restricción a varios atributos dentro de una entidad, esto se hace para asegurar que en su conjunto no se repitan varias veces y así evitar caer en dudas al querer identificar un registro.

Llave Primaria: aplica a solo un atributo de forma que no permita que se repita en la misma entidad. Esto significa que cada ENTIDAD o TABLA deberá tener una llave primaria que la identifique, esta llave primaria puede ser cualquiera de los atributo o campos que ya le hemos asignado pero que no haya confusiones, es decir que en ese campo no puede haber repeticiones de datos, es por eso que mejor deberemos crear una llave primaria ARTIFICIAL es decir un nuevo campo, y para que resulte sencillo de comprender ejemplificaremos con algunas de nuestras Tablas de la Base de Datos:

*** Para la tabla TBLFACTURA, sabemos que toda factura lleva un registro único y necesario que la distinguirá por todas las demás, este normalmente es un correlativo, es de esa forma que ideamos u campo que sera único para cada registro de una factura, en nuestro caso lo llamaremos NODOCUMENTO (Numero de Documento) .

*** Para la tabla TBLARTICULO crearemos un código propio para que cada articulo nuevo se identifique y este será ARTICULOID.

*** Para la tabla TBLSUCURSAL crearemos también un código que identificara a cada sucursal y se llamará SUCURSALID.

Y así sucesivamente se creara para cada una de las tablas que conformen nuestra Base de Datos, mas adelante podrán visualizar las llaves primarias asignadas a cada una en el diagrama relacional.

Llave Foránea: se establece sobre un campo que debe estar relacionado estrictamente con la llave primaria de otra entidad, para así exigir que exista previamente esa llave.

Normas sencillas a seguir.

 Se crean las tablas que son las unidades de almacenamiento principal de todos los datos.

 Todas las tablas deberán estar compuestas por filas (que son los registros) y por columnas (que son los campos) que almacenaran cada uno de los registros.

 Las filas y columnas carecen, en un principio, de orden a la hora de ser almacenadas.

 El orden de las columnas lo determina cada consulta

 Cada tabla posee un identificador único de cada registro compuesto por una o más columnas, es decir posee una llave primaria.


 Para establecer una relación entre dos tablas es necesario que se incluya en una columna la llave primaria de la otra. Esta columna pasara a ser la llave foránea

Reglas básicas para realizar un diagrama relacional:

1. Todo tipo de entidad se convierte en una relaciónLa tabla toma el nombre de la entidad, los atributos dentro de la tabla pasaran a ser las columnas de la tabla y el atributo identificador principal será la llave primaria de la tabla y no puede llevar un valor nulo, caso contrario los otros atributos pueden tener valor nulo, es decir pueden guardar un dato en vacío.

2. Todo tipo de relación M: M (muchos a muchos) se transforma en una relación. Las relaciones muchos a muchos se transforman en otra tabla cuya llave primaria será la concatenación (la unión) de los atributos principales de las entidades que se asocian; estos atributos en esta nueva tabla serán llaves foráneas que referencia a las respectivas tablas donde son llaves primarias y los atributos de esta relación muchos a muchos serán las columnas de la tabla nueva. Usaremos un claro ejemplo para describir este tipo de relación:

** Según el planteamiento del problema menciona que los artículos se almacenaran en bodegas y que estos podrán trasladarse de una bodega a la otra, por lo tanto deducimos que: un articulo puede estar en varias bodegas y que en una bodega pueden haber varios artículos  así identificamos que es una relación muchos (artículos) a muchos (bodegas) y viceversa por lo tanto para crear un vinculo entre las dos, crearemos una nueva tabla llamada EXISTENCIABODEGA que funcionara como tabla intermedia entre las dos tablas en la que la llave primaria de TBLARTICULO osea NODOCUEMTO y la llave primaria de TBLBODEGA pasaran como llaves FORÁNEAS y a la vez PRIMARIAS (por carecer de una llave primaria) de la tabla EXISTENCIABODEGA.

De este modo es como tendremos que identificar si hay mas relaciones de este tipo y se solucionara con la creación de una TABLA INTERMEDIA, dentro de nuestra base de datos identificaremos las necesarias:

**** TBLARTICULOBODEGA -- TBLBODEGA :::: tabla intermedia: EXISTENCIABODEGA.

**** TBLARTICULO -- TBLNIVELPRECIO:::: tabla intermedia: TBLARTICULO_PRECIO.

**** TBLARTICULOPROVEEDOR -- PROVEEDOR ::::  tabla intermedia: PROVEEDORARTICULO.


3. Para todo tipo de relación 1: M se realiza lo que se denomina propagación de llave (regla general), o se creara una nueva relación. Las relaciones uno a muchos (1: M) o uno a uno (1:1) se transforman propagando el atributo identificador principal de la entidad que tiene cardinalidad máxima 1 a la que tiene cardinalidad máxima M; caso contrario si la relación fuese 1 a 1 la propagación podría realizarse en cualquier sentido de las entidades, el atributo propagado es una llave foránea que referencia a la tabla con cardinalidad máxima de 1.

***Para ejemplificar este tipo de relación usaremos las tablas TBLCLIENTE y TBLFACTURA  y analizaremos que un cliente puede tener emitidas muchas facturas pero una factura sera emitida solo para un cliente  es decir que en una factura no pueden haber registrados mas de un cliente a la vez, por lo tanto establecemos que es una relación UNO(cliente) A MUCHO(facturas) de esto surge que: la llave primaria de TBLCLIENTE osea CLIENTE se propagara o trasladara a la tabla TBLFACTURA convirtiéndose en llave foránea en ella. De este modo si identificamos relaciones de este tipo, este sera el procedimiento y que por lo general en la tabla de destino de la llave, se identificara por las siglas FK (Foreing Key).

En los siguientes temas visualizaremos mejor las relaciones formadas entre nuestras tablas y lo que ocurre con cada una de ellas en el DIAGRAMA RELACIONAL.

Los campos marcados con PK indican aquellos que son llaves primarias. Aquí se aplica la integridad de la entidad ya que una llave primaria no puede tomar valores nulos, ya que esta permite identificar sin equivocación a las tuplas de una relación.

Los campos marcados con FK son llaves foráneas, indican aquellos campos que van a almacenar llaves primarias de otras tablas de modo que se puedan relacionar con la tabla actual. Dicho de otra forma son un conjunto de atributos de una tabla que son llave primaria en otra tabla.

Los campos marcados con <M> (mandatory) indican que es un campo al cual se le exige guarde o almacene un valor.

DIAGRAMA RELACIONAL

Para realizar el DIAGRAMA RELACIONAL de nuestra base de datos, primero tendremos que comprender como serán las formas en la cual lo expresaremos para así asimilar la forma en que funcionara y tomar las decisiones adecuadas para crear nuestra base de datos, a continuación explicaremos de manera clara los tres tipos de modelo en el que se basará nuestro diagrama.

Las siguientes imágenes son a la vez el DIAGRAMA RELACIONAL de nuestra base de datos:

MODELO CONCEPTUAL

Se trata de obtener el esquema conceptual de la base de datos a partir de la lista descriptiva de objetos y asociaciones identificadas en  la organización durante el análisis.

El  Modelador debe asegurar la representación formal de los fenómenos; es decir, realizar su Modelización.  Esta Modelización debe  conservar la  semántica  de  lo  real expresado en la lista y descripción de los objetos y asociaciones y traducirla en forma no redundante.

Es decir que este diseño es independiente del modelo de DDBB usado, del ordenador, del sistema gestor de bases de datos. Simplemente se estudia el problema y se seleccionan los elementos del mundo real que vamos a modelar. El diseño Entidad/Relación


El modelo ER es uno de los enfoques de modelización de datos que más se utiliza actualmente por su simplicidad y legibilidad. Su legibilidad se ve favorecida porque proporciona una notación diagramática muy comprensiva. Es una herramienta útil tanto para ayudar al diseñador a reflejar en un modelo conceptual los requisitos del mundo real de interés como para comunicarse con el usuario final sobre el modelo conceptual obtenido y, de este modo, poder verificar si satisface sus requisitos.



MODELO LÓGICO

Un esquema lógico es una descripción de la estructura de la base de datos en términos de las estructuras de datos que puede procesar un tipo de SGBD. El diseño lógico depende del tipo de SGBD que se vaya a utilizar, no depende del producto concreto.
El objetivo principal de este díselo es transformar el diseño conceptual en un modelo de datos determinado para un sistema de gestión de bases de datos determinado. Para lograr esto se tiene que hacer uso de la normalización.



MODELO FÍSICO

El modelo físico es un modelo que representa la realidad en la implementación y por lo tanto es dependiente de la plataforma que se use. Se utiliza para plasmar la solución a nivel físico, en el caso de una base de datos, acá se tiene que modelar de acuerdo al motor de base de datos que se use.



Por consecuencia, lo mas recomendable es que se inicie con el MODELO CONCEPTUAL del diagrama para luego seguir con el MODELO LÓGICO y luego pasar el MODELO FÍSICO, que para este punto se habrá identificado lo que cada modelo requiere.


USO DE HERRAMIENTA CASE: POWER DESIGNER

Para poder diseñar estos diagramas existe una herramienta case llamada Power Designer que es un único conjunto de herramientas de modelamiento que combina distintas técnicas estándar de modelamiento: modelamiento de aplicación a través de UML, técnicas de Modelamiento de Procesos Empresariales y técnicas tradicionales de modelamiento de base de datos.

Con esta herramienta podemos iniciar a diseñar el diagrama de nuestra base de datos desde el modelo conceptual.



Generar diagrama conceptual con Power Designer


1. Seleccionar Create Model… para iniciar un nuevo proyecto





2. Seleccionar el tipo de Modelo Conceptual Data Model y asignar nombre y click en aceptar.


En pantalla se desplegará nuestra área de trabajo:


3. Agregar una entidad (tabla)




4. En la pestaña general se debe asignar el Nombre a nuestra entidad.


5.  Seleccionar la pestaña atributos


6. Realizar del paso 3 al paso 5 con cada una de las entidades.

7. Al ingresar todas las entidades seleccionar de la paleta la opción Relationship (Relación), para agregar entre entidades.


8. Dar un click sostenido entre las entidades que se desean relacionar 


9. Dar doble click sobre la relación 


10. Asignar un nombre a la relación en la pestaña General y dar click en el botón aplicar.


11. Agregar la cardinalidad que existe entre cada una de las entidades y dar click en Aplicar




12. Realizar los mismos pasos con cada una de las entidades ingresadas



Al finalizar nuestro diagrama se vera de la siguiente manera:





Otra más de las ventajas que ofrece Power Designer es que al finalizar el diagrama de manera conceptual se puede realizar la conversión al Modelo Lógico con unos simples click.



1. En la barra de herramientas seleccionar la pestaña Tools.



2. Dentro de la lista de opciones, busquemos la opción Generate Logical Data Model…



3. Nos mostrara un cuadro de opciones, en el cual se le asignara un nombre a nuestro nuevo diagrama o se actualizara uno ya existente, luego damos click en Aplicar y Aceptar.





4. Nos mostrara mensaje de creación de nuevo diagrama.




El Diagrama Lógico quedara de la siguiente Manera



Cuando ya tengamos nuestro diagrama en el modelo Lógico entonces podemos convertirlo al Modelo Físico 



1. En la barra de herramientas seleccionar la pestaña Tools. 



2. Dentro de la lista de opciones, busquemos la opción Generate Physical Data Model…





3. Nos mostrara un cuadro de opciones, en el cual se le asignara un nombre a nuestro nuevo diagrama o se actualizara uno ya existente, ademas de eso tenemos la opción de elegir sobre que SISTEMA GESTOR DE BASE DE DATOS sera implementado luego damos click en Aplicar y Aceptar.



El diagrama Físico quedaría de la siguiente manera:




Power Designer tiene nos brinda la gran ayuda que al encontrarse en el modelo Físico nos ayuda a generar el scrip para poder generar la Base de datos. 



Que es un script? Los scripts de base de datos son archivos adicionales que contienen instrucciones Transact-SQL (T-SQL) o utilidades como SQLCMD que no forman parte de la definición del esquema de base de datos. Puede utilizar scripts de base de datos como parte del proceso de implementación (scripts anteriores y posteriores a la implementación) o pueden ser scripts de administración que se almacenan en el proyecto de base de datos. 



Durante una operación de refactorización de base de datos en un objeto de esquema, puede actualizar automáticamente cualquier script que contenga un objeto de base de datos cuyo nombre cambie como parte de esa operación. 



Proceso para generar script



1. Dar click en la pestaña Database 

2. Click en la opción Generate Database… 

3. Seleccionar el directorio en donde se guardara y asignar un nombre


El Scrip se generara a través del MODELO FÍSICO lo que significa que se creará para ser implementado directamente al Sistema Gestor de Bases de Datos sobre el que este fue creado, de lo cual se hablaremos mas adelante.

Nos muestra mensaje que se generó el archivo en la que se muestra también la dirección sobre la que se ha almacenado:




Y de esta forma se ve al abrir el archivo creado sobre el Sistema Gestor de Bases de Datos SQL SERVER 2014 del cual se hará mención.





PASO 3 INSTRUCCIONES SQL

¿Que es SQL?

Para empezar con la creación de las instrucciones SQL que conformaran la estructura de nuestra base de datos, primero debemos saber algunos conceptos claves que nos ayudaran a entender como funciona este entorno y como sera la forma en la que aplicaremos lo anterior aprendido.

Habrá que entender lo que significa SQL (Structured Query Language por sus siglas en ingles) ó Lenguaje Estructurado de Consulta en español, es un lenguaje estándar de programación para la definición, manipulación y obtención de información de una base de datos, este lenguaje esta basado en el Álgebra Relacional el la que las consultas se hacen como preguntas formuladas utilizando una serie de operadores lógicos y el uso de palabras reservadas propias de este lenguaje.

Como primer paso hay que decidir sobre que Motor de Base de Datos estará nuestras Base de Datos y cual sera la interfaz que nos permitirá conectarnos a ella, hay diferentes productos que ofrecen estos servicios como: MySQL, POSGRESQL, ORACLE DATABASE, MSQL, SQLite, etc, Pero en esta ocasión nos adentraremos a conocer parte de SQL SERVER 2014 de la compañia Microsoft.

SQL SERVER 2014
-MAGNAMENT STUDIO-

SQL SERVER esta disponible en la pagina oficial de Microsoft de manera gratuita en varias versiones, pero como mencionamos usaremos la versión 2014 aunque no es una version completa por ser gratuita ofrece lo necesario para comenzar a aprender. Aqui el Link para la descarga de SQL_SERVER_2014_EXPRESS en la que pueden seleccionar el idioma que prefieran.

Se descargará adicionalmente SQL SERVER 2014 MAGNAMENT STUDIO esta incluido en el paquete de instalación seleccionando uno de los siguentes archivos:

*    ExpressAndTools32BIT\SQLEXPRWT_x86_ESN.exe 
*    ExpressAndTools 64BIT\SQLEXPRWT_x64_ESN.exe 

dependiendo el tipo de procesador de la computadora a instalar. Descompriman y ejecuten el instalador.

SQL SERVER 2014 MAGNAMENT STUDIO es la interfaz de usuario que nos permitirá conectarnos al motor de la base de datos, en la que podremos crear nuestra base de datos y ejecutar nuestras consultas sobre ella.



Para comenzar abriremos SQL SERVER 2014 MAGNAMENT STUDIO y se nos aparecerá esta ventana:




El programa nos solicitará la contraseña del usuario, que generalmente en el proceso de instalación esta la opcion determinar una o no y el tipo de autentificación que se utilizara para acceder, hay dos tipo que son: La autentificacion de Windows (predeterminada) y la autentificacion de SQL SERVER, en nuestro caso por defecto estará sin contraseña y seleccionamos conectar.

CREACIÓN DE UNA BASE DE DATOS

Una vez accedido, se nos muestra esta pantalla:




Nos centraremos en el panel izquierdo llamado "Explorador de objetos" en la que como se muestra en la imagen:




Haremos clip derecho sobre la carpeta "Base de Datos" y elegiremos la opción "Nueva Base de Datos" y a continuación se nos presenta la siguiente pantalla:




En el campo de texto colocaremos el nombre que le queremos poner a nuestra base de datos en nuestro caso la llamaremos Facturación , por todas las demás opciones las dejaremos como están y seleccionamos OK ó ACEPTAR.

Para poder visualizar que en efecto nuestra base de datos ha sido creada haremos nuevamente clip derecho sobre la carpeta "Bases de Datos" y elegiremos "Actualizar", seguido de eso desplegaremos la carpeta "Base de Datos" del Explorador de Objetos y ahí veremos nuestra base de datos.

INSTRUCCIONES SQL

Después de haber creado nuestra base de datos, procederemos a entrar a otro tema en el que aprenderemos las sintaxis básicas para la creación de las Tablas(entidades), Columnas(atributos), llaves primarias, llaves foráneas y las relaciones entre las tablas para lo cual utilizaremos y aprenderemos algunas PALABRAS RESERVADAS propias de SQL.

Para entrar en el ambiente de SQL SERVER, escribiremos directamente nuestras instrucciones en un campo de texto propio de SQL SERVER que se conoce generalmente como una "CONSULTA" que nos ayudara en gran medida porque de ese modo nos dira si lo que hacemos esta bien o mal, nos identificara las PALABRAS RESERVADAS que escribamos en ella, y otras muchas mas utilidades.

Para agregar una consulta lo haremos de la siguiente manera: 
Utilizando SQL SERVER MAGNAMENT STUDIO, ubicaremos el botón que dice "NUEVA CONSULTA" ó "NEW QUERY" y se generara un cuadro de texto en blanco en el cual podermos comenzar:





Nota: Existe otra forma mas sencilla de crear una base de dato sin tener que utilizar el asistente de creación de MAGNAMENT STUDIO, se hará utilizando la siguiente instrucción en una consulta para luego ser ejecutada:

CREATE DATABASE nombre_basededatos;

En la que CREATE (CREAR) y DATABASE (BASE DE DATOS) son palabras reservadas propias de SQL y seguido de ellas se colocara el nombre de la base de datos que en nuestro caso como lo hicimos anteriormente sera "FACTURACION".

CREACIÓN DE UNA TABLA

Para poder crear una tabla dentro de nuestra base de datos, primero tenemos que crear la instrucción adecuada y correcta que se ejecutara para que surga efecto, para eso utilizaremos y aprenderemos las siguientes PALABRAS RESERVADAS: CREATE (CREAR) Y TABLE (TABLA) y esta sera la sintaxis basica que utilizaremos para crear una tabla:

CREATE TABLE nombre_tabla (

nombre_columna1       tipodato,
nombre_columna2       tipodato,
nombre_columna3       tipodato,
.
.
.
nombre_columna n       tipodato,
);

Se utilizara coma (,) cada vez que se termine de especificar una columna, se utilizan paréntesis (()) para especificar la estructura que tendrá la tabla, abriéndolos y cerrándolos, y por ultimo, utilizaremos punto y coma (;) para especificar que es el final de la instrucción.

Pero hay algo que no debemos olvidar, cada Entidad o Tabla deberá tener una llave primaria es decir una columna que la identificara de las otras, por lo tanto deberemos incluir en la instruccion cual de todas de las columnas debera ser la LLAVE PRIMARIA dentro de cada tabla.

Puede hacerse de diferentes maneras por ejemplo utilizando esta sintaxis:


CREATE TABLE nombre_tabla (

nombre_columna1       tipodato      not null       primary key,
nombre_columna2       tipodato,
nombre_columna3       tipodato,
.
.
.
nombre_columna n       tipodato,
);

En la que utilizamos la PALABRA RESERVADA "PRIMARY KEY" que funcionará para determinar que dicha columna sera la Llave Primaria, y la PALABRA RESERVADA "NOTNULL", recordemos que una llave primaria no debe ser un campo vacio es de estricto requisito que se ingrese un dato el esa columna, por lo tanto "NOTNULL" sirve para establecer que esa columna no debera quedar vacia cuando se ingresen datos a la tabla.

Tambien podremos utilizar esta sintaxis:


CREATE TABLE nombre_tabla (

nombre_columna1       tipodato      not null,
nombre_columna2       tipodato,
nombre_columna3       tipodato,
.
.
.
nombre_columna n       tipodato,

constraint nombre_constraint primary key (nombre_columna)
);

En esta otra opcion cambiamos un poco las cosas, siempre deberemos establecer "NOT NULL" la columna que será llave primaria, pero en este caso incluiremos un "CONSTRAINT" otra PALABRA RESERVADA la cual crea restricciones del tipo de dato que se ingresara en una tabla en este caso, para la llave primaria no se podrá ingresar otro tipo de dato que no sea el establecido en ella, de ser así, se generara un error, y seguido de ello colocamos "PRIMARY KEY" seguido del nombre de la columna que sera llave primaria. El nombre_constraint puede ser cualquiera excepto alguna de las PALABRAS RESERVADAS de SQL.

ESTABLECER UNA RELACIONES ENTRE TABLAS


Como lo que estamos haciendo es prácticamente el MODELO LÓGICO y FÍSICO de nuestra base de datos, por lo tanto debemos establecer las relaciones que tendrán cada tabla, pero esta vez lo haremos a través de instrucciones, así como lo aprendimos con los Diagramas Relacionales de nuestra base de datos en cada uno de sus modelos.

Es algo confuso pero con la practica se vuelve mas fácil de lo que parece. Lo haremos para comenzar utilizando dos tablas que se relacionen entre si de nuestra base de datos: tblFactura y tbl

cuya relación es de uno a muchos (1:n);





Utilizando el modelo lógico de nuestro diagrama relacional, como lo aprendimos anteriormente, cuando hay una relación uno a muchos (1:n) se generará un traslado de la llave primaria de la tabla debil a la tabla fuerte, es decir que la llave primaria de la tabla débil en este caso la de tblTipodocumento es "TipoDocumentoID"  por lo tanto esta llave pasara a ser LLAVE FORÁNEA en la tblFactura, y de esta forma es como se establece la relación entre las tablas, pero esto es a nivel de diagrama.

Para lograr establecer las relaciones entra las tablas se deberá hacer lo siguiente:

* CREAR LAS TABLAS

/*============================================*/
/* Tabla: TBLFACTURA                                                             */
/*============================================*/
create table TBLFACTURA (
    LINEA                                                      int                  not null,
   ARTICULOID                                           varchar(20)          null,
   TIPODOCUMENTOID                             varchar(1)           null,
   NODOCUMENTO                                    varchar(10)          null,
   COSTOTOTAL                                         float                      null,
   FECHAFACTURA                                   datetime                null,
   PRECIOUNITARIO                                 float                      null,
   STOTALIMPUESTO                                float                     null,
   CANTIDADTRANS                                 int                        null,
   MULTIPLICADOR                                   int                        null,
   DESCRIPCIONLINEAFACTRURA        varchar(255)        null,
   NOLOTE                                                   float                     null,
   STOTALCIVA                                           float                    null,
   STDESCUENTO                                       float                    null,

constraint PK_TBLFACTURA primary key (NODOCUMENTO)
);

/*==========================================*/
/* Tabla: TBLTIPODOCUMENTO                                         */
/*==========================================*/
create table TBLTIPODOCUMENTO (
   TIPODOCUMENTOID                      varchar(1)             not null,
   DESCIPCIONTIPODOCUMENTO   varchar(150)         null,
   SIGNOTRANS                                   int                          null,

constraint PK_TBLTIPODOCUMENTO primary key (TIPODOCUMENTOID)

);

Como podemos ver, en la tabla tblFactura se ha agregado una nueva columna, e que es la de TIPODOCUMENTOID, ésta hara referencia a la LLAVE PRIMARIA de la tabla TBLTIPODOCUMENTO, pero hay que tener cuidado porque aun no se convierte en llave foránea.

Para establecer que existe una relación entre las tablas a través de instrucción SQl se logrará con la siguiente sintaxis:


alter table nombre_tabla
        add constraint nombre_de_constraint foreign key ( nombre_de_la _llave_primaria)    
references Nombre_tabla_de_referencia (llave_primaria);

Iniciaando con la PALABRA RESERVADA ALTER (alterar) que nos permitirá modificar las tablas que queramos, la palabra ADD(añadir) y CONSTRAINT que significa que añadiremos un constraint en cierta tabla, FOREING KEY con la que determinamos que sera una llave FORÁNEA en la tabla y por ultimo la palabra REFERENCES con la que hacemos mención sobre la tabla de donde proviene la llave primaria.


Por lo tanto la instrucción para relacional nuestras dos tablas quedara de la siguiente manera:

alter table TBLFACTURA
        add constraint FK_TBLFACTU_RELATIONS_TBLTIPOD 
foreign key (TIPODOCUMENTOID)    
references TBLTIPODEDOCUEMENTO (TIPODOCUMENTOID);

De esta forma es como quedara establecida la relación entre las dos tablas. Esta acción se realizara para cada relación existente entre las tablas. 

Generalmente se crearan primero todas las tablas de nuestra base de datos y al final se especificara las relaciones que hay entre las tablas utilizando la estructura anterior.

Y es de esta forma como nuestras instrucciones para la creación de cada tabla de nuestra base de datos:

TABLAS DE LA BASE DE DATOS


/*=============================================*/
/* Table: EXISTENCIA_BODEGA                                               */
/*=============================================*/
create table EXISTENCIA_BODEGA (
   ARTICULOID                            varchar(20)           not null,
   BODEGAID                                int                         not null,
   EXISTENCIAMINIMA             float                       null,
   EXISTENCIAMAXIMA           float                       null,
   PUNTO_REORDEN                  float                       null,
   EXISTENCIA_ACTUAL           float                      null,
   constraint PK_EXISTENCIA_BODEGA primary key (ARTICULOID, BODEGAID)
);


/*=============================================*/
/* Tabla: PROVEEDOR                                                                 */
/*=============================================*/
create table PROVEEDOR (
   PROVEEDORID                                int                       not null,
   NOMBREPROVEEDOR                   varchar(255)       null,
   DIRECCIONPROVEEDOR               varchar(255)       null,
   CONTACTO                                       varchar(255)       null,
   OFRECECREDITO                            varchar(1)           null,
   constraint PK_PROVEEDOR primary key (PROVEEDORID)
);

/*=============================================*/
/* Tabla: TBLARTICULO_PRECIO                                              */
/*=============================================*/
create table TBLARTICULO_PRECIO (
   NIVELPRECIOID                            int                     not null,
   ARTICULOID                                  varchar(20)       not null,
   PRECIO                                            float                  null,
   MARGEN                                         float                  null,
   constraint PK_TBLARTICULO_PRECIO primary key (NIVELPRECIOID, ARTICULOID)
);

/*=============================================*/
/* Tabla: TBLBODEGA                                                                 */
/*=============================================*/
create table TBLBODEGA (
   BODEGAID                                  int                          not null,
   DESCRIPCIONBODEGA            varchar(255)         null,
   constraint PK_TBLBODEGA primary key (BODEGAID)
);

/*=============================================*/
/* Tabla: TBLCLIENTE                                                                 */
/*=============================================*/
create table TBLCLIENTE (
   NOMBRECLIENTE                        varchar(120)        not null,
   NOMBRECONTACTO                   varchar(80)          null,
   CARGO                                            varchar(30)          null,
   DIRECCION                                    varchar(255)        null,
   TELEFONO1                                   varchar(15)          null,
   TELEFONO_2                                 varchar(15)          null,
   SALDO                                            float                      null,
   LIMITEDECREDITO                      float                     null,
   USR_CREADOR                             varchar(25)          null,
   FCREACION                                   datetime               null,
   USR_MODIFICACION                  varchar(25)          null,
   FMMODIFICACION                      datetime               null,
   CLIENTE                                         varchar(20)          not null,
   constraint PK_TBLCLIENTE primary key (CLIENTE)
);

/*=============================================*/
/* Tabla: TBLFACTURA                                                               */
/*=============================================*/
create table TBLFACTURA (
   NODOCUMENTO                           varchar(10)          not null,
   CLIENTE                                          varchar(20)          not null,
   NIVELPRECIOID                            int                        not null,
   TIPODOCUMENTOID                    varchar(1)           not null,
   ASIENTODOCUMENTO                varchar(25)          null,
   DESCUENTO                                   float                     null,
   FACTURAORIGINAL                     varchar(10)          null,
   TIPOORIGINAL                               varchar(1)           null,
   TOTALIMPUESTO                          float                     null,
   TOTALFACTURA                            float                     null,
   ANULADA                                        varchar(1)           not null,
   DIRECCIONFACTURA                   varchar(255)        null,
   COBRADA                                       varchar(1)            not null,
   IMPRESA                                          varchar(1)           null,
   TOTALIVA                                       float                     null,
   TOTALCIVA                                     float                     null,
   TOTALDESCUENTO                      float                     null,
   FECHACTRLTRANS               datetime              null,
   constraint PK_TBLFACTURA primary key (NODOCUMENTO, TIPODOCUMENTOID)
);


/*=============================================*/
/* Tabla: TBLFACTURALINEA                                                    */
/*=============================================*/
create table TBLFACTURALINEA (
   LINEA                                               int                        not null,
   NODOCUMENTO                            varchar(10)         not null,
   TIPODOCUMENTOID                     varchar(1)           not null,
   ARTICULOID                                   varchar(20)          not null,
   COSTOTOTAL                                  float                     null,
   FECHAFACTURA                            float                     null,
   PRECIOUNITARIO                          float                      null,
   STOTALIMPUESTO                         float                     null,
   MULTIPLICADOR                           int                        null,
   DESCRIPCIONLINEAFACTURA   varchar(255)        null,
   NOLOTE                                            float                     null,
   STOTALCIVA                                   float                      null,
   STDESCUENTO                               float                      null,
   CANTIDADTRANS                          float                      null,
   constraint PK_TBLFACTURALINEA primary key (LINEA)
);


/*=============================================*/
/* Tabla: TBLNIVELPRECIO                                                        */
/*=============================================*/
create table TBLNIVELPRECIO (
   NIVELPRECIOID                             int                        not null,
   DESCRIPCIONPRECIO                  varchar(255)         null,
   FECHAINICIOPRECIO                   datetime                null,
   FECHAFINPRECIO                          datetime               null,
   SINVENCIMIENTO                         varchar(1)             null,
   constraint PK_TBLNIVELPRECIO primary key (NIVELPRECIOID)
);

/*=============================================*/
/* Tabla: TBLTIPODEDOCUEMENTO                                        */
/*=============================================*/
create table TBLTIPODEDOCUEMENTO (
   TIPODOCUMENTOID                      varchar(1)           not null,
   DESCRIPCIONTIPODOCUEMTO   varchar(150)       null,
   SIGNOTRANS2                                  int                  null,
   constraint PK_TBLTIPODEDOCUEMENTO primary key (TIPODOCUMENTOID)
);

/*=============================================*/
/* Tabla: TBLTRANSINVENTARIO                                             */
/*=============================================*/
create table TBLTRANSINVENTARIO (
   AUDITORIATRANS                             float                not null,
   BODEGAID                                           int                   not null,
   ARTICULOID                                       varchar(20)      not null,
   CANTIDAD_TRANS                            float                null,
   NODOUMENTOTRANS                      varchar(25)     null,
   TIPOTRANS                                          varchar(1)        null,
   COSTOTRANS                                      float                 null,
   USUARIOCTRLTRANS                       varchar(25)      null,
   FECHACTRLTRANS2                          datetime           null,
   SIGNOTRANS                                       int                    null,
   constraint PK_TBLTRANSINVENTARIO primary key (AUDITORIATRANS)
);

/*=============================================*/
/* Tabla: TBL_ARTICULOPROVEEDOR                                    */
/*=============================================*/
create table TBL_ARTICULOPROVEEDOR (
   PROVEEDORID          int                        not null,
   ARTICULOID              varchar(20)          not null,
   constraint PK_TBL_ARTICULOPROVEEDOR primary key (PROVEEDORID, ARTICULOID)
);


/*=============================================*/
/* Tabla: TBLARTICULO                                                              */
/*=============================================*/
create table TLBARTICULO (
   ARTICULOID                               varchar(20)          not null,
   DESCRIPCIONARTICULO         varchar(254)        null,
   COSTO                                          float                      null,
   LOTE                                             float                      null,
   ARTICULOCUENTA                   varchar(75)           null,
   TIPOSERVICIO                             varchar(1)            null,
   TIPOKIT                                        varchar(1)            null,
   constraint PK_TLBARTICULO primary key (ARTICULOID)
);

/*=============================================*/
/* Tabla: TBLSUCURSAL                                                             */
/*=============================================*/
create table TBLSUCURSAL (
   SUCURSALID                                float                not null,
   CLIENTE                                         varchar(20)          not null,
   DESCRIPCIONSUCURSAL          varchar(255)         null,
   DIRECCIONENTREGA                 varchar(255)         null,
   CONTACTOSUCURSAL               varchar(255)         null,
   constraint PK_TLBSUCURSAL primary key (SUCURSALID, CLIENTE)
);

ESTABLECIENDO LAS RELACIONES

Listas nuestras tablas procedemos a crear las instrucciones para establecer las relaciones entre las tablas, según el diagrama que creamos para una mejor comprención de ellas. Nos quedan de la siguiente manera:

alter table EXISTENCIA_BODEGA
   add constraint FK_EXISTENC_RELATIONS_TBLBODEG foreign key (BODEGAID)
      references TBLBODEGA (BODEGAID)
;

alter table EXISTENCIA_BODEGA
   add constraint FK_EXISTENC_RELATIONS_TLBARTIC foreign key (ARTICULOID)
      references TLBARTICULO (ARTICULOID)
;

alter table TBLARTICULO_PRECIO
   add constraint FK_TBLARTIC_RELATIONS_TLBARTIC foreign key (ARTICULOID)
      references TLBARTICULO (ARTICULOID)
;

alter table TBLARTICULO_PRECIO
   add constraint FK_TBLARTIC_RELATIONS_TBLNIVEL foreign key (NIVELPRECIOID)
      references TBLNIVELPRECIO (NIVELPRECIOID)
;

alter table TBLFACTURA
   add constraint FK_TBLFACTU_RELATIONS_TBLCLIEN foreign key (CLIENTE)
      references TBLCLIENTE (CLIENTE)
;

alter table TBLFACTURA
   add constraint FK_TBLFACTU_RELATIONS_TBLNIVEL foreign key (NIVELPRECIOID)
      references TBLNIVELPRECIO (NIVELPRECIOID)
;

alter table TBLFACTURA
   add constraint FK_TBLFACTU_RELATIONS_TBLTIPOD foreign key (TIPODOCUMENTOID)
      references TBLTIPODEDOCUEMENTO (TIPODOCUMENTOID)
;

alter table TBLFACTURALINEA
   add constraint FK_TBLFACTU_RELATIONS_TBLFACTU foreign key (NODOCUMENTO, TIPODOCUMENTOID)
      references TBLFACTURA (NODOCUMENTO, TIPODOCUMENTOID)
;

alter table TBLFACTURALINEA
   add constraint FK_TBLFACTU_RELATIONS_TLBARTIC foreign key (ARTICULOID)
      references TLBARTICULO (ARTICULOID)
;

alter table TBLTRANSINVENTARIO
   add constraint FK_TBLTRANS_RELATIONS_TLBARTIC foreign key (ARTICULOID)
      references TLBARTICULO (ARTICULOID)
;

alter table TBLTRANSINVENTARIO
   add constraint FK_TBLTRANS_RELATIONS_TBLBODEG foreign key (BODEGAID)
      references TBLBODEGA (BODEGAID)
;

alter table TBL_ARTICULOPROVEEDOR
   add constraint FK_TBL_ARTI_RELATIONS_TLBARTIC foreign key (ARTICULOID)
      references TLBARTICULO (ARTICULOID)
;

alter table TBL_ARTICULOPROVEEDOR
   add constraint FK_TBL_ARTI_RELATIONS_PROVEEDO foreign key (PROVEEDORID)
      references PROVEEDOR (PROVEEDORID)
;

alter table TBLSUCURSAL
   add constraint FK_TBLSUCUR_RELATIONS_TBLCLIEN foreign key (CLIENTE)
      references TBLCLIENTE (CLIENTE)
;

EJECUCIÓN DE INSTRUCCIONES EN SQL SERVER 2014

Muy bien, ahora que ya tenemos listas cada una de nuestras instrucciones que crearan las estructura de nuestra base de dato, procederemos a ejecutarlas en SQL SERVER 2014. 

Lo que deberemos hacer sera seleccionar la base de datos sobre la que ejecutaremos nuestra consulta y presionar el botón "EJECUTAR" o "EXECUTE" así :



Observamos en la imagen hemos seleccionado en la caja de opciones la Base de Datos FACTURACION, y si nuestras consulta no presenta errores en el proceso de ejecución, se nos mostrara un mensaje en la parte inferior que que nos indicara que se ha cargado la consulta correctamente, de lo contrario se mostraran errores que habrá que solucionarlos, normalmente en nuestro caso serán errores de sintaxis o palabras mal escritas.

Para visualizar los resultados y estar seguros que todo a salido bien, haremos lo siguiente:

*Desplegaremos la carpeta "BASES DE DATOS"
*Desplegaremos la carpeta "FACTURACION" (nuestra base de datos)
*Desplegaremos la carpeta "TABLAS"

Y se nos mostraran todas las tablas dentro de nuestra base de datos:




CREACIÓN DE INICIOS DE SESIÓN, USUARIOS Y ASIGNACIÓN DE PRIVILEGIOS

Para complementar nuestro trabajo nos restara hacer algunas acciones importantes que determinaran en gran medida la seguridad, uso y manipulación de nuestra base de datos, comencemos:

CREACIÓN DE UN INICIO DE SESIÓN

Antes que todo hay que tener en cuenta que estas instrucciones solo se podrán ejecutar con la cuenta del Administrador de la base de datos ó aquellas otras cuentas que tengan permiso de hacerlo, en nuestro caso se no permitirá hacerlo porque somos como el Administrador de la Base de Datos.

Un inicio de sesión una forma de controlar el acceso al motor de la base de datos, brindará un a un usuario seleccionado el permiso de ingresar, esto se hace a través de la Autentificación de SQL SERVER, lo cual implica también la asignación de una contraseña, este inicio de sesion se utilizara cada vez que se ejecute SQL MAGNAMENT STUDIO, como lo explicamos anteriormente, y se hará a través de la siguiente instrucción:

CREATE LOGIN nombre_login  
    WITH PASSWORD = 'contraseña';  

;

Y ejecutaremos esta instrucción a través de una consulta, independientemente de la base de datos sobre la que se haga puesto que no esta asociado directamente a la base de datos, sino mas bien a la seguridad del motor de la base de datos.

CREACIÓN DE UN USUARIO

Luego de que ya hemos creado el inicio de sesión, deberemos asociar a éste un usuario, pero hay que tener cuidado que este usuario estará asociado directamente a una base de datos, el la que mas adelante brindaremos ciertos privilegios sobre ella, para logar crear un usuario utilizaremos la siguiente instrucción:

CREATE USER nombre_user FOR LOGIN nombre_login;

Hay que tener cuidado también porque este nuevo usuario se deberá ejecutar sobre la base de datos a las que podrá acceder, y solo sera a esa, por lo tanto se ejecutara sobre la base de datos "FACTURACION" como lo explicamos anteriormente.


ASIGNACIÓN DE PRIVILEGIOS A UN USUARIO

Como parte final nos corresponde asignar o brindar ciertos permisos al usuario creado, pero antes entenderemos algunos conceptos nuevos:

Privilegio: es aquella facultad que un usuario de poder alterar o modificar datos de la base de datos.

Estos son algunos de los privilegios que le proveeremos a nuestro nuevo usuario que son a la vez PALABRAS RESERVADAS DE SQL:

* Select-- permite al usuario seleccionar y visualizar datos de las tablas de una base de datos.

* Insert-- permite al usuario insertar datos a las tablas de una base de datos.

* Update-- permite al usuario hacer modificaciones sobre los datos de las tablas de una base de datos.

* Delete -- permite al usuario eliminar datos de las tablas de una base de datos.

Para poder asignar uno de estos privilegios a el usuario, haremos uso de la siguiente instrucción:

GRANT nombre_privilegio ON nombre_tabla TO nombre_user;

En donde, PALABRA RESERVADA GRANT es utilizada para para "conceder" un privilegio al usuario, ON se utiliza para especificar sobre que tabla podrá ejecutar dicho privilegio y por ultimo TO para especificar a que usuario se le concederá.

Aquí se representan las instrucciones para la creacion de un INICIO DE SESIÓ, un USUARIO y la asignación de PRIVILEGIOS sobre nuestra base de datos FACTURACION:

-- CREACION DE UN INICIO DE SESION--
CREATE LOGIN MAURICIO  
    WITH PASSWORD = '1234';  
;

-- CREACION DE UN USUARIO--
CREATE USER MAURICIO FOR LOGIN MAURICIO;  
;

/*ASIGNACION DE PRIVILEGIOS*/
GRANT insert ON TBLBODEGA TO MAURICIO;
GRANT SELECT ON TBLBODEGA TO MAURICIO;
GRANT DELETE ON TBLBODEGA TO MAURICIO;
GRANT UPDATE ON TBLBODEGA TO MAURICIO;

GRANT INSERT ON PROVEEDOR TO MAURICIO;
GRANT DELETE ON PROVEEDOR TO MAURICIO;
GRANT SELECT ON PROVEEDOR TO MAURICIO;
GRANT UPDATE ON TBLBODEGA TO MAURICIO;

GRANT INSERT ON TBLCLIENTE TO MAURICIO;
GRANT DELETE ON TBLCLIENTE TO MAURICIO;
GRANT SELECT ON TBLCLIENTE TO MAURICIO;
GRANT UPDATE ON TBLCLIENTE TO MAURICIO;

GRANT INSERT ON TBLFACTURA TO MAURICIO;
GRANT DELETE ON TBLFACTURA TO MAURICIO;
GRANT SELECT ON TBLFACTURA TO MAURICIO;

GRANT UPDATE ON TBLFACTURA TO MAURICIO;

Así quedara reflejado los resultados de estas instrucciones:



Como podemos notar ya hemos ingresado al nuevo usuario creado a través del nuevo inicio de sesión, y localizamos que las unicas tablas que le aparecerán asignadas al nuevo usuario, que son las únicas que podrá manipular.

ASIGNACIÓN ROLES A UN USUARIO

Generalmente un rol esta definido como un conjunto determinado de privilegios, es decir es como un paquete de privilegios que se le podrán asignar a un determinado usuario, de manera predeterminada, SQL SERVER trae definido ciertos roles que podremos utilizar, aunque posteriormente podremos crear y modificar nuestros propios roles, pero en este ocasión, aprenderemos a asignar uno de los roles que SQL SERVER tiene consigo:

ALTER SERVER ROLE [sysadmin] ADD MEMBER [MAURICIO]
;

El rol SYSADMIN Se le concede con la opción GRANT: CONTROL SERVER es decir control total sobre el servidor.

ALTER SERVER ROLE [serveradmin] ADD MEMBER [MAURICIO]

;

El rol SERVERADMIN Se le conceden: ALTER ANY ENDPOINT, ALTER RESOURCES, ALTER SERVER STATE, ALTER SETTINGS, SHUTDOWN, VIEW SERVER STATE  al usuario MAURICIO.

CREACIÓN DE INDICES

Los índices son objetos de base de datos diseñados para mejorar el rendimiento de las consultas. 
Un índice en SQL Server asiste al motor de base de datos en la ubicación de los registros, tal como un índice en un libro ayuda a ubicar información rápidamente. Sin índices, una consulta deberá buscar en todos los registros de la tabla en orden a encontrar coincidencias. esta es la instruccion que nos ayudara a crear un indice para cada tabla y de ese modo mejorar este aspecto:


create index TBLARTICULO_ARTICULOPRECIO_FK on TBLARTICULO_PRECIO (ARTICULOID ASC);



En donde Index hace referencia a indice seguido del nombre que se le dará al indice y sobre la tabla en la que se creará y entre paréntesis la columna que se utilizara como indice y el ASC significa que sera de forma ascendente. Estos son otros indices sobre las tablas de nuestra base de datos:


create index FACTURA_TIPODOCUMENTO_FK on TBLFACTURA (TIPODOCUMENTOID ASC);

create index CLIENTE_FACTURA_FK on TBLFACTURA (CLIENTE ASC);

create index NIVELPRECIO_FACTURA_FK on TBLFACTURA (NIVELPRECIOID ASC);

create index FACTURA_FACTURALINEA_FK on TBLFACTURALINEA (TIPODOCUMENTOID ASC,
  NODOCUMENTO ASC);

create index ARTICULO_FACTURALINEA_FK on TBLFACTURALINEA (ARTICULOID ASC);

create nonclustered index CLIENTE_SUCURSAL_FK on TBLSUCURSALES (CLIENTE ASC);

De esta manera es como damos por finalizado nuestro sencillo curso de creación de una base de datos. Tienen la opción de copiar las Instrucciones expuestas en este blog para poder comprobar mejor los resultados.