Projet 03

Bases de Données Spatiales

Conception et modélisation de bases de données géographiques relationnelles. Schémas conceptuels UML, modèles relationnels avec clés primaires et étrangères, et requêtes SQL spatiales avec PostGIS.

SQL PostGIS UML PostgreSQL MCD

01 — Schéma Conceptuel de Données (MCD)

Le schéma conceptuel UML représente les entités géographiques et leurs relations. Chaque entité possède un attribut geometrie: Geometry qui stocke la donnée spatiale (point, ligne, polygone) dans PostGIS.

Schéma conceptuel UML de la base de données spatiale

Fig. 1 — Schéma conceptuel UML : entités Rivière, Commune, Parcelle, Bâtiment avec héritage et associations spatiales

🔗 Relations clés

Riviere est_traversee_par Commune
Commune estComposeDe Parcelle (1..*)
Parcelle ← ParcelleConstructible
Parcelle ← ParcelleAgricole
Batiment estSitueSur ParcelleConstructible

📐 Types de géométries

GEOM Riviere MultiLineString
GEOM Commune Polygon
GEOM Parcelle Polygon
GEOM Batiment Polygon

02 — Modèle Logique des Données (MLD)

Le modèle relationnel traduit le schéma conceptuel en tables SQL. Les clés primaires (PK) identifient chaque enregistrement de façon unique, les clés étrangères (FK) assurent l'intégrité référentielle entre les tables.

Schéma relationnel de la base de données

Fig. 2 — Modèle logique des données : tables, clés primaires, clés étrangères et géométries

PK Clé primaire
FK Clé étrangère
GEO Géométrie spatiale

Departement

PK NomD string
GEO the_geom Polygon
FK id_region → Region

Commune

PK NUMINSEE int
nomCom string
GEO the_geom Polygon
FK NomD → Departement

Parcelle

PK numCad int
typeculture string
COS float
GEO the_geom Polygon
FK NUMINSEE → Commune

Riviere

PK NumR int
Nom string
GEO the_geom MultiLineString

Est_traversee_par

PK FK NUMINSEE → Commune
PK FK NumR → Riviere

03 — Requêtes SQL Spatiales

Exemples de requêtes SQL utilisant les fonctions spatiales de PostGIS pour interroger et analyser les données géographiques.

Communes traversées par une rivière spécifique (jointure spatiale avec ST_Intersects)

SELECT DISTINCT(c.nomCom)
FROM Commune c, Riviere r
WHERE ST_INTERSECTS(c.the_geom, r.the_geom)
  AND r.Nom = 'Le Lez';

Communes d'un département donné (jointure attributaire)

SELECT c.NomCom
FROM Departement d, Commune c
WHERE d.NomD = 'Languedoc-R';

Parcelles viticoles d'une commune (filtre attributaire)

SELECT numCad
FROM Parcelle
WHERE NomCom = 'PradesLeLez'
  AND typeculture = 'viticole';

Communes de l'Hérault voisines de Saint-Mathieu (ST_Touches = partage une frontière)

SELECT c2.NUMINSEE
FROM Commune c1, Commune c2, Departement d
WHERE d.nomD = 'Herault'
  AND c1.NomCom = 'SaintMathieu'
  AND ST_TOUCHES(c1.the_geom, c2.the_geom); -- partage une frontière commune

Hébergé sur Codeberg • 100% Open Source

← Retour au portfolio