Czy przedrostek ST_ jest odpowiedni dla funkcji nieuwzględnionych w części 3 SQL / MM?

12

Czytałem wątek o rozszerzeniu geoprzestrzennym dla Presto w tym numerze Github , w którym wprowadzono funkcję line_locate_point. Został on oparty na ST_LineLocatePointfunkcji PostGIS , która zwraca liczbę zmiennoprzecinkową reprezentującą ułamek wzdłuż linii najbliższego punktu na tej linii do danej lokalizacji.

Pojawiło się pytanie, dlaczego została nazwana, line_locate_pointa nie ST_LineLocatePointjak wersja PostGIS. Odpowiedź była taka, że ​​ta funkcja nie istnieje w standardzie SQL / MM część 3, więc nie powinna zaczynać ST_.

Czytając szybko ten standard, nie widzę żadnych komentarzy na temat obsługi przypadków, w których wprowadzasz do swojej bazy danych funkcję przestrzenną, która nie jest w standardzie. Czy duch ST_przedrostka odróżniającego funkcje przestrzenne od funkcji nieprzestrzennych (jak wydaje się tak w przypadku PostGIS), czy może wskazywać, że funkcja jest zgodna z równoważną funkcją w części 3 SQL / MM?

Patrząc na obecny stan interfejsu API Presto , muszę powiedzieć, że to drugie podejście wygląda mniej czysto i wprowadza pewne zamieszanie, dlaczego nazwy nie są spójne, ale być może można to rozwiązać za pomocą prostej notatki na górze.

Moje pytanie brzmi zatem, czy istnieje jakiś aspekt standardu, który pomijam, który pozwala na rozszerzenie go poza zdefiniowany zestaw obiektów przestrzennych, lub alternatywnie, czy jest to wyraźnie zabronione przez jakąś pisemną lub niepisaną zasadę przestrzegania standardów .

Brideau
źródło
Myślę, że to uczciwe pytanie, ale zasadniczo sprowadza się do kwestii opinii. Oczekuję, że wszystkie funkcje, które są wyraźnie przestrzenne, tj. Działają na wektorze, rastrze, topologii, powierzchni 3D itp., Mają prefiks ST_. Nigdy nie zastanawiałem się, czy jest to właściwe użycie w zależności od tego, czy było w specyfikacji, czy nie. Chociaż interoperacyjność jest ważna i pożądana, z pewnością nie chciałbym, aby Postgis był powstrzymywany tylko przez implementację funkcji w specyfikacji SQL / MM. I myślę, że użycie innego prefiksu spowodowałoby wiele nieporozumień.
John Powell
Nie rozumiem, dlaczego moje pytanie zostało właśnie wstrzymane z powodu „oparcia się na opiniach”. Moje pytanie dotyczy jednoznacznie tego, czy jest oparte na opiniach, czy też istnieje jakiś aspekt standardu, który przeoczam, co sprawia, że ​​ta decyzja jest oparta na faktach.
Brideau
Przepraszam, właśnie ponownie przeczytałem pańskie pytanie i rzeczywiście istnieje jasne, nieoparte na opiniach pytanie. Mój 2c jest taki, że jeśli jest wyraźnie przestrzenny, otrzymuje ST_, niezależnie od tego, czy jest w standardach, czy nie. Głosowałem ponownie.
John Powell,
Moim zdaniem opiera się na opiniach. Standard SQL / MM nie może zabronić programistom tworzenia własnych funkcji z prefiksem ST_, jeśli chcą, nawet funkcji nieprzestrzennych. Jednak programiści mogą postanowić zrobić to w inny sposób. Dla porównania SpatiaLite ma wiele funkcji przestrzennych, ale nie SQL / MM, które mają synonimy ST_, niektóre inne nie mają gaia-gis.it/gaia-sins/spatialite-sql-latest.html .
user30184
Pytanie, czy SQL / MM może zmusić programistę do zrobienia czegoś, czy nie, nie jest pytaniem. Pytam o to, co sam standard zaleca. Standard ma 1500 stron i nie przeczytałem wszystkich jego wierszy, więc pytam społeczność tutaj - niektórzy z nich pomagają go napisać i powiązane standardy - co jest zalecane, a może czy odracza te decyzje inny standard lub wyraźnie postanowił nie zajmować się tym. Są to żądania oparte na faktach.
Brideau

Odpowiedzi:

1

Specyfikacja OpenSpatial mówi o tym wiele rzeczy,

Podczas integracji SQL z SQL / MM ST_należy odpowiednio zastosować przedrostek nazwy typu „ ”.

I,

Nazwy klas w SQL / MM mają ST_przedrostek „ ”. Jest to opcjonalne i implementacje mogą zdecydować się na upuszczenie tego prefiksu, jak to zostało zrobione w różnych miejscach tego standardu.

Z tego komitetu Projekt ISO / IEC CD13249-3 ed 5

W tej części ISO / IEC 13249 użyto prefiksu ST_dla typu zdefiniowanego przez użytkownika, atrybutu, wywoływanej SQL instrukcji rutynowej i nazw widoków. Ta część ISO / IEC 13249 używa przedrostka „ ST_Private” dla nazw niektórych atrybutów. Użycie „ ST_Private” oznacza, że ​​atrybut nie jest przeznaczony do użytku publicznego.

Oto co mamy,

  • SQL / MM sugeruje użycie przedrostka.
  • SQL / MM mówi, że prefiks jest jednak opcjonalny.
  • ISO również używa ST_przedrostka ..

Powiedziałbym to

  • Użycie ST_należy traktować jako niezastrzeżone słowa kluczowe dla użytkowników końcowych. Naprawdę nie ma powodu, aby tworzyć funkcje użytkownika końcowego z tym prefiksem. Lepiej po prostu użyj STx_. Wiemy o co najmniej dwóch organach, które opublikowały z tymi sugestiami prefiksów (OpenSpatial) SQL / MM i ISO. Ponadto wiele symboli RDBMS zanieczyszcza ten prefiks.

W historii może być coś więcej, ale nie mogę znaleźć więcej współczesnych informacji na ten temat.

Evan Carroll
źródło