'Fark' işlemi, zaten 'join' içeren bir sorgu diline anlamlılık katıyor mu?


19

Set farkı operatörü (örneğin, EXCEPTbazı SQL varyantlarında) ilişkisel cebirin birçok temel operatöründen biridir. Bununla birlikte, set farkı operatörünü doğrudan desteklemeyen, ancak LEFT JOIN(bir tür dış birleşimi) destekleyen bazı veritabanları vardır ve pratikte bu, aynı etkiyi elde etmek için ayarlanmış bir fark işlemi yerine kullanılabilir.

Bu, bir sorgu dilinin ifade gücünün, LEFT JOINoperatör korunursa , ayarlanan fark operatörü olmadan bile aynı olduğu anlamına mı geliyor ? Kişi bu gerçeği nasıl ispatlardı?


1
Aynı ifade gücüne sahip olduklarını göstermek, fark işleminin sol birleştirme işlemi (ve muhtemelen RA'daki diğer işlemler) ile yapılabileceğini göstermektedir.
sxd

Yanıtlar:


14

İlişkisel cebirde, ilk önce sol (dış) birleşmenin gayri resmi bir tanımını sunacağız ve yeniden adlandırma, seçim, birleştirme ve izdüşümün fark yaratabildiğini ve farkın, seçim ve birleşmenin inşa etmek için kullanılabileceğini kanıtlamaya devam edeceğiz. Sol dış katılma. Aslında, bunu ters sırayla yapacağız: farklılıkları kullanarak sol birleşimlerin nasıl oluşturulacağını göstereceğiz ve sonra sol birleşimleri kullanarak farkların nasıl oluşturulacağını göstereceğiz.

ve sırasıyla şema ve olmasına izin verin , burada ve , bir şemadaki öznitelik kümeleridir, diğerinde değil ve , ortak öznitelik kümesidir.S ( R, ' , T ) ( T , S ' ) R ' S ' , TRS(R,T)(T,S)RST

Let şema null demet de . Yani, her bir özniteliği için tüm null değerlerden oluşan bir demettir . Ardından, sol dış birleşimi şu şekilde tanımlarız: şemaya ait tüm tupllerin kümesidir ...S ' S ' ( r , t , s ) ( R ' , T , G ' )w=(ϵ,ϵ,...,ϵ)SSR LEFT JOIN S(r,t,s)(R,T,S)

  1. R(r,t) içinde bir demet ;R
  2. (a) , bir veya (b) ;S s = w(t,s)Ss=w
  3. Eğer için kümesinde olup , daha sonra grubu değildir.s w ( r , t , w )(r,t,s)sw(r,t,w)

Örnek: şeması , şeması ve buna sahibiz ve . (1) ve (2) ile ara sonucu . (3) ile kaldırmalıyız , çünkü (örneğin) ve . Böylece sola birleşme için beklenen sonuç olan .( A 1 , A 2 , A 3 ) S ( A 2 , A 3 , bir 4 ) R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } S = { ( 2 , 3 , 4 ) , ( 2 , 3 , 6 ) } {R(A1,A2,A3)S(A2,A3,A4)R={(1,2,3),(4,5,6)}S={(2,3,4),(2,3,6)}( 1 , 2 , 3 , ϵ ) ( 1 , 2 , 3 , 4 ) s = 4{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)}(1,2,3,ε)(1,2,3,4){ ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ϵ ) }s=4ε=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}

Teorem: R LEFT JOIN Seşittir (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w).

İspat: (R EQUIJOIN S)(1) ve (2a) tarafından istenen her şeyi bize verir. Bunun ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)bize (r, t, w)(2b) ve (3) tarafından istenen formun her şeyi verdiğini iddia ediyoruz .

Bunu görmek için, ilk önce karşılık gelen bir demet olmayan (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)tüm tupleslerin kümesine dikkat edin . Görmek için, ortak projelendirme dışarı niteliklerini tarafından o notta yeterlidir ve (öznitelik kümesi ) ve farkı alarak bir (şema ile tüm ve sadece bu küpe ile bırakılır temsil edilir) ancak değil . By ile , biz tüm ve sadece bu tupleları kurtarmak içinde öznitelikler için değerlere sahip mevcut fakat içindeS R S T T R S R R T R SRSRSTTRSEQUIJOINRRTRS; yani, şimdiye kadar iddia ettiğimiz tuples seti.

Daha sonra, şema bu fark (((PROJECT_T R) DIFFERENCE (PROJECT_T S))ile aynı olduğu (yani, şema ise) olan . İşlem biz formunun bütün dizilerini almak, bu nedenle bir Kartezyen ürün hiçbir olduğu olarak tekabül eden içinde .( R , T ) w S ( r , t , w ) ( t , s ) S ( r , t ) RR(R,T)wSJOIN(r,t,w)(t,s)S(r,t)R

Bu biz eklemek için gerekli dizilerini kümesi tam olduğunu görmek için R EQUIJOIN Syapı için R LEFT JOIN Saşağıdakileri dikkate alın: İnşaat tarafından, (3) tatmin olduğundan, R EQUIJOIN Siçeremez eğer içeriyor (eğer öyleyse, ikinci parçanın içerdiği bir çelişki olacaktır); Başka bir -federal, değil , daha sonra bir olacaktır içinde tekabül eden içerisinde , ve tanım gereği , de (3) 'ün çelişkisi içinde olacaktır. Bu ispatı tamamlar.( r , t , w ) ( r , t , w ) ( r , t , w ) ( t , s ) S ( r , t ) R ( r , t , s )(r,t,s)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)(r,t,w)(r,t,w)(r,t,w)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)(t,s)S(r,t)REQUIJOIN(r,t,s)R LEFT JOIN S

Şimdi sol birleşmenin fark yaratmak için kullanılabileceğini gösteriyoruz:

Teorem: R DIFFERENCE SeşittirPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))

İspat: Burada, ve nin boş olduğuna dikkat edin , çünkü tüm özellikler anlamlı olmak için paylaşılır . İlk olarak, yeni bir ilişki oluşturmak öznitelik grubu çoğaltarak (tarafından işlenir ve bu dizilerini içerir böylece) özellik seti (tarafından ele ). Sol formunun dizilerini ile yaprak bize birleştirme veya . Şimdi, de görünen girişlerden kurtulmak için, sadece formun tuplesini tutmalıyızS S S ( t , t ) ( T , T ) t = t ( t , t ) t = t t = w S ( t , w ) T RSDIFFERENCESSRENAMEJOIN(t,t)(T,T)t=tSELECT(t,t)t=tt=wS(t,w), en dıştaki tarafından ele alınır SELECT. SonuncusuPROJECT geçici özniteliğinden kurtulur ve bizi orijinal şema açısından farkla bırakır.T

Örnek: ve . İlk elde ile d özelliği grubu : . Operasyon hepimizi dokuz olası eşleşmeleri ile Kartezyen ürün verir; bu küme biçimlendirme nedeniyle burada yazılmamıştır. Daha sonra bunu . İle verir . Verir . VerirS = { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) } S T { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 ,R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAMET{ ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) } R { ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 ,{(3,4),(5,6),(7,8)}JOINSELECT{(3,4,3,4),(5,6,5,6),(7,8,7,8)}LEFT JOINR{(1,2,ϵ,ϵ),(3,4,3,4),(5,6,5,6)}SELECT{(1,2,ϵ,ϵ)}PROJECT{(1,2)}, istenen cevap.


LaTeX sözdizimini kullanmak için lütfen yayınınızı düzenleyin. Tüm formülünüzü $ sembollerinin içine alarak başlayın (örneğin, $ (1,2) $ olur ). Select gibi anahtar kelimeler "(örneğin, SELECT` olur ) içine konulmalıdır . (1,2)SELECT
Raphael

@ Raphael Bunun için LaTeX kullanmam gerektiğini belirttiğiniz için teşekkürler. LaTeX'te matematiği iyi anlamak ve kodu geri çekmek için iyi niyetli bir girişimde bulundum ... yapmam gereken başka bir şey varsa lütfen bana bildirin. Tekrar teşekkürler!
Patrick87

Çok teşekkürler! Girintili (satır içi değil) matematik parçaları oluşturmak için $ $ ... $ $ düşünebilirsiniz . Bu, doğru kullanıldığında genellikle okunabilirliği artırabilir. MathJax aynı zamanda numaralı denklemleri de desteklemektedir ancak bunu nasıl yapacağımdan emin değilim.
Raphael

Bence mantığınız burada hatalı. Kullanıyorsunuz DIFFERENCEtanımlamak LEFT JOINve ardından kullanmak LEFT JOINifade etmek DIFFERENCESQL onsuz yapabileceği sonucuna vardılar. Bunun geçerli olabilmesi için, bunun dışındakiLEFT JOIN işleçler cinsinden ifade etmeli ve sonra buna eşdeğer olduğunu kanıtlamanız gerekir. DIFFERENCEDIFFERENCE
Janoma

@Janoma Bunun gerekli olduğunu düşünmüyorum ... farkın sol birleşimler cinsinden ifade edilebileceğini göstermeye çalışıyoruz, bu yüzden çalışan bir sol birleşim varsayılmaktadır. Bir düşünün: Eğer söylediğiniz şeyin değeri olsaydı, LEFT JOIN'in "temel" veya "gerekli" operasyon olduğunu iddia edebilirim ve FARKI diğer operatörler açısından tanımlamanızı, ancak LEFT JOIN'i tanımlamanızı talep edebilirim. Her birinin diğerini simüle edebileceğini gösterdim, bu yüzden ikisi de diğerinden daha fazla veya daha az "temel" değil ... FARKI özel yapan nedir? Prop. mantık, NOT ve AND eksiksizdir, OR ve NOT gibi; üçüne de ihtiyacınız yok.
Patrick87

-1

LEFT JOIN, SQL tarafından uygulandığı gibi, sonuç olarak ilişkiler üretmez (çünkü sonucun bazı niteliklerinin bir değeri olmayacaktır).

SQL tarafından uygulanan SOL JOIN olan Ergo, herhangi bir ilişkisel cebir operatörünün doğrudan karşılığı değildir.

Ergo, İlişkisel fark operatörü LEFT JOIN cinsinden ifade edilemez (çünkü LEFT JOIN ilişkisel cebirin bir parçası olamaz, bunun nedeni LEFT JOIN bir ilişki olmayan bir şey ürettiği ve böylece cebirin kapanmasını ihlal ettiği için).

Bildiğim kapatmayı tatmin eden ilişkisel bir cebirin ilkel operatörleri her zaman ya ilişkisel farkı ya da başka ilişkisel yarı farklılığı içerir.

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.