Puede utilizar SQL para crear una vista en las tablas y clases de entidad de una geodatabase corporativa para restringir qué columnas o registros están disponibles para los usuarios de vistas, o bien definir una vista para unir información de dos tablas o una clase de entidad y una tabla. Al incluir la columna espacial en la definición de la vista, los usuarios de la vista pueden visualizar las entidades de un mapa en un cliente de ArcGIS Desktop.
Los ejemplos de este tema muestran cómo crear vistas en una base de datos de IBM Db2. Una vista restringe el acceso del usuario a columnas concretas. La otra vista presenta contenido de dos tablas distintas. Los ejemplos se basan en tablas con las siguientes definiciones:
Definición de tabla para empleados
CREATE TABLE employees(
emp_id integer not null,
name varchar(32),
department smallint not null,
hire_date date not null
);
Definición de tabla para regiones
CREATE TABLE regions( objectid integer not null, emp_id integer not null, reg_id integer not null, rname varchar(32), region st_geometry
);
Otorgar privilegios en las tablas
Si el usuario que crea la vista no es el propietario de la tabla o las tablas en las que se basa la vista, el propietario de la tabla debe otorgar al creador de la vista como mínimo el privilegio de selección en las tablas.
En este ejemplo, las tablas en las que se basan las vistas (empleados y regiones) son propiedad del usuario gdb. El usuario que crea las vistas es el usuario rocket.
db2 => connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
db2 => GRANT SELECT
ON employees
TO USER rocket;
db2 => GRANT SELECT
ON regions
TO USER rocket;
Crear una vista para restringir el acceso
En este ejemplo, el usuario rocket crea una vista (view_dept_201) en la tabla de empleados para restringir el acceso solo a aquellas filas en las que el departamento es 201:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => CREATE VIEW view_dept_201
AS SELECT emp_id, name, department, hire_date
FROM gdb.employees
WHERE department = 201;
Crear una vista para unir dos tablas
En este ejemplo, la vista —emp_regions_view— une una tabla espacial (clase de entidad) a una tabla no espacial basada en la columna emp_id. La vista incluye el ObjectID, la columna espacial (region) y el nombre de la región (rname) de la clase de entidad de regiones junto con el nombre del empleado y el Id. de la tabla de empleados.
connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
CREATE VIEW emp_regions_view
AS SELECT (e.emp_name,e.emp_id,r.objectid,r.rname,r.region)
FROM employees e, regions r
WHERE e.emp_id = r.emp_id;
Otorgar privilegios en las vistas
Puede otorgar privilegios en las vistas a usuarios específicos sin tener que otorgarle a estos usuarios acceso a las tablas base (empleados y regiones). En este ejemplo, se otorga al usuario dispatch_mgr privilegios seleccionados para ambas vistas:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => GRANT SELECT
ON rocket.view_dept_201
TO USER dispatch_mgr;
db2 => GRANT SELECT
ON rocket.emp_region_view
TO USER dispatch_mgr;
El usuario dispatch_mgr puede acceder ahora a view_dept_201 para ver registros de empleados de todos los empleados del departamento 201 y acceder a emp_region_view desde una conexión de base de datos en ArcMap o ArcGIS Pro para ver todas las regiones. Cuando dispatch_mgr consulta una región en la vista, ArcGIS devuelve el nombre de la región y el nombre y el Id. de todos los empleados de dicha región.