Tải bản đầy đủ (.pdf) (36 trang)

bài tập thục hành CSDL phân tán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.6 MB, 36 trang )

Nguyễn Phương 2011

TÀI LIỆU THỰC HÀNH CƠ SỞ DỮ LIỆU PHÂN TÁN
Phần 1.
1.1

BÀI TẬP

Bài tập chương 2
a. Chuẩn đầu ra: sau bài này người học có thể:
− Định nghĩa được các loại phân mảnh sử dụng đại số quan hệ.
− Vẽ được cây phân mảnh các đọan dữ liệu
− Viết các đọan mã code xử lý vấn tin dữ liệu phân tán theo yêu cầu các bài tóan cụ thể.
b. Chuẩn bị: Đọc trước phần lý thuyết chương 2, các ví dụ mẫu.
c. Phương tiện: Giấy, viết
d. Thời lượng: 5 tiết
e. Nội dung thực hành: Thực hiện bài tập 1 đến 5. Hướng dẫn giải bài tập đã hướng dẫn
trong ví dụ lý thuyết

Bài 1
Cho lược đồ toàn cục sau:
PATIENT(NUMBER,
TREATMENT)

NAME,

SSN,

AMOUNT-DUE,

DEPT,



DOCTOR,

MED-

DEPARTMENT(DEPT, LOCATION, DIRECTOR)
STAFF(STAFFNUM, DIRECTOR, TASK)
Giả sử Dom(LOCATION)={HN,SG}
Định nghĩa phân đoạn của chúng như sau:
(a)

DEPARTMENT được phân đoạn ngang bởi LOCATION với hai vị trí; mỗi phòng ban
được quản lý bởi một DIRECTOR.

(b)

Nhân viên trong mỗi phòng được quản lý bởi Director của văn phòng. STAFF được phân
đoạn ngang dẫn xuất theo DEPARTMENT và một semi-join trên thuộc tính DIRECTOR.

(c)

PATIENT được phân đoạn hỗn hợp: Các thuộc tính NUMBER, NAME, SSN, và
AMOUNT-DUE tạo thành một phân đoạn dọc được sử dụng cho các mục đích tính toán;
các thuộc tính NUMBER, NAME, DEPT, DOCTOR và MED-TREATMENT tạo thành
một phân đoạn dọc được sử dụng cho việc mô tả. Phân đoạn thứ hai được phân đoạn
ngang dẫn xuất từ DEPARTMENT bởi một semi-join trên thuộc tính DEPT.
Đưa ra biểu thức tái tạo các quan hệ toàn cục từ các phân đoạn.

Bài 2.
Hãy xem lược đồ toàn cục, phân đoạn và định vị sau:

Lược đồ toàn cục: STUDENT(NUMBER, NAME, DEPT)
Lược đồ phân đoạn:

STUDENT1 = σDEPT=”EE” STUDENT

1


Nguyễn Phương 2011

STUDENT2 = σDEPT=”CS” STUDENT
Lược đồ định vị: : STUDENT1 at sites 1,2
STUDENT2 at sites 3,4
Với Dom(DEPT) = { “EE”, “CS”}.
(a)

Viết một ứng dụng đòi hỏi nhập vào mã số (number) sinh viên từ terminal và xuất
ra tên và khoa, tại mức 1,2 và 3 của trong suốt.

(b)

Viết một ứng dụng để chuyển sinh viên có số 232 từ phòng “EE” đến khoa “CS”
tại mức 1,2 và 3 của trong suốt.

(c)

Viết một ứng dụng để chuyển một sinh viên có mã số và khoa được đưa ra tại
terminal đến khoa khác, ở mức 2 của trong suốt.

(d)


Hãy xem trường hợp trong ứng dụng 1 được lập lại cho nhiều giá trị có thể của số
sinh viên. Viết ứng dụng:
• Truy cập cơ sở dữ liệu cho mỗi mã sinh viên được cho trên terminal.
• Truy cập cơ sở dữ liệu sau khi tập hợp một vài thông số đầu vào từ terminal.

Hãy viết ứng dụng trong suốt ở mức 2 trên EXAMPLE_DDB cho thao tác chuyển nhà cung cấp
157 từ “SF” sang “LA” (xem thông tin SUPPLIER, SUPPLY; sử dụng phát biểu SQL:
“INSERT INTO <tên quan hệ> QUERY”.)
Bài 3
Cho một quan hệ phổ quát chứa thông tin về việc thực tập của sinh viên như sau :
THUCTAP gồm các thuộc tính: MASV, HOTEN, NOISINH, HOCLUC, TENDETAI,
KINHPHI, NOITHUCTAP, KETQUA.
Tân từ: mỗi sinh viên thực tập với một đề tài duy nhất, tại một tỉnh xác định
(NOITHUCTAP) và đạt kết quả là bao nhiêu điểm(KETQUA).
Quan hệ trên được phân rã thành các phân mảnh sau:
- Tại phân mảnh 1 – THUCTAP_THANHPHO, chỉ lưu trữ các thông tin của quá trình thực
tập với NOITHUCTAP là ở thành phố Hồ Chí Minh.
- Tại phân mảnh 2 - THUCTAP_TINH_1, lưu trữ các thông tin về quá trình thực tập của
sinh viên với nơi thực tập không ở thành phố, kèm theo điều kiện là kinh phí trên 05 triệu đồng
và thực tập đạt loại khá giỏi (kết quả từ 7.0 trở lên).
- Tại phân mảnh 3 - THUCTAP_TINH_2, lưu trữ các thông tin về quá trình thực tập của
sinh viên với nơi thực tập không ở thành phố, kèm theo điều kiện là kinh phí không quá 05 triệu
đồng và thực tập đạt loại khá giỏi (kết quả từ 7.0 trở lên).
- Tại phân mảnh 4 - THUCTAP_TINH_3, lưu trữ các thông tin của các sinh viên còn lại.
Biết rằng có 3 site lưu trữ như sau:
Site 1: chứa phân mảnh THUCTAP_THANHPHO
Site 2: chứa phân mảnh THUCTAP_TINH_1 và THUCTAP_TINH_2
Site 3: chứa phân mảnh THUCTAP_TINH_2 và THUCTAP_TINH_3
2



Nguyễn Phương 2011

a.

Viết biểu thức đại số quan hệ thực hiện việc phân rã thành các phân mảnh và tái hợp
theo yêu cầu như trên.

b.

Hiển thị thông tin về việc thực tập của sinh viên quê ở Nha Trang, gồm MASV,
HOTEN, HOCLUC, TENDETAI, KETQUA.

c.

Thay đổi nơi thực tập của sinh viên SV001 từ Nha Trang về tại thành phố Hồ Chí
Minh.

d.

Điều chỉnh kết quả thực tập của sinh viên Lê Văn A thêm 0.5 điểm (gđịnh sv A chỉ có
1).

Với câu b, c và d yêu cầu viết câu truy vấn ở cả 3 mức trong suốt.
Bài 4
Cho một quan hệ phổ quát chứa thông tin về tài khoản trong ngân hàng như sau
TAIKHOAN(MATAIKHOAN,
LOAITIEN, LOAITK)


TENCHUTK,

NGAYMO,

CHINHANH,

SODU,

Tân từ: mỗi tài khoản có một mã tài khoản (MATAIKHOAN) duy nhất để phân biệt với các tài
khoản khác. Mỗi tài khoản thuộc duy nhất một chủ tài khoản (TENCHUTK), được mở vào một
ngày (NGAYMO), tại một chi nhánh (CHINHANH) và được lựa chọn một trong hai loại tiền
(LOAITIEN) là USD hay VND. Khi mở tài khoản, chủ tài khoản đăng ký loại tài khoản
(LOAITK) : 3 tháng, 6 tháng, một năm hoặc không kỳ hạn. Số tiền hiện có trong tài khoản được
xác định thông qua số dư của tài khoản (SODU)
Quan hệ phổ quát trên được phân rã thành các phân đoạn sau:
TK_1 : chứa thông tin các tài khoản mở tại chi nhánh Hà Nội
TK_2: chứa thông tin các tài khoản mở tại TPHCM mà có số dư từ 100 triệu trở lên
TK_3: chứa thông tin các tài khoản mở tại TPHCM mà có số dư dưới 100
TK_4: chứa thông tin các tài khoản còn lại.
Biết rằng có 3 site lưu trữ như sau:
Site 1: chứa phân đoạn TK_1 và TK_2
Site 2: chứa phân đoạn TK_2 và TK_3
Site 3: chứa phân đoạn TK_3 và TK_4.
a. Viết câu truy vấn để thực hiện việc phân rã thành các phân đoạn theo yêu cầu như trên.
b. Hiển thị thông tin về số dư và loại tiền có trong tài khoản của khách hàng Lê Tuấn Anh.
c. Chủ tài khoản TK001 cần thay đổi nơi giao dịch của mình sang chi nhánh mới là
Hanoi.
d. Khách hàng Trần Hoàng Vĩnh thực hiện giao dịch nộp tiền vào tài khoản với số tiền là
5 triệu đồng.
Với câu b, c và d yêu cầu viết câu truy vấn ở cả 3 mức trong suốt.


3


Nguyễn Phương 2011

Bài 5
Cho các quan hệ toàn cục:
NV(MaNV, Hoten, MaNQL, Phong, Luong, Diachi)
DA(MaDA, TenDA, Diadiem, KP)
Phancong(MaNV,MaDA)
Các quan hệ được phân đoạn như sau:

NV1(MaNV, Hoten,MaNQL, Diachi, Phong): Gồm các nhân viên có lương 5tr. USD trở lên
NV2(MaNV, Hoten,MaNQL, Diachi, Phong): Gồm các nhân viên có lương dưới 5tr. USD
NV3(MaNV, Hoten, Lương): Gồm các nhân viên có lương 5tr. USD trở lên
NV4(MaNV, Hoten, Lương): Gồm các nhân viên có lương dưới 5tr. USD
DA1: Danh sách dự án ở TP.HCM có KP từ 1 tỉ trở lên;
DA2: Danh sách dự án ở TP.HCM có KP dưới 1 tỉ;
DA3: Danh sách dự án ở các tỉnh thành khác có KP từ 500 tr. trở lên;
DA4: Danh sách dự án ở các tỉnh thành khác có KP dưới 500 tr.;
Quan hệ Phân công được phân đoạn theo Dự án.
a. Viết biểu thức đại số phân đoạn và tái tạo các quan hệ trên;
b. Vì một nguyên nhân giả định, nhân viên có MaNV NV01005 vi phạm kỷ luật. Quyết
định phạt hành chính được thành lập trừ lương mỗi tháng 2tr., thuyên chuyển công tác
nhân viên này về làm bảo vệ ở dự án Đồng Nai và rút kinh phí ở dự án nhân viên này
đang công tác 100tr. đồng đưa vào ngân sách cty. Viết truy vấn xử lý trường hợp trên
(mức trong suốt định vị dữ liệu).
1.2


Bài tập chương 3
a. Chuẩn đầu ra: sau bài này người học có thể:
− Phân mảnh dữ liệu ngang và dọc theo các thuật toán PHORIZONTAL và BEA.
b. Chuẩn bị: Đọc trước phần lý thuyết chương 3, các thuật tóan, các ví dụ mẫu.
c. Phương tiện: Giấy, viết
d. Thời lượng: 5 tiết
e. Nội dung thực hành: Thực hiện bài tập 1 đến 3. Hướng dẫn giải bài tập đã hướng dẫn
trong ví dụ lý thuyết

Bài 1:
4


Nguyễn Phương 2011

Cho quan hệ NHANVIEN của một công ty dầu khí.
THAMNIEN PHONG
PHAI CHUCVU
MaNV HT
E1
Trung
M
Manager
12
1
E2
Phương F
Analyst
24
2

E3
Long
M
Analyst
6
1
E4
Đại
M
Consultant
10
6
E5
Hùng
M
Engineer
48
5
E6
Dũng
M
Programmer 18
7
E7
Hương F
Manager
24
5
E8
Thảo

F
Manager
5
4
E9
Mai
F
Engineer
36
5
E10
Đạo
M
Manager
40
6
Nhân viên công ty tham gia các dự án theo phòng ban, tổ phòng ban từ 1 đến 5 làm việc dự
án văn phòng và tất cả nữ nhân viên đều làm việc tại dự án này, tổ phòng ban từ 6 trở đi làm việc
ở dự án ngoài giàn khoan, tổng cộng công ty hiện tại có 02 dự án thực hiện trong 10 năm tại giàn
khoan Vũng Tàu và tại Q.1, TP.HCM.
Giả sử có hai ứng dụng truy xuất NHÂN VIÊN:
1. Ứng dụng thứ nhất truy cập CSDL để quản lý tiền lương nhân viên đang làm việc và lương
hưu của nhân viên đã làm việc đang ở tuổi về hưu. Tuổi về hưu được xác định đối với nam
có thâm niên là quá 30 năm, nữ là quá 25 năm.
2. Ứng dụng thứ hai có thể chạy tại bất kỳ phòng ban nào, truy cập thông tin nhân viên theo
các dự án.
Sử dụng thuật toán COM_IN và PHORIZONTAL tìm tập hợp vị từ giao tối thiểu và phân mảnh
ngang chính cho quan hệ NHANVIEN trên theo yêu cầu các ứng dụng.
Bài 2:
Cho quan hệ NHANVIEN của một công ty dầu khí.

THAMNIEN PHONG
PHAI CHUCVU
MaNV HT
E1
Trung
M
Manager
12
8
E2
Phương F
Analyst
24
1
E3
Long
M
Analyst
6
7
E4
Đại
M
Consultant
10
6
E5
Hùng
M
Engineer

48
7
E6
Dũng
M
Programmer 18
6
E7
Hương F
Manager
24
7
E8
Thảo
F
Manager
5
5
E9
Mai
F
Engineer
36
3
E10
Hải
F
Manager
40
4

Nhân viên công ty tham gia các dự án theo phòng ban, tổ phòng ban từ 1 đến 5 làm việc dự
án văn phòng, tổ phòng ban trên 5 làm việc ở dự án ngoài giàn khoan, tổng cộng công ty hiện tại
có 02 dự án thực hiện trong 10 năm tại giàn khoan Vũng Tàu và tại Q.1, TP.HCM. Tất cả các
nam nhân viên đều làm việc tại văn phòng dự án ở giàn khoan.

5


Giả sử có hai ứng dụng truy xuất NHÂN VIÊN:

Nguyễn Phương 2011

3. Ứng dụng thứ nhất truy cập CSDL để quản lý tiền lương nhân viên đang làm việc và lương
hưu của nhân viên đã làm việc đang ở tuổi về hưu. Tuổi về hưu được xác định đối với nam
có thâm niên là quá 30 năm, nữ là quá 25 năm.
4. Ứng dụng thứ hai có thể chạy tại bất kỳ phòng ban nào, truy cập thông tin nhân viên theo
các dự án.
Sử dụng thuật toán COM_IN và PHORIZONTAL tìm tập hợp vị từ giao tối thiểu và phân mảnh
ngang chính cho quan hệ NHANVIEN trên theo yêu cầu các ứng dụng.
Bài 3
Cho quan hệ toàn cục Nhân viên (NV), Phòng ban (PB) và Dự án (DA) như sau:
NV(MaNV, HoNV, TenNV, NoiThuongTru, MaPhong)
PB(MaPhong, TenPhong, MaDA)
DA(MaDA, TenDA, Diadiem)
Xét các truy vấn
q1: SELECT MaNV, HoNV, TenNV, MaPhong FROM NV
q2: SELECT MaNV, HoNV, TenNV FROM NV WHERE MaPhong=Value
q3: SELECT MaNV FROM NV WHERE MaPhong=Value AND NoiThuongTru=Value
q4: SELECT TenNV FROM NV
q5: SELECT MaNV, HoNV, TenNV FROM NV

S1 S2 S3
q1 10 20 0
0
10
q2 5
Tần số sử dụng các truy vấn tại các site như sau:
35 5
q3 0
10 0
q4 0
15 0
q5 0
a. Xây dựng ma trận ái lực của tất cả các thuộc tính quan hệ NV;
b. Cho biết số truy xuất đến các cặp thuộc tính cho mỗi ứng dụng tại các vị trí refi(qj)=1.
Phân đoạn dọc quan hệ NV sử dụng thuật toán năng lượng nối BEA.
1.3

Bài tập chương 4
a. Chuẩn đầu ra: sau bài này người học có thể:
− Vẽ được cây truy vấn ứng với mỗi bài tóan cụ thể.
− Biến đổi được truy vấn tòan cục sang truy vấn phân mảnh trên dữ liệu phân tán đã có.
− Xác định được các chi phí trong các truy vấn, xử lý dữ liệu.
− Đưa ra được cây truy vấn tối ưu cho mỗi bài tóan cụ thể.
b. Chuẩn bị: Đọc trước phần lý thuyết chương 4, các ví dụ mẫu.
c. Phương tiện: Giấy, viết
d. Thời lượng: 5 tiết

6



Nguyễn Phương 2011

e. Nội dung thực hành: Thực hiện bài tập 1 đến 3. Hướng dẫn giải bài tập đã hướng dẫn
trong ví dụ lý thuyết
Bài 1
Cho quan hệ toàn cục Nhân viên (NV), Phòng ban (PB) và Dự án (DA) như sau:
NV(MaNV, HoNV, TenNV, NoiThuongTru, MaPhong)
PB(MaPhong, TenPhong, MaDA)
DA(MaDA, TenDA, Diadiem)

Quan hệ Nhân viên được phân làm 3 mảnh lưu danh sách nhân viên theo mã Phòng. Dự án
được chia làm 2 mảnh theo địa điểm thuộc hai miền Nam và Bắc. Phòng Ban được chia theo mã
dự án.
Biến đổi câu truy vấn sau trên các mảnh:
SELECT HoNV, TenNV
FROM NV, PB, DA
WHERE
NV.MaPhong=PB.MaPhong
AND PB.MaDA=DA.MaDA
AND Diadiem = “LONGAN”
AND TenPhong = “QUAN LY”
Bài 2

Cho lược đồ cơ sở dữ liệu như trên. Trong đó các quan hệ gồm khách hàng (customer),
người gửi (depositor), tài khoản (account), chi nhánh (branch), người vay (borrower), tiền vay
(loan).
Quan hệ account chia làm 2 đoạn theo số tiền dư balance: lớn hơn 100 triệu USD ở một
site, còn lại lưu ở site thứ 2. Loan phân hoạch theo 2 mảnh tương tự, với số tiền vay amount với
ranh giới là 100triệu đồng và lưu ở 2 site khác nhau. Hay bảng depositor và borrower phân mảnh
ngang tương ứng theo account và loan và cũng đặt tại các site khác nhau tương ứng.

Hãy biến đổi truy vấn sau thành vấn tin rút gọn trên các mảnh.
select distinct customer_name
from borrower, loan

7


Nguyễn Phương 2011

where borrower.loan_number = loan.loan_number
and branch_name = “Perryridge”
and (branch_name, customer_name) in
(select branch_name, customer-name
from depositor, account
where depositor.account_number =account.account_number)
Bài 3
Cho các quan hệ toàn cục:

DEPT( dept, category, location, director); - mỗi phòng ban có 1 director, thuộc 1
category
STAFF( staffnum, director, task);
PATIENT( number, name, ssn, dept, doctor, med-treatment, drug, quan).
Trong đó khoa Nhi không dùng thuốc aspirin, ssn = {Y,N}.
Các quan hệ được phân mảnh như sau:
DEPT_NOI: Chứa thông tin các phòng ban Khoa Nội (category=NOI), lưu trữ tại site 1;
DEPT_NGOAI: Chứa thông tin các phòng ban Khoa Ngoại, lưu trữ tại site 2;
DEPT_NHI: Chứa thông tin các phòng ban Khoa Nhi, lưu trữ tại site 3;
DEPT#: Chứa thông tin các các phòng ban Khoa còn lại, lưu trữ tại site 4;
STAFF_NOI: Các nhóm cán bộ phòng ban Khoa Nội, lưu trữ tại site 1;
STAFF_NGOAI: Các nhóm cán bộ phòng ban Khoa Ngoại, lưu trữ tại site 2;

STAFF_NHI: Các nhóm cán bộ phòng ban Khoa Nhi, lưu trữ tại site 3;
STAFF#: Các nhóm cán bộ phòng ban Khoa khác, lưu trữ tại site 4;
PATIENT_Y(number, name, ssn): Dùng quản lý chung bệnh nhân, ssn=“Y”, lưu trữ tại site 1,4;
PATIENT_N(number, name, ssn): Dùng quản lý chung bệnh nhân, ssn= “N”, lưu trữ tại site
2,3;
PATIENT_N1(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nội, điều trị
nhạy cảm (med-treatment= “intensive”), lưu trữ tại site 1,3;
PATIENT_N2(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nội,điều trị
không nhạy cảm, lưu trữ tại site 2,4;
PATIENT_N3(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Ngoại, tại site
2,5;
PATIENT_N4(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nhi, tại site 3,7;
PATIENT#(number, dept, doctor, med-treatment,drug,quan): Quản lý các khoa còn lại, tại site
4,8;

8


Nguyễn Phương 2011

a) Vẽ cây phân mảnh và viết biểu thức định nghĩa phân mảnh, tái hợp các phân mảnh trên;
(1 điểm)
b) Viết truy vấn chuyển bệnh nhân có name nhập từ terminal từ khoa này sang khoa khác,
tên khoa cũng được nhập từ terminal, Giả định rằng việc nhập vào tên khoa mới là không
giống tên khoa hiện có của bệnh nhân, và các name không trùng lặp nhau, viết ở mức ánh
xạ cục bộ;
(4 điểm)
c) Vẽ sơ đồ kết của: (1 điểm)
DEPT JNdept=dept PATIENT
DEPT JNdirector=director STAFF

d) Biến đổi truy vấn toàn cục thành phân mảnh

Ψcategory,avg(quan)Пcategory,taskσdrug= “aspirin” (DEPT NJN STAFF JN dept=dept PATIENT) (1 điểm)

9


Phần 2.

THỰC HÀNH

Nguyễn Phương 2011

a. Chuẩn đầu ra: sau bài này người học có thể:
− Xây dựng được từ điển dữ liệu, xác định được các lược đồ cơ sở dữ liệu phân tán
− Xây dựng được phần mềm có các chức năng sau:
i. quản lý cơ sở dữ liệu phân tán;
ii. quản lý từ điển dữ liệu cơ sở dữ liệu phân tán;
iii. các thao tác xử lý dữ liệu trên CSDL phân tán: cầu nối giữa người dùng và cơ sở dữ
liệu vật lý.
iv. phân mảnh dữ liệu
b. Chuẩn bị: Ôn tập kết hợp tất cả các chương 1-4.
c. Phương tiện: Máy tính có cài đặt ngôn ngữ cấp cao, hệ quản trị cơ sở dữ liệu: SQL
Server hoặc Oracle…
d. Thời lượng: 10 tiết thực hành + 50 tiết chuẩn bị ở nhà (kéo dài cả học kỳ).
e. Nội dung thực hành: Thực hiện bài tập 1 đến 3.
Bài 1. Tạo chương trình theo các yêu cầu sau:
a. Làm việc trên một cơ sở dữ liệu phân tán trên ít nhất 2 máy tính (site). Lược đồ
phân mảnh, ít nhất phải tồn tại 2 quan hệ được phân mảnh, mỗi quan hệ phân hỗn
hợp ít nhất 2 mảnh. Lược đồ định vị dữ liệu không giống nhau ở các site, giao của

các lược đồ này khác rỗng.
b. Thiết lập từ dữ liệu để quản lý lược đồ cơ sở dữ liệu. Từ điển dữ liệu phải quản lý
được tất cả thông tin trong lược đồ, các đối tượng như server, database, tables,
attribute, predicates, operators…
c. Chương trình tối thiểu có thể cho người dùng:
i. thao tác trên cơ sở dữ liệu với các thao tác cơ bản sau: tìm kiếm mở rộng
trên các tiêu chí, thông tin có trong CSDL, chỉnh sửa, thêm và xóa thông
tin đã tìm được. Giao diện tùy chọn thiết kế. Người dùng không biết các
bảng, không biết các cấu trúc của cơ sở dữ liệu. Chỉ biết tìm kiếm và hiệu
chỉnh trên dữ liệu của mình có.
ii. Quản lý thông tin từ diển dữ liệu, phù hợp với sự thay đổi trong từ điển dữ
liệu là sự biến đổi của dữ liệu trong cơ sở dữ liệu.
d. Nội dung báo cáo:
− Mô tả bài toán, cơ sở dữ liệu, các lược đồ dữ liệu ở các site
− Xác định từ điển dữ liệu
10


− Kết quả thực hiện (+Demo)
− Phụ lục (Code) (Courier New, 8pt)

Nguyễn Phương 2011

Bài 2. Tạo chương trình cho phép phân mảnh dữ liệu theo thuật toán năng lượng kết (BEA).
Bài 3. Nâng cấp chương trình ở bài 1, cho phép người dùng phân mảnh dữ liệu ngang, dọc theo
ý muốn dựa trên các thông tin của từ điển dữ liệu và cơ sở dữ liệu sẵn có.

11



Nguyễn Phương 2011

TÀI LIỆU THAM KHẢO

1. Nguyễn Trung Trực. Cơ sở dữ liệu phân bố. NXB ĐHQG 2004.
2. Nguyễn Bá Tường. Nhập môn cơ sở dữ liệu phân tán, NXB KH&KT Hà Nội, 2003.
3. Stefan Ceri - Giuseppe Pelagatti, Distributed Database Principles & Systems, McGraw
Hill Book Company, 1985.
4. Nguyễn Minh Đạo. Tài liệu hướng dẫn lập trình kết nối dữ liệu từ ngôn ngữ cấp cao (đính
kèm trang sau).

12


Bài 10-11: LẬP TRÌNH KẾT NỐI CƠ SỞ DỮ LIỆU
Bước 1:
- Database được sử dụng (DATABASENAME) là QuanLyBanHang, gồm có các bảng sau:
+ Nhanvien

+ HoaDon

+ Sanpham

+ ChiTietHoaDon

+ Khachhang
Giảng viên : Nguyễn Minh Đạo

Trang 1



+ ThanhPho

Bước 2:
Nhập dữ liệu cho các bảng :
Bảng ThanhPho

Bài tập 1:
Đưa dữ liệu lên các đối tượng ListBox / ComboBox
Ví dụ 10.1: Thiết kế form như sau

* Yêu cầu:
Giảng viên : Nguyễn Minh Đạo

Trang 2


. Khi Form load: đưa dữ liệu từ table ThanhPho lên ListBox (lstThanhPho), kèm bẫy lỗi.
. Nhắp vào Button Thoát: dừng chương trình (có hiện hộp thoại hỏi đáp trước khi dừng).
* Hướng dẫn:
- Thiết kế form như yêu cầu.
- Khai báo namespace sử dụng:
using System.Data.SqlClient;
Phần mã lệnh:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;

using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Ex10_1
{
public partial class Form1 : Form
{
// Chuỗi kết nối
string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated
Security=True";
// Đối tượng kết nối
SqlConnection conn = null;
// Đối tượng đưa dữ liệu vào DataTable dtThanhPho
SqlDataAdapter daThanhPho = null;
// Đối tượng hiển thị dữ liệu lên Form
DataTable dtThanhPho = null;
public Form1()
{
InitializeComponent();
}
// Sự kiện xãy ra khi form được tải vào bộ nhớ và xuất ra màn hình
private void Form1_Load(object sender, EventArgs e)
{
try
{
// Khởi động connection
conn = new SqlConnection(strConnectionString);
// Vận chuyển dữ liệu lên DataTable dtThanhPho
daThanhPho = new SqlDataAdapter("SELECT * FROM THANHPHO", conn);
dtThanhPho = new DataTable();

dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);
// Đưa dữ liệu lên ListBox
this.lstThanhPho.DataSource = dtThanhPho;
this.lstThanhPho.DisplayMember = "TenThanhPho";
Giảng viên : Nguyễn Minh Đạo

Trang 3


this.lstThanhPho.ValueMember = "ThanhPho";
}
catch (SqlException)
{
MessageBox.Show("Không lấy được nội dung trong table THANHPHO. Lỗi rồi!!!");
}
}
// Sự kiện đang đóng form, hủy kết nối và giải phóng các đối tượng
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Giải phóng tài nguyên
dtThanhPho.Dispose();
dtThanhPho = null;
// Hủy kết nối
conn = null;
}
// Click nút btnThoat
private void btnThoat_Click(object sender, EventArgs e)
{
// Khai báo biến traloi

DialogResult traloi;
// Hiện hộp thoại hỏi đáp
traloi = MessageBox.Show("Chắc không?", "Trả lời",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
// Kiểm tra có nhắp chọn nút Ok không?
if (traloi == DialogResult.OK) Application.Exit();
}
// Click chọn dữ liệu trong ListBox
private void lstThanhPho_Click(object sender, EventArgs e)
{
MessageBox.Show("Bạn chọn Thành phố :" + lstThanhPho.SelectedValue.ToString(), "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
Nhập dữ liệu cho bảng KhachHang:

Giảng viên : Nguyễn Minh Đạo

Trang 4


Bài tập 2. Đưa dữ liệu lên DataGridView
Ví dụ 10.2: Thiết kế form như sau

* Yêu cầu:
. Khi Form load: đưa dữ liệu từ table KhachHang lên DataGridView (dgvKHACHHANG),
có bẫy lỗi.
. Nhắp vào Button Thoát: dừng chương trình.
* Hướng dẫn:

- Thiết kế form theo yêu cầu.
- DataGridView có thuộc tính:
+ Name: dgvKHACHHANG
+ Nhắp phải chuột lên DataGridView chọn Edit Columns …
Giảng viên : Nguyễn Minh Đạo

Trang 5


+ Trong hộp thoại Edit Columns, nhắp Add để mở hộp thoại Add column và các
column (cột) theo danh sách sau:

Trong đó:
TextBox: là DataGridViewTextBoxColumn
CheckBox: là DataGridViewCheckBoxColumn
ComboBox: là DataGridViewComboBoxColumn
Thuộc tính DataPropertyName, Width điều chỉnh trong hộp thoại Edit Column.

Giảng viên : Nguyễn Minh Đạo

Trang 6


- Khai báo namespace sử dụng:
using System.Data.SqlClient;
- Phần mã lệnh:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;

using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
Giảng viên : Nguyễn Minh Đạo

Trang 7


namespace Ex10_2
{
public partial class Form1 : Form
{
// Chuỗi kết nối
string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated
Security=True";
// Đối tượng kết nối
SqlConnection conn = null;
// Đối tượng đưa dữ liệu vào DataTable dtKhachHang
SqlDataAdapter daKhachHang = null;
// Đối tượng hiển thị dữ liệu lên Form
DataTable dtKhachHang = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try

{
// Khởi động connection
conn = new SqlConnection(strConnectionString);
// Vận chuyển dữ liệu lên DataTable dtKhachHang
daKhachHang = new SqlDataAdapter("SELECT * FROM KHACHHANG", conn);
dtKhachHang = new DataTable();
dtKhachHang.Clear();
daKhachHang.Fill(dtKhachHang);
// Đưa dữ liệu lên DataGridView
dgvKHACHHANG.DataSource = dtKhachHang;
}
catch (SqlException)
{
MessageBox.Show("Không lấy được nội dung trong table KHACHHANG. Lỗi rồi!!!");
}
}
private void btnThoat_Click(object sender, EventArgs e)
{
// Khai báo biến traloi
DialogResult traloi;
// Hiện hộp thoại hỏi đáp
traloi = MessageBox.Show("Chắc không?", "Trả lời",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
// Kiểm tra có nhắp chọn nút Ok không?
if (traloi == DialogResult.OK) Application.Exit();
}

Giảng viên : Nguyễn Minh Đạo

Trang 8



private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Giải phóng tài nguyên
dtKhachHang.Dispose();
dtKhachHang = null;
// Hủy kết nối
conn = null;
}
}
}
Bài tập 3: Đưa dữ liệu vào ComboBox trong DataGridView
Ví dụ 10.3: Từ Ví Dụ 10.2, bổ sung button
ReLoad (btnReLoad): load lại nội dung của table KhachHang vào DataGridView.

Chú ý: Vào trong thuộc tính Columns của dgvKHACHHANG chỉnh lại ThanhPho là ComboBox

Giảng viên : Nguyễn Minh Đạo

Trang 9


- Phần mã lệnh:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;

using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Ex10_3
{
public partial class Form1 : Form
{
// Chuỗi kết nối
string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated
Security=True";
// Đối tượng kết nối
SqlConnection conn = null;
// Đối tượng đưa dữ liệu vào DataTable dtKhachHang
SqlDataAdapter daKhachHang = null;
// Đối tượng hiển thị dữ liệu lên Form
DataTable dtKhachHang = null;
// Đối tượng đưa dữ liệu vào DataTable dtThanhPho
SqlDataAdapter daThanhPho = null;
// Đối tượng hiển thị dữ liệu lên Form
DataTable dtThanhPho = null;
Giảng viên : Nguyễn Minh Đạo

Trang 10


public Form1()
{
InitializeComponent();
}
void LoadData()

{
try
{
// Khởi động connection
conn = new SqlConnection(strConnectionString);
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Open();
// Vận chuyển dữ liệu vào DataTable dtThanhPho
daThanhPho = new SqlDataAdapter("SELECT * FROM THANHPHO", conn);
dtThanhPho = new DataTable();
dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);
// Đưa dữ liệu lên ComboBox trong DataGridView
(dgvKHACHHANG.Columns["ThanhPho"] as
DataGridViewComboBoxColumn).DataSource = dtThanhPho;
(dgvKHACHHANG.Columns["ThanhPho"] as
DataGridViewComboBoxColumn).DisplayMember =
"TenThanhPho";
(dgvKHACHHANG.Columns["ThanhPho"] as
DataGridViewComboBoxColumn).ValueMember =
"ThanhPho";
// Vận chuyển dữ liệu vào DataTable dtKhachHang
daKhachHang = new SqlDataAdapter("SELECT * FROM KHACHHANG", conn);
dtKhachHang = new DataTable();
dtKhachHang.Clear();
daKhachHang.Fill(dtKhachHang);
// Đưa dữ liệu lên DataGridView
dgvKHACHHANG.DataSource = dtKhachHang;
}

catch (SqlException)
{
MessageBox.Show("Không lấy được nội dung trong table KHACHHANG. Lỗi rồi!!!");
}
}
private void Form1_Load(object sender, EventArgs e)
{
LoadData();
}
private void btnReLoad_Click(object sender, EventArgs e)
{
LoadData();
}
Giảng viên : Nguyễn Minh Đạo

Trang 11


private void btnThoat_Click(object sender, EventArgs e)
{
// Khai báo biến traloi
DialogResult traloi;
// Hiện hộp thoại hỏi đáp
traloi = MessageBox.Show("Chắc không?", "Trả lời",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
// Kiểm tra có nhắp chọn nút Ok không?
if (traloi == DialogResult.OK) Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

// Giải phóng tài nguyên
dtKhachHang.Dispose();
dtKhachHang = null;
// Hủy kết nối
conn = null;
}
}
}
III. Các thao tác trên dữ liệu: Thêm – Sửa - Xóa
Ví dụ 10.4: Từ Ví dụ 10.3, bổ sung button sau
Xóa (btnXoa): xóa record hiện hành ra khỏi table KhachHang.

Khi chọn mẫu tin và click nút Xóa, sẽ hiện thông báo xác nhận việc xóa
Giảng viên : Nguyễn Minh Đạo

Trang 12


Click nút Yes để xóa và No để hủy thao tác.
Khi click Yes, hiện thông báo:

Click nút Reload, ta sẽ thấy mẫu tin đã bị xóa.
Khi click No, hiện thông báo:

- Phần mã nguồn
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;

using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Ex10_4
{
Giảng viên : Nguyễn Minh Đạo

Trang 13


×