Mengapa bersikap relasional penting dalam implementasi SQL?

Dalam buku yang saya baca (Querying SQL Server 2012) penulis berbicara tentang teori cara kerja database. Dia menyebutkan relasi, atribut dan tupel, dll.

Dia sering menekankan fakta bahwa beberapa aspek T-SQL tidak bersifat relasional. Seperti pada kutipan berikut:

Berbeda dengan fase sebelumnya yang hasilnya bersifat relasional, output pada fase ini tidak bersifat relasional karena memiliki tatanan yang terjamin. Hasil dari fase ini adalah apa yang disebut oleh SQL standar sebagai kursor. Perhatikan bahwa penggunaan istilah kursor di sini bersifat konseptual. T-SQL juga mendukung objek yang disebut kursor yang ditentukan berdasarkan hasil kueri, dan memungkinkan pengambilan baris satu per satu dalam urutan tertentu. Anda mungkin peduli untuk mengembalikan hasil kueri dalam urutan tertentu untuk tujuan presentasi atau jika pemanggil perlu menggunakan hasilnya dengan cara itu melalui beberapa mekanisme kursor yang mengambil baris satu per satu. Namun perlu diingat bahwa pemrosesan tersebut tidak bersifat relasional. Jika Anda perlu memproses hasil kueri secara relasional—misalnya, mendefinisikan ekspresi tabel seperti tampilan berdasarkan kueri (rinciannya nanti di Bab 4)—hasilnya harus relasional. Selain itu, pengurutan data dapat menambah biaya pada pemrosesan kueri. Jika Anda tidak peduli dengan urutan pengembalian baris hasil, Anda dapat menghindari biaya yang tidak perlu ini dengan tidak menambahkan klausa ORDER BY.

Saya ingin tahu, karena setiap implementasi SQL cukup banyak memiliki klausa ORDER BY yang membuatnya non-relasional, mengapa penting bahwa (himpunan setelah ORDER BY digunakan) tidak lagi relasional karena di mana-mana selalu seperti itu?

Saya bisa mengerti jika dia mengatakan itu tidak standar, misalnya menggunakan != daripada <> untuk ketidaksetaraan karena itu mempengaruhi portabilitas dll. tapi saya tidak mengerti mengapa ada sesuatu yang lebih baik menjadi relasional.

Mohon pencerahannya.


person sprocket12    schedule 08.11.2013    source sumber


Jawaban (2)


Sepertinya penulis mengacu pada penggunaan teori himpunan (yang dalam istilahnya "relasional") vs. memproses baris demi baris dengan kursor atau metode serupa. Mengakses data dengan cara relasional memungkinkan mesin database untuk melakukan pemilihan/penggabungan/pengurutan/pesanan/dll. pada seluruh kumpulan data sedangkan kursor hanya akan memproses satu baris dalam satu waktu. Sejauh yang saya tahu, menambahkan klausa ORDER BY tidak membuat kueri "non-relasional", penulis hanya mencatat bahwa jika Anda tidak peduli dengan urutan kumpulan hasil, Anda dapat mengabaikan klausa tersebut dari kueri Anda dan mesin basis data akan mengembalikan data dalam urutan apa pun pada akhirnya memprosesnya.

Perhatikan juga, klausa ORDER BY adalah yang terakhir dieksekusi oleh mesin database, yang berarti kueri diproses dengan cara "relasional" dan kemudian diurutkan pada menit terakhir. Kursor dimulai dari rekaman pertama dan menelusurinya satu per satu sehingga seluruh operasi dilakukan dalam urutan yang telah ditentukan berdasarkan definisi kursor/kueri Anda.

person Troy Carlson    schedule 08.11.2013
comment
Dan kursor serta pemrosesan baris demi baris jauh lebih lambat dibandingkan operasi berbasis set. - person HLGEM; 08.11.2013
comment
Penulis mengatakan bahwa ORDER BY membuatnya non-relasional. Dia telah menyebutkan hal ini berkali-kali. Tampaknya dari komentar HLGEM di atas alasan penulis terus menyebutkannya mungkin karena dia ingin pembaca membedakan dan kemudian memahami implikasi kinerja. - person sprocket12; 08.11.2013
comment
MuhammadA benar dan memang benar - ORDER BY benar-benar membuat hasil yang ditetapkan NON-RELASI. - person randmatt; 09.11.2013
comment
Itu sungguh menggelikan. Katakanlah kebetulan saja mesin kueri mengembalikan tabel yang sudah diurutkan, ini akan bersifat relasional. Sebaliknya, jika Anda secara eksplisit meminta pengurutan seperti itu (mendapatkan hasil yang sama) itu tidak lagi bersifat relasional. Itu tidak masuk akal. Jika urutan baris tidak relevan dalam model relasional, maka: mengapa memiliki urutan tertentu membuatnya tidak relasional? Tolong bantu saya memahaminya. - person Michele; 19.03.2014

Inti dari kueri yang bersifat relasional (Querying SQL Server 2012) adalah:

Ia mengembalikan satu set yang memenuhi persyaratan kueri.

Namun urutan penyajian hasil bersifat nondeterministik, artinya tidak pasti dan dapat berubah untuk database yang sama, bergantung pada mesin proses yang mendasarinya.

ORDER BY menjadikannya deterministik, dan dengan demikian menjalankan kueri yang sama pada server yang berbeda menjamin urutan hasil yang sama.

Jadi dengan cara itu urutannya bisa sama sebelum dan sesudah klausa ORDER BY ditambahkan, tetapi tidak selalu sama (misalnya untuk patch yang berbeda)

person Karl Lundin    schedule 26.12.2019