Apakah awalan ST_ sesuai untuk fungsi yang tidak termasuk dalam SQL / MM Bagian 3?

12

Saya membaca utas tentang ekstensi geospasial untuk Presto dalam masalah Github ini , di mana sebuah fungsi, line_locate_pointdiperkenalkan. Itu didasarkan pada ST_LineLocatePointfungsi PostGIS , yang mengembalikan pelampung mewakili fraksi sepanjang garis titik terdekat pada garis itu ke lokasi tertentu.

Pertanyaannya adalah mengapa ini dinamai line_locate_pointdan tidak ST_LineLocatePointseperti versi PostGIS. Responsnya adalah bahwa fungsi ini tidak ada dalam standar SQL / MM Bagian 3, dan karenanya tidak boleh dimulai dengan ST_.

Membaca dengan cepat melalui standar, saya tidak melihat komentar tentang bagaimana menangani kasus di mana Anda memperkenalkan fungsi spasial ke database Anda yang tidak ada dalam standar. Apakah semangat ST_awalan untuk membedakan fungsi spasial dari fungsi non-spasial (seperti yang terlihat pada PostGIS), atau apakah ini menunjukkan bahwa fungsi tersebut sesuai dengan fungsi yang setara dalam SQL / MM Bagian 3?

Melihat keadaan API Presto saat ini , saya harus mengatakan bahwa pendekatan yang terakhir terlihat kurang bersih dan menimbulkan beberapa kebingungan mengapa nama-nama itu tidak konsisten, tetapi mungkin ini dapat diatasi dengan catatan sederhana di bagian atas.

Pertanyaan saya, kemudian, adalah apakah ada beberapa aspek dari standar yang saya abaikan yang memungkinkan untuk ekstensi di luar set objek spasial yang ditentukan, atau sebagai alternatif, jika ini secara tegas dilarang oleh aturan tertulis atau tidak tertulis dari mengikuti standar .

Brideau
sumber
Saya pikir ini adalah pertanyaan yang adil, tetapi pada dasarnya bermuara pada pendapat. Saya berharap semua fungsi yang nyata spasial, yaitu, mereka beroperasi pada vektor, raster, topologi, permukaan 3D, dll, untuk mengambil awalan ST_. Tidak pernah terpikir oleh saya untuk bertanya apakah ini penggunaan yang tepat berdasarkan apakah itu dalam spesifikasi atau tidak. Sementara interoperabilitas penting dan diinginkan, saya pasti tidak ingin Postgis ditahan dengan hanya mengimplementasikan fungsi-fungsi dalam SQL / MM spec. Dan saya pikir menggunakan beberapa awalan lain akan menyebabkan banyak kebingungan.
John Powell
Saya tidak mengerti mengapa pertanyaan saya hanya ditunda karena "berdasarkan pendapat." Pertanyaan saya adalah eksplisit tentang apakah itu adalah pendapat berbasis, atau jika ada beberapa aspek dari standar aku menghadap yang membuat keputusan ini berdasarkan fakta-.
Brideau
Permintaan maaf, saya baru saja membaca kembali pertanyaan Anda dan memang ada pertanyaan yang jelas dan tidak berdasarkan pendapat di sana. 2c saya adalah bahwa jika secara eksplisit spasial, ia mendapat ST_, terlepas dari apakah itu dalam standar atau tidak. Saya telah memberikan suara pembukaan kembali.
John Powell
Bagi saya, itu berdasarkan opini. Standar SQL / MM tidak dapat menyangkal pengembang membuat fungsi mereka sendiri dengan awalan ST_ jika mereka mau, bahkan fungsi non-spasial. Namun, pengembang mungkin memutuskan untuk melakukannya dengan cara lain. Sebagai perbandingan, SpatiaLite memiliki banyak fungsi spasial tetapi non-SQL / MM yang memiliki sinonim ST_, beberapa lainnya yang tidak memiliki gaia-gis.it/gaia-sins/spatialite-sql-latest.html .
user30184
Apakah SQL / MM dapat atau tidak bisa memaksa pengembang untuk melakukan sesuatu bukanlah pertanyaan yang saya tanyakan. Saya bertanya tentang apa yang direkomendasikan oleh standar itu sendiri. Standarnya adalah 1.500 halaman, dan saya belum membaca setiap barisnya, jadi saya bertanya kepada komunitas di sini - beberapa di antaranya membantu untuk menulisnya dan standar terkait - apa yang direkomendasikan, atau mungkin apakah itu bertentangan dengan keputusan ini untuk standar lain atau secara eksplisit memilih untuk tidak membahas ini. Ini adalah permintaan berdasarkan fakta.
Brideau

Jawaban:

1

Spesifikasi OpenSpatial mengatakan banyak hal tentang ini,

Saat mengintegrasikan SQL ini dengan SQL / MM, awalan tipe-nama " ST_" harus digunakan sebagaimana mestinya.

Dan,

Nama kelas dalam SQL / MM membawa " ST_" awalan. Ini adalah opsional dan implementasi dapat memilih untuk melepaskan awalan ini seperti yang telah dilakukan di berbagai tempat dalam standar ini.

Dari Draft Komite ini ISO / IEC CD13249-3 ed 5

Bagian dari ISO / IEC 13249 ini menggunakan awalan ST_untuk tipe, atribut, SQL-invoked routinetable dan nama tampilan yang ditentukan pengguna. Bagian ISO / IEC 13249 ini menggunakan awalan ' ST_Private' untuk nama atribut tertentu. Penggunaan ' ST_Private' menunjukkan bahwa atribut bukan untuk penggunaan umum.

Jadi inilah yang kita miliki,

  • SQL / MM menyarankan menggunakan awalan.
  • SQL / MM mengatakan awalan itu opsional.
  • ISO juga menggunakan ST_awalan ..

Saya akan mengatakan ini,

  • Penggunaan ST_harus dianggap sebagai kata kunci yang tidak dicadangkan untuk pengguna akhir. Sebenarnya tidak ada alasan untuk membuat fungsi pengguna akhir dengan awalan ini. Anda lebih baik hanya menggunakan STx_. Kami tahu setidaknya dua badan yang telah menerbitkan dengan saran awalan ini (OpenSpatial) SQL / MM dan ISO. Selain itu, banyak simbol polusi RDBMS dengan awalan itu.

Mungkin ada lebih banyak sejarah, tetapi saya tidak dapat menemukan informasi kontemporer mengenai hal ini.

Evan Carroll
sumber