1. Trang chủ
  2. » Công Nghệ Thông Tin

NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH VÀ PHƯƠNG PHÁP SẮP NỐI

21 323 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 47,18 KB

Nội dung

NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH VÀ PHƯƠNG PHÁP SẮP NỐI, CODE NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH VÀ PHƯƠNG PHÁP SẮP NỐI, CÁCH THỨC HOẠT ĐỘNG CỦA NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH VÀ PHƯƠNG PHÁP SẮP NỐI

Nhóm Moon MỤC LỤC LỜI MỞ ĐẦU Trang 3 CHƯƠNG I: BÀI TOÁN ĐẶT RA Trang 4 1. Bài toán Trang 4 2. Thiết kế cơ sở dữ liệu Trang 4 3. Thuật toán tạo ngẫu nhiên 2 quan hệ R S Trang 5 4. Cài đặt chương trình tạo ngẫu nhiên 2 flie R.DAT S.DAT Trang 5 CHƯƠNG II: NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH Trang 7 1. Thuật toán Trang 7 2. Chi phí Trang 7 3. Ví dụ Trang 7 4. Cài đặt chạy thử chương trình chọn trên tích Trang 9 CHƯƠNG III: NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP SẮP NỐI Trang 12 1. Thuật toán Trang 12 2. Chi phí Trang 12 3. Ví dụ Trang 13 4. Cài đặt chương trình tạo 2 quan hệ R2 bằng cách sắp xếp 2 quan hệ R S tăng dần theo thuộc tính B Trang 16 5. Cài đặt chạy thử chương trình sắp nối Trang 18 CHƯƠNG IV: TÀI LIỆU THAM KHẢO Trang 22 CHƯƠNG V: KẾT LUẬN Trang 22 Danh sách nhóm Moon: - Nguyễn Trọng Nghĩa 11CNTT2 - Dương Phú Nhân 11CNTT2 - Huỳnh Ngọc Nam 11CNTT2 - Lý Giang San 11CNTT2 - Nguyễn Văn Phúc 11CNTT2 1 Nhóm Moon PHÂN CÔNG CÔNG VIỆC STT Họ tên Công việc Chữ kí Nhận xét 1 Nguyễn Trọng Nghĩa -Viết chương trình cài đặt thuật toán bằng phương pháp chọn trên tích - Viết chương trình cài đặt thuật toán bằng phương pháp phương pháp sắp nối 2 Dương Phú Nhân -Viết chương trình sắp xếp R2 S2 theo R S -Viết chương trình cài đặt thuật toán bằng phương pháp chọn trên tích 3 Huỳnh Ngọc Nam -Viết chương trình tạo ngẫu nhiên R S - Viết chương trình cài đặt thuật toán bằng phương pháp phương pháp sắp nối 4 Lý Giang San -Viết báo cáo - Viết chương trình cài đặt thuật toán bằng phương pháp chọn trên tích 5 Nguyễn Văn Phúc - Viết chương trình cài đặt thuật toán bằng phương pháp phương pháp sắp nối 2 Nhóm Moon LỜI MỞ ĐẦU Cơ sở dữ liệu là một trong các môn cơ sở quan trọng của nghành Tin học, có thể nói rằng cơ sở dữ liệu là môn học về phương pháp tổ chức lưu trữ khai thác dữ liệu. Đây là môn học cực kì quan trọng, bởi vì không một ứng dụng tin học nào mà không chứa đựng vấn đề tổ chức lưu trữ khai thác dữ liệu. Cơ sở dữ liệu trở thành một trong những môn học quan trọng nhất, không thể thiếu được trong chương trình đào tạo tin học hiện đại. Các chuyên viên hệ thống thông tin cần phải được trang bị kiến thức để phân tích các yêu cầu của cơ sở dữ liệu, có thể thiết kế cài đặt cơ sở dữ liệu chính xác hiệu quả. Hiệu năng thực hiện một yêu cầu xử lí dữ liệu là vấn đề tối quan trọng đối với một hệ quản trị CSDL. Xử lí vấn tin (query processor) là một đơn thể trong các hệ quản trị CSDL có nhiệm vụ xác định thứ tự thực hiện một câu vấn tin nhằm tối ưu hóa câu vấn tin, nâng cao hiệu năng xử lý, tiết kiệm chi phí. Các phép toán lấy nối tích có chi phí rất cao so với các phép toán đơn ngôi như phép chọn hay phép chiếu. Vì vậy trình tối ưu hóa vấn tin phải hạ thấp tối đa chi phí của phép nối tích nếu có thể. Một trong những chiến lược giảm chi phí nối là tận dụng chỉ mục hoặc tiền xử lí các quan hệ trước khi nối. Phương pháp sắp nối là một trong những cách tiếp cận đó. 3 Nhóm Moon CHƯƠNG I: BÀI TOÁN ĐẶT RA 1/ Bài toán: 1) Viết chương trình cài đặt thuật toán nối hai quan hệ bằng phương pháp chọn trên tích. 2) Viết chương trình cài đặt thuật toán nối hai quan hệ bằng phương pháp sắp nối. 2/ Phân tích thiết kế cấu trúc dữ liệu: Mô tả các quan hệ: -Đầu vào: 2 quan hệ R(A,B) , S(B,C) có chỉ mục tụ nhóm trên B T R =1000 > T S =500 Trường A,C là các số ngẫu nhiên từ 0 đến 999 Trường B là các số ngẫu nhiên từ 0 đến 99 -Đầu ra : quan hệ RS là nối tự nhiên của quan hệ R S, RS(A,B,C) Khai báo các quan hệ kiểu dữ liệu -Quan hệ R(A,B): R.A có kiểu int R.B có kiểu int Khai báo: Struct R { int A, B; }; Cài đặt quan hệ R dưới dạng file có tên là R.DAT chứa các bản ghi kiểu R , các bản ghi có trường B giống nhau được đặt liên tiếp nhau được xếp chặt, có giá trị R.B Quan hệ S(B,C): S.B có kiểu int S.C có kiểu int Khai báo: Struct S { int B, C; 4 Nhóm Moon }; Cài đặt quan hệ S dưới dạng file có tên là S.DAT chứa các bản ghi có S.B giống nhau được đặt liên tiếp nhau được sắp xếp. Có 1 giá trị S.B ta giả định S.B R.B => J<1 -Quan hệ RS: là nối tự nhiên của 2 quan hệ R S => RS.A có kiểu int RS.B có kiểu int RS.C có kiểu int -Dung lượng khối d= 120 byte.Mỗi khối chứa được 15 bản ghi của R hoặc S, 10 bản ghi của RS .Khối bộ nhớ để đọc R có cấu trúc struct Rbanghi MSkhoi[15]. Khối bộ nhớ để đọc S trong phương pháp chon trên tích có cấu trúc Struct Sbanghi MS Khoi[Mmax][15] Mmax là hằng chỉ số khối đểbộ nhớ trong tối đa. Khi đọc R S phải khai số bản ghi đọc là 15.Khối bộ nhớ để ghi RS khai báo dạng mảng Struct RSbanghi MRSkhoi 10. Kết quả nối là file RS.DAT chứa các bản ghi kiểu RS Vậy : đầu vào: hai quan hệ ngẫu nhiên R S 2file : R.DAT S.DAT. đầu ra: file RS.DAT. 3/ Thuật toán tạo hai quan hệ ngẫu nhiên R S: -Mở hai file R.DAT S.DAT. + Tạo phần tử ngẫu nhiên các phần tử A là các số từ 0 đến 999, B là các số từ 0 đến 99. +Gán từng phần tử A trong quan hệ R cho rand()%1000 +Gán từng phần tử B trong quan hệ R cho rand()%100 -Ghi tất cả các phần tử A, B vào file R.DAT -Tương tự đối với file S.DAT, ta có dữ liệu đầu vào C là các số ngẫu nhiên từ 0 đến 999, B là các số ngẫu nhiên từ 0 đến 99. 4.Cài đặt thuật toán ngẫu nhiên 2 file R.DAT S.DAT: #include<conio.h> #include<stdio.h> #include<stdlib.h> #include <time.h> typedef struct{ 5 Nhóm Moon int A, B; }Rbanghi; typedef struct{ int B, C; }Sbanghi; void ghiFile(Rbanghi r[],Sbanghi s[]){ int i; FILE *f1, *f2, *f3, *f4; f1 = fopen("R.DAT","wt"); f2 = fopen("S.DAT","wt"); srand(time(NULL)); for(i=0;i<1000;i++){ r[i].A=rand()%(1000); r[i].B=rand()%(100); fprintf(f1, "%d\t%d\n", r[i].A, r[i].B); } for(i=0;i<500;i++){ s[i].C=rand()%(1000); s[i].B=rand()%(100); fprintf(f2, "%d\t%d\n", s[i].B, s[i].C); } fclose(f1); fclose(f2); } int main(){ Rbanghi r[1000]; Sbanghi s[500]; ghiFile(r,s); getch(); } 6 Nhóm Moon CHƯƠNG II: NỐI 2 QUAN HỆ BẰNG PHƯƠNG PHÁP CHỌN TRÊN TÍCH 1/ Thuật toán nối 2 quan hệ bằng phương pháp chọn trên tích: Cho quan hệ R(A,B) S(B,C). Các đơn giản để tính nối RS là đọc R S tính tích RxS theo (giả sử S là quan hệ nhỏ hơn R) nhưng chỉ kết xuất những bộ khớp với những thuộc tính chung R S. Giả sử bộ nhớ trong có M khối, thuật toán cụ thể như sau: Dành(M-1) khối bộ nhớ chính để chứa các khối của S 1 khối bộ nhớ chính để chứa các khối của R . Chia S thành những đoạn dài M=1 khối. Với mỗi đoạn D của S được đọc vào bộ nhớ chính, ta nạp lần lượt từng khối K của R vào 1 khối trong bộ nhớ chính thực hiện: for mỗi bộ v trong D do for mỗi bộ u trong D do Nếu u(B)=v(B) kết xuất bộ uv= (u(A),u(B),v(C)) 2/ Chi phí nối hai quan hệ bằng phương pháp chọn trên tích: Chiến lược trên sẽ cần B S , lần truy suất khối s để đọc quan hệ S mỗi khối của R sẽ được truy xuất d lần,trong đó d là số đoạn M-1 khối của S , vì d xấp xỉ bằng nên chi phí đọc dữ liệu sẽ là: B S + Ta ước lượng số lượng các khối chứa kết quả phép nối. Gọi I B là kích thước miền kích thuộc tính B chung trong R S. Vì số lượng bộ trung bình của nối RS bằng số bộ của tích Đề -Các chia cho I B nên số khối trung bình của RS cũng bằng số khối của tích Đề -Các chia cho I B chi phí xuất dữ liệu là: Chi phí của phương án này là chi phí nhập cộng với chi phí xuất: B S + + 3/ Ví dụ: Cho R(A,B) S(B,C) như sau: R A a b c d e f B 4 5 2 3 1 2 S B 1 2 1 2 4 3 C b e h d b a 7 Nhóm Moon Giả sử mỗi khóa chứa được 2 bản ghi, bộ nhớ trong M=3. Khi đó số khối của R S là B R = 4 B S = 3. Ta dành M -1=2 khối, ký hiệu M S , để đọc S, 1 khối ký hiệu M R , để đọc R.Cấu trúc M R M S như sau : M R A B M S B C Thực hiện vòng nối như sau. Vòng 1: Đọc 2 khối của S vào M S , ta được: M S B 1 2 1 2 C b e h d Sau đó đọc lần lượt từng khối của R vào M R so sánh các bản ghi của M S vs các bản ghi của M R nối những cặp khớp nhau ( có thuộc tính B trùng nhau). - Đọc khối thứ nhất của R vào M R ta được : M R A a b B 4 5 Các bản ghi của M S M R không nối được vs nhau. R S rỗng. - Đọc khối thứ 2 của R vào M R ta có M R A 12 13 B 2 3 So sánh các bản ghi của M S vs các bản ghi của M R ta thấy bản ghi (2,e) (2,d) của M S nối được vs bản ghi (c,2) của M R .Ta nhận được R S A c c B 2 2 C e d Đọc khối thứ 3 của R vào M R ta có M R A e f B 1 2 So sánh các bản ghi của MS vs ác bản ghi của MR, ta thấy bản ghi (1,b) (1,h) của MS nối được vs các bản ghi (e,1) của MR bản ghi (2,e) (2,d) của MS nối được vs bản ghi (f,2) của MR. Ghi tiếp các nối vào R S ta nhân được: 8 Nhóm Moon R S A c c e e f f B 2 2 1 1 2 2 C e d b h e d Tương tự cho đến hết. Vòng 2 tương tự vòng 1 khi ta đọc khối còn lại của S vào MS, ta nhân được nối R S như sau: R S A c c e e f f a d B 2 2 1 1 2 2 4 3 C e d b h e d b a Kết thúc. 4/ Cài đặt chạy thử chương trình nối 2 quan hệ bằng phương pháp chọn trên tích: #include<conio.h> #include<stdio.h> typedef struct{ int A, B; }Rbanghi; typedef struct{ int B, C; }Sbanghi; typedef struct{ int A, B, C; }RSbanghi; void noi(Rbanghi r[], Sbanghi s[], Rbanghi mr[], Sbanghi ms[], RSbanghi rs[], int m){ int i,j,d; int k=0,l,n=0; int x,y,t,u; FILE *f1, *f2, *f3; f1 = fopen("R.DAT","rt"); f2 = fopen("S.DAT","rt"); f3 = fopen("RS.DAT","wt"); d=(m-1)*15; x=500/d; y=x*d; for(i=0;i<1000;i++) fscanf(f1, "%d\t%d\n", &r[i].A, &r[i].B); 9 Nhóm Moon for(i=0;i<500;i++) fscanf(f2, "%d\t%d\n", &s[i].B, &s[i].C); for(t=0;t<(x+1);t++){ if(t==x) d=500-y; for(i=0;i<d;i++){ ms[i].B = s[k].B; ms[i].C = s[k].C; k++; } l=0; for(u=0;u<67;u++){ if(u==66){ for(j=0;j<10;j++){ mr[j].A = r[l].A; mr[j].B = r[l].B; l++; } for(i=0;i<d;i++){ for(j=0;j<10;j++){ if(mr[j].B==ms[i].B){ fprintf(f3, "%d\t%d\t %d\n", mr[j].A, ms[i].B, ms[i].C); n++; } } } } else{ for(j=0;j<15;j++){ mr[j].A = r[l].A; mr[j].B = r[l].B; l++; } for(i=0;i<d;i++){ for(j=0;j<15;j++){ if(mr[j].B==ms[i].B){ fprintf(f3, "%d\t%d\t %d\n", mr[j].A, ms[i].B, ms[i].C); n++; } } } } 10 [...]... đọc ghi các bản ghi có giá trị thuộc tính B bằng giá trị thuộc tính B trong M’ vào M’ Kết xuất các nối trong M’ ra đĩa 2/ Chi phí nối hai quan hệ bằng phương pháp sắp nối: Như vậy,với phương pháp trên mỗi khối của R S chỉ cần đọc một lần, nên chi phí đọc của thuật toán là: BS+BR (1.5) 12 Nhóm Moon Vấn đề còn lại là chọn phương pháp tính chi phí sắp xếp R S.Một trong các phương pháp sắp. .. A B a 1 B 1 c 2 D 3 v↓ B 1 2 2 C e F g u(B)== v(B) Nối các bản ghi ra RS, sau đó làm rỗng M đưa u,v vào S RS M A B C a 1 e A B C b 1 e c 2 f Đọc tiếp u,v u↓ R A B a 1 b 1 c 2 D 3 v↓ B 1 C e v(B)M.B =2, ta nối các bản ghi trong M , ghi ta RS 15 Nhóm Moon RS A B C a 1 e b 1 e c 2 f c 2 g Kết thúc 4/... 1 2 f B 1 C e Bộ nhớ M có cấu trúc như sau: S c 2 d 3 2 g A B Null C Ban đầu M rỗng giá trị thuộc tính B trong M chưa xác định M Nối RS có cấu trúc A RS B C Ta thực hiện thuật toán 4 .2 để nối R S như sau: u↓ R A B a 1 B 1 c 2 d 3 v↓ S B 1 2 2 C e F g u(B)== v(B) Vì M rỗng nên ta đưa u,v vào M A B C a 1 e Đọc tiếp u,v u↓ R A B a 1 B 1 v↓ c 2 S B 1 2 d 3 2 14 Nhóm Moon C e u(B) . hiện một câu vấn tin nhằm tối ưu hóa câu vấn tin, nâng cao hiệu năng xử lý, tiết kiệm chi phí. Các phép toán lấy nối và tích có chi phí rất cao so với các phép toán đơn ngôi như phép chọn hay

Ngày đăng: 15/06/2014, 23:23

TỪ KHÓA LIÊN QUAN

w