SQL neden ilişkiye dayalı / işlevsel bir dil olarak bilinir?


14

Çoğu dilin "ilişki temelli" veya "üst düzey" olarak sınıflandırıldığını öğreniyoruz. Daha önce hiç SQL kullanmadım, ancak sözdizimini okuduktan sonra, işlevsel / ilişki tabanlı (Lisp, Haskell) yerine zorunlu / yüksek düzeyli sözdizimi gibi görünüyor ??

Ya da sadece profesörümün ders notlarını yorumlamam yanlış olabilir ... ama SQL'i kesinlikle ilişkiye dayalı dillerden biri olarak listeliyor (yüksek seviyenin aksine) ve işleve dayalı işlevselliğe eşittir ... ya da belki de SQL'in ilişkisel veritabanlarıyla uğraşmasının neden işlevsel bir dili uygulanması gerektiği gibi yaptığını anlamıyorum? (ve neden 'ilişki tabanlı' programlama dillerini sınıflandırırken 'işlevsel' ile eşittir?)

Teşekkürler :)

Yanıtlar:


14

Çoğu dilin "ilişki temelli" veya "üst düzey" olarak sınıflandırıldığını öğreniyoruz.

Bu kavramlar dikeydir. "İlişkiye dayalı", dilin anlambiliminin bir ilişki kavramına, yani iki küme arasındaki çoktan çoğa ilişkiye dayandığı anlamına gelir (ilişkiler SQL tablolarının arkasındaki matematiksel temeldir). "Yüksek seviye", dilin, temeldeki teknik ayrıntıların çoğunu (bellek konumları, CPU kayıtları, disk erişimi, bitsel işlemler vb.) Gizleyen birçok soyutlama içerdiği anlamına gelir. Temel amacı ilişkisel verileri ve üzerindeki işlemleri tanımlamak olduğundan SQL kesinlikle ilişki tabanlıdır. SQL de oldukça yüksektir; doğrudan diskteki baytlara erişmek için herhangi bir yol sağlamaz ve size verilerini nasıl sakladığı hakkında herhangi bir ayrıntı vermez (en azından standart SQL vermez;

Aslında, programlama (ve veri) dillerinin sınıflandırılabileceği daha birçok eksen vardır; özellikle ilginç olan bir şey bildirimsel ve zorunludur . Bildirici diller bir şeyin ne olduğunu tanımlar ; Emir Kipi , bir şeyin nasıl yapılacağını açıklar . SQL DDL bölüme (" zorunlu görünümlü anahtar kelimeler rağmen çoğunlukla bildirimsel CREATE TABLE", ' DROP DATABASE', vs.) ve hatta veri manipülasyon parçası ( SELECT, UPDATE, INSERT, DELETE) hala oldukça bildirim olduğunu. SQL'in çok ilginç bir özelliği, Turing tamamlanmamış olmasıdır: düz standart ANSI SQL'de sınırsız bir döngü yazamazsınız.

İşlevsel programlama birkaç temel fikir etrafında odaklanır:

  • işlevler birinci sınıf vatandaşlardır (yani, değer olarak, diğer işlevlere girdi olarak ve diğer işlevlerden çıktı olarak kullanılabilirler)
  • üst düzey işlevler (işlevlerde çalışan işlevler veya işlev döndüren işlevler)
  • saflık (saf işlev yan etkisi olmayan bir işlevdir; saf işlev herhangi bir G / Ç yapamaz, herhangi bir küresel durumu okuyamaz veya değiştiremez ve sabit olmayan referans argümanları alamaz. Saf işlevler özellikle ilginçtir çünkü her zaman aynı girdilerle aynı çıktıyı üretir)

SQL, şeyleri modellemek için ana araç olarak işlevler etrafında dönmüyor, ancak saflık fikrini bir şekilde kucaklıyor - aynı veritabanında aynı sorgu çalışması her seferinde (sipariş hariç) aynı sonucu verecektir. SQL'i 'işlevsel' bir dil olarak adlandırmak, IMO'ya rağmen biraz esnektir.


ANSI SQL Turing tamamlandı. CTE'leri (SQL: 1999'da tanıtıldı) ve Pencereyi (SQL: 2003) kullanarak bir Döngüsel Etiket Sistemi gömebilirsiniz .
Jörg W Mittag

@ JörgWMittag: tetikleyiciler ile benzer bir şey yapabilir ...
jmoreno

"İlişkiye dayalı, dilin anlambiliminin bir ilişki kavramına, yani iki küme arasındaki çoktan çoğa ilişkiye (ilişkiler SQL tablolarının arkasındaki matematiksel temeldir) dayalı olduğu anlamına gelir" - RDBMS'de bir ilişki , veri kümeleri arasındaki "ilişki" değil, bir grup kümedir. Tablo, görünüm veya sorgunun sonucu "ilişkiler" dir.
David Aldridge

12

HOW sorguları ve ilişkileri çözümlendiğinden SQL zorunlu değildir, programcı tarafından değil, derleyici / iyileştirici / yorumlayıcı tarafından tanımlanır. SQL bildirimsel bir dildir - SQL'de ilişkileri bildirirsiniz. Bu, ekler, güncellemeler ve siler kullanarak (yine dil ile fiziksel olarak tanımlanmayan ancak uygulamasıyla) bir veri yapısı oluşturur.

İlişkilerin kullanımı daha sonra yan etkileri olmadığı için işlevsel olan sorgular (SELECT deyimleri) kullanılarak yapılır.

Her şey ilişkisel modelin etrafına sarılır .


Bence daha güçlü bir dava yapabilirsin. Sorgular kümelerdir, ancak kümelerdeki işlevlerdir. Sorgular sql'de birinci sınıf nesnelerdir (özellikle bunları iç içe yerleştirebilir veya adlandırabilirsiniz)
nomen

5

SQL, bildirimsel olduğu kadar işlevsel bir dil değildir. İşlevsel diller, genel olarak, yan etkileri en aza indirgemek için zorunlu olana göre bildirim tarzını vurgular. Bu, bazı kişilerin SQL'e işlevsel olarak başvurmalarına yol açabilir, ancak doğru değildir. Prosedürel unsurlarla açıklayıcıdır.


1
Ancak sorgular (select deyimleri) dildeki (saf matematiksel) işlevler ve birinci sınıf nesnelerdir. Bu, dili işlevsel hale getirir.
nomen

3

Notlarınızın şifrelenmesi mümkün mü?

Programlama dillerinin "ilişkiye dayalı" ve "yüksek seviye" arasında bölündüğünü hiç duymadım. Düşük seviye / Yüksek seviye genellikle montajcı ve C'yi daha soyut yapılar için doğrudan destek sağlayan dillerden ayırmak için kullanılır. İlişkiler oldukça soyut bir yapıdır, bu yüzden ilişkileri destekleyen her şeyin tanımı gereği üst düzey olduğunu söyleyebilirim.

Saf SQL genellikle çeşitli satıcılar tarafından uygulanan bazı yordamsal bitlerle açıklayıcı bir dil olarak tanımlanır. SQL'in fonksiyonları değişken olarak desteklememesi, bana işlevsel bir dil olmaktan derhal diskalifiye ediyor gibi geliyor.


Sorgular kümeler / ilişkiler üzerindeki saf işlevlerdir ve dilde birinci sınıf nesnelerdir. Ipso facto işlevsel.
nomen

1

SQL, işlemsel işlevselliği olan ilişkisel, küme tabanlı bir dildir.

SQL işlevsel düşünün, ancak fonksiyonel dillerin bazı yönleri var mı bilmiyorum. Modern SQL varyantları (prosedürel bitlerle) kesinlikle işlevsel değildir.


-1

SQL, ilişkisel cebir + bir şey etrafında sözdizimsel bir şeker olduğunu düşünüyorum. İlişkisel cebir işlevsel dillerin çok fazla gücüne sahiptir, aslında çok yüksek ifade gücünün işlevlerini (seçim, projeksiyon, yeniden adlandırma, birleştirme, birleşme, kavşak ...) kullanır. Ancak bildiğim kadarıyla, ilişkisel cebirin temel tedavisinin, bir yineleme operatörü ile kesintisiz bir şekilde genişletilebilmesine rağmen, lambda operatörüne eşdeğer bir değeri yoktur.

Bence cebir ilişkisi cebirsel bir dildir. SQL, alt sorguları ile saf ilişkisel cebirden daha işlevsel bir stile geçti, ancak bir lambda operatörü olmadan, tam bir işlevsel dil olmadığını düşünüyorum. Tam işlevsel bir dile sorunsuz bir şekilde genişletilip genişletilemeyeceğini bilmiyorum, bu alanda uzman değilim. Haskell, çok üst düzey veritabanı dilleri hedefleyen bazı kütüphanelere sahiptir.


-1

Bir dilin işlevsel olarak nitelendirilmesi için neye ihtiyaç duyduğunun tüm alt özelliklerini bilmiyorum, ancak Sql Server işlevlerle çalışmak için çok ilginç bir yol getirdi. Özel bir cümle, işlevleri bir sorguda birlikte etkileşime sokabilir. Buna Uygula denir. Bunu eski bir APL programcısına açıkladığımda bana benzer bir maddenin APL'de benzer bir amaç için var olduğunu söyledi. Cümleyi uygula özelliği, bir tablonun satırından veya tablo fonksiyonunun satırından nitelik kümesinin başka bir fonksiyona girdi olarak geçirilmesine izin verir. Olduğu söyleniyor, işlevsel olarak kabul etmek için yazmak için tablo işlevi türü üzerinde bir kısıtlama getirdim. Satır içi olarak bildirilmelidir, yani tek bir seçim ifadesi olarak ifade edilir. Bu dayatmanın hiç değişkeni yoktur. Çok fazla mantığı olan bu tür sorgular, daha sonra ifadeleri diğer CTE'de yeniden kullanılabilen değişmez bir değişken olan sütuna dönüştürmeye izin veren ortak tablo ifadeleri kullanmanızı sağlar. Sonunda .function çok büyük bir makro haline getirir optimizasyon ihtiyacı olan yolu optimize etmek için ücretsiz.İnsanların yoksun tek şey koşullu mantık yazmak için bazı basit hileler ve sorguda destekleyici bazı veri ilan etti. Son cümlecik kullanan bazı işlevler, diğer satırlardan bir satırda kullanılabilen bir değer olarak sonuçları sürdürmenin bir yolu olarak gereklidir, ancak burada biraz uzun sürebilir. İnsanların sahip olmadığı tek şey, koşullu mantık yazmak için bazı basit hilelerdir ve sorguda bazı destekleyici veriler beyan etmiştir. Son cümlecik kullanan bazı işlevler, diğer satırlardan bir satırda kullanılabilen bir değer olarak sonuçları sürdürmenin bir yolu olarak gereklidir, ancak burada biraz uzun sürebilir. İnsanların sahip olmadığı tek şey, koşullu mantık yazmak için bazı basit hilelerdir ve sorguda bazı destekleyici veriler beyan etmiştir. Son yan tümcesini kullanan bazı işlevler, diğer satırlardan gelen bir satırda kullanılabilen bir değer olarak sonuçları sürdürmenin bir yolu olarak gereklidir, ancak burada biraz uzun sürebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.