Ist das Präfix ST_ für Funktionen geeignet, die nicht in SQL / MM Teil 3 enthalten sind?

12

Ich habe in dieser Github-Ausgabe einen Thread über die Geodatenerweiterung für Presto gelesen , in dem eine Funktion line_locate_pointeingeführt wurde. Es basiert auf der ST_LineLocatePointFunktion von PostGIS , die einen Gleitkommawert zurückgibt, der den Bruch entlang einer Linie des nächstgelegenen Punkts auf dieser Linie zu einer bestimmten Position darstellt.

Es wurde die Frage aufgeworfen, warum es benannt wurde line_locate_pointund nicht ST_LineLocatePointwie die PostGIS-Version. Die Antwort war, dass diese Funktion im SQL / MM Part 3-Standard nicht vorhanden ist und daher nicht mit beginnen sollte ST_.

Wenn ich den Standard schnell durchlese, sehe ich keine Kommentare zur Behandlung von Fällen, in denen Sie Ihrer Datenbank eine räumliche Funktion hinzufügen, die nicht im Standard enthalten ist. Entspricht das ST_Präfix dem Gedanken , räumliche Funktionen von nicht-räumlichen Funktionen zu unterscheiden (wie dies bei PostGIS der Fall zu sein scheint), oder soll es angeben, dass die Funktion einer äquivalenten Funktion in SQL / MM Teil 3 entspricht?

Mit Blick auf den aktuellen Stand der API von Presto muss ich sagen, dass der letztgenannte Ansatz weniger sauber aussieht und einige Verwirrung darüber hervorruft, warum die Namen nicht konsistent sind, aber dies könnte möglicherweise durch einen einfachen Hinweis oben behoben werden.

Meine Frage ist also, ob es einen Aspekt des Standards gibt, den ich übersehen habe, der Erweiterungen über den definierten Satz von räumlichen Objekten hinaus zulässt, oder ob dies alternativ ausdrücklich durch eine schriftliche oder ungeschriebene Regel der folgenden Standards verboten ist .

Brideau
quelle
Ich denke, es ist eine faire Frage, aber im Wesentlichen kommt es auf eine Ansichtssache an. Ich erwarte, dass alle Funktionen, die offensichtlich räumlich sind, dh auf einem Vektor, einem Raster, einer Topologie, einer 3D-Oberfläche usw. ausgeführt werden, das Präfix ST_ haben. Es war mir nie in den Sinn gekommen zu fragen, ob dies eine angemessene Verwendung sei, je nachdem, ob es sich um eine Spezifikation handelt oder nicht. Während Interoperabilität wichtig und wünschenswert ist, möchte ich Postgis sicherlich nicht davon abhalten, nur Funktionen in der SQL / MM-Spezifikation zu implementieren. Und ich denke, die Verwendung eines anderen Präfixes würde viel Verwirrung stiften.
John Powell
Ich verstehe nicht, warum meine Frage nur als "meinungsbasiert" zurückgestellt wurde. Meine Frage ist ausdrücklich darüber , ob es ist Meinung basierte, oder wenn es ein Aspekt der Norm ist ich mit Blick auf bin , das macht diese Entscheidung auf Fakten basierenden.
Brideau
Entschuldigung, ich habe Ihre Frage gerade noch einmal gelesen und es gibt tatsächlich eine klare, nicht meinungsbasierte Frage. Mein 2c ist, dass, wenn es explizit räumlich ist, es ein ST_ erhält, unabhängig davon, ob es in den Standards ist oder nicht. Ich habe eine Wiederaufnahmeabstimmung abgegeben.
John Powell
Meiner Meinung nach ist es meinungsbasiert. Der SQL / MM-Standard kann es Entwicklern nicht verweigern, eigene Funktionen mit dem Präfix ST_ zu erstellen, selbst nicht-räumliche Funktionen. Entwickler können sich jedoch dafür entscheiden, es auf eine andere Weise zu tun. Zum Vergleich: SpatiaLite verfügt über viele räumliche, aber nicht SQL / MM-Funktionen mit ST_-Synonymen, andere ohne gaia-gis.it/gaia-sins/spatialite-sql-latest.html .
user30184
Ob SQL / MM einen Entwickler zu etwas zwingen kann oder nicht, ist nicht die Frage, die ich stelle. Ich frage, was der Standard selbst empfiehlt. Der Standard hat eine Länge von 1500 Seiten und ich habe nicht jede Zeile gelesen. Deshalb frage ich die Community hier - einige von ihnen helfen beim Schreiben des Standards -, was empfohlen wird oder ob diese Entscheidungen aufgeschoben werden ein anderer Standard oder ausdrücklich entschieden, dies nicht zu adressieren. Dies sind faktenbasierte Anfragen.
Brideau

Antworten:

1

Die OpenSpatial-Spezifikation sagt zahlreiche Dinge darüber aus,

Bei der Integration dieses SQL mit dem von SQL / MM sollte das Typnamenpräfix " ST_" entsprechend verwendet werden.

Und,

Klassennamen in SQL / MM tragen ein " ST_" Präfix. Dies ist optional, und Implementierungen können sich dafür entscheiden, dieses Präfix zu löschen, wie dies an verschiedenen Stellen in dieser Norm geschehen ist.

Aus diesem Komitee Entwurf ISO / IEC CD13249-3 ed 5

Dieser Teil von ISO / IEC 13249 verwendet das Präfix ST_für benutzerdefinierte Typ-, Attribut-, SQL-Routinetabellen- und Ansichtsnamen. Dieser Teil von ISO / IEC 13249 verwendet das Präfix ' ST_Private' für Namen bestimmter Attribute. Die Verwendung von " ST_Private" gibt an, dass das Attribut nicht für die öffentliche Verwendung bestimmt ist.

Also hier ist was wir haben,

  • SQL / MM schlägt vor, das Präfix zu verwenden.
  • SQL / MM sagt, dass das Präfix jedoch optional ist.
  • ISO verwendet auch das ST_Präfix.

Ich würde das sagen,

  • Die Verwendung von ST_sollte als nicht reservierte Schlüsselwörter für Endbenutzer betrachtet werden. Es gibt wirklich keinen Grund, Endbenutzerfunktionen mit diesem Präfix zu erstellen. Du bist besser dran, wenn du nur benutzt STx_. Wir kennen mindestens zwei Stellen, die mit diesem Präfix Vorschläge (OpenSpatial) SQL / MM und ISO veröffentlicht haben. Darüber hinaus verschmutzen viele RDBMS-Symbole mit diesem Präfix.

Es mag mehr in der Geschichte geben, aber ich kann keine aktuelleren Informationen dazu finden.

Evan Carroll
quelle