CHƯƠNG 2. MÔ HÌNH DỮ LIỆU QUAN HỆ
2.4. C ÁC PHÉP TOÁN TRÊN CSDL QUAN HỆ
2.4.3. Phép cập nhật (Update)
Trong thực tế, không phải lúc nào cũng chỉ dùng phép chèn hoặc loại bỏ đi một bộ mà nhiều khi chỉ cần cập nhật một số giá trị nào đó tại một số thuộc tính, lúc đó cần thiết phải sử dụng phép cập nhật.
Định nghĩa 2.24. Gọi tập {C1,…, Cp} {A1,…, An} là tập các thuộc tính mà tại đó các giá trị của bộ cần thay đổi, khi đó phép cập nhật có dạng : r = (r \{t}){t’}.
UPDATE (r; A1=d1, A2=d2,…, An=dn; C1=e1, C2=e2,…, Cp=ep) Nếu K= {B1,…, Bm} là khoá của quan hệ, khi đó chỉ cần viết:
UPDATE (r; B1=d1, B2=d2,…, Bm=dm; C1=e1, C2=e2,…, Cp=ep)
64
Ví dụ 2.35. Hãy cập nhật Năm sinh của sinh viên có mã sinh viên 1361030001 thành 1997
Quan hệ SINH_VIEN trước cập nhật
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop 1361030001 Lê Đình Bách 1996 Nam Thanh Hoá 136103A 1561030007 Lê Thị Hoa 1998 Nữ Nam Định 156103A
UPDATE (SINH_VIEN; MaSV=1361030001; NamSinh=1997) Quan hệ SINH_VIEN sau cập nhật
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop 1361030001 Lê Đình Bách 1997 Nam Thanh Hoá 136103A 1561030007 Lê Thị Hoa 1998 Nữ Nam Định 156103A
Phép cập nhật là phép tính rất thuận lợi, hay dùng. Cũng có thể không dùng phép cập nhật mà dùng tổ hợp của phép loại bỏ và phép chèn một bộ mới. Do vậy những sai sót của phép cập nhật cũng sẽ xảy ra tương tự như phép chèn và phép loại bỏ.
Phép toán cập nhật được dùng để thay đổi các giá trị của một hoặc nhiều thuộc tính trong một (hoặc nhiều) bộ của một quan hệ R nào đấy. Để lựa chọn các bộ cần thay đổi, người sử dụng phải chỉ ra một điều kiện trên các thuộc tính.
Ví dụ 2.35.
- Cập nhật QueQuan của bộ SINH_VIEN có MaSV=1561030007 thành “Thái Bình”. Phép cập nhật này được chấp nhận.
- Cập nhật MaLop của bộ SINH_VIEN có MaSV=1561030007 thành 10. Phép cập nhật này vi phạm toàn vẹn tham chiếu (trong bảng LOP không có MaLop=10).
- Cập nhật MaSV của bộ SINH_VIEN có MaSV=“1561030007” thành
“1361030001”. Phép cập nhật này vi phạm ràng buộc toàn vẹn thực thể và toàn vẹn tham chiếu (MaSV=1361030001 đã tồn tại).
Phép cập nhật một thuộc tính không phải là một khóa chính hoặc một khóa ngoài thường không gây ra các vi phạm ràng buộc. Hệ quản trị CSDL chỉ cần kiểm tra để khẳng định giá trị mới là thuộc tính miền và kiểu giá trị đúng đắn. Việc cập nhật giá trị một khóa chính tương tự như việc xóa một bộ và chèn các bộ khác vào chỗ của nó. Như vậy, ta trở về trường hợp đã thảo luận với phép chèn và phép xóa. Nếu một thuộc tính khóa ngoài bị cập nhật thì hệ quản trị CSDL phải đảm bảo giá trị mới tham chiếu đến một bộ có tồn tại trong quan hệ được tham chiếu (hoặc là null).
Ngôn ngữ đại số quan hệ là ngôn ngữ dựa trên các phép toán đại số quan hệ.
Nó cung cấp cho người sử dụng các câu lệnh để thực hiện việc đặc tả các phép toán đại số quan hệ. [7] [10]
65
TÓM TẮT CUỐI CHƯƠNG 2
✓ Thuộc tính là một tính chất riêng biệt của một đối tượng cần được lưu trữ trong CSDL để phục vụ cho việc khai thác dữ liệu về đối tượng.
✓ Miền là phạm vi giá trị có thể dùng cho một thuộc tính. Nó phải nhận giá trị đơn.
Miền tương tự về mặt khái niệm với kiểu dữ liệu trong lập trình. Cũng như kiểu dữ liệu, miền không chỉ xác định tập các giá trị gán cho thuộc tính, mà còn xác định các thao tác được phép sử dụng trên các dữ liệu.
✓ Cho n tập D1, D2, ... Dn, không nhất thiết phân biệt nhau, khi đó R được định nghĩa là 1 quan hệ trên n tập đó nếu R là một tập nào đó các bộ được sắp (d1, d2, ..., dn) sao cho di Di
✓ Một quan hệ được biểu thị như một bảng các giá trị gồm các hàng và cột. Mỗi hàng tương ứng với một bộ và mỗi cột tương ứng với một thuộc tính.
✓ Lượcđồ quan hệ được định nghĩa như một danh sách các thuộc tính mô tả cấu trúc của một quan hệ. Một quan hệ (hoặc trạng thái quan hệ) là một tập hợp các bộ giá trị phù hợp với lược đồ.
✓ Một siêu khóa là một tập thuộc tính xác định các bộ một cách duy nhất trong quan hệ. Các khoá dự tuyển là các siêu khoá nhỏ nhất. Khoá chính là một khoá dự tuyển được chọn dùng để nhận diện các bộ. Một quan hệ luôn có một khoá chính. Khoá ngoài của một quan hệ là một tập thuộc tính trong một quan hệ có vai trò làm khoá dự tuyển trong một quan hệ khác.
✓ Các phép cập nhật trên mô hình quan hệ gồm Insert, Delete, Update. Mỗi một phép toán có thể vi phạm các kiểu ràng buộc nhất định. Mỗi khi một phép toán được áp dụng, trạng thái cơ sở dữ liệu sau khi phép toán được thực hiện phải được kiểm tra để đảm bảo không có một ràng buộc nào bị vi phạm.
✓ Đại số quan hệ cơ sở, đó là một tập hợp các phép toán thao tác quan hệ và có thể được sử dụng để đưa ra các truy vấn. Ta đã định nghĩa và phân tích cách sử dụng các phép toán như chiếu, chọn, tích Đề các, nối, phép đặt lại tên. Các phép toán tập hợp như giao, hợp, trừ cũng được định nghĩa và phân tích.
✓ Các kiểu truy vấn quan trọng không thể sử dụng được các phép toán đại số quan hệ cơ sở. Ta sẽ phải sử dụng các phép toán hàm nhóm để làm việc với các kiểu yêu cầu nhóm.
66
CÂU HỎI ÔN TẬP CHƯƠNG 2
2.1. Hãy phân biệt các khái niệm sau: thuộc tính và miền, quan hệ và lược đồ quan hệ, lược đồ quan hệ và lược đồ CSDL, siêu khoá và khoá chỉ định.
2.2. Hãy giải thích sự khác nhau giữa khoá chỉ định và khoá chính? Vì sao phải chỉ định một trong các khóa dự tuyển (khoá chỉ định) làm khóa chính.?
2.3. Hãy giải thích ý nghĩa của khoá ngoài, cho ví dụ minh hoạ. Khái niệm này dùng để làm gì? Các khóa ngoài đóng vai trò như thế nào trong phép nối?
24. Hãy trình bày các thuật ngữ sau: primary key, unique key, foreign key. Theo bạntiêu chí nào thường được dùng để chọn khóa chính?
2.5. Hãy cho biết tại sao sự xuất hiện của 2 bộ giống hệt nhau trong một quan hệ là không được phép?
2.6. Hãy cho ví dụ một CSDL và các phép cập nhật dữ liệu gây nên sự vi phạm tính toàn vẹn thực thể và tính toàn vẹn tham chiếu. Vì sao cần duy trì tính toàn vẹn dữ liệu cho CSDL?
2.7. Hãy giải thích các phép toán cập nhật trên các quan hệ và các kiểu ràng buộc toàn vẹn phải được kiểm tra đối với mỗi phép toán cập nhật.
2.8. Liệt kê các phép toán đại số quan hệ và mục đích của từng phép toán.
2.9. Khả hợp là gì? Vì sao các phép toán hợp, giao, trừ đòi hỏi các quan hệ tham gia vào phép toán phải khả hợp?
2.10. Hãy cho biết ngôn ngữ thao tác dữ liệu là gì?
2.11. Hãy cho biết toán hạng trong các phép toán là gì? Cho ví dụ minh họa.
2.12. Kết quả của các phép toán thao tác dữ liệu là gì?
2.13. Kết quả của phép toán JOIN (kết nối) sẽ là?
2.14. Hãy nêu các kiểu phép toán nối khác nhau.
2.15. Phép toán hàm là gì? Nó được dùng vì mục đích nào?
67
BÀI TẬP CHƯƠNG 2
Bài 2.1. Cho lược đồ quan hệ sau:
KHACH_HANG (MaKH, TenKH, DiaChi, LoaiKH) DIEN_THOAI (SoDT, MaKH, LoaiDT, SoHD) DICH_VU (MaDV, TenDV)
DANG_KY (MaDV, SoDT) Trong đó:
KHACH_HANG: Quan hệ khách hàng, lưu trữ thông tin của khách hàng MaKH: Thông tin mã khách hàng
TenKH: Thông tin tên khách hàng DiaChi: Địa chỉ của khách hàng LoaiKH: Loại khách hàng
DIEN_THOAI: Quan hệ điện thoại, lưu trữ thông tin về số điện thoại khách hàng.
SoDT: Số điện thoại của khách hàng MaKH: Mã khách hàng
LoaiDT: Loại điện thoại SoHD: Số hợp đồng dịch vụ
DICH_VU: Quan hệ dịch vụ lưu trữ thông tin các loại dịch vụ MaDV: Mã dịch vụ
TenDV: Tên của dịch vụ
DANG_KY: Quan hệ đăng kí, lưu trữ thông tin đăng kí dịch vụ của khách hàng.
MaDV: Mã dịch vụ
SoDT: Số điện thoại đăng kí dịch vụ
Xác định các thuộc tính khóa chính, khóa ngoại và trả lời các câu truy vấn sau bằng ngôn ngữ đại số quan hệ:
a) Danh sách khách hàng (MaKH, TenKH) lắp đặt điện thoại loại “Dây cáp”.
b) Với mỗi dịch vụ có khách hàng đăng ký, hãy cho biết mã dịch vụ, tên dịch vụ và tổng số điện thoại đăng ký dịch vụ đó.
c) Liệt kê các số hợp đồng (SoHD) có đăng ký dịch vụ “Dịch vụ 108”.
Bài 2.2. Cho cơ sở dữ liệu “Hệ thống quản lý xe ô tô du lịch” ở một doanh nghiệp vận tải hành khách như sau:
LOAI_XE (MaLX, TenLX, ThongTinLX, SoLuongXe) XE (MaXe, TenXe, CapSo, MaLX, HangSX, ThongTinXe) TAI_XE (MaTX, HoTen, NgaySinh, GioiTinh, DiaChi)
68
CHUYEN_DI (SoCD, MaXe, MaTX, NgayDi, NgayVe, NoiDi, NoiDen, ChieuDai, SoNguoi)
Trong đó:
LOAI_XE: Quan hệ loại xe, lưu trữ danh sách các loại xe MaLX: Mã lái xe
TenLX: Tên lái xe
ThongTinLX: Thông tin về lái xe SoLuongXe: Số lượng xe
XE: Quan hệ xe, lưu trữ danh sách các xe MaXe: Mã xe hiện có
TenXe: Tên của xe CapSo: Cấp sổ MaLX: Mã lái xe
HangSX: Hãng sản xuất ra xe ThongTinXe: Thông tin về xe
TAI_XE: Quan hệ tài xê, lưu trữ danh sách các tài xế MaTX: Mã tài xế
HoTen: Họ và tên lái xe
NgaySinh: Ngày sinh của tài xế GioiTinh: Giới tính
DiaChi: Địa chỉ liên hệ của tài xế
CHUYEN_DI: Quan hệ chuyến đi, lưu trữ danh sách các chuyến đi SoCD: Mã số chuyến đi
MaXe: Mã xe MaTX: Mã tài xế NgayDi: Ngày đi NgayVe: Ngày về NoiDi: Nơi đi NoiDen: Nơi đến ChieuDai: Chiều dài SoNguoi: Số người
Xác định các thuộc tính khóa chính, khóa ngoại và trả lời các câu truy vấn sau bằng ngôn ngữ đại số quan hệ:
a) Cho biết họ tên tài xế, ngày đi, ngày về của những chuyến đi có chiều dài lớn hơn hoặc bằng 300km đã chuyên chở từ12 người trở lên trong mỗi chuyến.
b) Cho biết họ tên tài xế, ngày đi, ngày về của những chuyến đi có chiều dài lớn hơn hoặc bằng 300km đã chuyên chở từ 12 người trở lên trong mỗi chuyến, thuộc xe có mã loại xe là “15-Cho”.
69
c) Với mỗi tài xế, hãy cho biết tổng số chuyến đi mà tài xế được phân công lái xetrong năm 2005 (tính theo ngày đi). Thông tin hiển thị gồm 2 cột: Mã tài xế, họ tên và tổng số chuyến đi.
Bài 2.3. Cho lược đồ cơ sở dữ liệu Quản lý đặt mua báo như sau:
BAO (MaToBao, TenBao, DiaChiTS)
DOC_GIA(MaDG, HoTen, NgaySinh, GioiTinh, DiaChi)
DAT_MUA (MaDG, MaToBao, Quy, Nam, SoLuong, DonGia, ThanhTien) Trong đó:
BAO: Quan hệ báo, lưu trữ các thông tin về tờ báo MaToBao: Mã số báo
TenBao: Tên báo
DiaChiTS: Địa chỉ tòa soạn
DOC_GIA: Quan hệ độc giả, lưu trữ các thông tin về độc giả MaDG: Mã độc giả
HoTen: Họ và tên độc giả NgaySinh: Ngày sinh GioiTinh: Giới tính DiaChi: Địa chỉ
DAT_MUA: Quan hệ đặt mua, lưu trữ danh sách đặt mua báo MaDG: Mã độc giả
MaToBao: Mã tờ báo Quy: Quý
Nam: Năm
SoLuong: Số lượng DonGia: Đơn giá ThanhTien: Thành tiền
Xác định các thuộc tính khóa chính, khóa ngoại và trả lời các câu truy vấn sau bằng ngôn ngữ đại số quan hệ:
a) Cho biết họ tên, địa chỉ các đọc giả đặt mua báo tuổi trẻ (TenBao=“Tuổi trẻ”) của quý 1 năm 2006.
b) Cho biết họ tên, địa chỉ các đọc giả đặt mua báo tuổi trẻ (TenBao=“Tuổi trẻ”) của quý 1 năm 2006
c) Hãy cho biết tổng số tờ báo độc giả đặt mua trong năm 2005 theo từng báo.
Thông tin hiển thị gồm 2 cột: MaToBao và tổng số tờ đặt.
d) Tương tự câu d nhưng thông tin hiển thị gồm 2 cột: TenBao và tổng số lượng đặt.
Bài 2.4. Cho lược đồ cơ sở dữ liệu Quản lý thi tốt nghiệp tại một trường THPT như sau:
PHONG_THI (SoPT, DiaChiPT, SucChua)
70
THI_SINH(SoBD, HoTen, NgaySinh, GioiTinh, DiaChi, SoPT) MON_THI(MaMT, TenMT, Buoi, NgayThi)
KET_QUA(SoBD, MaMT, DiemThi,VangThi) Trong đó:
PHONG_THI: Quan hệ phòng thi, lưu trữ danh sách các phòng thi SoPT: Số phòng thi
DiaChiPT: Địa chỉ phòng thi SucChua: Sức chứa của phòng
THI_SINH: Quan hệ thí sinh, lưu trữ danh sách các thí sinh SoBD: Số báo danh
HoTen: Họ và tên NgaySinh: Ngày sinh GioiTinh: Giới tính DiaChi: Địa chỉ SoPT: Số phòng thi
MON_THI: Quan hệ môn thi, lưu trữ danh sách các môn thi MaMT: Mã môn thi
TenMT: Tên môn thi Buoi: Buổi thi
NgayThi: Ngày thi
KET_QUA: Quan hệ kết quả, lưu trữ danh sách kết quả thi SoBD: Số báo danh
MaMT: Mã môn thi DiemThi: Điểm thi VangThi: Vắng thi
Xác định các thuộc tính khóa chính, khóa ngoại và trả lời các câu truy vấn sau bằng ngôn ngữ đại số quan hệ:
a) Với các thí sinh thi ở phòng ‘P07’ (SoPT = ‘P07’), hãy liệt kê số báo danh, họ tên thí sinh, tên môn thi, điểm thi với tình trạng là có dự thi (VangThi = 0).
b) Với các thí sinh thi ở phòng ‘P07’ (SoPT = ‘P07’) vào ngày ‘21/5/2006’, hãy liệt kê số báo danh, họ tên thí sinh, tên môn thi, điểm thi với tình trạng là có dự thi (VangThi = 0). Sắp thứ tự tăng dần theo số báo danh, tên môn thi.
c) Cho biết phòng thi (SoPT) có số lượng thí sinh thi đông nhất.
Bài 2.6. Cho lược đồ cơ sở dữ liệu quản lý giải bóng đá quốc gia với các quan hệ như sau
CAUTHU (MaCT, HoTen, ViTri, NgaySinh, DiaChi, MaCLB, MaQG)
Mỗi cầu thủ (CAUTHU) có một mã số duy nhất (MaCT) xác định họ tên (HoTen), ngày sinh (NgaySinh), địa chỉ (DiaChi), thuộc một câu lạc bộ (MaCLB), thuộc một quốc gia và có một quốc tịch (MaQG), giữ một vị trí trên sân (ViTri), vị trí
71
trên sân của các cầu thủ thuộc một trong các vị trí sau: thủ môn, tiền đạo, tiền vệ, trung vệ, hậu vệ.
QUOCGIA (MaQG, TenQG)
Mỗi quốc gia (QUOCGIA) có một mã số duy nhất (MaQG) để phân biệt với các quốc gia khác, một tên duy nhất TenQG (đây cũng chính là quốc tịch của các cầu thủ).
CAULACBO (MaCLB, TenCLB, SanVĐ, Tinh)
Mỗi câu lạc bộ (CAULACBO) có một mã duy nhất (MaCLB), một tên câu lạc bộ (TenCLB), quản lý một sân bóng (SanVĐ), thuộc một tỉnh thành (Tinh).
TRANDAU (MaTran, Nam, Vong, NgayTD, MaCLB1, MaCLB2, SanVĐ, SBT1, SBT2)
Mỗi trận đấu (TRANDAU) thuộc một vòng đấu (Vong) trong mùa giải (Nam) có một mã số duy nhất (MaTran), được tổ chức thi đấu trên sân của đội chủ nhà (SanVĐ) vào một ngày (NgayTD) với sự tham gia của 2 câu lạc bộ có mã MaCLB1 (đội chủ nhà), MaCLB2 (đội khách), trong đó câu lạc bộ có mã MaCLB1 ghi được số bàn thắng là SBT1, câu lạc bộ có mã MaCLB2 ghi được số bàn thắng là SBT2.
Thực hiện các yêu cầu sau bằng ngôn ngữ đại số quan hệ:
a, Lập danh sách các cầu thủ thi đấu ở vị trí “Thủ môn” , các thông tin cần đưa ra bao gồm: họ tên cầu thủ, ngày sinh.
b, Lập danh sách các câu lạc bộ ở “Hải Phòng”, các thông tin cần đưa ra bao gồm: mã câu lạc bộ, tên câu lạc bộ, sân vận động.
c, Lập danh sách các quốc gia có cầu thủ thi đấu tại giải bóng đá vô địch quốc gia Việt Nam, các thông tin cần đưa ra bao gồm: mã quốc gia, tên quốc gia
d, Lập danh sách các tiền đạo mang quốc tịch “Việt Nam”, các thông tin cần đưa ra bao gồm: họ tên, ngày sinh, địa chỉ, tên câu lạc bộ.
e, Lập danh sách các câu lạc bộ (CLB) thi đấu trên sân nhà ở vòng 20 giải năm 2015, các thông tin cần đưa ra bao gồm: mã CLB, tên CLB, sân vận động.
Bài 2.7. Cho lược đồ cơ sở dữ liệu quản lý bạn đọc thư viện gồm các quan hệ sau:
DOCGIA (SoThe, HoTen, NS, GT, DiaChi, Email) SACH (MaS, TenS, TG, Loai, NXB, SL)
MUON (SoThe, MaS, NgM, NgHT) Trong đó:
DOCGIA: Quan hệ độc giả, lưu danh sách các độc giả
SoThe: Số thẻ của độc giả, mỗi độc giả được cấp một số thẻ HoTen: Họ và tên của độc giả
NS: Năm sinh của độc giả GT: Giới tính của độc giả DiaChi: Địa chỉ liên hệ của độc giả Email: Địa chỉ mail của độc giả
SACH: quan hệ sách, lưu trữ các thông tin về sách
72
MaS: mã sách, mỗi quyển sách có một mã riêng TenS: Tên sách
TG: Tên tác giả quyển sách
Loai: Thể loại sách (như tiểu thuyết, thơ, tuyển tập, …) NXB: Tên nhà xuất bản
SL: số lượng sách còn lại trong kho.
MUON: quan hệ mượn, lưu trữ thông tin mượn sách của các độc giả SoThe: Số thẻ của người mượn
MaS: Mã sách đã mượn NgM: Ngày mượn sách NgHT: Ngày hẹn trả sách
Hãy thực hiện các yêu cầu sau bằng ngôn ngữ đại số quan hệ:
a, Lập danh sách các độc giả sinh năm 1994 có địa chỉ liên hệ là “Hồng Đức”, các thông tin cần đưa ra bao gồm: số thẻ của độc giả, họ và tên của độc giả, giới tính.
b, Lập danh sách các quyển sách đang còn trong kho, các thông tin cần đưa ra bao gồm: mã sách, tên sách, thể loại sách, tên tác giả và số lượng sách còn trong kho.
c, Lập danh sách các độc giả đang mượn quyển tiểu thuyết “Cocktail tình yêu”
của tác giả “Trần Thu Trang”, các thông tin cần đưa ra bao gồm: họ và tên của độc giả, giới tính của độc giả, địa chỉ liên hệ của độc giả.
d, Lập danh sách các độc giả đã mượn quyển giáo trình “Cơ sở dữ liệu” của tác giả “PGS.TS Hồ Thuần” trong tháng này, các thông tin cần đưa ra bao gồm: số thẻ của độc giả, họ và tên của độc giả, ngày mượn sách, ngày hẹn trả sách.
e, Lập danh sách các độc giả có hẹn trả sách ngày hôm nay, các thông tin cần đưa ra gồm: số thẻ của độc giả, họ tên độc giả, mã sách đã mượn, địa chỉ liên.
Bài 2.8. Cho lược đồ cơ sở dữ liệu quản lý dự án gồm các quan hệ sau DUAN (MaDA, TenDA, ĐĐ, NgBD, NgKT, VonDT) NV (MaNV, TenNV, NS, GT, QQ, NN, Luong) CONG (MaNV, MaDA, NgC)
Trong đó:
DUAN: quan hệ dự án, lưu trữ thông tin về các dự án MaDA: mã dự án, mỗi dự án có một mã duy nhất TenDA: tên dự án
ĐĐ: địa điểm thực hiện dự án NgBD: ngày bắt đầu dự án
NgKT: ngày kết thúc dự án (dự kiến) VonDT: vốn đầu tư của dự án
NV: quan hệ nhân viên, lưu trữ thông tin về các nhân viên MaNV: mã nhân viên, mỗi nhân viên có một mã nhân viên TenNV: họ và tên nhân viên