-
Thông tin
-
Quiz
Câu hỏi ôn tập cơ sở dữ liệu | Đại học Văn Lang
Có thể có một bảng View không có chứa dữ liệu nào không? Bảng View có chứa dữ liệu thật không? Nếu xoá toàn bộ dữ liệu trong bảng View, dữ liệu trong bảng nguồn có mất đi hết dữ liệu không? Bảng View có thể dùng được với các câu lệnh Select, Insert, Update, Delete không? Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!
Cơ sở dữ liệu (CSDL) 15 tài liệu
Đại học Văn Lang 1 K tài liệu
Câu hỏi ôn tập cơ sở dữ liệu | Đại học Văn Lang
Có thể có một bảng View không có chứa dữ liệu nào không? Bảng View có chứa dữ liệu thật không? Nếu xoá toàn bộ dữ liệu trong bảng View, dữ liệu trong bảng nguồn có mất đi hết dữ liệu không? Bảng View có thể dùng được với các câu lệnh Select, Insert, Update, Delete không? Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!
Môn: Cơ sở dữ liệu (CSDL) 15 tài liệu
Trường: Đại học Văn Lang 1 K tài liệu
Thông tin:
Tác giả:













Tài liệu khác của Đại học Văn Lang
Preview text:
PHẦN TRẮC NGHIỆM (2 điểm)
Chương 2: Khung nhìn
1. Bảng View có chứa dữ liệu thật không? Có
2. Có thể có một bảng View không có chứa dữ liệu nào không? Có
3. Nếu xoá toàn bộ dữ liệu trong bảng View, dữ liệu trong bảng nguồn có mất đi hết dữ liệu không? Lúc có lúc không
4. Bảng View có thể dùng được với các câu lệnh Select, Insert, Update, Delete không? Lúc có lúc không
5. Khi xoá một hàng trong bảng View thì hàng dữ liệu đó trong bảng nguồn có bị xoá đi không? Lúc có lúc không
6. Có thể thông qua bảng View để thêm mới một hàng dữ liệu trong bảng nguồn được không? Lúc có lúc không 7. View là gì?
Là một bảng ảo trong cơ sở dữ liệu có nội dung được định nghĩa thông qua một câu lệnh SQL nào đó.
8. Câu lệnh nào sau đây dùng để loại bỏ VIEW V1 khỏi cơ sở dữ liệu? DROP VIEW V1
9. Từ khóa nào sau đây dùng để ngăn cản các thao tác cập nhật dữ liệu (thêm, sửa) tác động trực tiếp
vào View có làm ảnh hưởng dữ liệu đối với View có sử dụng mệnh đề WHERE trong câu lệnh SELECT? WITH CHECK OPTION
Chương 3: Stored Procedure & Trigger
1. Khi muốn thực thi một Store Procedure tên P1 có một biến X kiểu số nguyên ta thực hiện lệnh sau: EXEC P1 5
2. Cho hai Table TOUR VÀ TTDK (thông tin đăng ký) có quan hệ dữ liệu như hình sau:
Cho biết ý nghĩa của Procedure sau: CREATE PROC P3 AS
SELECT A.MATOUR ,LOTRINH, SUM(SONGUOI*GIATOUR) DOANHTHU FROM TOUR A, TTDK B WHERE A.MATOUR=B.MATOUR GROUP BY A.MATOUR, LOTRINH ORDER BY DOANHTHU
Tính doanh thu của các tour
3. Trigger dùng Instead Of có thể định nghĩa nhiều trigger cho mỗi thao tác trên cùng 1 bảng không? Sai
4. Hai bảng nào được phép dùng trong UPDATE Trigger?
Bảng inserted và bảng deleted 1
5. Cho hai Table TOUR VÀ TTDK (thông tin đăng ký) có quan hệ dữ liệu như hình sau: Cho bi
ết kết quả khi thực thi Procedure P1 sau: CREATE PROC P1 AS
SELECT SUM(SONGUOI) TONGSONGUOI FROM TOUR A, TTDK B
WHERE A.MATOUR=B.MATOUR AND A.MATOUR =’T1’
Tất cả các câu còn lại đều sai
6. Khi muốn tạo một Store Procedure có một biến kiểu ký tự ta thực hiện k hai báo như sau:
CREATE PROCEDURE SP1 @X VARCHAR(50)
7. Một thủ tục được tự động thực hiện khi ta thay đổi dữ liệu trong 1 table của SQL Server thông qua
các lệnh Update, Insert, Delete, đó là: Trigger
8. Khi muốn khai báo một biến X có kiểu dữ liệu là số nguyên trong SQL ta khai báo: DECLARE @X INT
9. Cần phải viết 3 Trigger cho 3 hành động Insert/Update/Delete riêng ra trên 1 bảng? Sai 10. Chọn câu phát biểu sai:
Ta có thể xóa dữ liệu trong logic table
Chương 4: Function & Cursor 1. Cursor là:
Là một kiểu dữ liệu đặc biệt, được dùng để lưu trữ kết quả của lệnh SELECT trong quá trình lập trình
2. Hàm nào sau đây không phải là hàm của người dùng (user – defined function) Hàm bảo mật (security)
3. Kết quả trả về của hàm DBO.TEST (6,2 ) sau là:
CREATE FUNCTION TEST(@X INT,@Y INT) RETURNS INT AS BEGIN DECLARE @T INT =0
IF (@Y%@X=0) ---%: chia lấy số dư SET @T=@Y%@X ELSE SET @T=@Y+@X RETURN @T END 8
4. Khi muốn tạo một Function tên F1 có một biến X kiểu ký tự ta thực hiện khai báo như sau:
CREATE FUNCTION F1 (@X VARCHAR(10))
5. Khi muốn thực thi một hàm tên F1 có một biến X kiểu số nguyên ta thực hiện lệnh như sau: PRINT dbo.F1 (10) 6. Chọn câu phát biểu sai:
Function có thể gọi Procedure 2
7. Cho hai Table TOUR VÀ TTDK (thông tin đăng ký) có quan hệ dữ liệu như hình sau:
Muốn tính tổng số lần đăng ký của các tour ta phải thực hiện lựa chọn nào: CREATE FUNCTION F2()
RETURNS TABLE AS RETURN (SELECT MATOUR, SOLAN=COUNT(SOPHIEU) FROM TTDK GROUP BY MATOUR)
8. Giá trị trả về của một hàm (Function) phải là:
Một Table hoặc một giá trị
9. Trong cú pháp khai báo con trỏ (Cursor), từ khóa Scroll có nghĩa là:
Có thể duyệt lên xuống cursor tùy ý (duyệt theo đa chiều) 10. dùng sau:
Xác định loại cho hàm của người
CREATE FUNCTION fn_Pub (@CountryPar nvarchar(30)) RETURNS table AS
RETURN (SELECT pub_Id, pub_Name FROM pubs. dbo. Publishers WHERE country = @CountryPar) -
Hàm nội tuyến/giá trị bảng đơn giản (Inline table valued)
Chương 10: Giao tác và truy xuất đồng thời
1. Lệnh nào là lệnh kết thúc một Transaction: SAVE TRANSACTION
2. Các kiểu lock nào sau đây không phải lock trong transaction: Unlock
3. Phát biểu nào sau đây mô tả thuộc tính Atomicity của 1 Transaction?
Mọi chỉnh sửa trong 1 transaction hoặc được thi hành hết hoặc không có 1 chỉnh sửa nào được thực hiện
4. Lệnh nào cho phép quay trở thời điểm bắt đầu của Transaction hoặc là một vị trí nào đó được đánh dấu: ROLLBACK TRANSACTION
5. Cô Châu cần chèn 1 điểm dừng (Save Point) có tên là ‘Returnback’ vào Transaction, thì Cô nên dùng lệnh nào sau đây: SAVE TRANSACTION Returnback
6. Ý nghĩa của nhóm lệnh BEGIN TRAN… COMMIT là gì?
Mở transaction bằng lệnh BEGIN TRAN và kết thúc bằng lệnh COMMIT – sau lệnh này những
cập nhật dữ liệu sẽ được xác nhận vào trong database
7. Nếu thiếu cơ chế khoá thì vấn đề nào sẽ xảy ra khi 2 hay nhiều transaction đều chỉnh sửa cùng 1 hàng dữ liệu:
Mất dữ liệu cập nhật (Lost updates)
8. Lỗi nào sau đây không phải lỗi xảy ra truy xuất đồng thời?
Đọc không cùng nội dung (Inconsistent Analysis)
9. Thuộc tính nào của Transaction bảo đảm tính tuần tự? Isolation
10. TRANSACTION trong SQL có các thuộc tính thường được viết tắt là ACID nghĩa là gì?
Atomicity, Consistency, Isolation, Durability
Chương 11: Kĩ thuật tối ưu hóa truy vấn
1. Đâu không phải là nguyên nhân làm chậm truy vấn:
Không dùng Stored Procedure 3
2. Câu lệnh nào sau đây có sử dụng index trên cột MaNV và index không bị mất hiệu lực?
SELECT MaNV, TenNV,TenPHG, DiaChi FROM NhanVien WHERE MaNV LIKE 'NV%' 3.
Câu lệnh nào sau đây tối ưu so với các câu còn lại:
SELECT MaNV, TenNV,TenPHG, DiaChi,DienThoai FROM NhanVien n LEFTJOIN PhongBan
p WHERE n.mapb = p.mapb and NgaySinh < DATEADD(YEAR,-30,GETDATE()) 4.
Câu lệnh nào sau đây tối ưu so với các câu còn lại:
IF EXISTS (SELECT MaNV FROM NhanVien WHERE GioiTinh = 'Nam' or Luong >2001) 5.
Câu lệnh nào sau đây tối ưu so với các câu còn lại:
SELECT MaNV, TenNV,TenPHG, DiaChi FROM NhanVien WHERE Luong > 2001 OR MaPB = 1
6. Đâu không phải là phương pháp cải tiến để tối ưu hóa câu truy vấn? Sử dụng Trigger 7.
Câu lệnh nào sau đây chưa tối ưu so với các câu còn lại:
SELECT * FROM NhanVien n LEFTJOIN PhongBan p WHERE n.mapb = p.mapb 8.
Câu lệnh nào sau đây tối ưu so với các câu còn lại:
SELECT MaNV, TenNV,TenPHG, DiaChi FROM NhanVien WHERE GioiTinh = 'Nam' or Luong >2001
9. Đâu không phải là cách sử dụng Index hợp lý:
Nên tạo Index trên các cột mà có giá trị là chuỗi hơn là giá trị Interger. 10.
Câu lệnh nào sau đây chưa tối ưu so với các câu còn lại:
SELECT * FROM NhanVien n LEFTJOIN PhongBan p WHERE n.mapb = p.mapb and Luong >= 2000
Tổng hợp
1. Bảng View có chứa dữ liệu thật không? Không 2. View là gì? Là một bảng d
ảo trong cơ sở ữ liệu có nội dung được định nghĩa thông qua một câu lệnh SQL nào đó.
3. Câu lệnh nào sau đây dùng để loại b V ỏ IEW V1 khỏi cơ sở d l ữ iệu? DROP VIEW V1
4. Câu lệnh nào sau đây có sử d ng i ụ ndex trên c t
ộ MaNV và index không bị mất hiệu l c ự ?
SELECT MaNV, TenNV,TenPHG, DiaChi FROM NhanVien WHERE MaNV LIKE 'NV%'
5. Đâu không phải là cách s d ử ng I ụ ndex hợp lý:
Nên tạo Index trên các c t
ộ mà có giá trị là chuỗi hơn là giá trị Interger. 6. M t ộ th t ủ ục được t ự ng t độ h c
ự hiện khi ta thay đổi dữ liệu trong 1 table c a ủ SQL Server thông qua
các lệnh Update, Insert, Delete, đó là: Trigger 7. Khi mu n t ố hực thi m t
ộ Store Procedure tên P1 có m t
ộ biến X kiểu s nguyên ta th ố ực hiện lệnh sau: EXEC P1 5
8. Trigger dùng For/After có thể định nghĩa nhiều trigger cho m i
ỗ thao tác trên cùng 1 bảng không? Đúng 9. Ch n c ọ âu phát biểu sai: Ta có thể xóa d l ữ iệu trong logic table 10. Cursor là:
Là một kiểu dữ liệu đặc biệt, được dùng để k
lưu trữ ết quả của lệnh SELECT trong quá trình lập trình 11. Ch n c ọ âu phát biểu sai: Function có thể g i ọ Procedure
12. Các chỉ mục (Index) được xây dựng dựa trên m t ộ hay m t ộ s
ố Field trong table. Khi đó các Field này được gọi là: The Index Key
13. Kích thước tối đa của các c t
ộ nonvariable-length trong m t ộ index là bao nhiêu? 900
14. Index có thể được tạo trên loại đối tượng: 4 Table và view 15. M t ộ chỉ m c ục đượ tự ng t độ ạo trên c t
ộ làm khoá chính khi thực hiện lệnh tạo table Student. Chỉ mục này thu c ộ loại nào: CREATE TABLE student ( student_id int PRIMARY KEY, lname char(15), fname char(15) ) Clustered, Unique index
16. Nếu SQL Server dùng phương pháp xác thực Windows Authentication, bạn phải cung cấp cho hệ
thống một mã đăng nhập (login ID, login password) mỗi khi truy cập vào SQL Sever. Sai
17. SQL Server kiểm tra người dùng hợp lệ ở hai cấp độ: ….. hoặc Windows Authentication: SQL Server Authentication
18. Server role nào sau mặc định bao g m ồ các thành viên c a ủ nhóm Administrator c a ủ Windows? Sysadmin 19. Các ki i
ểu lock nào sau đây không phả lock trong transaction: Unlock
20. Phát biểu nào sau đây mô tả thuộc tính Atomicity của 1 Transaction?
Mọi chỉnh sửa trong 1 transaction hoặc được thi hành hết hoặc không có 1 chỉnh sửa nào được thực hiện
PHẦN TỰ LUẬN (8 điểm)
CÂU 1: [2 điểm] Tìm phủ tối thiểu
Cho lược đồ quan hệ R (ABCDEG) và tập các phụ thuộc hàm:
F = {AB→ C, AC→D, D→EG, G→B, A→D, CG→A}
Hãy tìm phủ tối thiểu của F (sinh viên chỉ cần ghi kết quả Phủ tối thiểu cuối cùng vào đây): Giải
Bước 1: Tách vế phải phụ thuộc hàm:
AB → C, AC → D, D → E, D → G, G → B, A → D, CG → A
Bước 2: Kiểm tra các phụ thu a h
ộc hàm đã tách có dư thừ ay không:
AB → C, AC → D, D → E, D → G, G → B, A → D, CG → A
ABC: tính AB+ không dùng ABC, AB+ = {ABDEG} không có C vậy ABC là không thừa.
ACD: tính AC+ không dùng ACD, AC+ = {ACDEGB} có D vậy ACD là dư thừa.
DE: tính D+ không dùng DE, D+ = {DGB} không có E vậy DE là không thừa.
DG: tính D+ không dùng DG, D+ = {DE} không có G vậy DG là không thừa.
GB: tính G+ không dùng GB, G+ = {G} không có B vậy GB là không th a ừ .
AD: tính A+ không dùng AD
, A+ = {A} không có D vậy AD là không th a ừ . 5 ậ CGA
CGA: tính CG+ không dùng CGA
, CG+ = {CGB} không có A v y là không thừa. Kết quả Bước 2:
AB → C, D → E, D → G, G → B, A → D, CG → A
Bước 3: Bỏ các thuộc tính dư thừ ở a ế v trái:
AB → C, D → E, D → G, G → B, A → D, CG → A
ABC thử bỏ A tính B+ không dùng ABC mà dùng BC
, B+ = {BC} không ch a ứ A vậy A không thừa.
ABC thử bỏ B tính A+ không dùng ABC mà dùng AC
, A+ = {ACDGBE} có ch a ứ B vậy B là dư thừa.
Bỏ B: A → C, D → E, D → G, G → B, A → D, CG → A
CGA thử bỏ C tính G+ không dùng CGA mà dùng GA
, G+ = {GADEBC} có ch a ứ C vậy C là dư thừa.
Bỏ C: A → C, D → E, D → G, G → B, A → D, G → A Kết quả Bước 3:
A → C, D → E, D → G, G → B, A → D, G → A
Kết luận: Phủ tổi thiểu A → C, D → E, D → G, G → B, A → D, G → A
CÂU 2: [2 điểm] Tối ưu hóa câu truy vấn Cho lược đồ cơ sở dữ liệu như sau:
SACH (Ma_sach, Ten_sach, Tac_gia, Ma_XB)
NHA_XUAT_BAN (Ma_XB, Ten_XB, Dia_chi, Thanh_pho)
DOC_GIA (So_the, Ten_DG, Dia_chi, Thanh_pho)
MUON_SACH (So_the, Ma_sach, Ngay_muon)
a) Hãy viết câu truy vấn SQL cho biết tên độc giả, tên sách đã mượn nh ng cu ữ n s ố ách trước
ngày 27/09/2020. [0.5 điểm] - Sinh viên ghi câu Query SQL SELECT Ten_DG, Ten_sach
FROM SACH S, DOC_GIA D, MUON_SACH M
WHERE S.Ma_sach = M.Ma_sach AND D.So_the = M.So_the
AND Ngay_muon < ‘27/09/2020’
b) Tối ưu hoá câu lệnh truy vấn ở Câu a) [1.5 điểm] – Sinh viên không cần vẽ cây, chỉ
cần ghi kết quả cuối cùng theo mẫu cho sẵn bên dưới (lưu ý dưới đây là mẫu). 6 Ten_DG, Ten_sach
Ngay_muon<’27/09/2020’ ((SACH MUONSACH) DOC_GIA) 7
R1 = So_The, Ten_DG DOC_GIA
R2 = So_the, Ten_sach ( Ma_sach, Ten_sach SACH
Ma_sach, So_the Ma_sach=Ma_sach
Ngay_muon<’27/09/2020’ MUON_SACH)
KQ = Ten_DG, Ten_sach (R1 R2) So_the=So_the
CÂU 3: [2 điểm] Chỉ mục
Cho lược đồ cơ sở dữ liệu như sau:
a) Hãy viết câu truy vấn SQL tạo 2 chỉ mục sau: [1 điểm] 8
a.1) Tạo CLUSTERED INDEX tên là CI_LOPHOC_MALOP trên cột MALOP của
bảng LOPHOC, cột MALOP giảm dần? [0.5 điểm]
CREATE CLUSTERED INDEX CI_LOPHOC_MALOP ON LOPHOC (MALOP DESC)
a.2) Tạo UNIQUE NON-CLUSTERED INDEX tên là UI_KHOAHOC_TENKH
trên cột TENKH của bảng KHOAHOC và thêm option nếu đã có Index trùng tên này
rồi thì xóa Index cũ tr ớ
ư c đó? [0.5 điểm]
CREATE UNIQUE NON-CLUSTERED INDEX UI_KHOAHOC_TENKH ON KHOAHOC (TENKH) WITH DROP_EXISTING
b) Hãy viết lại các câu truy vấn sau để sargable: [1 điểm]
b.1) Câu truy vấn 1: [0.5 điểm]
Hãy cho biết mã, họ và tên của những học viên có tuổi từ 18 trở lên (Index trên trường NTNS). SELECT MAHV,HO, TEN FROM HOCVIEN
WHERE DATEDIFF(YEAR, NTNS, GETDATE()) >= 18
Viết lại câu sargable: SELECT MAHV, HO, TEN FROM HOCVIEN
WHERE NTNS <= DATEADD(YEAR, -18, GETDATE())
b.2) Câu truy vấn 2: [0.5 điểm]
Hãy cho biết mã lớp, phòng học của những lớp học mà có 3 ký tự bên trái trong Mã
lớp là 3 ký tự “TRR” (Index trên cột MALOP, LEFT là hàm lấy ký tự bên trái). SELECT MALOP,PHHOC FROM LOPHOC
WHERE LEFT(MALOP,3) = ‘TRR’
Viết lại câu sargable: SELECT MALOP,PHHOC FROM LOPHOC
WHERE MALOP LIKE ‘TRR%’
CÂU 4: [2 điểm] Giao tác
Trường hợp 1: Giả sử TenKH hiện tại của MaKH KH001 là “Nguyen Van An” T1 T2 9 BEGIN TRAN UPDATE KhachHang SET TenKH= 'ABC' WHERE MaKH= 'KH001' WAITFOR DELAY '00:00:05' BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED SELECT TenKH FROM KhachHang WHERE MaKH = 'KH001' COMMIT TRAN ROLLBACK TRAN SELECT TenKH FROM KhachHang WHERE MaKH = 'KH001'
Nhận xét kết quả 2 câu lệnh Select của T1 và T2?
Do là Read UnCommitted nên trong quá trình T1 vừa update xong tên khách hàng thì T2 có thể
đọc nội dung bảng Khách hàng mà không phải chờ, vì vậy lần đọc thứ nhất của T2 TenKH là
“ABC”, lần đọc thứ hai của T1 TenKH là “Nguyen Van An” do T1 sau khi cập nhật xong thì
Rollback hủy đi những gì đã thực hiện trước đó. Kết luận: kết quả đọc của T1 và T2 khác nhau, T2 đọc dữ liệu rác.
Trường hợp 2: Giả sử TenKH hiện tại của MaKH KH001 là “Nguyen Van An” T1 T2 BEGIN TRAN UPDATE KhachHang SET TenKH= 'ABC' WHERE MaKH= 'KH001' WAITFOR DELAY '00:00:05' BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT TenKH FROM KhachHang WHERE MaKH = 'KH001' COMMIT TRAN COMMIT TRAN SELECT TenKH FROM KhachHang WHERE MaKH = 'KH001' 10
Nhận xét kết quả 2 câu lệnh Select của T1 và T2?
Do là Read Committed nên trong quá trình T1 v a
ừ update xong tên khách hàng thì T2 không thể
đọc nội dung bảng Khách hàng mà phải chờ cho T1 thực hiện xong, sau khi thực hiện Update thì
T1 có commit lại những gì đã thực hiện. Kết luận: kết quả c
đọ của T1 và T2 là gi ng nhau, tên ố Khách hàng là “ABC”.
-----------------------o0o-----------------------
Cho Lược đồ quan hệ như sau: QuanHuyen (MaQH, TenQH)
Duong (MaDuong, TenDuong, MaQH, NgayDuyet)
NhaTrenPho (MaNha, ChuHo, DienTich, MaDuong, NgaySoHuu) Câu 1: T o C ạ
LUSTERED INDEX tên là CI_NhaTrenPho_MaNha trên c t
ộ MaNha của b n ả g NhaTrenPho
CREATE CLUSTERED INDEX CI_NhaTrenPho_MaNh a
ON NhaTrenPho (MaNha DESC) Câu 2: T o U ạ
nique Non-Clustered Index tên là UI_QuanHuyen_TenQH trên c t
ộ TenQH của
bảng QuanHuyen, nếu Index bị trùng tên thì xóa cái cũ đi.
CREATE UNIQUE NONCLUSTERED INDEX UI_QuanHuyen_TenQH
ON QuanHuyen (TenQH) WITH DROP EXISTING
Câu 3: Hãy viết l i
ạ các câu truy vấn sau để sargable
3.1) Hãy tìm tất cả những Nhà trên ph t ố hu c
ộ loại nhà Chung cư, tức là ký tự u
đầ tiên trong Mã
nhà là ký tự “C”. SELECT * FROM NhaTrenPho
WHERE SUBSTRING(MANHA, 1, 1) = ‘C’
SUBSTRING(MANHA, 2, 1) = ‘C’ RIGHT(MANHA, 2) = ‘CA’ ----- SELECT * FROM NhaTrenPho WHERE MANHA LIKE ‘C%’ MANHA LIKE ‘_C%’ MANHA LIKE ‘%CA’
3.2) Hãy tìm tất cả những Nhà trên ph c
ố ó ngày sở hữu trong tháng 9 năm 2020 (giả sử index
trên trường NgaySoHuu). SELECT * FROM NhaTrenPho
WHERE MONTH(NgaySoHuu) = 9 AND YEAR(NgaySoHuu) = 2020 ----- SELECT * FROM NhaTrenPho WHERE NgaySoHuu >= A
‘2020/9/1’ ND NgaySoHuu <= ‘2020/9/30’ 11
3.3) Hãy tìm tất cả những con Đường có ngày duyệt vào ngày ‘2020/9/2’ (giả sử index trên
trường NgayDuyet) SELECT * FROM Duong
WHERE CONVERT(VARCHAR, NgayDuyet, 103) = ‘2020/9/2’ ----- SELECT * FROM Duong
WHERE NgayDuyet >= ‘2020/9/2’ AND NgayDuyet < ‘2020/9/3’
Cho lược đồ quan hệ R (ABCDEG) và tập phụ thuộc hàm: F=
{B → C, DEG → B, A → D, A → E, A → G} Tìm phủ t i
ố thiểu của F. --------- Giải:
Bước 1: Tách vế phải phụ thuộc hàm:
B → C; DEG → B; A → D; A → E; A → G
Bước 2: Kiểm tra các phụ thu a h
ộc hàm đã tách có dư thừ ay không:
B → C; DEG → B; A → D; A → E; A → G
BC: tính B+ không dùng BC, B+ = {B} không có C vậy BC là không thừa.
DEGB: tính DEG+ không dùng DEGB, DEG+ = {DEG} không có B vậy DEGB là không th a ừ .
AD: tính A+ không dùng AD
, A+ = {AEG} không có D vậy AD là không th a ừ .
AE: tính A+ không dùng AE, A+ = {ADG} không có E vậy AE là không thừa.
AG: tính A+ không dùng AG, A+ = {ADE} không có G vậy AG là không thừa. Vậy ph t
ụ huộc hàm không thay đổi:
B → C; DEG → B; A → D; A → E; A → G
Bước 3: Bỏ các thuộc tính dư thừ ở a ế v trái:
B → C; DEG → B; A → D; A → E; A → G
DEGB thử bỏ D tính EG+ không dùng DEGB mà dùng EGB, EG+ = {EGBC} không
chứa D vậy D không thừa.
DEGB thử bỏ E tính DG+ không dùng DEGB mà dùng DGB, DG+ = {DGBC}
không chứa E vậy E không th a ừ .
DEGB thử bỏ G tính DE+ không dùng DEGB mà dùng DEB, DE+ = {DEBC} không
chứa G vậy G không thừa. Vậy ph t
ụ huộc hàm không thay đổi
Kết luận: Phủ tổi thiểu
B → C; DEG → B; A → D; A → E; A → G 12 Bài m u ẫ
Bài 2: Cho lược đồ quan hệ Q(ABCDEGH) và tập phụ thuộc hàm:
F = { E → C; H → E; A→ D; AE → H; DG → B; DG → C }
Tìm phủ tối thiểu của F. Giải:
Bước 1: Tách vế phải phụ thuộc hàm:
E → C; H → E; A→ D; AE → H; DG → B; DG → C
Bước 2: Kiểm tra các phụ thuộc hàm đã tách có dư thừa hay không:
E → C; H → E; A→ D; AE → H; DG → B; DG → C
EC: tính E+ không dùng EC
, E+ = {E} không có C vậy EC là không thừa.
HE: tính H+ không dùng HE, H+ = {H} không có E vậy HE là không thừa.
AD: tính A+ không dùng AD
, A+ = {A} không có D vậy AD là không thừa.
AEH: tính AE+ không dùng AEH, AE+ = {AECD} không có H vậy AEH là không thừa.
DGB: tính DG+ không dùng DGB, DG+ = {DGC} không có B vậy DGB là không thừa.
DGC: tính DG+ không dùng DGC
, DG+ = {DGB} không có C vậy DGC là không thừa.
Vậy phụ thuộc hàm không thay đổi:
E → C; H → E; A→ D; AE → H; DG → B; DG → C
Bước 3: Bỏ các thuộc tính dư thừa ở vế trái
E → C; H → E; A→ D; AE → H; DG → B; DG → C
AEH thử bỏ A tính E+ không dùng AEH mà dùng EH, E+ = {EHC} không chứa A vậy A không thừa.
AEH thử bỏ E tính A+ không dùng AEH mà dùng AH, A+ = {AHDEC} có chứa E vậy E thừa. Bỏ E:
E → C; H → E; A→ D; A → H; DG → B; DG → C
DGB thử bỏ D tính G+ không dùng DGB mà dùng GB, G+ = {GB} không chứa D vậy D không thừa.
DGB thử bỏ G tính D+ không dùng DGB mà dùng DB, D+ = {DB} không chứa G vậy G không thừa.
DGC thử bỏ D tính G+ không dùng DGC mà dùng GC
, G+ = {GC} không chứa D vậy D không thừa.
DGC thử bỏ G tính D+ không dùng DGC mà dùng DC
, D+ = {DC} không chứa G vậy G không thừa.
Kết luận: Phủ tổi thiểu
E → C; H → E; A→ D; A → H; DG → B; DG → C 13