Vous pouvez utiliser SQL pour créer une vue sur des tables et des classes d’entités dans une géodatabase d’entreprise afin de restreindre les colonnes et les enregistrements disponibles pour l’affichage des utilisateurs ou définir une vue pour joindre les informations provenant de deux tables ou d’une classe d’entités et d’une table. Lorsque vous incluez la colonne spatiale dans la définition de la vue, les utilisateurs de la vue peuvent visualiser les entités dans une carte dans un client ArcGIS Desktop.
Les exemples de cette rubrique présentent comment créer des vues dans une base de données IBM Db2. Une vue limite l'accès utilisateur aux colonnes spécifiques. L’autre vue présente le contenu de deux tables différentes. Les exemples sont basés sur les tables avec les définitions suivantes :
Définition de table pour les employés
CREATE TABLE employees(
emp_id integer not null,
name varchar(32),
department smallint not null,
hire_date date not null
);
Définition de table pour les régions
CREATE TABLE regions( objectid integer not null, emp_id integer not null, reg_id integer not null, rname varchar(32), region st_geometry
);
Accorder des privilèges sur les tables
Si l’utilisateur qui crée la vue n’est pas le propriétaire de la table ou des tables sur lesquelles la vue repose, le propriétaire des tables doit au moins accorder au créateur de la vue les privilèges nécessaires pour réaliser des sélections dans les tables.
Dans cet exemple, les tables sur lesquelles reposent les vues (employés et régions) sont la propriété de l’utilisateur gdb. L’utilisateur qui crée les vues est l’utilisateur 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;
Créer une vue pour limiter l’accès
Dans cet exemple, l’utilisateur rocket crée une vue (view_dept_201) sur la table des employés afin de limiter l’accès aux seules lignes où le département a la valeur 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;
Créer une vue pour joindre deux tables
Dans cet exemple, la vue emp_regions_view joint une table spatiale (classe d’entités) à une table non spatiale en fonction de la colonne emp_id. Cette vue inclut l’ObjectID, la colonne spatiale (region) et le nom de la région (rname) de la classe d’entités regions, ainsi que le nom et l’ID des employés issus de la table employees.
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;
Accorder des privilèges sur les vues
Vous pouvez accorder des privilèges sur les vues à des utilisateurs spécifiques sans devoir leur accorder l’accès aux tables de base (employees et regions). Dans cet exemple, les privilèges SELECT sont accordés à l’utilisateur dispatch_mgr sur les deux vues :
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;
L’utilisateur dispatch_mgr peut désormais accéder à view_dept_201 pour visualiser les enregistrements des employés de tous les employés du département 201, ainsi qu’à emp_region_view à partir d’une connexion à une base de données dans ArcMap ou ArcGIS Pro pour afficher toutes les régions. Lorsque dispatch_mgr interroge une région de la vue, ArcGIS renvoie le nom de la région, ainsi que le nom et l’ID de tous les employés de cette région.