Minh họa chương trình

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán xử lý phụ thuộc hàm nới lỏng (Trang 54 - 64)

Trong trường hợp tổng quát, giả sử ta có tập 05 phụ thuộc hàm:

1. A  BC 2. ABD 3. BDE 4. DE  A 5. B  C

Khi đó:

- Khi thực hiện dãy lệnh sau:

void TestSet() { Set x, y, z; x = "ABCD"; y = "BD"; cout << "\n x = " << x; cout << "\n y = " << y; cout << "\n x > = y ? " << (x > = y); cout << endl;

for (int i = 0; i < 26; ++i) { cout << x[i];

}

cout << endl;

for (int i = 0; i < 26; ++i) {

if (y[i] ! = (char)0) cout << y[i]; }

cout << endl; }

}

1Hình 3.1. Thử nghiệp với lớp Set

- Khi thực hiện dãy lệnh sau:

void TestFD() { FD f("AB", "BFK"), g; f.Print("\n f: "); g = f; cout << "\n g: " << g; FD k("A", "C"); k.Print("\n k: "); k.AddRS("DEF");

k.Print("\n Righ added k wit DEF: "); k.AddLS("B");

k.Print("\n Left added k wit B: "); }

2Hình 3.2. Thử nghiệm với lớp FD

- Khi thực hiện dãy lệnh sau:

void TestRSC() { RSC r;

r.Read("rsc.txt"); //Đọc dữ liệu từ tệp rsc.txt

r.Show("\n r: ");

cout << "\n Key : " << r.GetKey(); cout << "\n BD? " << r.Closure("BD"); cout << "\n C? " << r.Closure("C");

cout << "\n A is a key? " << r.IsKey("A"); }

Ta thu ta thu được kết quả:

3Hình 3.3. Thử nghiệm với lớp RSC

Ta xét cơ sở dữ liệu Học sinh đơn giản sau: HS(HS#, HT, NS, QUE, DTB), DTB(DTB#, XL, HB).

HS - tên quan hệ học sinh Các thuộc tính:

HS# - Mã học sinh

HT - Họ và tên học sinh NS - Năm sinh của học sinh QUE - Quê

DTB - Điểm trung bình DTB - tên quan hệ điểm trung bình Các thuộc tính:

DTB# - Mã điểm trung bình (mã hóa dải điểm trung bình của học sinh)

XL - Xếp loại học sinh

HB - Học bổng dựa trên điểm trung bình

Nếu mã hóa các thuộc tính trong cơ sở dữ liệu theo thứ tự liệt kê ở trên bởi các chữ cái A, B,…, G thì ta có 03 phụ thuộc hàm sau:

1. A -> BCDE 2. E -> FG 3. F -> G

Trong đó, hai phụ thuộc hàm cuối là phụ thuộc hàm nới lỏng.

- Khi thực hiện dãy lệnh sau:

void TestRSC() {

RSC r;

r.Read("sc2.txt"); r.Show("\n r: ");

cout << "\n Key : " << r.GetKey(); cout << "\n AE? " << r.Closure("AE");

cout << "\n BD is a key? " << r.IsKey("BD"); }

Ta thu được kết quả như trong Hình 3.4. Trong thử nghiệm này, nếu không áp dụng khái niệm phụ thuộc hàm nới lỏng, thì kết quả sẽ không còn đúng nữa.

4Hình 3.4. Thử nghiệm lớp RSC với cơ sở dữ liệu học sinh

Ta xét cơ sở dữ liệu Thời khóa biểu giản lược như sau: GV(A#, B, C, D, E), Mon(E#, G, H), Lop(#F, I, J, K).

Các thuộc tính: A: Mã giáo viên, B: Tên giáo viên, C: Ngày sinh, D: Tổ chuyên môn, E: Mã môn học, G: Tên môn học, H: Số tiết, F: Mã lớp, I: Tên lớp, J: Năm học, K: Khóa học, L: Giờ học.

Giả thiết: Mỗi giáo viên chỉ dạy 1 môn và tại 1 thời điểm, mỗi giáo viên chỉ dạy cho 1 lớp. Ta có 04 phụ thuộc hàm sau: 1. A -> BCDE 2. E -> GH 3. F -> IJK 4. AL -> F

- Khi thực hiện dãy lệnh sau:

void TestRSC() {

RSC r;

r.Show("\n r: ");

cout << "\n Key : " << r.GetKey(); cout << "\n AE? " << r.Closure("AE");

cout << "\n BD is a key? " << r.IsKey("BD"); }

Ta thu được kết quả như trong Hình 3.5.

5Hình 3.5. Thử nghiệm lớp RSC với cơ sở dữ liệu thời khóa biểu

Ta xét cơ sở dữ liệu Thiết bị đơn giản sau: TB(A#, B, C, D, E, F, G), PHONG(F#, H, I), MON(#G, J, K, L).

Các thuộc tính: A: Mã thiết bị, B: Tên thiết bị, C: Giá, D: Thời gian sản xuất, E: Thời gian mua, F: Mã phòng (lắp đặt thiết bị), G: Mã môn học (sử dụng thiết bị), H: Tên phòng, I: Tổ chuyên môn (quản lý phòng), J: Tên môn học, K: Số tiết kỳ I, L: Số tiết kỳ II.

Ta có 03 phụ thuộc hàm sau: 1. A -> BCDEFG

3. G -> JKL

- Khi thực hiện dãy lệnh sau:

void TestRSC() { RSC r;

r.Read("sc6.txt"); r.Show("\n r: ");

cout << "\n Key : " << r.GetKey(); cout << "\n AG? " << r.Closure("AG");

cout << "\n A is a key? " << r.IsKey("A"); cout << "\n BD is a key? " << r.IsKey("BD"); cout << "\n FG is a key? " << r.IsKey("FG"); }

Ta thu được kết quả như trong Hình 3.6.

6Hình 3.6. Thử nghiệm lớp RSC với cơ sở dữ liệu thiết bị

Như vậy, chương trình đã thử nghiệm chạy được trên bộ dữ liệu cụ thể và đưa ra kết quả đúng như một số thuật toán đã trình bày trong Chương 2.

KẾT LUẬN Luận văn đã đạt được kết quả:

- Nghiên cứu lý thuyết liên quan đến Cơ sở dữ liệu quan hệ, phụ thuộc hàm, phụ thuộc hàm nới lỏng, các thuật toán tính bao đóng, khóa.

- Cài đặt được các lớp đối tượng quản lý tập hợp, thuộc tính, phụ thuộc hàm, phụ thuộc hàm nới lỏng, khóa.

- Thử nghiệm cài đặt lớp đối tượng quản lý lược đồ quan hệ.

Hướng phát triển:

- Bổ sung thuật toán tìm tập phụ thuộc hàm từ CSDL cho trước.

- Hoàn chỉnh các hàm và toán tử cho các lớp đối tượng đã cài đặt. Ví dụ như bổ sung thêm các toán tử thu gọn cho lớp tập hợp Set như +=, -=, *=.

- Cài tiến giao diện cho chương trình ứng dụng.

TÀI LIỆU THAM KHẢO Tiếng Việt

[2]. Nguyễn Xuân Huy (2006), Các phụ thuộc logic trong cơ sở dữ liệu, Viện Khoa học và Công nghệ Việt Nam.

[3]. Vũ Đức Thái (2016), Thiết kế cơ sở dữ liệu, NXB Đại học Thái Nguyên.

[4]. Vũ Đức Thi (1997), Cơ sở dữ liệu: Kiến thức và thực hành, NXB Thống Kê.

[5]. Lê Tiến Vương (2000), Nhập môn cơ sở dữ liệu quan hệ, NXB Thống Kê.

Tiếng Anh

[6]. Jaume Baixeries, Mehdi Kaytoue, Amedeo Napoli (2014), Characterization of Database Dependencies with FCA and Pattern Structures, Procc. Third International Conference, Analysis of Images, Social Networks and Texts (AIST 2014), Yekaterinburg, Russia. Springer, 436, pp.3 - 14, 2014.

[7]. Loredana Caruccio, Vincenzo Deufemia, and Giuseppe Polese (2016), Relaxed Functional Dependencies - A Survey of Approaches, IEEE Trans. on Knowledge and Data Engineering, Vol. 28, No. 1, pp 147-165.

[8]. Maier D. (1983), The Theory of Relational Database, Computer Science Press, Rockville.

[9]. Ullman, J. (1982), Principles of Data-base and Knowledge-base Systems, Second Edition, Computer Science Press, Potomac. (Có bản dịch tiếng Việt của Trần Đức Quang).

[10]. Garcia-Molina H., Ullman J., Widom J. (2002), Database System: The Complete Book, Prentice Hall.

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán xử lý phụ thuộc hàm nới lỏng (Trang 54 - 64)

Tải bản đầy đủ (PDF)

(64 trang)