25-05-2015, 06:45 PM
Oui, MySQL propose l'extension OpenGIS, mais non, apparemment, pas de 3D chez eux (et comme je risque de virer à de la 4D après... ^^). L'avantage des fonctions géométriques est certain pour des points/formes, pour des vecteurs, c'est plus délicat: un vecteur est-il dans un polygone, c'est une question étrange.
Oui, la 3e solution me semble aussi un peu lourde pour rien (si les dimensions pour un même vecteur diffèrent, il doit y avoir un soucis de conception!).
En revanche, cela m'a aiguillé sur une autre alternative: stocker le vecteur dans une table à part, avec 1 colonne par coordonnée.
L'intérêt est alors de dépolluer la table utilisatrice, et d'éviter de la répétition de code: si je dois créer une colonne par dimension pour chaque vecteur (*_x, *_y, *_z), cela finit par faire beaucoup. Centraliser tous les vecteurs 3d dans une table est alors plus pratique (et les tables utilisatrices n'ont plus qu'une colonne, l'id du vecteur). Cela rajoute une jointure, mais le coût machine me semble négligeable face au gain humain (d'autant que sémantiquement, c'est plus proche de ce qu'on cherche à faire, j'en veux pour preuve qu'un changement de FLOAT vers DOUBLE sera très simple et n'impactera qu'une seule table).
Oui, la 3e solution me semble aussi un peu lourde pour rien (si les dimensions pour un même vecteur diffèrent, il doit y avoir un soucis de conception!).
En revanche, cela m'a aiguillé sur une autre alternative: stocker le vecteur dans une table à part, avec 1 colonne par coordonnée.
L'intérêt est alors de dépolluer la table utilisatrice, et d'éviter de la répétition de code: si je dois créer une colonne par dimension pour chaque vecteur (*_x, *_y, *_z), cela finit par faire beaucoup. Centraliser tous les vecteurs 3d dans une table est alors plus pratique (et les tables utilisatrices n'ont plus qu'une colonne, l'id du vecteur). Cela rajoute une jointure, mais le coût machine me semble négligeable face au gain humain (d'autant que sémantiquement, c'est plus proche de ce qu'on cherche à faire, j'en veux pour preuve qu'un changement de FLOAT vers DOUBLE sera très simple et n'impactera qu'une seule table).