CHƯƠNG 2. MÔ HÌNH DỮ LIỆU QUAN HỆ
2.1. C ÁC KHÁI NIỆM CƠ BẢN
2.1.1. Thuộc tính
Thuộc tính (Attribute) 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 [4] [7]. Thuộc tính được xác định bởi tên gọi, kiểu giá trị và miền giá trị.
Ví dụ 2.1.
• Đối tượng HỌC PHẦN (tương ứng với loại thực thể HỌC PHẦN trong mô hình thực thể kết hợp)vcó một số thuộc tính Mã học phần, Tên học phần, Số tín chỉ...
• Đối tượng SINH VIÊN có một số thuộc tính Mã sinh viên, Họ tên sinh viên, Năm sinh, Giới tính, Quê quán...
a. Tên gọi
Trong tài liệu này, nếu không cần lưu ý đến ngữ nghĩa thì ta qui ước đặt tên thuộc tính như sau:
• Tên thuộc tính được ký hiệu bằng các chữ cái in hoa đầu tiên trong bảng chữ cái: A, B, C, D, E, F, G, H...
• Nhóm (tập hợp) các thuộc tính được kí hiệu bằng các chữ cái: X, Y, W, Z...
• Trường hợp tổng quát hay muốn đề cập đến số ngôi (hay số lượng các thuộc tính) của một quan hệ: dùng các kí hiệu chữ cái với các chỉ số A1, A2, ...., An.
Thực tế, ta thường đặt tên thuộc tính theo ngữ nghĩa, vì vậy để dễ đọc, dễ nhớ, ta đặt tên cho các thuộc tính với các chữ in hoa đầu từ hoặc viết cách nhau bởi dấu gạch chân (Underscore:_ ), ví dụ: NamSinh hoặc Nam_Sinh. Trong các ví dụ của tài liệu này, ta ngầm định qui tắc tên thuộc tính được viết bằng tiếng Việt có chữ cái đầu tiên được viết in hoa.
Trong cài đặt cụ thể với một hệ quản trị CSDL cần lưu ý đến khía cạnh đặt tên cho các bảng cũng như tên của thuộc tính. Trong hầu hết các ngôn ngữ lập trình nói chung và một số ngôn ngữ quản trị CSDL nói riêng, tên đối tượng (tên biến, tên quan hệ hay tên thuộc tính...) đều chỉ được phép viết bằng các chữ cái La tinh, chữ số
41
và/hoặc dấu gạch chân (underscore ‘_’), bắt đầu bằng chữ cái hoặc dấu gạch chân, với độ dài tên theo quy định. Theo lý thuyết, không nên đặt tên thuộc tính quá dài (bởi vì nó làm cho việc viết các câu lệnh truy vấn trở nên vất vả hơn) và cũng không nên đặt tên thuộc tính quá ngắn (vì nó không cho thấy ngữ nghĩa của thuộc tính của quan hệ), đặc biệt là không đặt trùng tên hai thuộc tính mang ngữ nghĩa khác nhau thuộc hai đối tượng khác nhau. Ví dụ, nếu có hai đối tượng SINH VIÊN và GIẢNG VIÊN đều có thuộc tính TÊN thì nên đặt tên thuộc tính rõ ràng là Họ tên sinh viên của loại đối tượng SINH VIÊN và Họ tên giảng viên cho đối tượng GIẢNG VIÊN, bởi vì 2 thuộc tính TÊN đó mang ngữ nghĩa khác nhau trong 2 quan hệ khác nhau.
b. Kiểu dữ liệu
Mỗi thuộc tính đều phải thuộc một kiểu kiểu dữ liệu (Data Type) nhất định.
Kiểu dữ liệu có thể là vô hướng (đó là các kiểu dữ liệu cơ bản như chuỗi - String hoặc Text hoặc Character, số - Number, Logical... ) hoặc các kiểu dữ liệu có cấu trúc được định nghĩa dựa trên các kiểu dữ liệu đã có sẵn. Một số kiểu dữ liệu vô hướng sau đây thường được sử dụng trong các hệ quản trị CSDL:
• Text (hoặc Character, String, hoặc Char) – kiểu văn bản.
• Number (hoặc Numeric, hoặc float) – kiểu số
• Logical (hoặc Boolean) – kiểu logic
• Date/Time – kiểu thời gian: ngày tháng năm + giờ phút
• Memo (hoặc Varchar) – kiểu văn bản có độ dài thay đổi.
Mỗi hệ quản trị CSDL có thể gọi tên các kiểu dữ liệu nói trên bằng các tên gọi khác nhau, ngoài ra còn bổ sung thêm một số kiểu dữ liệu riêng của mình. Ví dụ, MicroSoft Access có kiểu dữ liệu OLE để chứa các đối tượng nhúng như hình ảnh, âm thanh, audio, video… ORACLE có kiểu dữ liệu LONG cho phép chứa dữ liệu có kích thước lớn tới 2 tỷ bytes.
Lưu ý: Nếu thuộc tính có kiểu dữ liệu là vô hướng thì nó được gọi là thuộc tính đơn hoặc thuộc tính nguyên tố; nếu thuộc tính có kiểu dữ liệu có cấu trúc thì nó là thuộc tính kép (hay không phải là nguyên tố).
c. Miền giá trị
Miền là phạm vi giá trị có thể dùng cho một thuộc tính [7] [12]. 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. Ví dụ, đối với dữ liệu số, ta mới có thể áp dụng các phép toán số học(cộng, trừ, nhân, chia,…). Nếu nhìn khía cạnh khác, miền còn có ý nghĩa ngữ nghĩa. Chẳng hạn cân nặng và chiều cao của một người đều nhận giá trị số, nhưng hai số này không thể so sánh với nhau được.
Miền giá trị (domain) của thuộc tính A: tập hợp các giá trị mà thuộc tính A có thể nhận được và được ký hiệu là DOM (A) hoặc Dom (A). Ví dụ, sinh viên đang theo học tại trường Đại học Hồng Đức thì giới tính chỉ nhận một trong hai giá trị là “Nam”
hoặc “Nữ” nên miền giá trị của thuộc tính Giới tính là DOM (GioiTinh)={“Nam”,
“Nữ”}
42
Khi xác định một thuộc tính, ta phải xác định tên và miền của thuộc tính. Các giá trị gán cho thuộc tính cần thỏa mãn các ràng buộc về miền. Ví dụ, tuổi của một người được thể hiện bằng số, và nhận giá trị từ 1 đến 300.
Nếu kiểu dữ liệu của thuộc tính A là có cấu trúc thì miền giá trị của A là tích Descartes (hoặc tập con của tích Descartes - Cartesian) của các miền giá trị thành phần. Ví dụ, ta có kiểu dữ liệu ngày tháng năm theo dương lịch với mô tả bằng ngôn ngữ C như sau:
struct DATE
{Day [1..31];
Month [1 .. 12];
Year [1950 .. 2010];}
Tích Descartes của 3 miền giá trị của các thành phần là [1..31] x [1..12] x [1950..2010]. Nếu thuộc tính A thuộc kiểu DATE thì DOM(A) [1..31] x [1..12] x [1950..2010], bởi vì {30,02,1999} không phải là một ngày tháng năm hợp lệ nên tổ hợp đó không thuộc DOM (A). Ngày nay, hầu hết các ngôn ngữ quản trị dữ liệu đều có định nghĩa kiểu này như một kiểu cơ bản. Tổ hợp 3 giá trị thành phần luôn luôn được kiểm tra tính đúng đắn trước khi được coi là một giá trị kiểu ngày tháng. Hai phép toán số học có thể tác động trên kiểu DATE là phép cộng (+) hoặc trừ (-) một DATE với một số nguyên để cho kết quả là một giá trị kiểu DATE; hiệu 2 giá trị kiểu DATE là số ngày trôi qua giữa 2 ngày tháng năm đó.
Trong nhiều hệ quản trị CSDL, người ta thường đưa thêm vào miền giá trị của các thuộc tính một giá trị đặc biệt gọi là giá trị rỗng (NULL). Tùy theo ngữ cảnh mà giá trị này có thể đặc trưng cho một giá trị không thể xác định được hoặc một giá trị chưa được xác định ở vào thời điểm nhập tin nhưng có thể được xác định vào một thời điểm khác.
2.1.2. Tích Descartes
Theo khái niệm toán học, mô hình quan hệ được hiểu là quan hệ với ý nghĩa của lý thuyết tập hợp, tức là tập con tích Descartes của các miền
Gọi D1, D2,..., Dn, là n miền. Tích Descartes của n miền là D1xD2x...xDn là tập tất cả n - bộ (n - tuples) (v1, v2, ..., vn) sao cho vi Di, với i = 1.. n
Ví dụ 2.2. n =2, D1 = {0, 1}, D2 = {a, b, c}, khi đó D1 x D2 = {(0, a), (0, b), (0, c), (1, a), (1, b), (1, c)}
2.1.3. Quan hệ và các tích chất của quan hệ a. Quan hệ (Relation)
Định nghĩa 2.1. Gọi U = {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,..., n có miền giá trị tương ứng là DOM (Ai). Khi đó R là quan hệ xác định trên n thuộc tính nếu R là tập con hoặc trùng với tích Descartes của Di (i
= 1..n), n được gọi là ngôi của quan hệ R D1 x D2 x ... x Dn. Khi đó kí hiệu là R(U) hoặc R(A1, A2,..., An).
43 Ví dụ 2.3.
SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) là quan hệ 6 ngôi
LOP (MaLop, TenLop, MaKhoa) là quan hệ 3 ngôi
KHOA (MaKhoa, TenKhoa, ĐC, SĐT) là một quan hệ 4 ngôi.
HOC_PHAN (MaHP, TenHP, SoTC, MoTa) là quan hệ 3 ngôi.
b. Bộ giá trị (Tuple)
Một bộ giá trị là các thông tin của một đối tượng thuộc quan hệ. Bộ giá trị cũng thường được gọi là mẫu tin hay bản ghi (record) hoặc dòng của bảng (Row). Về mặt hình thức, một bộ q là một vectơ gồm n thành phần thuộc tập hợp con của tích Descartes miền giá trị của các thuộc tính và thỏa mãn tân từ đã cho của quan hệ:
t =(a1, a2, ..., an) ( DOM (A1) x (DOM (A2) x ... x DOM (An) .
Ví dụ 2.4. Quan hệ SINH_VIEN bao gồm các thuộc tính MaSV, HoTenSV, NamSinh, GioiTinh, QueQuanvà MaLop là một quan hệ có bậc 6.
SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) t1 = (1561030008, Lê Thị Hồng Hà, 1998, Nữ, Thanh Hoá, 156103) là một bộ của quan hệ SINH_VIEN.
Để lấy thành phần Ai (tức là giá trị thuộc tính Ai) của bộ giá trị t, ta viết t.Ai. Phép trích rút này được gọi là phép chiếu một bộ lên thuộc tính Ai. t1.[HoTenSV] =
‘Lê Thị Hồng Hà’.
Mỗi giá trị trong một bộ là một giá trị nguyên tố, nghĩa là nó không phân chia được thành các thành phần trong phạm vi của mô hình quan hệ. Trong mô hình quan hệ, không cho phép có các thuộc tính phức hợp hay các thuộc tính đa trị.
Giá trị của một số bộ tại một số thuộc tính nào đó có thể là chưa biết được (ở thời điểm đang xét). Cũng có trường hợp không có giá trị nào thích hợp đặt cho một thuộc tính của một bộ nào đó. Trong những tình huống như vậy, một giá trị đặc biệt gọi là giá trị NULL được sử dụng.
Lưu ý: Trong MicroSoft Access, hằng văn bản được viết trong cặp dấu nháy kép (“”), còn trong SQL-Server và trong ORACLE, hằng văn bản được viết trong cặp dấu nháy đơn (‘ ‘).
Mỗi quan hệ có thể biểu diễn dưới dạng bảng, khi đó một dòng tương ứng với một bộ của quan hệ, một cột tương ứng với các giá trị của một thuộc tính.
Quan hệ Bảng Tệp Bộ Dòng Bản ghi Thuộc tính Cột Trường Có hai đại lượng đo kích thước quan hệ:
• Số thuộc tính của quan hệ: gọi là bậc quan hệ
• Số bộ: gọi là lực lượng của quan hệ
44 c. Các tính chất của quan hệ
• Một quan hệ có một tên phân biệt với tên các quan hệ khác.
• Mỗi ô trong bảng (quan hệ) chứa một giá trị nguyên tố.
• Mỗi thuộc tính trong quan hệ có một tên phân biệt.
• Các giá trị của một thuộc tính thuộc cùng một miền.
• Thứ tự các thuộc tính là không quan trọng vì quan hệ là một tập hợp.
• Các bộ trong quan hệ là phân biệt, nghĩa là không có hai bộ giống hệt nhau trong một quan hệ.
• Thứ tự các bộ không quan trọng về mặt lí thuyết 2.1.4. Lược đồ quan hệ (Relation Schema)
Định nghĩa 2.2. Lược đồ quan hệ là sự trừu tượng hóa của quan hệ, một sự trừu tượng hóa ở mức độ cấu trúc của một bảng hai chiều. Khi nói tới lược đồ quan hệ tức là đề cập tới cấu trúc tổng quát của một quan hệ; khi đề cập tới quan hệ thì ta hiểu đó là một bảng có cấu trúc cụ thể hoặc một định nghĩa cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó. Tập hợp gồm tên các thuộc tính R(A1, A2,…, An) được gọi là sơ đồ quan hệ hay lược đồ quan hệ. Nói cách khác, tập tất cả các thuộc tính cần quản lý của một đối tượng cùng với các mối liên hệ giữa chúng được gọi là lược đồ quan hệ.
Lược đồ quan hệ Q với tập thuộc tính {A1, A2,..., An} được viết là Q (A1, A2,..., An), ký hiệu Q+ = {A1, A2,..., An}.
Ví dụ SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) là lược đồ quan hệ của Sinh viên.
Thường thì khi thành lập một lược đồ quan hệ, người thiết kế gắn cho nó một ý nghĩa nhất định, gọi là tân từ của lược đồ quan hệ.
Ví dụ 2.6.
SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) là lược đồ quan hệ của Sinh viên
Tân từ “Mỗi sinh viên có một họ và tên, năm sinh, giới tính, quê quán, ... và được cấp một mã sinh viên duy nhất để phân biệt với mọi sinh viên khác trong trường;
sinh viên được ghi danh vào một lớp học duy nhất trong trường” LOP (MaLop, TenLop, MaKhoa) là lược đồ quan hệ của Lớp
Tân từ: “Mỗi lớp học có một mã số quy ước duy nhất để phân biệt với tất cả các lớp học khác; có một tên gọi của lớp học và thuộc một khoa của trường”.
KHOA (MaKhoa, TenKhoa, ĐC, SĐT) là lược đồ quan hệ của Khoa
Tân từ: “Mỗi khoa có một tên gọi, một địa chỉ, một số điện thoại và một mã số duy nhất để phân biệt với tất cả các khoa khác của trường”.
HOC_PHAN (MaHP, TenHP, SoTC, MoTa) là lđqh của Học phần
45
Tân từ: “Mỗi học phần có một tên gọi cụ thể, có một mô tả, được học trong một số tín chỉ nhất định và ứng với học phần là một mã học phần duy nhất để phân biệt với mọi học phần khác”.
Khi phát biểu tân từ cho một lược đồ quan hệ, người thiết kế cần phải mô tả đầy đủ ý nghĩa để người khác tránh hiểu nhầm. Dựa vào tân từ này, người ta xác định được tập khoá, siêu khoá của lược đồ quan hệ (sẽ được trình bày trong phần 2.2).
Khái niệm lược đồ quan hệ ứng với khái niệm loại thực thể ở mô hình thực thể kết hợp.
2.1.5. Lược đồ CSDL quan hệ
Nhiều lược đồ cùng nằm trong một hệ thống được gọi là lược đồ CSDL.
Lược đồ CSDL C là tập hợp các lược đồ quan hệ con {Ri}.
Ví dụ 2.7. Với ví dụ 1.8. trong chương 1, ta có thể xây dựng được lược đồ và sẽ dùng lược đồ này để mô tả các ví dụ trong chương 2.
SINH_VIEN (MaSV, HoTenSV, NamSinh, GioiTinh, QueQuan, MaLop) LOP (MaLop, TenLop, MaKhoa)
KHOA (MaKhoa, TenKhoa, ĐC, SĐT)
HOC_PHAN (MaHP, TenHP, SoTC, HocKy, MoTa) KET_QUA (MaSV, MaHP, DiemThi, LanThi) 2.1.6. Thể hiện của quan hệ (Occurrence of a Relation)
Định nghĩa 2.3. Thể hiện (hoặc còn gọi là tình trạng) của quan hệ R, ký hiệu bởi TR, là tập hợp các bộ giá trị của quan hệ R vào một thời điểm. Tại những thời điểm khác nhau thì quan hệ sẽ có những thể hiện khác nhau. Thể hiện (hay tình trạng) của các lược đồ quan hệ con TRi gọi là tình trạng của lược đồ CSDL C.
Ví dụ 2.8. Các thể hiện của quan hệ SINH_VIEN, LOP và HOC_PHAN Quan hệ SINH_VIEN
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
Quan hệ LOP
MaLop TenLop MaKhoa 136103A ĐH CNTT K16 CNTT 146103A ĐH CNTT K17 CNTT 156103A ĐH CNTT K18 CNTT Quan hệ HOC_PHAN
MaHP TenHP SoTC HocKy MoTa
173097 Lập trình C nâng cao 02 2 Cơ sở
46
174097 Cơ sở dữ liệu 02 2 Cơ bản