So sánh đại số quan hệ và phép tính quan hệ Nếu theo đại số quan hệ: trình tự thực hiêện như sau: 1.. So sánh đại số quan hệ và phép tính quan hệ Nếu theo phép tính quan hệ thì: ◦ T
Trang 1Chương 6 Phép tóan quan hệ
Trang 3 Xét về mặt khái niệm, thì SQL lại dựa vào 1
ngôn ngữ truy vấn chính quy hoàn toàn khác
(formal query language)
Relational calculus (phép tính quan hệ)
Trang 5So sánh đại số quan hệ và
phép tính quan hệ
Nếu theo đại số quan hệ: trình tự thực hiêện
như sau:
1 Tạo mối kết nối tự nhiên của 2 quan hệ SUPPLIER và
SHIPMENT trên thuộc tính S#;
2 Dùng phép chọn thu hẹp kết quả của kết nối này, chỉ
còn lại các bộ liên quan đến phụ tùng P2;
3 Dùng phép chiếu (project) để kết quả chỉ còn lại
thuộc tính S#
Trang 6So sánh đại số quan hệ và
phép tính quan hệ
Nếu theo phép tính quan hệ thì:
◦ Tìm mã nhà cung cấp S# sao cho tồn tại 1 vận chuyển hàng SP nào đó có cùng mã S# và có mã phụ tùng P# là P2
The calculus formation is descriptive while the
algebraic one is prescriptive
Trang 7Phép tính quan hệ
Là 1 phân nhánh của logic vị từ (predicate logic)
Được dùng trong CSDL dưới 2 dạng:
Phép tính quan hệ bộ (Tuple relational calculus –TRC)
Phép tính quan hệ miền (Domain relational calculus –
DRC)
Trang 8Phép tính quan hệ bộ - TRC
Các query trong TRC đều có dạng:
{T| Condition}
Target chứa biến bộ (Tuple variable) T
Ví dụ: tìm tất cả thông tin các môn học được
dạy trong mùa thu 2007
{ T | TEACHING(T) AND T.Semester = ‘F2007’}
SELECT * FROM TEACHING
WHERE T.Semester = ‘F2007’
Target
Trang 10Điều kiện phức
(Complex condition)
Các điều kiện phức được xây dựng một cách đệ
quy như sau:
C là 1 điều kiện của query nếu nó là 1 điều kiện nguyên tố
Nếu C1 và C2 là điều kiện của query thì C1 AND C2, C1
OR C2 và NOT C1 cũng là điều kiện của query
Nếu C là điều kiện của query, R là tên quan hệ và T là
biến bộ thì ∀ T ∈ R (C) và ∃ T ∈ R (C) cũng là điều kiện
query
Trang 11Lượng từ
Lượng từ tồn tại (existential quantifier):
∃T ∈ R (C) tồn tại 1 bộ t∈r sao cho C trở nên
đúng sau khi t được thay thế bởi T
Lượng từ phổ quát (universal quantifier):
∀T ∈ R (C) với mọi bộ t ∈ r, C trở nên đúng nếu
t được thay thế bởi biến T
Trang 12Biến (variable)
Nếu biến bộ đứng sau 1 lượng từ ∀, ∃ được gọi
là biến buộc ( bound variable) Ngược lại là biến
tự do (free variable)
X là biến tự do trong phát biểu sau
“X is in CS305” (hay có thể biểu diễn thành C(X) )
Phát biểu trên không đúng cũng không sai cho đến khi gán 1 giá trị cho X
Trang 13Biến (variable)
X là biến buộc (được định lượng) trong phát biểu
sau
“there exists a student X such that X is in CS305”
(biểu diễn thành ∃ X∈ S (C(X)), với S là tập hợp tất cả sinh viên)
TRUE/FALSE tại bất kỳ 1 thời điểm nào
đó của database
Trang 14So sánh biến buộc và biến tự do
trong TRC
Biến buộc (Bound variable) được dùng để đánh giá các bộ trong 1 quan hệ (được dùng trong condition)
Biến tự do (Free variable) được dùng cho các bộ
được trả về bởi truy vấn (được dùng trong target
◦ Khi 1 giá trị được thay thế cho biến S thì điều kiện sẽ trở
nên true hoặc false
◦ Chỉ có biến S là biến tự do trong điều kiện{S | Student(S) AND (∃ T ∈Transcript
(S.Id = T.StudId AND T.CrsCode =
‘CS305’))}
(S.Id = T.StudId AND T.CrsCode =
‘CS305’))}
Trang 15Ví dụ 1
{E| COURSE(E) AND ∀S∈ STUDENT (∃T
∈TRANSCRIPT(T.StudId = S.Id AND T.CrsCode = E.CrsCode))}
???
Liệt kê tất cả các môn học mà mọi sinh viên đều
học
Trang 16Ví dụ 2
Liệt kê tên của tất cả giáo sư đã dạy môn
MGT123??
{P.Name| PROFESSOR(P) AND ∃T ∈ TEACHING
(P.Id= T.ProfId AND T.CrsCode = ‘MGT123’)}
Câu lệnh SQL tương ứng
SELECT P.Name
FROM PROFESSOR P, TEACHING T
WHERE P.Id= T.ProfId AND T.CrsCode = ‘MGT123’
Trang 17Ví dụ 3
Tìm mã số tất cả các sinh viên đã học cùng 1
môn 2 lần ở những học kỳ khác nhau
{T.StudId | TRANSCRIPT(T) AND ∃T1 ∈
TRANSCRIPT( T.StudId = T1.StudId AND
T.CrsCode = T1.CrsCode AND T.Semester ≠
T1.Semester)}
Trang 18Một số lưu ý khi dùng lượng từ
Các lượng từ tồn tại (∃) kề nhau có thể hoán vị cho nhau
Ví dụ:
∃R ∈ TRANSCRIPT (∃T ∈ TEACHING)( ))
∃T ∈ TEACHING (∃R ∈ TRANSCRIPT)( ))
Trang 19Một số lưu ý khi dùng lượng từ
Các lượng từ phổ quát (∀) và tồn tại (∃) không hoán
vị cho nhau được
Ví dụ:
∀T ∈ TEACHING(∃R ∈ TRANSCRIPT )
“For every TEACHING tuple there is a TRANSCRIPT
tuple such that statement St is true”
Khác với
∃R ∈ TRANSCRIPT (∀T ∈ TEACHING … C)
“There is a TRANSCRIPT tuple such that for all
TEACHING tuples St is true”
Trang 20Một số lưu ý khi dùng lượng từ
Các lượng từ tương tự như khối begin/end, dùng
Trang 21Ví dụ 4
Liệt kê tất cả sinh viên đã học 1 môn học mà mọi giáo sư đều đã từng dạy môn đó
{R.StudId| ∀T ∈ TEACHING (∃T1 ∈ TEACHING
(TRANSCRIPT(R) AND T.ProfId= T1.ProfID AND
T1.CrsCode = R.CrsCode AND T1.Semester =
R.Semester))}
Trang 22Dùng view trong TRC
Liệt kê tất cả sinh viên đã học những môn mà
được dạy bởi tất cả các giáo sư CS
Cách 1:
{R.StudId| ∀T ∈ TEACHING ( ∃T1 ∈ TEACHING
(TRANSCRIPT(R) AND
NOT (∃P∈ PROFESSOR (P.DetpId= ‘CS’ AND P.Id = T.ProfId))
OR (T.ProfId= T1.ProfID AND T1.CrsCode =
Trang 23Dùng view trong TRC
Liệt kê tất cả sinh viên đã học những môn mà
được dạy bởi tất cả các giáo sư CS
Cách 2 :
Tạo 1 view như sau:
CSPROF = {P.ProfId| PROFESSOR(P) AND P.DeptId = ‘CS’}
Tạo query
{R.StudId | ∀P ∈ CSPROF ( ∃T1 ∈ TEACHING
(TRANSCRIPT(R) AND P.ProfId = T1.ProfId AND T1.CrsCode
Trang 24Truy vấn SQL và truy vấn TRC
Một số sách SQL đã dựa vào đại số quan hệ để
xác định ngữ nghĩa khi phát ra các truy vấn SQL
Biểu thức đại số cũng không trực giác hơn truy
vấn TRC và cũng không hỗ trợ nhiều với SQL cao cấp
◦ Việc dịch truy vấn SQL có subquery thành biểu thức đại
số không dễ dàng
◦ Đại số quan hệ không phải là phương tiện tốt để dịch
truy vấn SQL thành English để kiểm tra xem nó có đúng yêu cầu mong đợi không.
Trang 25Truy vấn SQL và truy vấn TRC
Mặc dù mô tả bằng tiếng Anh không chính quy
bằng định nghĩa toán học nhưng nó giúp cho cả khách hàng và người lập trình dễ hiểu nhau hơn
SQL query liệu có thỏa mãn những định nghĩa
bằng tiếng Anh?
Trang 26So sánh giữa SQL và TRC
Có 1 sự tương đương gần giữa SQL và TRC
Với 1 SQL query, xây dựng 1 TRC query tương
đương, sau đó dịch TRC query này thành tiếng
Anh
Chuyển bài toán kiểm chứng SQL query xuống thành bài toán dịch SQL thành TRC
Với các query phức tạp (có subquery) thì việc
dịch này sẽ như thế nào??
Trang 27Dịch SQL thành TRC
Xét 1 mẫu SQL phức như sau:
SELECT R1.A, R2.C
FROM REL1 R1, REL2 R2
WHERE Condition1(R1, R2) AND
R1.B AND (SELECT R3.E
FROM REL3 R3, REL4 R4WHERE Condition2(R2, R3, R4))
Biến R3, R4 là cục bộ của subquery và R1, R2 là
biến toàn cục
Trang 28Dịch SQL thành TRC
Subquery được tham số hóa bởi biến toàn cục R2
Condition2 của subquery hiển nhiên không phải
là dạng mà TRC hiểu được
Cách giải quyết: dùng view với tập thuộc tính
của danh sách đích của subquery ( tức R3.E)
cùng với biến R2
Trang 29Dịch SQL thành TRC
View có tên Temp được định
nghĩa như sau:
Temp = {R3.E,R2.C, R2.D |
REL2(R2) AND REL3(R3) AND ∃R4
∈ REL4 (Condition2(R2,R3,R4)) }
Biến R2, R3 là free nhưng biến R4 phải định lượng
vì nó không xuất hiện trong danh sách đích
(target) của view
Trang 30Dịch SQL thành TRC
SQL query được dịch thành TRC:
{R1.A, R2.C| REL1(R1) AND REL2(R2) AND
Condition1(R1,R2) AND ∃R ∈TEMP (R.E= R1.B
AND R.C= R2.C AND R.D = R2.D) }
Trang 31Phép tính quan hệ miền
Domain relational calculus
(DRC) Là cơ sở cho ngôn ngữ truy vấn trực quan như
MS Access, IBM QBE, Borland Paradox
DRC tương tự như TRC, chỉ khác nhau là DRC sử dụng biến miền (Domain variable) thay cho biến
bộ (Tuple variable)
Trang 32Domain variable
Biến miền sẽ nhận giá trị từ miền giá trị
(domain) của 1 thuộc tính nào đó
Ví dụ: quan hệ TEACHING có thuộc tính ProfId
với miền giá trị chứa các số Id hợp lệ Nếu biến
Pid là biến miền thì nó sẽ có giá trị từ miền chứa các ID hợp lệ này
Trang 33DRC query Kết quả của DRC query cũng là 1 quan hệ và có
dạng chung sau:
{X1,…,Xn| Condition}
Ví dụ: TRC và DRC query tương đương nhau:
{Pid, Code | TEACHING (Pid, Code, F2007)}
{T | TEACHING(T) AND T.Semester=‘F2007’}
DRC query đơn giản hơn, loại trừ được phép so
sánh T.Semester=‘F2007’
Biến miền Target
Trang 34◦ Các biến đích ( target variable) chỉ được phép là tự do
trong biểu thức điều kiện
◦ Cho phép các hằng số (constant) xuất hiện trong phần
target (đích)
Trang 35Điều kiện cơ bản
◦ X oper Y với oper là toán tử so sánh, X và Y là biến miền
◦ X oper const: tương tự như trên nhưng so sánh với hằng
số const
Trang 36Điều kiện phức
Các condition phức được xây dựng đệ quy như
sau:
◦ C là điều kiện của query nếu nó là 1 atomic condition
◦ If C1 và C2 là điều kiện của query thì C1 AND C2, C1 OR C2 và NOT C1 cũng là điều kiện của query
◦ Nếu C là điều kiện của query, R là tên của quan hệ và X
là biến miền thì ∀ X ∈ R.A (C) và ∃ X ∈ R.A (C) cũng là
điều kiện của query
Trang 37Lượng từ và biến miền
∀X ∈ R.A (C) đọc là “ với mọi giá trị xảy ra trong cột A của quan hệ R thì điều kiện C phải đúng
và ∃X ∈ R.A (C) đọc là “ có ít nhất một giá trị x trong cột R.A sao cho C trở nên true nếu x được thay thế cho tất cả các biến X
Trang 38DRC query
Có dạng {X1, ,Xn| condtion}
Trong đó Xi với i=1, n hoặc là biến tự do xuất hiện trong condition hoặc là hằng số
Kết quả của query trên là 1 tập tất cả các chọn
lựa của bộ (x1,…, xn) sao cho khi thay x1 cho
X1, x2 cho X2,… thì condition trở nên đúng
Trang 39DRC query
DRC query thường sử dụng nhiều biến hơn TRC
tương ứng vì biến DRC dùng cho mỗi giá trị đơn trong khi biến TRC dùng cho cả bộ
Miền phổ dụng ( universal domain) U chứa tất cả các giá trị trong tất cả các domain
∃X ∈ U (Condition) được viết tắt thành ∃X
(Condition)
Trang 40Ví dụ
Liệt kê tên tất cả các giáo sư dạy môn MGT123
{N| ∃I ∈ PROFESSOR.Id ∃D ∈ PROFESSOR.DeptId (PROFESSOR(I,D,N) AND ∃S ∈ TEACHING (I,
MGT123, S)))}
Trang 41Mối quan hệ giữa đại số quan hệ, phép tính quan hệ TRC, DRC
Cả 3 ngôn ngữ đều có khả năng diễn đạt mạnh
như nhau: các query được viết bằng ngôn ngữ
này có thể được viết bằng ngôn ngữ khác
Trang 42Tương đương của 3 ngôn ngữ
◦ Algebra: σ Condition (R)
◦ TRC: {T|R(T) AND Condition1}
◦ DRC: {X1,…,Xn|R(X1,…,Xn) AND Condition2}
Trong đó: nếu Condition có dạng A=B and C=d thì
Condition1 sẽ là T.A = T.B AND T.C =D
Condition2 sẽ là X1=X2 AND X3=d
Trang 43Tương đương của 3 ngôn ngữ
Giả sử R có 5 attribute với A,B,C là 3 thuộc tính
đầu được dùng trong phép chiếu
Trang 44Tương đương của 3 ngôn ngữ
Giả sử R có 3 thuộc tính A,B,C và S có 2 thuộc tính D,E