Hoạt động 'khác biệt' có thêm tính biểu cảm cho ngôn ngữ truy vấn đã bao gồm 'tham gia' không?


19

Toán tử khác biệt tập hợp (ví dụ, EXCEPTtrong một số biến thể SQL) là một trong nhiều toán tử cơ bản của đại số quan hệ. Tuy nhiên, có một số cơ sở dữ liệu không hỗ trợ trực tiếp toán tử khác biệt tập hợp, nhưng hỗ trợ LEFT JOIN(một loại nối ngoài) và trong thực tế, điều này có thể được sử dụng thay cho thao tác chênh lệch đã đặt để đạt được hiệu quả tương tự.

Điều này có nghĩa là sức mạnh biểu cảm của ngôn ngữ truy vấn là như nhau ngay cả khi không có toán tử khác biệt được đặt, miễn là LEFT JOINtoán tử được duy trì? Làm thế nào một người sẽ chứng minh sự thật này?


1
Để cho thấy rằng chúng có sức mạnh biểu cảm tương tự đang cho thấy rằng hoạt động khác biệt có thể được xây dựng với hoạt động nối trái (và có thể các hoạt động khác trong RA).
sxd

Câu trả lời:


14

Trong đại số quan hệ, trước tiên chúng ta sẽ cung cấp một định nghĩa không chính thức về phép nối trái (bên ngoài) và tiến hành chứng minh rằng nó, đổi tên, chọn, nối và chiếu có thể tạo ra sự khác biệt, cũng như sự khác biệt, lựa chọn và liên kết có thể được sử dụng để xây dựng trái (ngoài) tham gia. Trên thực tế, chúng tôi sẽ kết thúc việc thực hiện theo thứ tự ngược lại: chúng tôi sẽ trình bày cách tạo các liên kết bên trái bằng cách sử dụng các khác biệt và sau đó chúng tôi sẽ trình bày cách tạo các khác biệt bằng cách sử dụng các liên kết bên trái.

Hãy S có lược đồ ( R ' , T )( T , S ' ) , tương ứng, nơi R 'S ' là bộ thuộc tính trong một schema nhưng không phải là khác, và T là tập hợp các thuộc tính chung.RS(R,T)(T,S)RST

Hãy là tuple null cho schema S ' . Nghĩa là, nó là tuple bao gồm tất cả các giá trị null cho mỗi thuộc tính của S ' . Sau đó, chúng ta định nghĩa trái bên ngoài tham gia như sau: là tập hợp của tất cả các tuple ( r , t , s ) thuộc schema ( R ' , T , S ' ) nơi ...w=(ϵ,ϵ,...,ϵ)SSR LEFT JOIN S(r,t,s)(R,T,S)

  1. là một tuple trong R ;(r,t)R
  2. (a) là một tuple của S hoặc (b) s = w ;(t,s)Ss=w
  3. Nếu nằm trong tập hợp cho s w , thì ( r , t , w ) không nằm trong tập hợp.(r,t,s)sw(r,t,w)

Ví dụ: 's schema là ( A 1 , A 2 , A 3 ) , S ' schema s là ( A 2 , A 3 , A 4 ) , và chúng tôi có mà R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) }S = { ( 2 , 3 , 4 )R(A1,A2,A3)S(A2,A3,A4)R={(1,2,3),(4,5,6)} . Bởi (1) và (2) chúng tôi nhận được kết quả trung gian { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 1 , 2 , 3 , ε ) , ( 4 , 5 , 6 , ϵ ) } . Bởi (3) chúng ta phải loại bỏ ( 1 , 2S={(2,3,4),(2,3,6)}{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)} , vì chúng ta có (ví dụ) ( 1 , 2 , 3 , 4 ) s = 4 ε = w . Do đó chúng tôi là trái với { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ε ) }(1,2,3,ϵ)(1,2,3,4)s=4ϵ=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}, kết quả mong đợi cho một tham gia trái.

Định lý: R LEFT JOIN Stương đương với (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w).

Bằng chứng: (R EQUIJOIN S)cung cấp cho chúng tôi mọi thứ theo yêu cầu của (1) và (2a). Chúng tôi tuyên bố rằng ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)cung cấp cho chúng tôi mọi thứ theo mẫu (r, t, w)theo yêu cầu của (2b) và (3).

Để thấy điều này, thông báo đầu tiên mà (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)là tập hợp của tất cả các bộ trong mà không có tuple tương ứng trong S . Để thấy điều đó, cần lưu ý rằng bằng cách chiếu các thuộc tính chung ra khỏi RS (bộ thuộc tính T ) và lấy sự khác biệt, người ta chỉ còn lại tất cả các bộ dữ liệu (với lược đồ T ) được biểu thị trong R nhưng không S . Đến với R , chúng ta khôi phục lại tất cả và chỉ những bản ghi trong R có giá trị cho các thuộc tính trong T mà có mặt trong R nhưng không phải trong SRSRSTTRSEQUIJOINRRTRS; cụ thể là, chính xác là bộ tuple mà chúng ta đã tuyên bố cho đến nay.

Tiếp theo, thông báo rằng giản đồ của (((PROJECT_T R) DIFFERENCE (PROJECT_T S))là giống như của (cụ thể là, ( R ' , T ) ), trong khi schema của wS ' . Các vì thế hoạt động là một sản phẩm Descartes, chúng tôi chúng tôi nhận tất cả các bộ của mẫu ( r , t , w ) nơi không có ( t , s ) trong S tương ứng với ( r , t ) trong R .R(R,T)wSJOIN(r,t,w)(t,s)S(r,t)R

Để thấy rằng đây chính xác là bộ tuple chúng ta cần thêm R EQUIJOIN Svào để xây dựng R LEFT JOIN S, hãy xem xét các điều sau: bằng cách xây dựng, (3) được thỏa mãn, vì R EQUIJOIN Skhông thể chứa nếu chứa ( r , t , w ) (nếu có, thì phần thứ hai chứa ( r , t , w ) sẽ là một mâu thuẫn); nếu chúng ta thêm một ( r , t , w ) không vào , thì sẽ có một ((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) trong S tương ứng với ( r , t ) trong R và theo định nghĩa của, ( r , t , s ) cũng sẽ nằm trongmột mâu thuẫn của (3). Điều này hoàn thành bằng chứng.(t,s)S(r,t)REQUIJOIN(r,t,s)R LEFT JOIN S

Bây giờ chúng tôi cho thấy rằng tham gia trái có thể được sử dụng để xây dựng sự khác biệt:

Định lý: R DIFFERENCE Stương đương vớiPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))

Chứng minh: Chú ý rằng ở đây, S ' là sản phẩm nào, vì tất cả các thuộc tính được chia sẻ cho có ý nghĩa. Đầu tiên, chúng ta tạo ra một mối quan hệ mới từ S bằng cách sao chép các thiết lập thuộc tính trong S (xử lý bởi và ) để nó bao gồm các tuple ( t , t ' ) trên bộ thuộc tính ( T , T ' ) nơi t = t ' (xử lý bởi cái ). Việc nối bên trái để lại cho chúng ta các bộ dữ liệu có dạng ( t , t )RSDIFFERENCESSRENAMEJOIN(t,t)(T,T)t=tSELECT(t,t)nơi hoặc t ' = w . Bây giờ, để loại bỏ các mục cũng xuất hiện trong S , chúng ta phải chỉ giữ các bộ dữ liệu có dạng ( t , w ) , được xử lý bởi lớp ngoài cùng . Cuối cùng được thoát khỏi những bộ tạm thời thuộc tính T ' và lá chúng tôi với sự khác biệt về giản đồ gốc.t=tt=wS(t,w)SELECTPROJECTT

R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAMET{(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)}


(1,2)SELECT

@Raphael Cảm ơn bạn đã chỉ ra rằng tôi nên sử dụng LaTeX cho việc này. Tôi đã thực hiện một nỗ lực thiện chí tại LaTeX'ing toán học và kiểm tra lại mã ... xin vui lòng cho tôi biết nếu có bất cứ điều gì khác tôi nên làm. Cảm ơn một lần nữa!
Patrick87

Cảm ơn rất nhiều! Bạn có thể muốn xem xét $ $ ... $ $ để tạo ra các phần toán học được thụt lề (không phải nội tuyến). Điều này thường có thể cải thiện khả năng đọc nếu được sử dụng đúng. MathJax cũng hỗ trợ các phương trình được đánh số nhưng tôi không chắc làm thế nào để làm điều này.
Raphael

Tôi nghĩ logic của bạn bị lỗi ở đây. Bạn đang sử dụng DIFFERENCEđể định nghĩa LEFT JOINvà sau đó bạn sử dụng LEFT JOINđể diễn đạt DIFFERENCE, kết luận rằng SQL có thể làm mà không cần nó. Để điều này là hợp lệ, bạn nên thể hiện LEFT JOINdưới dạng các toán tử khácDIFFERENCE , và sau đó chứng minh rằng DIFFERENCEnó tương đương với nó.
Janoma

@Janoma Tôi không nghĩ rằng điều đó là bắt buộc ... chúng tôi đang cố gắng chứng minh rằng sự khác biệt có thể được thể hiện bằng các liên kết trái, do đó, một tham gia trái chức năng được giả định. Hãy suy nghĩ về điều này: nếu những gì bạn nói có giá trị, tôi có thể khẳng định rằng LEFT THAM GIA là hoạt động "cơ bản" hoặc "cần thiết" và yêu cầu bạn xác định SỰ KHÁC BIỆT theo các nhà khai thác khác, nhưng không phải TRÁI PHẢI. Tôi đã chỉ ra rằng mỗi cái có thể mô phỏng cái kia, vì vậy không nhiều hay ít "cơ bản" hơn cái kia ... điều gì làm cho SỰ KHÁC BIỆT trở nên đặc biệt? Trong chống đỡ. logic, KHÔNG và VÀ là hoàn chỉnh, cũng như HOẶC và KHÔNG; bạn không cần cả ba.
Patrick87

-1

TRÁI PHIẾU được triển khai bởi SQL, không tạo ra các mối quan hệ như kết quả của nó (vì một số thuộc tính của kết quả sẽ không có giá trị).

Ergo, LEFT THAM GIA như được triển khai bởi SQL, không phải là đối tác trực tiếp của bất kỳ toán tử đại số quan hệ nào.

Ergo, Toán tử khác biệt quan hệ không thể được biểu thị theo thuật ngữ LEFT THAM GIA (vì LEFT THAM GIA có thể không phải là một phần của đại số quan hệ, điều này là do LEFT THAM GIA tạo ra một cái gì đó không phải là một mối quan hệ, do đó vi phạm việc đóng đại số).

Bất kỳ tập hợp toán tử nguyên thủy nào của đại số quan hệ thỏa mãn bao đóng mà tôi biết, luôn bao gồm cả sự khác biệt quan hệ hoặc bán chính xác quan hệ khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.