Để giải thớch cỏc truy vấn khung nhỡn, chỳng ta lần theo cỏch một truy vấn cú chứa khung nhỡn được xử lý như thế nào.
Tư tưởng cơ bản được minh hoạ ở hỡnh vẽ dưới đõy (hỡnh 3). Một truy vấn Q được biểu thị bằng cõy biểu thức trong đại số quan hệ. Cõy biểu thức này sử dụng cỏc quan hệ là cỏc khung nhỡn làm lỏ. Trong hỡnh vẽ cõy cú hai lỏ, đú là cỏc khung nhỡn V và W. Để giải thớch Q theo thuật ngữ của cỏc bảng cơ sở, chỳng ta tỡm cỏc định nghĩa của V và W. Cỏc định nghĩa này cũng được biểu thị bằng cỏc cõy biểu thức trong đại số quan hệ. Trong hỡnh 3 (ở bờn phải) chỳng ta thay cỏc lỏ V và W bằng cỏc định nghĩa của cỏc khung nhỡn đú. Cõy kết quả là một truy vấn trờn cỏc bảng cơ sở tương đương với truy vấn gốc trờn cỏc khung nhỡn.
V W
Hỡnh 3: Thay thế cỏc định nghĩa khung nhỡn cho cỏc tham chiếu khung nhỡn
Vớ dụ 47: Ta xột khung nhỡn và truy vấn được định nghĩa như sau: 1) CREATE VIEW NVHÀNỘI AS
2) SELECT MósốNV, Họđệm,Tờn, Lương, MósốĐV
3) FROM NHÂNVIấN
4) WHERE Địachỉ = ‘Hà nội’ ; Q
Một cõy biểu thức cho truy vấn định nghĩa khung nhỡn này được chỉ ra ở hỡnh 4. πMósốNV, Họđệm,Tờn, Lương, MósốĐV σ Địachỉ = ‘Hànội’ NHÂNVIấN
Hỡnh 4: Cõy biểu thức cho khung nhỡn NVHÀNỘI Truy vấn ở vớ dụ 41 cú dạng
SELECT Tờn
FROM NVHÀNỘI WHERE MósốĐV = 4 ;
Cõy biểu thức cho truy vấn này được chỉ ra ở hỡnh 5
π Tờn
σMó sốĐV = 4
NVHÀNỘI
Chỳ ý rằng lỏ của cõy này biểu diễn khung nhỡn NVHÀNỘI. Từ đú, chỳng ta giải thớch truy vấn bằng cỏch thay thế cõy truy vấn của NVHÀNỘI vào vị trớ của NVHÀNỘI trong cõy biểu thức của truy vấn. Kết quả, chỳng ta cú cõy biểu thức như sau:
π Tờn σMó sốĐV = 4 π MósốNV, Họđệm,Tờn, Lương, MósốĐV σ Địachỉ = ‘Hànội’ NHÂNVIấN
Cõy truy vấn này là một giải thớch chấp nhận được của truy vấn. Tuy nhiờn nú được diễn đạt bằng cỏch phức tạp khụng cần thiết. Hệ thống SQL sẽ ỏp dụng cỏc biến đổi đối với cõy này để làm cho nú giống như biểu thức cõy đối với truy vấn
SELECT Tờn
FROM NHÂNVIấN
WHERE Địachỉ = ‘Hànội’ AND MósốĐV = 4 ;
Chẳng hạn, chỳng ta cú thể đưa phộp chiếu π MósốNV, Họđệm,Tờn, Lương, MósốĐV lờn trờn phộp chọn σMó sốĐV = 4 vỡ việc thay đổi đú khụng làm ảnh hưởng đến kết quả của biểu thức. Sau đú, chỳng ta cú hai phộp chiếu liờn tiếp, đầu tiờn chiếu trờn MósốNV, Họđệm,Tờn, Lương, MósốĐV, sau đú chiếu trờn Tờn. Rừ ràng lần chiếu thứ nhất là thừa, chỳng ta cú thể loại bỏ nú. Như vậy chỳng ta cú thể thay thế hai phộp chiếu bằng bằng một phộp chiếu trờn Tờn. Hai phộp chọn cũng cú thể được kết hợp lại. Núi chung, cú thể thay thế hai phộp chọn liờn tiếp bằng một phộp chọn với phộp toỏn AND của cỏc điều kiện của chỳng. Cõy biểu thức kết quả là:
σMó sốĐV = 4 ANDĐịachỉ = ‘Hànội’ NHÂNVIấN
Đú là cõy nhận được từ truy vấn: SELECT Tờn
FROM NHÂNVIấN
WHERE Địachỉ = ‘Hà nội’;
1.8 TỔNG KẾT CHƯƠNG I
1- SQL: Ngụn ngữ SQL là ngụn ngữ truy vấn chớnh cho cỏc hệ cơ sở dữ liệu quan hệ. Chuẩn hiện tại được gọi là SQL-99 hoặc SQL3
2- Cỏc truy vấn Select-From-Where: Dạng truy vấn SQL phổ biến nhất cú dạng select-from-where. Nú cho phộp ta lấy tớch của nhiều quan hệ (mệnh đề FROM), ỏp dụng một điều kiện đối với cỏc bộ của kết quả (mệnh đề WHERE) và sinh ra cỏc thành phần mong muốn (mệnh đề SELECT).
3- Truy vấn con: Cỏc truy vấn Select-From-Where cũng cú thể được sử dụng như cỏc truy vấn con bờn trong một mệnh đề WHERE hoặc mệnh đề FROM của một truy vấn khỏc. Cỏc phộp toỏn EXIST, IN, ALL, và ANY coa thể được sử dụng để diễn đạt cỏc điều kiện cú giỏ trị Lụgic về cỏc quan hệ là kết quả của một truy vấn con trong mệnh đề WHERE. 4- Cỏc phộp toỏn tập hợp trờn cỏc quan hệ: Chỳng ta cú thể lấy hợp, giao,
hoặc trừ của cỏc quan hệ bằng cỏch nối cỏc quan hệ hoặc nối cỏc truy vấn xỏc định cỏc quan hệ, với cỏc từ khúa UNION, INTESECT và EXCEPT tương ứng.
5- Cỏc biểu thức nối: SQL cú cỏc phộp toỏn như NATURAL JOIN cú thể ỏp dụng cho cỏc quan hệ như cỏc truy vấn hoặc để xỏc định cỏc quan hệ trong một mệnh đề FROM.
6- Cỏc giỏ trị Null: SQL cung cấp một giỏ trị NULL đặc biệt, nú xuất hiện trong cỏc thành phần của cỏc bộ khụng cú giỏ trị cụ thể cho chỳng. Cỏc
phộp toỏn số học và logic khụng dựng được với NULL. Việc so sỏnh một giỏ trị bất kỳ với NULL, thậm chớ giỏ trị so sỏnh là NULL, sẽ cho giỏ trị UNKNOWN. Giỏ trị UNKNOWN đối xử trong cỏc biểu thức cú giỏ trị logic như là nửa đường giữa TRUE và FALSE.
7- Nối ngoài: SQL cung cấp một phộp toỏn OUTER JOIN. Phộp toỏn này nối cỏc quan hệ và tạo ra kết quả cú chứa cỏc bộ treo từ một hoặc cả hai quan hệ tham gia phộp nối. Cỏc bộ treo được độn thờm cỏc giỏ trị NULL ở trong kết quả.
8- Mụ hỡnh tỳi (bag) của cỏc quan hệ: SQL xem cỏc quan hệ như cỏc tỳi cỏc bộ chứ khụng phải tập hợp cỏc bộ. Chỳng ta cú thể ộp buộc việc loại bỏ cỏc bộ trựng lặp bằng từ khúa DISTINCT, trong khi đú từ khúa ALL cho phộp kết quả là một tỳi trong hoàn cảnh cỏc tỳi khụng phải là ngầm định.
9- Phộp nhúm: Cỏc giỏ trị xuất hiện trong một cột của quan hệ cú thể được tớnh tổng (kết hợp lại) bằng cỏch sử dụng một trong cỏc từ khúa SUM, AVG, MIN, MAX hoặc COUNT. Cỏc bộ cú thể được phõn nhúm trước để kết hợp với cỏc từ khúa GROUP BY. Một số nhúm cú thể bị loại bỏ với một mệnh đề HAVING.
10- Cỏc lệnh cập nhật: SQL cho phộp chỳng ta làm thay đổi cỏc bộ trong một quan hệ. Chỳng ta cú thể INSERT (chốn cỏc bộ mới), DELETE (xúa cỏc bộ), UPDATE(thay đổi một số bộ đó tồn tại) bằng cỏch viết cỏc lệnh SQL sử dụng cỏc từ khúa đú.
11- Định nghĩa dữ liệu: SQL cú cỏc lệnh mụ tả cỏc phần tử của một lược đồ cơ sở dữ liệu. Lệnh CREATE TABLE cho phộp chỳng ta mụ tả lược đồ cho cỏc quan hệ được lưu giữ (gọi là cỏc bảng), chỉ ra cỏc thuộc tớnh và kiểu của chỳng và cỏc giỏ trị ngầm định.
12- Sửa đổi cỏc lược đồ: Chỳng ta cú thể thay đổi diện mạo của một lược đồ cơ sở dữ liệu bằng một lệnh ALTER. Cỏc thay đổi này bao gồm việc thờm và loại bỏ cỏc thuộc tớnh cỏc lược đồ quan hệ và thay đổi cỏc giỏ trị ngầm định liờn kết với một thuộc tớnh hoặc một miền. Chỳng ta cũng
cú thể sử dụng lệnh DROP để loại bỏ hoàn toàn cỏc quan hệ hoặc cỏc thành phần lược đồ khỏc.
13- Cỏc chỉ số: Trong khi khụng phải là một phần của chuẩn SQL, cỏc hệ thống SQL thương mại cho phộp mụ tả cỏc chỉ số trờn cỏc thuộc tớnh; cỏc chỉ số này là tăng tốc độ một số truy vấn và cập nhật chứa đặc tả của một giỏ trị đối với thuộc tớnh được chỉ số húa.
14- Khung nhỡn: Một khung nhỡn là một định nghĩa về việc một quan hệ (khung nhỡn) được xõy dựng từ cỏc bảng được lưu giữ trong cơ sở dữ liệu như thế nào. Cỏc khung nhỡn cú thể được truy vấn giống như chỳng là cỏc bảng được lưu giữ, và một hệ thống SQL sửa đổi cỏc truy vấn về một khung nhỡn sao cho truy vấn được thay thế thành truy vấn trờn bảng cơ sở đó được sử dụng để định nghĩa khung nhỡn.
MỘT SỐ BÀI TẬP
Giả sử chỳng ta cú cơ sở dữ liệu sau(xem ở PHỤ LỤC 2): Product(maker, model, type)
PC(model, speed, ram, hd, rd, price)
Laptop(model, speed, ram, hd, screen, price) Printer(model, color, type, price)
I. Viết cỏc truy vấn sau:
1) Tỡm số model, tốcđộ, và kớch cỡ đĩa cứng của tất cả cỏc mỏy PC cú giỏ thấp hơn $1200.
2) Làm như cõu 1) nhưng thay tờn cột speed bằng megahertz và cột hd bằng gigabyte
3) Tỡm cỏc nhà sản xuất cỏc mỏy in
4) Tỡm số model, kớch cỡ bộ nhớ và kớch cỡ màn hỡnh của cỏc mỏy xỏch tay (Laptop) cú giỏ trờn $2000
5) Đưa ra tất cả cỏc bộ trong quan hệ Printer với cỏc mỏy in màu. Chỳ ý rằng color là thuộc tớnh cú giỏ trị lụgic
6) Đưa ra số model, tốc độ và kớch cỡ của đĩa cứng đối với cỏc mỏy PC coa đĩa DVD 12X hoặc 16X và giỏ thấp hơn $2000. Bỏn cú thể xem thuộc tớnh rd như là thuộc tớnh cú giỏ trị là chuỗi ký tự.
II Viết cỏc truy vấn
1) Đưa ra nhà sản xuất và tốc độ của cỏc Laptop với đĩa cứng ớt nhất là 30 gigabyte.
2) Đưa ra số model và giỏ của tất cả cỏc sản phẩm (với mọi kiểu) do nhà sản xuất B làm ra
3) Đưa ra những nhà sản xuất bỏn cỏc Laptop nhưng khụng bỏn cỏc mỏy PC
4) Tỡm cỏc kớch cỡ đĩa cứng cú trong hai hoặc nhiều hơn PC
5) Đưa ra cỏc cặp model PC cú cựng tốc độ và bộ nhớ (ram). Một cặp chỉ được liệt kờ một lần nghĩa là liệt kờ (i,j) nhưng khụng liệt kờ (j,i).
6) Đưa ra cỏc nhà sản xuất sản xuất ớt nhất là hai loại mỏy tớnh khỏc nhau (PC hoặc Laptop) với tốc độ ớt nhất là 1000.
III.Trong phần bài tập này, bạn phải sử dụng ớt nhất một truy vấn con trong cõu trả lời và viết mỗi truy vấn trong hai cỏch khỏc nhau.
1) Đưa ra những người sản xuất cỏc PC cú tốc độ ớt nhất là 1200. 2) Đưa ra cỏc mỏy in cú giỏ cao nhất.
3) Đưa ra cỏc mỏy xỏch tay cú tốc độ thấp hơn tốc độ của cỏc PC 4) Đưa ra số model của cỏc mục (PC, laptop, printer) với giỏ cao nhất. 5) Đưa ra nhà sản xuất của mỏy in màu cú giỏ thấp nhất.
6) Đưa ra cỏc nhà sản xuất của cỏc PC cú bộ xử lý nhanh nhất trong số cỏc PC cú dung lượng RAM bộ nhất.
1) Tỡm tốc độ trung bỡnh của cỏc PC.
2) Tỡm tốc độ trung bỡnh của cỏc Laptop cú giỏ trờn $2000 3) Tỡm giỏ trung bỡnh của cỏc PC do nhà sản xuất “A” làm ra
4) Tỡm giỏ trung bỡnh của cỏc PC và laptop do nhà sản xuất “D” làm ra 5) Đưa ra giỏ trung bỡnh của cỏc PC đối với mỗi tốc độ khỏc nhau.
6) Đối với mỗi nhà sản xuất, hóy đưa ra kớch cỡ trung bỡnh của màn hỡnh của cỏc laptop.
7) Đưa ra cỏc nhà sản xuất làm ra ớt nhất là 3 model mỏy PC khỏc nhau. 8) Đưa ra kớch cỡ trung bỡnh của cỏc đĩa cứng của cỏc PC đối với cỏc
nhà sản xuất làm ra cỏc mỏy in.
IV. Sửa đổi cơ sở dữ liệu.
1) Sử dụng hai lệnh INSERT để lưu trữ vào cơ sở dữ liệu sự kiện model PC 1100 được nhà sản xuất C làm ra, cú tốc độ 1800, RAM 256, đĩa cứng 80, 20x DVD và bỏn với giỏ $2499.
2) Chốn vào cỏc sự kiện kiểm tra rằng với mỗi PC cú một laptop với cựng nhà sản xuất, tốc độ, RAM và đĩa cứng, một màn hỡnh 15 inch, một số model lớn hơn 1100, và một giỏ trờn $500.
3) Loại bỏ tất cả PC với đĩa cứng nhỏ hơn 20 gigabyte.
4) Loại bỏ tất cả cỏc laptop của cỏc nhà sản xuất khụng sản xuất mỏy in. 5) Nhà sản xuất A mua nhà sản xuất B. Thay đổi tất cả cỏc sản phẩm do
B sản xuất thành ra do A sản xuất.
6) Với mỗi PC, hóy làm tăng gấp đụi dung lượng của RAM và thờm đĩa vào cứng 20 gigabyte.
7) Với mỗi laptop do nhà sản xuất B làm ra hóy thờm vào kớch cỡ màn hỡnh 1 inch và giảm giỏ $100.
VI. Mụ tả cơ sở dữ liệu. Viết cỏc khai bỏo sau:
1) Một lược đồ thớch hợp cho quan hệ Product 2) Một lược đồ thớch hợp cho quan hệ PC
3) Một lược đồ thớch hợp cho quan hệ Laptop 4) Một lược đồ thớch hợp cho quan hệ Printer.
5) Một tựy chọn cho lược đồ Printer từ 4) để loại bỏ thuộc tớnh Color 6) Một tựy chọn cho lược đồ Laptop ở 3) để thờm và thuộc tớnh cd. Giả
sử giỏ trị mặc định của thuộc tớnh này là none nếu laptop khụng cú CD reader
CHƯƠNG II: CÁC RÀNG BUỘC VÀ CÁC TRIGGER
Trong chương này chỳng ta sẽ nhằm vào cỏc khớa cạnh của SQL cho phộp chỳng ta tạo ra cỏc phần tử “tớch cực”. Một phần tử tớch cực là một biểu thức hoặc một lệnh được viết một lần, được lưu trữ vào cơ sở dữ liệu và chờ đợi phần tử thực hiện vào những lỳc thớch hợp. Thời gian hành động cú thể là khi một sự kiện nào đú xảy ra, chẳng hạn khi chốn một bộ giỏ trị vào một quan hệ cụ thể hoặc cú thể là khi cơ sở dữ liệu thay đổi sao cho một điều kiện cú giỏ trị logic trở thành đỳng.
Một trong những vấn đề nghiờm trọng đối mặt với những người viết chương trỡnh ứng dụng để cập nhật cơ sở dữ liệu là thụng tin mới cú thể sai theo nhiều cỏch, chẳng hạn do cỏc lỗi chớnh tả hoặc chộp lại khi nhập dữ liệu bằng tay. Một cỏch đơn giản nhất để đảm bảo rằng việc sửa đổi cơ sở dữ liệu khụng cho phộp cỏc bộ giỏ trị khụng thớch hợp trong cỏc quan hệ là viết cỏc chương trỡnh ứng dụng sao cho mỗi lệnh chốn, xoỏ và cập nhật liờn kết với cỏc kiểm tra cần thiết để đảm bảo tớnh đỳng đắn. Cỏc đũi hỏi về tớnh đỳng đắn luụn luụn phức tạp và chỳng thường lặp lại; cỏc chương trỡnh ứng dụng phải thực hiện cỏc kiểm tra như nhau sau mỗi lần sửa đổi.
Thật may mắn, SQL cung cấp nhiều kỹ thuật để biểu thị cỏc ràng buộc toàn vẹn như là một phần của lược đồ cơ sở dữ liệu. Trong chương này chỳng ta sẽ nghiờn cứu cỏc phương phỏp cơ bản. Trước tiờn chỳng ta núi đến cỏc ràng buộc khoỏ, trong đú một thuộc tớnh hay một tập thuộc tớnh được khai bỏo như là một khoỏ đối với quan hệ. Tiếp theo, chỳng ta xem xột một dạng của toàn vẹn tham chiếu được gọi là “cỏc ràng buộc khoỏ ngoài”, chỳng đũi hỏi rằng một giỏ trị trong một (hoặc cỏc) thuộc tớnh của một quan hệ cũng phải xuất hiện như là một giỏ trị của một (hoặc cỏc) thuộc tớnh của một quan hệ khỏc. Sau đú, chỳng ta xem xột cỏc ràng buộc trờn cỏc thuộc tớnh, cỏc bộ và cỏc quan hệ. Chỳng ta sẽ nhằm vào cỏc ràng buộc giữa cỏc quan hệ được gọi là cỏc khẳng định (asertion). Cuối cựng, chỳng ta thảo luận về “trigger”, đú là một dạng của phần tử tớch cực được gọi vào hoạt động trờn cỏc sự kiện cụ thể nào đú, chẳng hạn như chốn vào một quan hệ cụ thể.
2.1 KHểA VÀ KHểA NGOÀI
Ràng buộc quan trọng nhất trong một cơ sở dữ liệu là khai bỏo một (hoặc một tập) thuộc tớnh nào đú tạo nờn một khoỏ cho một quan hệ. Nếu một tập cỏc thuộc tớnh S là một khoỏ cho một quan hệ R thỡ hai bộ bất kỳ của R phải khỏc nhau tại ớt nhất là một thuộc tớnh trong tập S. Như vậy, nếu R cú một khoỏ được khai bỏo thỡ trong R khụng được cú cỏc bộ trựng lặp.
Giống như cỏc ràng buộc khỏc, một ràng buộc khoỏ được mụ tả bờn trong lệnh CREATE TABLE của SQL. Cú hai cỏch tương đương để mụ tả cỏc khoỏ: sử dụng từ khoỏ PRIMARY KEY hoặc từ khoỏ UNIQUE. Tuy nhiờn, một bảng chỉ cú thể cú một khoỏ chớnh nhưng cú nhiều mụ tả “unique”.
SQL cũng sử dụng thuật ngữ khoỏ kết hợp với ràng buộc toàn vẹn tham chiếu. Cỏc ràng buộc này, được gọi là cỏc “ràng buộc khoỏ ngoài”, khẳng định rằng một giỏ trị xuất hiện trong thành phần khoỏ ngoài của một quan hệ cũng phải xuất hiện trong thành phần khoỏ chớnh của một quan hệ khỏc.
2.1.1 Mụ tả khoỏ chớnh
Một quan hệ chỉ cú thể cú một khoỏ chớnh. Cú hai cỏch mụ tả khoỏ chớnh trong lệnh CREATE TABLE.
1- Chỳng ta cú thể một thuộc tớnh là khoỏ chớnh khi thuộc này được liệt kờ trong lược đồ quan hệ. Theo cỏch này, chỳng ta thờm vào từ khoỏ