x Dn được gọi là quan hệ n-ngôi Các thành phần của các bộ trong quan hệ gọi là các thuộc tính attributes Sự khác nhau giữa miền và thuộc tính: Một thuộc tính biểu thị cách sử dụ
Trang 1KỸ THUẬT PHẦN MỀM
Chương III: DATABASE
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Khoa Điện tử Viễn Thông – Bộ môn Điện tử Tin học
Trang 33.2.1 Các khái niệm cơ bản
Khái niệm toán học của mô hình quan hệ:
hiểu theo nghĩa lý thuyết tập hợp, đó là tập con của tích
Đề-Các của các miền
Miền (domain) là một tập các giá trị
Ví dụ của miền:
tập các số nguyên
tập các xâu ký tự tạo thành tên các tỉnh, thành phố ở Việt Nam có
độ dài không quá 30 ký tự
tập hai giá trị {True, False}
Trang 43.2.1 Các khái niệm cơ bản
Trang 53.2.1 Các khái niệm cơ bản
Một tập con của tích Đề-Các của một hoặc nhiều miền
Như vậy, mỗi quan hệ có thể là vô hạn
ở đây luôn luôn giả thiết rằng, quan hệ là một tập hữu hạn
Quan hệ là tập con của tích Đề-Các D1 x D2 x x Dn được
gọi là quan hệ n-ngôi
Các thành phần của các bộ trong quan hệ gọi là các thuộc
tính (attributes)
Sự khác nhau giữa miền và thuộc tính:
Một thuộc tính biểu thị cách sử dụng một miền trong một quan hệ
Trang 63.2.1 Các khái niệm cơ bản
Quan hệ được định nghĩa một cách hình thức như sau:
Gọi R = {A1, A2, , An} là tập hữu hạn của các thuộc tính, mỗi thuộc tính Ai với i = 1, 2, , n có miền giá trị tương ứng là dom(Ai) (các miền không nhất thiết là phải khác nhau)
Quan hệ r trên tập thuộc tính R = {A1, A2, , An} là tập con của tích Đề - Các được biểu diễn như sau:
r ⊆ dom (A1) x dom (A2) x dom (An)
Ví dụ: Hình 3.6, ba quan hệ được gọi là S, P, SP
Quan hệ P là quan hệ 5-ngôi được định nghĩa trên 5 miền:
P#, PNAME, COLOR, WEIGHT, CITY
Ví dụ, miền COLOR là tập của tất cả các màu sắc hợp lệ của các mặt hàng
Ta có p1 = (P1, Nut, Red, 12, London) là một bộ (tuple, row) của
Trang 7Hình 3.6 Dữ liệu mẫu trong dạng quan hệ.
S S# SNAME STATUS CITY
CITY
P1 Nut Red 12 London
P2 Bolt Green 17 Paris
P3 Screw Blue 17 Rome
SP S# P# QT
Y S1 P1 300 S1 P2 200 S1 P3 400 S2 P1 300 S2 P2 400 S3 P2 200
Trang 83.1 Các khái niệm cơ bản
2 Miền và thuộc tính.
Cần phân biệt rõ sự khác nhau giữa miền và các
thuộc tính - hay còn gọi là các cột - được rút ra từ miền này
Một thuộc tính biểu thị sự sử dụng một miền trong
một quan hệ (các thành phần của các bộ trong quan
hệ gọi là các thuộc tính)
Để nhấn mạnh sự khác nhau này, chúng ta có thể
đặt tên cho thuộc tính khác với tên của miền đã cho,
ví dụ như trên Hình 2.1
Trang 93.2.1 Các khái niệm cơ bản
Ví dụ: Hình 3.7, Khai báo lược đồ mẫu
DOMAIN PARTNO CHARACTER (6)
DOMAIN PARTNAME CHARACTER (20)
DOMAIN COLOR CHARACTER (6)
DOMAIN WEIGHT NUMERIC (4)
DOMAIN ADDRESS CHARACTER (15)
RELATION
PART (P# PNAME DOMAIN DOMAIN PARTNO PARTNAME
COLOR DOMAIN COLOR
WEIGHT DOMAIN WEIGHT
CITY DOMAIN ADDRESS)
Trang 102.1 Các khái niệm cơ bản.
Hình 3.7 là một phần của lược đồ khái niệm,
trong đó có:
Năm miền (P#, PNAME, COLOR, WEIGHT, CITY)
Một quan hệ (PART) đã được khai báo
Quan hệ PART này được định nghĩa với năm thuộc tính:
Trang 11 Để thuận tiện, người ta thường bỏ qua phần khai báo tên miền ("DOMAIN name") khi khai báo thuộc tính nếu tên thuộc tính giống tên miền
Tuy nhiên, không phải luôn có thể đặt tên thuộc tính trùng với tên miền
Hình 3.8 Quan hệ COMPONENT
3.2.1 Các khái niệm cơ bản.
Trang 123.2.1 Các khái niệm cơ bản.
Trong ví dụ này, chúng ta có một quan hệ với ba thuộc tính nhưng chỉ có hai miền khác nhau
ý nghĩa của một bộ (tuple) trong quan hệ COMPONENT là một mặt hàng chính (MAJOR_P#) có kèm theo mặt hàng phụ (MINOR_P#) và
số lượng các mặt hàng phụ này (QUANTITY)
Ví dụ này cũng minh hoạ một sự thuận tiện thông thường khác:
Cách tạo tên thuộc tính khác nhau bằng cách đặt phần tiền tố (MAJOR, MINOR) trước tên miền chung (P#) để phân biệt vai trò của các thuộc
tính có cùng chung một miền (P#)
Trang 133.2.1 Các khái niệm cơ bản.
Khái niệm "chuẩn hoá":
Mô hình quan hệ chỉ chấp nhận duy nhất các quan hệ
thoả mãn điều kiện “Mọi giá trị trong quan hệ - nghĩa
là tất cả các giá trị của các thuộc tính trong tất cả các
bộ - đều phải là nguyên tố (atomic) (nghĩa là không
chia nhỏ được nữa)”
Nói một cách khác, tại mỗi vị trí cắt nhau của một hàng
và một cột trong bảng tồn tại đúng một giá trị và không
bao giờ là một tập các giá trị.
Quan hệ thoả mãn điều kiện trên được gọi là “đã được
chuẩn hoá”
Trang 143.2.1 Các khái niệm cơ bản.
Ví dụ:
Trang 153.2.1 Các khái niệm cơ bản.
Luôn có thể chuyển một quan hệ chưa chuẩn hoá sang
dạng chuẩn hoá tương đương
Quan hệ BEFORE (hình 2.3) được định nghĩa trên các miền:
S# (Supplier number: số hiệu hãng cung cấp) và
PQ (Part-Quantity: mặt hàng - số lượng)
Các phần tử của PQ chính là các quan hệ được định nghĩa trên các miền:
P# (số hiệu mặt hàng) và
QTY (Quantity: số lượng hàng)
⇒ do đó, quan hệ BEFORE là chưa được chuẩn hoá
Quan hệ AFTER là quan hệ tương đương đã được chuẩn hoá
Về mặt toán học: BEFORE là quan hệ hai ngôi nhưng không phải tất cả các
miền đều là đơn giản (Miền đơn giản là miền mà trong đó tất cả các phần tử
là nguyên tố)
AFTER là quan hệ ba ngôi tương đương về mặt ngữ nghĩa với quan hệ BEFORE nhưng tất cả các miền của các thuộc tính của nó đều là đơn giản.
Trang 163.2.2 Khoá
1 Khoá chính (Primary key).
2 Khóa ứng cử (Candidate key).
3 Khóa ngoại lai (Foreign key).
4 Khóa phụ (Sub-Key).
Trang 173.2.2 Khóa
• Khóa chính là một thuộc tính hoặc một kết hợp tối
thiểu các thuộc tính cho phép ta nhận diện duy nhất một thực thể riêng biệt nào đó.
Tính “nhận diện duy nhất”:
• Trong một quan hệ đã cho luôn có một thuộc tính hoặc một kết hợp các thuộc tính với các giá trị cho phép nhận dạng duy nhất các
bộ của quan hệ này.
• Trong lược đồ quan hệ có thể có rất nhiều khoá
• Việc tìm tất cả các khoá của lược đồ quan hệ là rất khó khăn
Tính “tối thiểu”:
Không phải thường xuyên cần đến tất cả các thuộc tính.
Trang 183.2.2 Khóa
2 Khoá ứng cử (Candidate key)
Khóa ứng cử là thuộc tính hoặc kết hợp các thuộc tính có tính chất như khóa chính.
Đôi khi có thể gặp một quan hệ trong đó có hơn một kết hợp các thuộc tính có khả năng nhận diện duy nhất và tối thiểu như khóa chính
⇒ do đó có hơn một khoá ứng cử (candidate key)
Trang 19 Ví dụ: Giả thiết, tên hãng cung cấp là duy nhất
=> Khóa ứng cử: S#; SNAME
3.2.2 Khóa
Trang 203.2.2 Khóa
3 Khoá ngoại lai (Foreign key)
Một thuộc tính của quan hệ R1 được gọi là một khoá ngoại lai nếu
nó không phải là khoá chính của quan hệ R1 nhưng các giá trị của nó là các giá trị của khoá chính trong một quan hệ R2 nào đó
Các khoá chính và khoá ngoại lai cho ta các phương tiện để biểu
diễn các liên kết giữa các bộ.
Tuy nhiên, cần lưu ý là không phải tất cả các thuộc tính có thể biểu
diễn các liên kết như vậy đều là khoá
Trang 213.2.2 Khóa
4 Khoá phụ (Secondary key)
Dùng để xắp sếp hoặc tìm kiếm
Lưu ý: khi sử dụng một ngôn ngữ con dữ liệu dạng
quan hệ không nên giới hạn việc truy nhập vào một
quan hệ là "chỉ có thể thông qua khoá chính"
Trang 223.2.2 Khóa
Theo lý thuyết quan hệ, khoá (key) của một quan hệ r trên tập thuộc tính R = {A1, , An} là tập con K ⊆ {A1
An} thoả mãn các tính chất sau đây:
Với bất kỳ hai bộ t1, t2 ∈ r đều tồn tại một hoặc một kết hợp các thuộc tính A ∈ K sao cho t1(A) ≠ t2(A)
Điều kiện này có thể viết t1(K) ≠ t2(K) Do vậy mỗi giá trị của K là xác định duy nhất
Để có thể định nghĩa khoá một cách tốt hơn, lưu ý rằng, nếu K' là khoá của quan hệ r(A1, , An) thì K' ⊆ K ⊆ R,
K cũng là khoá của r, nghĩa là với bất kỳ t1, t2 ∈ r với t1
Trang 233.2.2 Khóa
Lưu ý:nếu K' là khoá của quan hệ r(A1, , An) thì K' ⊆ K
⊆ R, K cũng là khoá của quan hệ r Để đảm bảo tính
không dư thừa của khoá chính ta có định nghĩa sau về
khoá chính:
Khoá chính của quan hệ r trên tập thuộc tính R = {A1, , An} là tập con K ⊆ R sao cho bất kỳ hai bộ khác nhau t1, t2 ∈ r luôn thoả t1(K) ≠ t2(K) và bất kỳ tập con thực sự K' ⊂ K nào đó đều không có tính chất đó a r, nghĩa là với bất kỳ t1, t2 ∈ r với t1
(K') ≠ t2 (K') luôn có t1 (K) ≠ t2 (K)
Trang 24 Nhất thiết phải chỉ rõ đặc điểm "thay đổi theo thời gian"
để cho phép thực hiện các phép toán chèn (insert), xoá
(delete) và cập nhật (update) các bộ của quan hệ.
Trang 253.2.3 Kết luận
Lược đồ khái niệm
Trang 263.2.3 Kết luận
Trang 273.2.3 Kết luận
Theo các khái niệm truyền thống, một quan hệ tạo nên
một file, một bộ tạo nên một bản ghi (thể hiện chứ không phải là kiểu) và một thuộc tính tạo nên một trường (kiểu chứ không phải thể hiện)
• Nói một cách khác, các quan hệ có thể được coi như các file mang tính quy tắc cao (highly disciplined files)
Tính quy tắc này dẫn đến sự đơn giản hoá mong muốn cho các cấu trúc
dữ liệu liên quan đến người sử dụng và do đó dẫn đến sự đơn giản hoá
tương ứng trong các phép toán cần thiết để thao tác dữ liệu
Trang 283.2.4 Các phép toán trên CSDL quan hệ
Chèn (insert)
Loại bỏ (delete)
Thay đổi (change)
Trong mô hình CSDL quan hệ được nêu trên, các phép toán này được áp dụng cho từng bộ của các quan hệ lưu trữ trong
máy
Trang 293.2.4 Các phép toán trên CSDL quan hệ
Trong đó: - Ai với i = 1, , n là tên các thuộc tính và
di với di ∈ dom(Ai) là các giá trị thuộc miền trị tương ứng của thuộc tính Ai
Ví dụ:
Để thêm một bộ t4 = (S4, Clark, 20, London) vào quan hệ S trong hình 1.2 ta làm như sau:
Trang 303.2.4 Các phép toán trên CSDL quan hệ
Nếu xem thứ tự các trường là cố định, khi đó có thể biểu diễn phép chèn dưới dạng không tường minh như sau:
Bộ mới cần thêm vào không phù hợp với lược đồ quan hệ đã cho
Một số giá trị của một số thuộc tính nằm ngoài miền giá trị của thuộc tính đó
Giá trị khoá của bộ mới có thể là giá trị đã có trong quan hệ đang lưu trữ
Trang 313.2.4 Các phép toán trên CSDL quan hệ
2 Phép loại bỏ (DEL)
Phép loại bỏ (DEL) là phép xoá một bộ ra khỏi một
quan hệ cho trước
Giống như phép chèn, phép loại bỏ có dạng:
Trang 323.2.4 Các phép toán trên CSDL quan hệ
Tuy nhiên, không phải lúc nào phép loại bỏ cũng cần đầy đủ tất cả các loại thông tin của bộ cần loại bỏ
Nếu có giá trị về bộ đó tại các thuộc tính khoá K = {B1, B2, , Bj} thì phép loại bỏ chỉ cần viết:
DEL (r; B1 = f1, B2 = f2, , Bi = fj)
Ví dụ, trong phép loại bỏ nêu trên, vì (S#, P#) là khoá của quan hệ SP nên ta chỉ cần viết:
DEL (SP; S# = S3, P# = P2)
Trang 333.2.4 Các phép toán trên CSDL quan hệ
3 Phép thay đổi (CHANGE hoặc 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 sửa đổi 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 thay đổi ("Change" hay viết tắt là CH)
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 thay đổi có dạng:
r = r \ t ∪ t'
Hay ta có thể biểu diễn chi tiết phép loại bỏ như sau:
Trang 343.2.4 Các phép toán trên CSDL quan hệ
Nếu K = {B1, , Bm} là khoá của quan hệ, khi đó chỉ cần viết:
CH (r; B1 = f1, B2 = f2, , Bm = fm; C1 = e1, C2 = e2, , Cp = ep)
Ví dụ: Cần thay đổi địa chỉ hãng cung cấp S1 từ
London thành Amsterdam trong quan hệ S Khi đó
phép thay đổi có dạng như sau: