CƠ SỞ DỮ LIỆU Khóa chính primary key của một bảng là một hoặc một tập tối thiểu các trường dùng phân biệt giữa các bản ghi trong bảng.. CƠ SỞ DỮ LIỆU Thiết kế cơ sở dữ liệu – Xác địn
Trang 1MICROSOFT VISUAL
FOXPRO 6.0
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 1
Người thực hiện: Phan Đình Sinh
Trang 2BÀI 3: CƠ SỞ DỮ LIỆU
Khái niệm
– Visual Foxpro cho phép tổ chức toàn bộ dữ liệu
và các xử lý của một ứng dụng trong một file
dự án (*.pjx).
– CSDL là một kho chứa dữ liệu, gồm nhiều bảng
dữ liệu khác nhau và mối quan hệ giữa các bảng.
– Bảng dữ liệu tổ chức theo dạng dòng và cột, mỗi dòng là một bản ghi (record), mỗi cột là
Trang 3CƠ SỞ DỮ LIỆU
Một bảng dữ liệu được lưu trữ có phần mở rộng mặc định là DBF và có hai phần: cấu trúc và nội dung.
– Ví dụ: Bảng sinh viên (SINHVIEN.DBF) có cấu trúc
sau:
FIELD TYPE WIDTH
MSSV CHARACTER 6 MSKHOA CHARACTER 8 HOTEN CHARACTER 30 GIOITINH LOGIC 1
Trang 4CƠ SỞ DỮ LIỆU
Nội dung của SINHVIEN.DBF
MSSV MSKHOA HOTEN GIOITINH NGAYSINH LYLICH
SVT001 TIN109 Nguyễn Văn
SVK001 KTE107 Trần Thị Là F 10/11/1976 Memo
Trang 5CƠ SỞ DỮ LIỆU
Khóa chính (primary key) của một bảng là một
hoặc một tập tối thiểu các trường dùng phân biệt
giữa các bản ghi trong bảng Khóa ngoại (foreign
key) là khoá của một bảng khác trong cơ sở dữ liệu.
– Ví dụ: Cho hai bảng KHOA (MSKHOA, TENKHOA, SDT) và bảng SINHVIEN (MSSV, MSKHOA, HOTEN, GIOITINH, NGAYSINH, LYLICH) thì trường MSKHOA là khoá ngoại của bảng SINHVIEN
Trang 6CƠ SỞ DỮ LIỆU
Thiết kế cơ sở dữ liệu
– Xác định mục đích của CSDL: xác định các
sự kiện nào sẽ được lưu trữ
– Xác định bảng dữ liệu: xây dựng mỗi đối
tượng là một bảng dữ liệu
– Xác định mối quan hệ giữa các bảng: xác
định các khóa trên mỗi bảng và mối quan hệ giữa chúng
Trang 7CƠ SỞ DỮ LIỆU
Phân tích thiết kế CSDL quản lý bãi gửi xe
– Các sự kiện cần lưu trữ trong CSDL: Loại xe, giá gửi,
số chổ, số vé, số xe, số phiếu, ngày vào, ngày ra, thành tiền
– Các đối tượng cần lưu trữ: Bảng giá và bảng chi tiết về
Trang 8CƠ SỞ DỮ LIỆU
Tạo mới một dự án:
– Chọn File/New/ Project/ New file
– Hoặc dùng cú pháp: CREAT PROJECT, nhập tên file
Trang 9CƠ SỞ DỮ LIỆU
Tạo cơ sở dữ liệu mới
– Trong thẻ Data, tạo mới chọn New
– Hoặc gõ lệnh Creat Database tại cửa sổ Command
Trang 10CƠ SỞ DỮ LIỆU
Xem và chỉnh sửa CSDL:
– Trong thẻ Data, chọn Modify
– Hoặc lệnh Modify Database
Trang 11CƠ SỞ DỮ LIỆU
Tạo bảng trong CSDL dùng cú pháp:
CREATE TABLE|DBF <Table> (<field> <type> [<size, [<scale>]]) [NULL|NOT NULL], [PRIMARY KEY <tên khoá chính>| UNIQUE
<khoá dự tuyển>] [FOREIGN KEY <khoá ngoại>…)
Giải thích các tham số
– Table: tên bảng (file *.dbf ) được tạo mới
– <field> <size, [<scale>]: Tên, kiểu, độ rộng, số chữ số thập phân của trường Một bảng đơn có thể chứa đến
255 trường
Trang 12CƠ SỞ DỮ LIỆU
Ví dụ: Tạo bảng KHOA.DBF trong CSDL QUANLY.DBC thuộc thư mục Chuongtrinh trong ổ đĩa E:
Trang 13CƠ SỞ DỮ LIỆU
Hoặc một dự án chọn thẻ Data, tại mục Table, chọn New
Trang 14CƠ SỞ DỮ LIỆU
Thẻ Field
– Name: Đặt tên trường
– Type: Kiểu dữ liệu cho trường
– Width: Độ rộng của trường
– Decimal: Số số lẻ (nếu là kiểu dữ liệu số)
– Index: Sắp xếp dữ liệu trong trường
– Null: cho phép trường có dữ liệu rỗng hay không?
– Format: định dạng dữ liệu hiển thị trong cửa sổ
Browse hoặc Reports
– Input mask: Định dạng dữ liệu trong quá trình nhập
Trang 15CƠ SỞ DỮ LIỆU
– Rule: Ràng buộc toàn vẹn trên trên vùng
– Message: Thông báo lỗi khi nhập liệu không hợp lệ
– Defaut value: giá trị ngầm định
– Field comment: chú thích thêm cho vùng.
Trang 16CƠ SỞ DỮ LIỆU
Các ký hiệu định dạng tại mục Format
– ! : chuyển ký tự thường thành hoa
– $ : thêm ký hiệu tiền tệ kèm theo dữ liệu
– ^ : thể hiện các số theo dạng khoa học
Trang 17CƠ SỞ DỮ LIỆU
Ví dụ, trường Masv quy định mục Format như sau, sẽ cho phép chuyển các ký tự nhập vào thành chữ hoa
Trang 18CƠ SỞ DỮ LIỆU
Ví dụ, trường Tel có độ rộng 12, định dạng mục Input Mask:
– Ký tự # : chỉ cho phép nhập dữ liệu là số, dấu
và khoảng trống
– Số 9: chỉ cho phép nhập dữ liệu kiểu số và dấu
Trang 19CƠ SỞ DỮ LIỆU
Ví dụ, trường Gioitinh, kiểu Lôgic, quy định các mục Rule, Message, Defalt Value như sau:
Trang 20CƠ SỞ DỮ LIỆU
Thêm Table trong Database:
– Thẻ Data, tại mục Table, chọn Add
Mở, đóng Table có sẵn:
– Từ Menu File/Open/ Table/<chọn tên file>
– Hoặc lệnh Use <Đường dẫn\tên file>
– Đóng Table, dùng lệnh Use
Chỉnh sửa cấu trúc Table trong Database:
– Thẻ Data, tại mục Table, chọn Modify
– Hoặc dùng lệnh Modify Structure
Trang 21CƠ SỞ DỮ LIỆU
Xem Table:
– Thẻ Data, tại mục Table, chọn Browse
– Hoặc dùng lệnh Browse
Loại bỏ Table ra khỏi Database:
– Thẻ Data, tại mục Table, chọn Remove
– Hoặc dùng lệnh:
Remove Table <tên file> [Delete] [Recycle]
Delete: Xóa Table khỏi bộ nhớ
Recycle: Table được chuyển vào Recycle Bin
Trang 22CƠ SỞ DỮ LIỆU
– Ví dụ, trong CSDL Quanly.DBC, có Table KHOA.DBF, thực hiện xóa Table KHOA.DBF ra khỏi CSDL:
Open Database Quanly Remove Table Khoa Delete
Đổi tên Table:
– Kích chuột phải, chọn Rename
– Hoặc dùng lệnh:
Rename Table <Tên File1> to <Tên file2>
– Ví dụ: Open Database Quanly
Trang 23CƠ SỞ DỮ LIỆU
Thiết kế bảng tự do (Free Table)
– Là loại bảng không có mối quan hệ với những table khác
– Tạo Free Table: Từ Project, vào Database chọn
Free Table, chọn New Table Trong hộp hội thoại Create nhập tên và khai báo cấu trúc cho Table mới
– Thêm Free Table: Từ Project, vào Database
chọn Free Table, click nút Add.
Trang 24CƠ SỞ DỮ LIỆU
CÁC CÂU LỆNH SQL
Lệnh xem cấu trúc (List|Display structure)
– Cú pháp: LIST | DISPLAY STRUCTURE↵
– Tác dụng: Hiển thị cấu trúc của bảng dữ liệu đang được
mở, bao gồm: tên trường, kiểu và độ rộng của trường
– Ví dụ:
Use NHANVIEN↵List structure
Trang 25CƠ SỞ DỮ LIỆU
Sao lưu cấu trúc bảng dữ liệu
– Cú pháp: COPY STRUCTURE TO <tên bảng.dbf>
[FIELDS<danh sách trường>]
– Tác dụng: Sao chép cấu trúc của table đang được mở
sang một table mới có tên là <tên bảng.dbf> với các trường được chỉ ra Mặc định là tất cả các trường
– Ví dụ: Sao lưu cấu trúc của Sinhvien.dbf thành file có
tên là Luu.dbf chỉ với các trường: hoten, gioitinh
use NHANVIEN↵copy structure to LUU fields HOTEN, GIOITINH ↵
Trang 26CƠ SỞ DỮ LIỆU
Sao lưu bảng dữ liệu
– Cú pháp: COPY TO <tên bảng đích> [<phạm vi>]
[FIELDS <danh sách trường>] [FOR<bthức logic>] [WHILE<Bthức logic>]↵
– Tác dụng: Lệnh dùng để tạo bảng mới có tên được chỉ
ra <tên bảng đích> với nội dung được lấy từ bảng dữ liệu đang được mở Mặc định lệnh này là tất cả các bản ghi đều được sao chép, nếu có phạm vi và các biểu thức logic thì những bản ghi thoả mãn điều kiện mới được sao chép Dang sách trường để chỉ định các trường
Trang 27CƠ SỞ DỮ LIỆU
Ví dụ: Tạo bảng dữ liệu có tên là Nu.dbf từ
file sinhvien.dbf gồm các trường masv, hoten, gioitinh.
Trang 28CƠ SỞ DỮ LIỆU
Thêm trường vào bảng:
– Cú pháp: ALTER TABLE <table> ADD(<field><type>[<size,[<scale>], [NULL|NOT NULL]])
– Tác dụng: thêm một hoặc nhiều trường vào bảng
– Ví dụ: Thêm trường Namsinh vào bảng Sinhvien.dbf
Alter Table sinhvien Add namsinh d(8)
Huỷ trường của bảng:
– Cú pháp: ALTER TABLE <table> DROP (<field>
– Tác dụng: xoá một hoặc nhiều trường của bảng
Xoá một bảng
Trang 29CƠ SỞ DỮ LIỆU
– Tại thẻ Data, chọn Table cần hiển thị, chọn Browse
– Hoặc dùng lệnh Browse, Edit
– Đóng cửa sổ nhấn Ctrl + W
– Ví dụ: Use Sinhvien
Browse && hoặc Edit
– Hàm Reccount(): cho biết số bản ghi trong bảng.
– Hàm Recno(): Cho biết số thứ tự của bản ghi hiện
Trang 30CƠ SỞ DỮ LIỆU
– Mở Table, chọn trên menu: Table, Go To Record, sau đó chọn Top, Bottom, Next, Previous, Records,
…
– Hoặc dùng cú pháp:GO <N>|[TOP]|[BOTTOM]
Chức năng: Chuyển con trỏ bản ghi đến bản ghi có
Trang 31CƠ SỞ DỮ LIỆU
Định vị tiến, lùi: Lệnh Skip
– Cú pháp: SKIP [+|-] [<n>]
– Tác dụng: Chuyển con trỏ bản ghi về trước (-) hay sau
(+) so với bản ghi hiện thời n bản ghi
– Chú ý: Khi chỉ gõ lệnh SKIP ↵ thì con trỏ bản ghi sẽ được di chuyển về sau bản ghi hiện thời một đơn vị
Chèn bản ghi
– Cú pháp: APPEND [BLANK]
– Tác dụng: Để chèn 1 bản ghi vào cuối bảng dữ liệu (giá
trị được nhập vào), nếu có tham số [BLANK] thì sẽ bổ
Trang 32CƠ SỞ DỮ LIỆU
Sửa nội dung bản ghi bằng tay
– Cú pháp: BROWSE [FIELD<dsách trường>]
[NODELETE] [NOEDIT] [FOR<Bthức logic>]
– Tác dụng: hiển thị nội dung của bảng dữ liệu,
mỗi bản ghi được thể hiện trong một hàng (dòng).
– [FIELD<dsách trường>]: Cho phép các trường trong danh sách này được hiển thị trên màn hình, nếu không có hiển thị tất cả
Trang 33CƠ SỞ DỮ LIỆU
– [NOEDIT]: Không cho phép sửa đổi
– [FOR<bthức logic>]: Chỉ cho phép những biểu thức thoả mãn điều kiện của biểu thức logic
mới được hiển thị
– Ví dụ: Hiển thị nội dung của các trường Hoten,
Gioitinh với điều kiện Gioitinh là True để tiến hành sửa đổi.
Use SinhVien
Browse field Hoten, Gioitinh For Gioitinh
Trang 34CƠ SỞ DỮ LIỆU
Lệnh Edit
– Cú pháp: EDIT [<phạm vi>] [FIELD
<dsáchtrường>] [NODELETE] [NOEDIT] [FOR<Bthức logic>] [While<Bthức logic>]
– Tác dụng: Tương tự như lệnh BROWSE nhưng
các bản ghi được xuất hiện theo chiều dọc
Đánh dấu xóa, xóa và phục hồi bản ghi
– Mở Table, trên menu, chọn Table, chọn Delete,
Trang 35CƠ SỞ DỮ LIỆU
Dùng lệnh xoá bản ghi thực hiện theo hai bước:
– Bước 1: Đánh dấu bản ghi muốn xoá:
– Cú pháp: DELETE [<phạm vi>] [FOR<Bthức logic>]
[WHILE<bthức logic>]
– Tác dụng: Lệnh này đánh dấu tất cả các bản ghi thoả
mãn điều kiện, mặc định là bản ghi hiện thời
– Ví dụ: Đánh dấu xoá những sinh viên có năm sinh trước
1970
Delete for year(Namsinh) <1970
Trang 36CƠ SỞ DỮ LIỆU
– Bước 2: Xoá hoặc phục hồi các bản ghi.
Lệnh xoá bản ghi (PACK)
– Cú pháp: PACK
– Tác dụng: Xoá các bản ghi trong bảng dữ liệu đã được
đánh dấu xoá bằng lệnh DELETE
Lệnh phục hồi các bản ghi đã được đánh dấu xoá (RECALL):
– Cú pháp: RECALL [<phạm vi>] [FOR<Bthức logic>]
[WHILE<bthức logic>]
– Tác dụng: Phục hồi lại các bản ghi đã đánh dấu xoá bởi
Trang 37CƠ SỞ DỮ LIỆU
LỌC DỮ LIỆU
– Nhằm hạn chế số lượng các bản ghi tham gia vào quá trình xử lý
– Cú pháp: SET FILTER TO <Bthức logic>↵
– Sau khi thực hiện lệnh lọc thì các lệnh tiếp theo sau lệnh này chỉ có tác dụng đối với các bản ghi thoả mãn điều kiện lọc
– Muốn huỷ bỏ việc lọc dữ liệu ta thực hiện lệnh: SET
FILTER TO ↵
– Ví dụ: Lọc những sinh viên nữ và có năm sinh lớn hơn
1980
Trang 38– Tác dụng: Dùng để thay thế nội dung các trường được
chỉ ra của các bản ghi nằm trong <phạm vi> và thoả mãn điều kiện của <biểu thức logic> đi sau FOR hoặc WHILE bởi các biểu thức tương ứng
– Chú ý: Kiểu dữ liệu của <biểu thức> và của <trường>
Trang 39CƠ SỞ DỮ LIỆU
Ví dụ:
– 1 Thay thế họ tên của nhân viên trong file nhanvien bằng chữ viết hoa ký tự đầu tiên của mỗi từ
Replace all Hoten with Proper(hoten)
– 2 Những sinh viên nữ nhân ngày 08/03 được
hỗ trợ phụ cấp 50000 đồng và một lời chúc tốt đẹp
Replace all Phucap with 50000, Quatang
Trang 40CƠ SỞ DỮ LIỆU
Các hàm liên quan đến bản ghi
– Hàm BOF (): Cho giá trị là T khi con trỏ bản ghi trong
bảng dữ liệu được mở vượt quá bản ghi đầu tiên, ngược lại cho giá trị F
– Hàm EOF (): Cho giá trị là T khi con trỏ bản ghi trong
bảng dữ liệu được mở vượt quá bản ghi cuối cùng, ngược lại cho giá trị F
– Ví dụ: Để xác định xem con trỏ bản ghi đã cuối bản ghi của Table hiện hành hay chưa?
List
Trang 41CƠ SỞ DỮ LIỆU
Cập nhật dữ liệu bảng
– Cú pháp: UPDATE <TênBảng> SET <trường1> =
<Bthức1> [,<trường2> WITH <Bthức2>, ] [WHERE
<Bthức logic>]
– Tác dụng: Dùng cập nhật nội dung các trường được chỉ
ra của các bản ghi thoả mãn điều kiện của <biểu thức logic> đi sau WHERE Mặc định cập nhật tất cả
– Ví dụ: Chuyển họ tên sinh viên của khoa tin thành chữ hoa
Update sinhvien set hoten = upper(hoten);
Trang 42CƠ SỞ DỮ LIỆU
– Lệnh Display:
– Cú pháp: DISPLAY [<phạm vi>] [FIELDS<danh sách
trường>] [FOR <bthức logic>] [WHILE<bthức logic>]
– Tác dụng: Hiển thị nội dung của các bản ghi trong
<phạm vi> được chỉ định và thoả mãn điều kiện của các biểu thức logic đi sau FOR và WHILE nếu có
– Ví dụ: Hiển thị tất cả các bản ghi của Table Sinhvien với các trường hoten, namsinh với gioitinh là nam
Display all field hoten, namsinh for gioitinh
Trang 43CƠ SỞ DỮ LIỆU
– Lệnh LIST:
– Cú pháp: LIST [<phạm vi>] [FIELDS <danh
sách trường>] [FOR <bthức logic>] [WHILE
<bthức logic>]
– Tác dụng: Hiển thị nội dung của các bản ghi như
lệnh DISPLAY nhưng mặc định của lệnh này là ALL
– Ví dụ: Hiển thị tất cả những sinh viên sau 1980
và là nữ
Trang 44CƠ SỞ DỮ LIỆU
Lệnh ?|??
– Cú pháp: ?|?? <danh sách biểu thức>
– Tác dụng: Lệnh này tính toán và hiển thị kết quả của
danh sách biểu thức lên màn hình Nếu sử dụng lệnh ? thì sau khi in dữ liệu con trỏ sẽ xuống dưới một dòng, còn lệnh ?? thì không
– Ví dụ: Cho hiển thị họ tên và năm sinh của sinh viên tại
bản ghi số 5 lên màn hình:
Go 5
? ‘ho ten:’, hoten, ‘nam sinh:’, namsinh
Trang 45CƠ SỞ DỮ LIỆU
Tạo tập tin chỉ mục:
– Sắp xếp bảng dữ liệu theo chỉ mục là tạo ra một file chỉ mục (có phần mở rộng mặc định là idx hoặc CDX)
– Cú pháp: index on <bthức khoá> to <tên file idx>
[for<bthức logic>] [ascending|descending]
– Tác dụng: Lệnh sắp xếp file dữ liệu theo chiều tăng dần
hoặc giảm dần của <Bthức khoá> của các bản ghi thoả mãn <Bthức logic> sau for
– Ví dụ: Hiển thị theo thứ tự tăng dần theo trường Năm sinh của các Sinh viên
Trang 46CƠ SỞ DỮ LIỆU
Lệnh Locate:
– Cú pháp: Locate [<phạm vi>] for<bthức logic>
[While<bthức logic>]
– Tác dụng: Duyệt tuần tự các bản ghi trong bảng dữ liệu
và tìm đến bản ghi đầu tiên trong <phạm vi> thoả mãn điều kiện của <bthức logic> Nếu tìm được, hàm found()
sẽ cho giá trị T., hàm EOF() có giá trị F
– Ví dụ: Tìm nhân viên đầu tiên trong bảng dữ liệu sinh năm 1980 trong bảng Sinhvien
USE sinhvienLOCATE FOR year(namsinh) = 1980
Trang 47CƠ SỞ DỮ LIỆU
Lệnh continue
– Cú pháp: CONTINUE
– Chức năng: Theo sau lệnh LOCATE, dùng để tìm bảng
ghi kế tiếp sau thỏa mãn điều kiện đã nêu
– Ví dụ: Tìm 2 sinh viên đầu tiên sinh năm 1980
USE SINHVIENLOCATE FOR year ( NGAY SINH) = 1980DISPLAY
CONTINUE
Trang 48CƠ SỞ DỮ LIỆU
Tìm kiếm sau khi đã lập chỉ mục
– Cú pháp: SEEK <biểu thức>
– Tác dụng: sau khi đã lập chỉ mục theo <bthức
khóa> Lệnh SEEK dùng đề tìm bản ghi nào thỏa mãn một điều kiện dựa vào <bthức khóa>
– Ta sử dụng lệnh SEEK theo sau là <giá trị> của biểu điều kiện cần tìm nếu tìm thấy thì hàm FOUND() có giá trị T và hàm EOF() có giá trị F
Trang 49CƠ SỞ DỮ LIỆU
Ví dụ: 1 Sắp xếp theo thứ tự tăng dần của
HOTEN, tìm sinh viên có tên ‘Ong Hoang Hai’.
USE sinhvien
INDEX ON upper(hoten) TO cmhoten
SEEK ‘Ong Hoang Hai’
DISP
Trang 50CƠ SỞ DỮ LIỆU
Đếm số lượng bản ghi:
– Cú pháp: COUNT [<phạm vi>][for<btlogic>]
[while<btlogic>] [TO<biến nhớ>]
– Tác dụng: lệnh dùng để đếm số mẫu tin trong bảng dữ
liệu thỏa mãn điều kiện các <bthức logic> nằm trong phạm vi được chỉ ra Kết quả được đưa ra màn hình hay đưa vào <biến nhớ> nếu có TO
– Ví dụ: Cho biết có bao nhiêu sinh viên có năm sinh là
1980
use sinhviencount for namsinh = 1980 to songuoi