Bộ môn Tin học Đậu Hải Phong
BÀI TẬP THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU 2
Người biên tập: Đậu Hải Phong
Đề tài 1: Xây dựng và quản trị cơ sở dữ liệu hệ thống quản lý nhập xuất tồn hàng hóa.
Một công ty X cần quản lý việc nhập xuất tồn hàng hóa được mô tả như sau:
- Tất cả các hàng hóa đều được đánh mã để tiện theo dõi. Các hàng hóa này được
phân loại thành những nhóm hàng.
- Các hàng hóa được nhập từ các nhà cung cấp thông qua hóa đơn nhập (hình 1).
- Hàng hóa sẽ được bán cho khách hàng thông qua hóa đơn xuất (hình 2).
- Các thông tin Nhà cung cấp, Khách hàng đều được ghi lại để tiện theo dõi.
- Hàng quý Nhân viên công ty đi kiểm kê để tính số dư cuối kỳ: quý, tên hàng, số
lượng, thành tiền.
Yêu cầu:
1. Hãy thiết kế và cài đặt cơ sở dữ liệu cho Hệ thống quản lý nhập xuất tồn.
2. Thực hiện các bài tập theo các tuần.
Bài tập Cơ sở dữ liệu 2 1
Số HĐ:…………
Ngày:…………
HÓA ĐƠN NHẬP
Tên nhà cung cấp:……………………
Địa chỉ: ………………………………
STTTên hàngSố lượngĐơn giáThành
tiềnTổng tiền:……
Người lập
Hình 1: Mẫu hóa đơn nhập hàng
Số HĐ:…………
Ngày:…………
HÓA ĐƠN XUẤT
Tên khach hang:……………………
Địa chỉ: ………………………………
7. Viết một đoạn mã lệnh T- SQL để thực hiện hiển thị danh sách nhân sự trong bảng
Employees trong Northwind. Nếu country là USA thì hiển thị Mỹ, UK -> Anh, VN ->
Việt Nam.
8. Xóa hết dữ liệu ở bảng tblTest đi bằng lệnh DELETE. Sau đó thêm 1 bản ghi mới, xem
lại kết quả.
9. Xóa hết dữ liệu ở bảng tblTest đi bằng lệnh TRUNCATE. Sau đó thêm 1 bản ghi mới,
xem lại kết quả. So sánh sự khác nhau.
10. Sửa lại địa chỉ email thành
Tuần 3
1. Thêm ràng buộc Default là ngày hiện tại vào ngày trong bảng tblHoadonnhap và bảng
tblHoadonxuat. Nhập thử dữ liệu.
2. Thêm ràng buộc check cho trường điện thoại sao cho có dạng 2 số đầu là mã vùng đến
dấu chấm và 7 số sau là số điện thoại nhà. Nhập thử dữ liệu để kiểm tra.
3. Xóa ràng buộc vừa tạo ở câu 2 đi.
4. Xóa bảng tblLoaihang đi và tạo đầy đủ khóa chính cho bảng.
Bài tập Cơ sở dữ liệu 2 2
Bộ môn Tin học Đậu Hải Phong
5. Thêm ràng buộc khóa chính cho các bảng trong CSDL.
6. Thêm đầy đủ khóa ngoại cho các bảng.
7. Hãy tự lấy các ví dụ để trả lời các câu hỏi sau về khóa ngoại:
a. Có thêm được vào bảng con những bộ dữ liệu mà chưa có ở bảng cha?
b. Nếu dùng ON DELETE, ON CASCADE để tham chiếu thì điều gì xảy ra?
c. Khi bảng con đã có dữ liệu sau đó mới tạo ràng buộc thì sao?
d. Có xóa được bảng cha, con khi vẫn còn ràng buộc?
e. Khi muốn xóa bảng cha khi còn ràng buộc thì sao?
8. Thêm trường Số chứng minh thư nhân dân cho bảng tblNhanvien và tạo ràng buộc duy
nhất cho trường này.
9. Tạo giá trị mặc định có giá trị là ‘khong ro’. Sau đó gán tên mặc định đó cho trường
tenhang trong tblHanghoa.
10. Tạo một Rule chỉ cho phép ngày nhỏ hơn ngày hiện tại. Sau đó gán cho trường ngày
đơn.
7. Tạo view: Hiện thông tin về hoá đơn nhập: Ngày, diễn giải, tổng tiền trong tháng hiện
tại được sắp xếp theo ngày.
8. Tạo view: Cho biết thông tin nhân viên chưa nhập hàng bao giờ.
9. Tạo và mã hóa view: Cho biết thông những mặt hàng chưa được xuất trong năm hiện
tại.
10. Tạo view: cho biết danh sách mặt hàng thuộc loại ‘L01’, có sử dụng WITH CHECK
OPTION. Sau đó chèn thử một bản ghi vào view này.
11. Tạo một giao dịch đảm bảo thực hiện thành công 2 công việc: Xóa loại hàng ‘L01’
trong bảng tblLoaihang; thêm 1 bản ghi vào tblHanghoa. Nếu một trong bị lỗi thì hủy cả 2
công việc đi và thông báo lỗi.
12. Xây dựng giao dịch đảm bảo việc xuất của một hàng hóa bất kỳ không vượt quá số
lượng tồn còn lại.
Tuần 6:
1. Dùng BCP để xuất bảng tblHanghoa ra thành file text Hanghoa.txt.
2. Dùng Export bảng tblHanghoa ra database của Access. Sau đó truy xuất tất cả thông tin
bảng tblLoaihang trong SQL Server và bảng tblHanghoa trong Access.
3. Viết thủ tục chèn dữ liệu cho các bảng dữ liệu (có dùng các giá trị mặc định)
4. Viết thủ tục hiển thị số lượng tồn của một hàng hóa bất kỳ.
5. Viết hàm trả về số lượng tồn của một hàng bất kỳ.
6. Viết hàm trả về danh sách lượng hàng tồn của một loại hàng bất kỳ.
7. Viết hàm cho biết thông tin chi tiết các hóa đơn bán trong một khoảng thời gian bất kỳ.
Tuần 7:
1. Giả sử hai bảng tblHanghoa và tblLoaihang chưa có tham chiếu với nhau. Hãy xây
dựng trigger để đảm bảo tính toàn vẹn dữ liệu giống như đã tạo tham chiếu khóa
ngoại(không được cập nhật vào bảng con giá trị ở bảng cha chưa có, không được xóa cha
khi vẫn còn con, không được sửa cha khi vẫn còn con).
2. Dựa trên ý tưởng trên hãy xây dựng trigger giống ràng buộc khóa ngoại có ON
DELETE, ON CASCADE.
3. Giả sử có 2 bảng tblHoadonnhap, tblHoadonnhapgoc có cấu trúc giống hệt nhau.
hiển thị xem dữ liệu.
d. Xóa cột AutoID trong bảng Nhân viên đi.
e. Hiển thị các hóa đơn nhập trong khoảng từ 10 ngày trước trở lại đây.
f. Cho biết danh sách các mặt hàng của nhà cung cấp có mã là =’DHP’.
g. Cho biết tổng tiền của hóa đơn xuất ‘HD001’.
h. Cho biết thông tin về hóa đơn nhập và tổng tiền theo từng hóa đơn.
i. Cho biết tên nhà cung cấp, tổng tiền theo từng nhà cung cấp.
j. Cho biết những nhà cung cấp có tổng tiền lớn hơn 1000.
k. Cho biết những hóa đơn xuất trong tháng 02 năm 2004.
l. Tìm những nhà cung cấp có họ là ‘Bill’.
m. Hãy cho biết số lượng nhập,xuất, tồn theo từng loại hàng hóa trong khoảng
thời gian từ 01/01/2005 đến 31/03/2005. (sử dụng bảng tạm)
n. Hãy sửa lại giá của tất cả mặt hàng ‘H01’ bằng giá trung bình của mặt
hàng ‘H02’.
o. Cho biết tổng tiền của từng hóa đơn và tổng tiền của tất cả hóa đơn.
(WITH CUBE).
p. Cho biết tổng tiền theo từng loại hàng hóa theo từng hóa đơn và tổng tiền
của tất cả hàng hóa đó (WITH ROLLUP).
q. Cho biết thông tin chi tiết từng hóa đơn và cho biết tổng từng cột số lượng,
đơn giá, thành tiền. (COMPUTE)
Phần 3: Tạo View và tệp chỉ mục
1. Tạo View:
a. Cho biết thông tin về người cung cấp: Tên nhà cung cấp, điện thoại
b. Hiện thông tin về hoá đơn nhập: Ngày, diễn giải, tổng tiền trong tháng
hiện tại. Và được sắp xếp theo ngày.
c. Cho biết thông tin nhân viên chưa nhập hàng bao giờ.
d. Cho biết thông những mặt hàng chưa được xuất trong năm hiện tại.
e. Hiển thị thông tin hoá đơn xuất: ngày, số hđ, mã hàng, số lượng trong
tháng 11. (không sử dụng With Check Option)
Bài tập Cơ sở dữ liệu 2 6
4. Tạo ràng buộc kiểm tra tất cả các trường số lượng, đơn giá trong 2
bảng chi tiết hóa đơn xuất và chi tiết hóa đơn nhập phải lớn hơn 0.
5. Tạo giá trị mặc nhiên cho trường ngày nhập, ngày xuất.
6. Thiết lập quy tắc (Rules) cho ngày nhập và ngày xuất chỉ cho phép
nhập và xuất trong ngày hiện tại.
7. Hãy nhập 1 bản ghi trái quy luật trên. Cho biết điều gì xảy ra?
8. Thực hiện thao tác xóa Rule vừa tạo.
9. Tạo giá trị mặc nhiên sau đó gán cho trường đơn giá của hóa đơn nhập
và hóa đơn xuất.
10. Nhập một bản ghi nhưng không đưa giá trị vào trường gán giá trị
mặc nhiên. Cho biết điều gì đã xảy ra?
11. Xóa giá trị mặc nhiên vừa tạo.
Bài tập Cơ sở dữ liệu 2 7
Bộ môn Tin học Đậu Hải Phong
Phần 5: Kịch bản (Script) và bó (Batch)
1. Tạo 1 Script thực hiện các công việc sau:
a. Kiểm tra xem đã có database là tmp_Masv. Nếu có rồi thì xoá
đi và tạo mới. (dùng bảng sysdatabases)
b. Tạo 2 bảng: Test1(id1,name1); Test2(id2,name2)
c. Nhập mỗi bảng 2 bản ghi
2. Lưu lại đoạn mã này với tên là Script.txt (để làm việc với câu sau)
3. Xoá Database vừa tạo đi.
4. Tạo một kịch bản tính và in ra số lượng: Nhập, Xuất, Tồn những hàng
hóa của loại hàng có mã ‘L01’
5. Hãy tạo một kịch bản cho biết số lượng nhập,xuất, tồn theo từng loại
hàng hóa trong khoảng thời gian từ 01/01/2005 đến 31/03/2005.
6. Tạo 1 kịch bản hiện thị ra 10 mặt hàng bán chạy nhất trong năm hiện
tại.
7. Tạo một kịch bản tính và in ra tổng tiền nhập, xuất của 1 hàng hoá có
mã là H001.
hoàn thành. (FOR AFTER).Xem lại bảng Hanghoa.
2. Tạo 1 Trigger để sau khi INSERT vào bảng tblHanghoa xong thì thông báo đã
hoàn thành. (INSTEAD OF).Xem lại bảng Hanghoa.
3. Cho biết kết quả có già khác nhau??
4. Giả sử trong trường hợp phiếu nhập và phiếu xuất của chúng ta trong 1 ngày có rất
nhiều. Do đó ta dùng cách có 1 bảng gốc và một bảng lưu các chúng từ theo ngày.
Hay nói một cách khác là 2 bảng này có quan hệ 1-1. Xuất phát từ những yêu cầu
đó ta xây dựng 1 trigger để khi INSERT, UPDATE, DELETE thì cũng thay đổi ở
bảng còn lại. Chú ý: nếu các thao tác không thực hiện bị lỗi thì quay lại từ đầu.
5. Tạo 1 trigger kiểm tra việc xóa của bảng Loaihang nếu còn loại đó ở bảng
Hanghoa thì báo lỗi và quay lại luôn. (giả sử chưa có constraint)
6. Tạo 1 trigger: nếu cập nhật vào trường maloai mà mã loại đó đang tồn tại trong
bảng Hanghoa thì báo lỗi và quay lại ban đầu.
Phần 8: Các chuyển tác và truy vấn phân tán
Phần 9: Một số phương pháp truyền dữ liệu – BCP & DTS
1. Giả sử có 1 file text chứa các dòng danh sách về mã loại, tên loại được cách nhau
bằng dấu tab. Hãy import file text này vào bảng tblLoaihang.
2. Hãy Export bảng Hàng hoá ra file có tên là tblHanghoa.txt o C:\
3. Thực hiện Export toàn bộ bảng của CSDL sang Access. (DTS Wizard)
4. Thực hiện Import một số bảng ở Access vào CSDL của mình. (DTS Wizard)
5. Thực hiện Import từ CSDL của người này sang người khác(Lưu lại package này).
6. Mở phần Data Transformation Services\Local Packages. Xem lại package vừa tạo.
7. Tương tự như Pagekage ở câu 6. Hãy tạo 1 pagekage để import từ 1 Sheet từ
Excel vào database của mình.
Phần 10: Bảo mật – Security
1. Tạo ra 1 user với tên là mã sinh viên của mình sau đó gán quyền truy cập, quyền
thực thi cho User đó trên 1 số bảng nào đó.
2. Cho User đó có quyền hoặc không có quyền tạo thủ tục, view,…
3. Sử dụng Enterprise để tạo User sau đó xem các Role trong Server, trong CSDL.
Bài tập Cơ sở dữ liệu 2 9
‘Khai báo biến kết nối
Public Conn as ADODB.Connection
‘Khởi tạo kết nối với CSDL
Set Conn = New ADODB.Connection
‘Thực hiện kết nối
Conn.Open gsConn
2. Thực thi các công việc với SQL Server:
- Thực hiện kết nối với bảng dữ liệu kết quả trả về là các bản ghi:
Dim sSQL String
Dim Rs as ADODB.Recordset
Set Rs = New ADODB.Recordset
‘Thực hiện mở bảng
Bài tập Cơ sở dữ liệu 2 10
Bộ môn Tin học Đậu Hải Phong
sSQL=”SELECT * FROM tblHanghoa” – Mở với bảng hàng hóa
hoặc
sSQL=”SELECT * FROM vw_Nhapthang4” – Mở view tên vw_Nhapthang4
hoặc
sSQL=”SELECT * FROM fnt_Tinhton(‘L01’)” – Mở bẳng do hàm fnt_Tinhton
tạo ra với tham số truyền vào là ‘L01’
Rs.Open sSQL, Conn,2,2
=>Sau khi đã mở thành công ta có một số thao tác sau:
+ Rs.RecordCount – Số lượng bản ghi
+ Rs.MoveFirst – Nhảy về bản ghi đầu tiên
+ Rs.MoveLast – Nhảy về bản ghi cuối cùng
+ Rs.MoveNext – Nhảy về bản ghi tiếp theo
+ Rs.MovePrevious – Nhảy về bản ghi trước đó
+ Rs(“Mahang”) – Lấy giá trị mã hàng trong bản ghi hiện tại
+ Rs.EOF - Trả về True nếu đang ở bản ghi cuối, False chưa cuối.
+ Rs.BOF - Trả về True nếu đang ở bản ghi đầu, False chưa đầu.
3
sp_binddefault ‘Tên default’, ’Tên bảng.Tên
trường’
Gán Default to trường
4 sp_unbinddefault ’Tên bảng.Tên trường’ Loại bỏ Default khỏi trường
5 sp_helptext <tên đối tượng> Xem nội dung tên đối tượng
6
1. Bảng Loại hàng:
Tên trường Kiểu Độ rộng Khoá Ghi chú
Maloai Varchar 3 PK
Tenloai Varchar 30
2. Bảng Hàng hóa:
Tên trường Kiểu Độ rộng Khoá Ghi chú
Mahang Varchar 6 PK
Maloai Varchar 3 FK
Tenhang Varchar 50
3. Bảng Nhà cung cấp:
Tên trường Kiểu Độ rộng Khoá Ghi chú
MaNCC Varchar 10 PK
TenNCC Varchar 30
Diachi Varchar 100
Dienthoai Varchar 15
4. Bảng Nhân viên :
Tên trường Kiểu Độ rộng Khoá Ghi chú
MaNV Varchar 10 PK
Bài tập Cơ sở dữ liệu 2 12
Bộ môn Tin học Đậu Hải Phong
TenNV Varchar 30
UseName Varchar 20
Password Varchar 20
Một công cụ quan trọng để học Quarter 3 là việc sử dụng SQL Server 2000. Để có thể sử dụng SQL
thành thạo cần thực hành nhiều và điều đầu tiên là chúng ta nên cài đặt 1 SQL Server tại nhà để
tiện cho việc thực hành bài tập cũng như thực hiện các thao tác định nghĩa trong bài học. Dưới đây
là các bước hướng dẫn cài đặt SQL Server 2000, hi vọng sẽ giúp ích được các bạn phần nào trong
việc học của mình ^)^ :)
Đầu tiên chúng ta cần bộ phần mềm SQL Server 2000 (Cái này các bạn có thể tìm trên mạng hoặc
ra cửa hàng mua 1 cái đĩa về cài :) )
Khi đưa đĩa CD vào thì chương trình Autorun sẽ chạy ra hộp thoại như sau:
/>Ta chọn cài đặt SQL Server 2000 Components
Sau khi chọn cài đặt SQL Server 2000 Components thì xuất hiện hộp thoại sau:
/>Ta chọn Install Database Server
Quá trình cài đặt sẽ được tiến hành bình thường đến khi xuất hiện hộp thoại sau:
/>Ta chọn Local Computer ==> Next
/>Lưu ý ở đây ta chọn cài cả Server và Client mới có thể làm việc được (Server and Client Tools) :)
==> Next
/>Ở bước này nên chọn là Use the Local System account, nếu máy nằm trong domain có thể dùng
account domain để xác thực. ==> Next
/>Tại bước này phải chọn là Mixed mode … và nhập Password vào, phải nhớ lấy password này vì nó
chính là chìa khoá cho phép ta kết nối với Database Server. Password nhập ở đây là dành cho
account sa (Tên đăng nhập là sa = System Administrator). ==> Next cho đến Finish
Như vậy là quá trình cài đặt đã hoàn tất.
Bây giờ các bạn có thể tự thực hiện một số cấu lệnh và thực hành bài tập 1D trong sách
Implementing Relational Database Design cuốn 2 phần Retrieving and Maintaining Data.
Đầu tiên ta mở Query Analyzer lên để tạo Database.
/>Hiển thị cửa sổ làm việc của Query Analyzer
/>Nhập password lúc cài vào và nhớ tên user là sa, tên SQL Server cứ để là dấu chấm (.) nhé :).
Khi đã đăng nhập được rồi mở lần lượt từng file tạo database ra (ở đây lấy ví dụ là bài tập 1D nên ta
dùng 2 CSDL là GLOBALTOYZ.SQL và RECRUITMENT.SQL (2 cái này có trong Threat "Database của
Quarter 3", vào đó lấy về nhé :) )
/>Sau khi Open ra có đoạn Cript sau: