¿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.
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
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:
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:
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
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,
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:
.
.
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_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:
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.
.
.
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_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:
.
.
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.
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.
Muy buen trabajo amigo..
ResponderBorrarExcelente Información, gracias por compartirlo
ResponderBorrar