(Temel) SQL sorguları semantik olarak Yüksek Sipariş Fonksiyonlarına eşdeğer midir?


12

SQL temel olarak map + fold + filtresinin etki alanına özgü bir örneği midir?

Aşağıdaki SQL bana öyle geliyor ki:

SELECT name
FROM fruits
WHERE calories < 100 

aşağıdaki harita + filtre + katlama işlemi için sadece sözdizimsel şekerdir:

var fruits = [{id : 1, name: 'orange', calories : 100},
    {id : 2, name : 'banana',  calories : 150},
    {id : 3, name: 'apple', calories : '50'}];

fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
    .filter(function(obj) { return obj.calories < 100 })
    .reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });

Bu bir tesadüf mü, kanıtlanabilir sağlam bir anlamsal denklik var mı? Nasıl, kabaca?

Pratikte SQL'in çok sayıda çan ve ıslık olduğunu biliyorum, ancak özünde sadece bir harita katlama filtresi işlemi var mı?

Aşağıdaki makale konuyla ilgilidir: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx


1
Bir JOIN veya GROUP BY deyimini nasıl modellersiniz?
Ixrec

1
@Ixrec: Bunun gibi
Mason Wheeler

2
gnat - Diğer gönderiyi okursanız, sorunun Stackoverflow için uygun olmadığını söylediklerini göreceksiniz, bu yüzden daha sonra buraya gönderdim. Bazen Stackoverflow ile kazanamazsınız. Gönderi uygunsuz olduğu için yanlış forumda kapalı ya da bu site için uygun olmayan çok karmaşık ya da Google'ı kullanmanız çok kolay.
Sridhar Sarnobat

1
Diğer gönderiyi silmem gerekiyor. Bitti.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: Normalde, bir grup kullanıcı sorunuzu Programcılar'a taşımak için oy verdiğinde, otomatik olarak taşınır. Sorunuzu gerekli 5 oylamadan önce kapattınız.
Brian

Yanıtlar:


6

SQL'in temel kavramlarını alan ve nesne yönelimli programlamaya genelleyen LINQ'ya bir göz atın . WhereOperatör, bir bataklık standart Filtre olan Selectoperatör bir projeksiyon / Harita, vb olduğunu. Tüm temel SQL sorgu işlemleri LINQ'da temsil edilir, daha üst düzey işlevler kullanılarak uygulanır, bu nedenle evet, sezgisel SQL anlayışınızda haklısınız.

Elde ettiğiniz örnek ile ilişkisel bir veritabanının çalışma şekli arasındaki en büyük fark, SQL'in çok sınırlı sayıda komutla tasarlanmasıdır. Turing-complete değildir ve veritabanı tasarımcıları ne yapabileceğini ve yapamayacağını bilir, bu da sistemi Mapbir veri kümesini numaralandırmak için mümkün olandan çok daha yüksek bir dereceye kadar sorguları optimize edecek şekilde tasarlamalarını çok daha kolay hale getirir. eleman elemana.


Bu yalnızca SQL işlemlerini gerçekleştirmek için daha üst düzey işlevlerin kullanılabileceğini gösterir, ikisinin genel olarak birbiriyle ilişkili olduğunu göstermez.
Bart van Ingen Schenau

1
@Bart: O zaman soru "kanıtlanabilecek sağlam bir anlamsal eşdeğerlik var mı?" Bir şeyi diğeri açısından uygulamak, bilgisayar biliminde denkliği kanıtlamak için zamana bağlı bir tekniktir. Örneğin, bir dilin Turing-complete olarak bilinen başka bir dili uygulamak için kullanarak Turing-complete olduğunu kanıtlamanın bir yolu.
Mason Wheeler

Anlamsal bir denklik için, bunu her iki yönde de göstermenizi beklerim. Hem SQL sorguları daha üst düzey işlevlerde ifade edilebilir hem de SQL sözdiziminde daha üst düzey bir işlevi ifade edebilirsiniz.
Bart van Ingen Schenau

2
Belki de soruyu resmi olarak yeterince ifade etmedim. Sanırım vakaların% 100'ünde çift yönlü olarak eşdeğer olmam gerekmiyor. Sadece bir yaklaşımla yapılan tipik sorgular başka bir yaklaşımla yeniden yazılabilir.
Sridhar Sarnobat

2
"SQL gibi adil olmak gerekirse, OP ifadesini soruyu yaptım sorgular değil," SQL olduğu yüksek düzey işlevlerine eşdeğer " dil ne cevap yanlış yüzden, işlevsel bir programlama dili eşdeğer".
Ixrec

10

SQL, üst düzey fonksiyonlara veya fonksiyonel programlamaya değil, İlişkisel Cebir ve Tuple İlişkisel Hesabı temel alır. SELECT, FROM ve WHERE diğer dillerde benzer işlevlere sahip olsa da, SQL'in kendisi genelleştirilmiş üst düzey işlevleri desteklemez , ancak yalnızca dilin tanımladığı "üst düzey" işlevleri destekler.

SQL kendi özel üst düzey işlevlerinizi yazmanıza izin vermediğinden, dilin daha üst düzey işlevleri desteklediği hiçbir otorite ile söylenemez.


İlişkisel cebir / matematik fonksiyonel programlama ile hiç bağlantılı mı? İlişkisel dillerin küme teorisinden türetildiğini düşünüyorum, ancak bunların işlevsel kılındığından emin değilim.
Sridhar Sarnobat

1
Bu yüzden "yüksek dereceli" korkutucu tırnak içinde.
Robert Harvey
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.