BAN CHỈ ĐẠO CÔNG NGHỆ THÔNG TIN CỦA CƠ QUAN ĐẢNG

***





GIÁO TRÌNH
T TH HI I Ế ẾT T K KẾ Ế, , X XÂ ÂY Y D DỰ ỰN NG G V VÀ À Q QU UẢ ẢN N T TR RỊ Ị
C CƠ Ơ S SỞ Ở D DỮ Ữ L LI I Ệ ỆU U









HÀ NỘI, 2004
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 1
MỤC LỤC

CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ CƠ SỞ DỮ LIỆU.. .......…. 4
I. CƠ SỞ DỮ LIỆU .................................................................................................. 5
1. Định nghĩa cơ sở dữ liệu ........................................................................ 5
2. Các tính chất của một cơ sở dữ liệu ....................................................... 6
II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ...................................................................... 6
1. Định nghĩa hệ quản trị Cơ sở dữ liệu ..................................................... 6
2. Các chức năng của một hệ quản trị cơ sở dữ liệu .................................. 8
3. Các đặc trưng của giải pháp cơ sở dữ liệu ............................................. 9
a. Bản chất tự mô tả của hệ cơ sở dữ liệu .............................................. 9
b. Sự cô lập giữa các chương trình và dữ liệu. ...................................... 9
c. Hỗ trợ các khung nhìn dữ liệu nhiều thành phần ............................. 10
d. Chia sẻ dữ liệu và nhiều người sử dụng ........................................... 10
e. Ví dụ về một cơ sở dữ liệu ................................................................ 10
III. MÔ HÌNH CƠ SỞ DỮ LIỆU ........................................................................... 12
1. Định nghĩa mô hình cơ sở dữ liệu ........................................................ 13
2. Các loại mô hình cơ sở dữ liệu ............................................................. 13
3. Con người trong hệ cơ sở dữ liệu ......................................................... 15
a. Người quản trị hệ cơ sở dữ liệu (Database Administrator-DBA) .... 16
b. Người thiết kế cơ sở dữ liệu (Database Designer) ........................... 16
c. Những người sử dụng (End User) .................................................... 16
d. Những người phân tích hệ thống và những người lập trình ứng dụng17
e. Những người thiết kế và cài đặt hệ quản trị cơ sở dữ liêu ............... 17
f. Những người phát triển công cụ ....................................................... 17
g. Các thao tác viên và những người bảo trì ........................................ 17
CHƯƠNG 2 : MÔ HÌNH THỰC THỂ-LIÊN KẾT.............................................18
I. SỬ DỤNG MÔ HÌNH KHÁI NIỆM BẬC CAO CHO VIỆC THIẾT KẾ CƠ SỞ
DỮ LIỆU ................................................................................................................... 18
II. CÁC THÀNH PHẦN CƠ BẢN CỬA MÔ HÌNH THỰC THỂ-LIÊN KẾT .... 20
1. Kiểu thực thể, tập thực thể, các thuộc tính và các khoá ....................... 20
a. Các thực thể và các thuộc tính ......................................................... 20
b. Các loại thuộc tính ............................................................................ 21
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 2
c. Kiểu thực thể, tâp thực thể, khoávà tập giá trị ................................. 22
2. Các liên kết, các kiểu liên kết, các vai trò và các ràng buộc cấu trúc .. 24
a. Các kiểu liên kết, tập liên kết và các thể hiện ................................ 24
b. Cấp liên kết, tên vai trò và liên kết đệ quy ..................................... 25
c. Các ràng buộc trên các kiểu liên kết ............................................. 26
III. VÍ DỤ VỀ THIẾT KẾ MỘT MÔ HÌNH ER ................................................... 29
1. Đặt vấn đề ............................................................................................. 29
2. Xác định các kiểu thực thể, các thuộc tính và các kiểu liên kết .......... 29
CHƯƠNG 3: MÔ HÌNH QUAN HỆ, CÁC RÀNG BUỘC QUAN HỆ VÀ ĐẠI
SỐ QUAN HỆ .........................................................................................................32
I. CÁC KHÁI NIỆM CỦA MÔ HÌNH QUAN HỆ ............................................... 32
1. Miền, thuộc tính, bộ và quan hệ ........................................................... 32
2. Các đặc trưng của các quan hệ ............................................................. 34
II. CÁC RÀNG BUỘC QUAN HỆ, LƯỢC ĐỒ CSDL QUAN HỆ ...................... 36
1. Các ràng buộc miền .............................................................................. 36
2. Ràng buộc khoá và ràng buộc trên các giá trị rỗng (null) .................... 36
3. Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ ..................... 37
4. Toàn vẹn thực thể, toàn vẹn quy chiếu và khoá ngoài ......................... 40
III. CÁC PHÉP TOÁN CỦA MÔ HÌNH QUAN HỆ ............................................ 42
1. Các phép toán cập nhật ........................................................................ 42
a. Phép chèn (Insert) ............................................................................. 42
b. Phép xoá (Delete) ............................................................................. 42
c. Phép sửa đổi (Update) ...................................................................... 43
2. Các phép toán đại số quan hệ ............................................................... 43
a. Phép chọn (SELECT) ........................................................................ 44
b. Phép chiếu (PROJECT) .................................................................... 45
c. Phép đặt lại tên (RENAME) ............................................................. 46
d. Các phép toán lý thuyết tập hợp ....................................................... 48
e. Phép nối (JOIN) ................................................................................ 50
f. Tập hợp đầy đủ các phép toán quan hệ ............................................ 52
g. Phép chia .......................................................................................... 52
3. Các phép toán quan hệ bổ sung ............................................................ 53
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 3
IV. CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ-LIÊNKẾT THÀNH MÔ HÌNH QUAN
HỆ .............................................................................................................................. 55
1. Các quy tắc chuyển đổi ........................................................................ 56
2. Chuyển đổi mô hình cụ thể .................................................................. 59
CHƯƠNG 4: PHỤ THUỘC HÀM VÀ CHUẨN HOÁ CƠ SỞ DỮ LIỆU QUAN
HỆ ............................................................................................................................60
I. CÁC NGUYÊN TẮC THIẾT KẾ LƯỢC ĐỒ QUAN HỆ ................................. 60
1. Ngữ nghĩa của các thuộc tính quan hệ ................................................. 60
2. Thông tin dư thừa trong các bộ và cập nhật dị thường ........................ 61
3. Tạo ra các bộ giả .................................................................................. 62
II. CÁC PHỤ THUỘC HÀM ................................................................................. 62
III. CÁC DẠNG CHUẨN DỰA TRÊN KHOÁ CHÍNH ...................................... 69
1. Nhập môn về chuẩn hoá ....................................................................... 69
a. Dạng chuẩn 1 ...................................................................................... 70
b. Dạng chuẩn 2 ...................................................................................... 72
c. Dạng chuẩn 3 ...................................................................................... 73
CHƯƠNG 5: GIỚI THIỆU NGÔN NGỮ VẤN TIN CÓ CẤU TRÚC SQL .74
I. GIỚI THIỆU SQL ............................................................................................... 74
II. CÁC LỆNH ĐỊNH NGHĨA DỮ LIỆU ............................................................. 76
1. Tạo cấu trúc CSDL ............................................................................... 76
2. Tạo cấu trúc bảng ................................................................................. 77
3. Các ràng buộc toàn vẹn SQL ............................................................... 81
III. QUẢN LÝ DỮ LIỆU CƠ BẢN ....................................................................... 82
2. Nhập dữ liệu ......................................................................................... 83
3. Kiểm tra nội dung bảng ........................................................................ 83
4. Lưu nội dung bảng ............................................................................... 84
5. Bổ sung dữ liệu cho bảng ..................................................................... 85
6. Sửa chữa ............................................................................................... 86
7. Xoá hàng............................................................................................... 87
8. Khôi phục nội dung bảng ..................................................................... 87
IV. VẤN TIN ......................................................................................................... 87
1. Liệt kê từng phần nội dung bảng .......................................................... 88
2. Các toán tử lôgic: AND, OR và NOT .................................................. 91
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 4
3. Các toán tử đặc biệt .............................................................................. 93
V. CÁC LỆNH QUẢN LÝ DỮ LIỆU NÂNG CAO ............................................. 97
1. Thay đổi kiểu dữ liệu của cột ............................................................... 98
2. Thay đổi đặc điểm thuộc tính ............................................................... 98
3. Bổ sung cột cho bảng ........................................................................... 98
4. Nhập dữ liệu cho cột mới ..................................................................... 99
5. Sao chép một phần bảng .................................................................... 101
6. Xoá bảng khỏi CSDL ......................................................................... 102
VI. VẤN TIN PHỨC TẠP Và CỎC HàM SQL .................................................. 103
1. Sắp xếp danh sách .............................................................................. 103
2. Loại bỏ trùng lặp ................................................................................ 106
3. Các hàm số học SQL .......................................................................... 106
4. Nhóm dữ liệu ...................................................................................... 110
5. Bảng ảo: việc tạo các khung nhìn ...................................................... 111
6. Chỉ mục SQL ...................................................................................... 112
7. Liên kết các bảng CSDL .................................................................... 113
VII. TÓM TẮT ..................................................................................................... 115
VIII. CÂU HỎI ÔN TẬP ..................................................................................... 122
IX. BÀI TẬP ........................................................................................................ 124
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 5
CHƯƠNG I
CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ CƠ SỞ DỮ LIỆU

Các cơ sở dữ liệu và hệ cơ sở dữ liệu đã trở thành một thành phần chủ
yếu của cuộc sống hàng ngày trong xã hội hiện đại. Trong vòng một ngày con
người có thể có nhiều hoạt động cần có sự giao tiếp với cơ sở dữ liệu; chẳng
hạn, đến ngân hàng để rút tiền và gửi tiền, đăng ký chỗ trên máy bay hoặc
khách sạn, truy cập vào một thư viện đã tin học hoá để tìm sách báo, đặt mua
tạp chí ở một nhà xuất bản, …. Tại các ngân hàng, các cửa hàng, người ta
cũng cập nhật tự động việc quản lý tiền bạc hoặc hàng hoá.
Tất cả những giao tiếp như trên được gọi là các áp dụng của cơ sở dữ
liệu truyền thống. Trong các cơ sở dữ liệu truyền thống, hầu hết các thông tin
được lưu giữ và truy cập là văn bản hoặc số. Một vài năm lại đây, những tiến
bộ về kỹ thuật đã đưa đến những áp dụng mới của hệ cơ sở dữ liệu. Các cơ sở
dữ liệu đa phương tiện bây giờ có thể lưu trữ hình ảnh, phim và tiếng nói. Các
hệ thống thông tin địa lý có thể lưu trữ và phân tích các bản đồ, các dữ liệu về
thời tiết và các ảnh vệ tinh. Kho dữ liệu và các hệ thống phân tích trực tuyến
được sử dụng trong nhiều công ty để lấy ra và phân tích những thông tin có
lợi từ các cơ sở dữ liệu rất lớn nhằm đưa ra các quyết định. Các kỹ thuật cơ sở
dữ liệu động và thời gian thực được sử dụng trong việc kiểm tra các tiến trình
công nghiệp và sản xuất. Các kỹ thuật tìm kiếm cơ sở dữ liệu đang được áp
dụng cho World Wide Web để cung cấp việc tìm kiếm các thông tin cần thiết
cho người sử dụng bằng cách duyệt qua Internet.
Để hiểu được các cơ sở kỹ thuật cơ sở dữ liệu chúng ta phải bắt đầu từ
các cơ sở của của việc áp dụng cơ sở dữ liệu truyền thống. Trong chương này
chúng ta sẽ định nghĩa cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu, mô hình cơ sở
dữ liệu và các thuật ngữ cơ bản khác.
I. CƠ SỞ DỮ LIỆU
1. Định nghĩa cơ sở dữ liệu
Cơ sở dữ liệu và kỹ thuật cơ sở dữ liệu đã có ảnh hưởng rất lớn đến việc
sử dụng máy tính. Có thể nói rằng cơ sở dữ liệu đóng vai trò quan trọng trong
mọi lĩnh vự có sử dụng máy tính như giáo dục, thương mại, kỹ nghệ, khoa
học thư viện,…. Thuật ngữ cơ sở dữ liệu trở thành một thuật ngữ phổ dụng.
Một cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau, được
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 6
nhiều người sử dụng và được tổ chức theo một mô hình.
Dữ liệu là những sự kiện có thể ghi lại được và có ý nghĩa.
Ví dụ, để quản lý việc học tập trong một môi trường đại học, các dữ liệu
là các thông tin về sinh viên, về các môn học, về điểm thi,… Chúng ta tổ chức
các dữ liệu đó thành các bảng và lưu giữ chúng vào sổ sách hoặc sử dụng một
phần mềm máy tính để lưu giữ chúng trên máy. Đó là một tập hợp các dữ liệu
có liên quan đến nhau và mang nhiều ý nghĩa, đó là một cơ sở dữ liệu.
2. Các tính chất của một cơ sở dữ liệu
Một cơ sở dữ liệu có các tính chất sau:
Một cơ sở dữ liệu biểu thị một khía cạnh nào đó của thế giới thực: hoạt
động của một công ty, của một nhà trường, một ngân hàng.… Những thay đổi
của thế giới thực phải được phản ánh trung thực trong cơ sở dữ liệu. Những
thông tin được đưa vào trong cơ sở dữ liệu tạo thành một không gian cơ sở dữ
liệu, đôi khi nó được gọi là một “thế giới nhỏ”(miniword) hoặc một “không
gian tranh luận”(Universe of Discourse).
Một cơ sở dữ liệu là một tập hợp dữ liệu cố kết một cách logic và mang
một ý nghĩa bên trong nào đó. Một cơ sở dữ liệu không phải là một tập hợp
tuỳ tiện các dữ liệu.
Một cơ sở dữ liệu được thiết kế và được phổ biến với các dữ liệu cho
một mục đích riêng. Nó có một nhóm người sử dụng có chủ định và có một số
áp dụng được xác định phù hợp với những lợi ích của người sử dụng.
Một cơ sở dữ liệu có thể có cỡ tuỳ ý và có độ phức tạp thay đổi. Có
những cơ sở dữ liệu chỉ gồm vài trăm bản ghi (như cơ sở dữ liệu phục vụ
quản lý lương của một cơ quan nhỏ) và có những cơ sở dữ liệu có dung lượng
rất lớn (như cơ sở dữ liệu phục vụ cho tính cước điện thoại, quản lý nhân sự
trên một phạm vi lớn). Các dữ liệu phải được tổ chức quản lý sao cho những
người sử dụng có thể tìm kiếm, cập nhật và lấy ra khi cần thiết. Một cơ sở dữ
liệu có thể được tạo ra và bảo trì một cách thủ công và cũng có thể được tin
học hoá. Một cơ sở dữ liệu được tin học hoá được tạo ra và duy trì bằng một
nhóm chương trình áp dụng hoặc bằng một hệ quản trị cơ sở dữ liệu.
II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
1. Định nghĩa hệ quản trị Cơ sở dữ liệu
Một hệ quản trị cơ sở dữ liệu là một tập hợp chương trình giúp cho
người sử dụng tạo ra và duy trì một cơ sở dữ liệu. Nó là một hệ thống phần
mềm phổ dụng làm dễ quá trình định nghĩa, xây dựng và thao tác cơ sở dữ
liệu cho các áp dụng khác nhau.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 7
Định nghĩa một cơ sở dữ liệu bao gồm việc đặc tả các kiểu dữ liệu, các
cấu trúc và các ràng buộc cho dữ liệu sẽ được lưu giữ trong cơ sở dữ liệu.
Xây dựng một cơ sở dữ liệu là quá trình lưu trữ các dữ liệu trên các
phương tiện lưu trữ được hệ quản trị cơ sở dữ liệu kiểm soát.
Thao tác một cơ sở dữ liệu bao gồm các chức năng như truy vấn cơ sở
dữ liệu để lấy ra các dữ liệu cụ thể, cập nhật cơ sở dữ liệu để phản ánh các
thay đổi trong thế giới nhỏ và tạo ra các báo cáo từ các dữ liệu.
Các hệ quản trị cơ sở dữ liệu để thể hiện một cơ sở dữ liệu tin học hoá có
thể là phổ dụng (là một tập các phần mềm đóng gói) hoặc có thể là chuyên
dụng (là một tập các phần mềm được tạo ra với một mục đích riêng).
Ta gọi cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu bằng một thuật ngữ
chung là hệ cơ sở dữ liệu. Môi trường của một hệ cơ sở dữ liệu được mô tả
bằng hình vẽ (hình 1.1) dưới đây.

Người sử dụng / Người lập trình





















Hình 1: Môi trường hệ cơ sở dữ liệu























Chương trình áp dụng/
Truy vấn
Phần mềm xử lý
truy vấn / chương trình
Phần mềm truy cập đến
các dữ

Định nghĩa cơ
sở dữ liệu được
lưu giữ (Siêu dữ

Cơ sở dữ liệu
được lưu giữ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 8
2. Các chức năng của một hệ quản trị cơ sở dữ liệu
Một hệ quản trị cơ sở dữ liệu ngày nay có các chức năng sau:
Lưu trữ các định nghĩa của các mối liên kết dữ liệu (gọi là siêu dữ liệu)
vào một từ điển dữ liệu. Lần lượt, tất cả các chương trình truy cập đến cơ sở
dữ liệu làm việc thông qua hệ quản trị cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu
sử dụng dữ liệu trong từ điển dữ liệu để tìm kiếm các cấu trúc thành phần dữ
liệu và các mối liên kết được yêu cầu. Tóm lại, chúng ta được giải phóng khỏi
việc lập trình cho các mối liên kết phức tạp như vậy trong từng mỗi chương
trình. Mọi sự thay đổi được thực hiện trong các tệp cơ sở dữ liệu sẽ được tự
động ghi lại vào từ điển dữ liệu, điều đó giải phóng ta khỏi việc sửa đổi tất cả
các chương trình truy cập đến tệp cơ sở dữ liệu đã bị sửa đổi. Nói cách khác,
hệ quản trị cơ sở dữ liệu loại bỏ sự phụ thuộc dữ liệu và cấu trúc ra khỏi hệ
thống
Tạo ra các cấu trúc phức tạp theo yêu cầu để lưu trữ dữ liệu, điều đó giải
phóng chúng ta khỏi nhiệm vụ khó khăn là định nghĩa và lập trình cho các đặc
trưng dữ liệu vật lý.
Biến đổi các dữ liệu được nhập vào để phù hợp với các cấu trúc dữ liệu ở
điểm 2. Như vậy hệ quản trị cơ sở dữ liệu giúp ta không phải làm phân biệt
giữa dạng logic và dạng vật lý của dữ liệu. Bằng việc duy trì sự độc lập dữ
liệu, hệ quản trị cơ sở dữ liệu chuyển các yêu cầu logic thành các lệnh định vị
một cách vật lý và lấy ra các dữ liệu yêu cầu. Điều đó có nghĩa là hệ quản trị
cơ sở dữ liệu tạo khuôn dạng cho các dữ liệu được lấy ra để làm cho nó phù
hợp với các mong muốn logic của người sử dụng.
Tạo ra một hệ thống bảo mật và áp đặt tính bảo mật và riêng tư trong CSDL.
Tạo ra các cấu trúc phức tạp cho phép nhiều người sử dụng truy cập đến dữ
liệu.
Cung cấp các thủ tục sao lưu và phục hồi dữ liệu để đảm bảo sự an toàn và
toàn vẹn dữ liệu
Xúc tiến và áp đặt các quy tắc an toàn để loại bỏ vấn đề toàn vẹn dữ liệu.
Điều đó cho phép ta làm tối thiểu sự dư thừa dữ liệu và làm tối đa tính nhất
quán dữ liệu
Cung cấp việc truy cập dữ liệu thông qua một ngôn ngữ truy vấn. (Một
ngôn ngữ truy vấn là một ngôn ngữ phi thủ tục cho phép người sử dụng chỉ ra
cái gì cần phải làm mà không cần phải chỉ ra nó được làm như thế nào). Các
hệ quản trị cơ sở dữ liệu cũng cung cấp việc truy cập dữ liệu cho những người
lập trình thông qua các ngôn ngữ thủ tục.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 9
3. Các đặc trưng của giải pháp cơ sở dữ liệu
Trước khi khái niệm cơ sở dữ liệu ra đời, hệ thống tệp là một phương
pháp được áp dụng rộng rãi. Một tệp có thể xem là một cặp hồ sơ lưu trữ các
thông tin liên quan đến từng loại công việc riêng biệt. Ví dụ, trong một cơ
quan, bộ phận tài vụ sẽ có một cặp hồ sơ liên quan đến lương của các nhân
viên; bộ phận tổ chức có cặp hồ sơ liên quan đến vấn đề nhân sự,….Việc xử
lý để lấy ra các thông tin như là các thống kê về lương, về quá trình công
tác,… lúc đầu được thực hiện thủ công. Dần dần khối lượng thông tin ngày
càng lớn, việc xử lý thông tin ngày càng phức tạp, người ta sử dụng máy tính
vào việc quản lý. Các cặp hồ sơ được chuyển thành các tệp dữ liệu trên máy
tính và việc xử lý thông tin được thực hiện bằng cách lập trình (trong một
ngôn ngữ lập trình thế hệ 3). Việc quản lý theo giải pháp hệ thống tệp có rất
nhiều nhược điểm. Thứ nhất, đó là sự dư tthừa thông tin : cùng một thông tin
(chẳng hạn danh sách các nhân viên) được lưu trữ nhiều lần (trong tệp lương
và cả ở trong tệp nhân sự …), như vậy sẽ gây ra việc lãng phí bộ nhớ và dễ
gây sai sót trong khi cập nhật dữ liệu, có thể sinh ra các dữ liệu không đúng.
Thứ hai, đó là sự phụ thuộc giữa các chương trình áp dụng và dữ liệu. Mỗi khi
có sự thay đổi cấu trúc tệp và các dữ liệu trong tệp, chương trình áp dụng để
khai thác thông tin trên tệp đó cũng phải thay đổi theo, điều đó làm cho việc
bảo trì rất khó khăn.
Giải pháp cơ sở dữ liệu ra đời đã giải quyết được những nhược điểm đó.
Cụ thể, giải pháp cơ sở dữ liệu có những đặc trưng sau:
a. Bản chất tự mô tả của hệ cơ sở dữ liệu
Một đặc trưng cơ bản của giải pháp cơ sở dữ liệu là hệ thống cơ sở dữ
liệu không chỉ gồm bản thân cơ sở dữ liệu mà còn có cả một định nghĩa hoặc
mô tả đầy đủ về cấu trúc cơ sở dữ liệu và các ràng buộc. Định nghĩa này được
lưu trữ trong từ điển hệ thống, nó chứa thông tin như là cấu trúc của mỗi tệp,
kiểu và dạng lưu trữ của từng mục dữ liệu. Các thông tin được lưu trữ trong từ
điển được gọi là siêu dữ liệu (meta-data), và chúng mô tả của cấu trúc cơ sở
dữ liệu nguyên thuỷ (hình 1.1). Phần mềm hệ quản trị cơ sở dữ liệu và các
người sử dụng cơ sở dữ liệu sử dụng từ điển dữ liệu để lấy thông tin về cấu
trúc của cơ sở dữ liệu.
b. Sự cô lập giữa các chương trình và dữ liệu.
Trong hệ thống tệp, cấu trúc của các tệp cơ sở dữ liệu được nhúng vào
trong các chương trình truy cập vì vậy bất kỳ một thay đổi nào về cấu trúc của
một tệp cũng đòi hỏi phải thay đổi tất cả các chương trình truy cập đến tệp đó.
Ngược lại, các chương trình truy cập của hệ quản trị cơ sở dữ liệu không đòi
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 10
hỏi việc thay đổi như thế. Cấu trúc của các tệp dữ liệu được lưu trữ trong từ
điển tách rời với các chương trình truy cập. Tính chất này gọi là sự độc lập dữ
liệu-chương trình.
c. Hỗ trợ các khung nhìn dữ liệu nhiều thành phần
Một cơ sở dữ liệu có nhiều người sử dụng, mỗi một người có thể đòi hỏi
một phối cảnh hoặc một khung nhìn (view) khác nhau. Một khung nhìn có thể
là một tập con của cơ sở dữ liệu hoặc nó có thể chứa các dữ liệu ảo, đó là các
dữ liệu được trích ra từ các tệp cơ sở dữ liệu khác nhau nhưng không được
lưu trữ một cách rõ ràng. Một hệ quản trị cơ sở dữ liệu nhiều người sử dụng
phải cung cấp nhiều công cụ để định nghĩa các khung nhìn nhiều thành phần.
d. Chia sẻ dữ liệu và nhiều người sử dụng
Một hệ quản trị cơ sở dữ liệu nhiều người sử dụng phải cho phép nhiều
người sử dụng truy cập đồng thời đến cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu
phải có phần mềm kiểm tra cạnh tranh để đảm bảo rằng các người sử dụng
cập nhật đến cùng một dữ liệu phải được thực hiện theo cách được kiểm tra để
cho kết quả của các cập nhật là đúng đắn.
e. Ví dụ về một cơ sở dữ liệu
Chúng ta hãy xem một cơ sở dữ liệu mà nhiều bạn đọc đã quen biết: cơ
sở dữ liệu trường. Cơ sở dữ liệu này nhằm lưu giữ thông tin liên quan đến
sinh viên, các môn học, điểm trong một môi trường đại học. Cơ sở dữ liệu
được tổ chức thành 5 tệp, mỗi tệp lưu trữ các bản ghi dữ liệu cùng một kiểu.
Tệp sinhviên lưu giữ dữ liệu về mỗi sinh viên; tệp mônhọc lưu giữ dữ
liệu về mỗi môn học, tệp họcphần lưu giữ các dữ liệu về mỗi học phần của
môn học, tệp điểm lưu giữ các điểm của từng học phần của sinh viên, và tệp
biếttrước lưu giữ các môn học cần biết trưóc của từng môn học. Cấu trúc của
cơ sở dữ liệu và một vài mẫu dữ liệu ví dụ được chỉ ra ở hình 1.2

Sinhviên Họtênsinhviên Mãsốsinhviên Lớp Chuyên ngành
Nguyễn Nam 17 K45T Tinhọc
Lê Bắc 8 K45C CôngnghệTT

Mônhọc Tênmônhọc Mã số môn học Số đvht Khoa
Tin học Cơ sở 101 8 Công nghệ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 11
Cấu trúc DL&GT 102 5 Công nghệ
Toán rời rạc 103 5 Công nghệ
Cơ sở dữ liệu 104 4 Công nghệ

họcphần Mã số HP Mãsố mônhọc Họckỳ Năm Têngiáovi
ên
1011 101 1 2001 Vân
1012 101 2 2002 Vân
1031 103 1 2001 Hoàng
1032 103 2 2002 Hoàng
1020 102 3 2002 Lân
1040 104 4 2002 Huy

Điểm Mãsốsinhviên Mã sốHP Điểm
17 1031 8
17 102 6
8 1031 9
8 1011 10
8 1020 7
8 1040 9

Biếttrước Mãsốmôn
học
Mãsốmônbiếttrước
104 102
104 103
102 101
Hình 1.2: Cơ sở dữ liệu ví dụ trường
Để định nghĩa cơ sở dữ liệu này, chúng ta phải chỉ ra của mỗi bản ghi
của mỗi tệp bằng cách đặc tả các kiểu khác nhau của các phần tử dữ liệu sẽ
được lưu trữ trong các bản ghi. Theo hình 2, mỗi bản ghi sinhviên bao gồm các
dữ liệu để biểu diễn Họ tên sinh viên, mã số sinh viên, lớp, chuyên ngành.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 12
Mỗi bản ghi môn học bao gồm các dữ liệu để biểu diễn tên môn học, mã số
môn học, số đơn vị học trình, khoa, …. Chúng ta phải chỉ ra một kiểu dữ liệu
cho mỗi phần tử dữ liệu bên trong một bản ghi. Ví dụ: ta có thể đặc tả họ tên
sinh viên là một dãy ký tự có độ dài 30, mã số sinh viên là một số nguyên,…
Để xây dựng cơ sở dữ liệu trường, chúng ta lưu giữ các dữ liệu để biểu
diễn mỗi sinh viên, mỗi môn học, học phần, điểm, biết trước vào các tệp thích
hợp. Để ý rằng các bản ghi trong các tệp khác nhau có thể có mối quan hệ với
nhau. Ví dụ, bản ghi đối với “Nguyễn Nam”trong tệp sinhviên có liên quan đến
hai bản ghi trong tệp Điểm chỉ ra điểm của Nguyễn Nam trong hai học phần.
Tương tự như vậy, một bản ghi biếttrước có liên quan đến hai bản ghi
mônhọc…. Thông thường một cơ sở dữ liệu chứa nhiều kiểu của các bản ghi
và chứa nhiều mối liên kết giữa các tệp.
Thao tác cơ sở dữ liệu bao gồm việc truy vấn và cập nhật cơ sở dữ
liệu.Các truy vấn có dạng : “Liệt kê các môn học và điểm của sinh viên
Nguyễn Nam”, “Đưa ra danh sách các sinh viên thi trượt môn cơ sở dữ liệu”,
v..v… Cập nhật cơ sở dữ liệu bao gồm thêm vào một môn học mới, sửa lại
một điểm của một học phần,… Các truy vấn và các cập nhật phải được đặc tả
chính xác trong ngôn ngữ hệ cơ sở dữ liệu một cách chính xác trước khi
chúng được xử lý.
III. MÔ HÌNH CƠ SỞ DỮ LIỆU
Các hệ quản trị cơ sở dữ liệu tạo ra khả năng giải quyết các sử dụng tài
nguyên dữ liệu phức tạp hơn rất nhiều nếu cơ sở dữ liệu được thiết kế để sử
dụng năng lực sẵn có đó. Các loại cấu trúc dữ liệu được tạo ra trong cơ sở dữ
liệu và mối liên kết giữa chúng đóng vai trò rất lớn trong việc xác định tính
hiệu quả của hệ quản trị cơ sở dữ liệu. Vì vậy, thiết kế cơ sở dữ liệu trở thành
hoạt động chính trong môi trường cơ sở dữ liệu.
Việc thiết kế cơ sở dữ liệu được thực hiện đơn giản hơn nhiều khi bạn
dùng các mô hình. Các mô hình là sự trừu tượng đơn giản của các sự kiện
trong thế giới thực. Các trừu tượng như vậy sẽ cho phép chúng ta khảo sát các
đặc điểm của các thực thể và các mối liên kết được tạo ra giữa các thực thể
đó. Nếu các mô hình không đúng đắn logic, các thiết kế cơ sở dữ liệu rút ra từ
đó sẽ không cho phép rút ra được các thông tin đúng đắn. Các mô hình tốt sẽ
đưa ra các cơ sở dữ liệu tốt và trên cơ sở đó sẽ có các ứng dụng tốt. Ngược
lại, mô hình không tốt sẽ đưa đến thiết kế cở dữ liệu tồi và dẫn đến những áp
dụng không đúng.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 13
1. Định nghĩa mô hình cơ sở dữ liệu
Một mô hình cơ sở dữ liệu là một tập hợp các khái niệm dùng để biểu
diễn các cấu trúc của cơ sở dữ liệu. Cấu trúc của một cơ sở dữ liệu là các kiểu
dữ liệu, các mối liên kết và các ràng buộc phải tuân theo trên các dữ liệu. Đa
số các mô hình còn có thêm một tập hợp các phép toán cơ bản để đặc tả các
phép rút ra và cập nhật trên cơ sở dữ liệu.
2. Các loại mô hình cơ sở dữ liệu
Có rất nhiều các mô hình dữ liệu đã được đề nghị, chúng ta có thể phân
loại chúng theo các kiểu khái niệm mà chúng dùng để mô tả cấu trúc cơ sở dữ
liệu.
Các mô hình dữ liệu bậc cao hoặc mô hình dữ liệu quan niệm cung cấp
các khái niệm gắn liền với cách cảm nhận dữ liệu của nhiều người sử dụng.
Các mô hình này tập trung vào bản chất logic của biểu diễn dữ liệu, nó quan
tâm đến cái được biểu diễn trong cơ sở dữ liệu chứ không phải cách mà nó
được biểu diễn. Các mô hình dữ liệu bậc thấp hoặc các mô hình dữ liệu vật
lý cung cấp các khái niệm mô tả chi tiết về việc các dữ liệu được lưu trữ trong
máy tính như thế nào. Các khái niệm do mô hình dữ liệu vật lý cung cấp nói
chung có ý nghĩa đối với các chuyên gia máy tính chứ không có ý nghĩa mấy
đối với các người sử dụng thông thường. ở giữa hai loại mô hình này là một
lớp các mô hình dữ liệu thể hiện, chúng cung cấp những khái niệm mà
những người sử dụng có thể hiểu được và không xa với cách tổ chức dữ liệu
bên trong máy tính. Các mô hình dữ liệu thể hiện che dấu một số chi tiết về
việc lưu trữ dữ liệu nhưng có thể được cài đặt trực tiếp trên hệ thống máy
tính.
Các mô hình dữ liệu quan niệm sử dụng các khái niệm như các thực thể,
các thuộc tính, các mối liên kết. Một thực thể biểu diễn một đối tượng hoặc
một khái niệm của thế giới thực, chẳng hạn như một nhân viên hoặc một dự
án được mô tả trong một cơ sở dữ liệu. Một thuộc tính biểu diễn một đặc
trưng nào đó của một thực thể, chẳng hạn như tên hay lương của nhân viên.
Một mối liên kết giữa hai hay nhiều thực thể biểu diễn một mối quan hệ qua
lại giữa các thực thể, ví dụ mối liên kết làm việc trên là mối quan hệ giữa một
nhân viên và một dự án (Nhân viên làm việc trên dự án). Trong chương 2,
chúng ta sẽ nghiên cứu mô hình liên kết -thực thể (Entity-Relationship
model), gọi tắt là mô hình ER, và một số mở rộng của mô hình này. Mô hình
dữ liệu hướng đối tượng cũng là một mô hình bậc cao, cung cấp những khái
niệm như lớp, phương thức, thông điệp,...
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 14
Các mô hình dữ liệu thể hiện là các mô hình được sử dụng thường xuyên
nhất trong các hệ cơ sở dữ liệu thương mại, chúng gồm các mô hình dữ liệu
quan hệ, mô hình dữ liệu mạng và mô hình dữ liệu phân cấp. Các mô hình
mạng và phân cấp được sử dụng rộng rãi trong quá khứ nhưng từ khi mô hình
dữ liệu quan hệ ra đời (vào đầu những năm 70), do tính ưu việt của nó, mô
hình quan hệ đần dần thay thế các mô hình mạng và phân cấp. Trong chương
3, chúng ta sẽ nghiên cứu mô hình cơ sở dữ liệu quan hệ, các ngôn ngữ và các
phép toán của chúng.
Các mô hình dữ liệu vật lý mô tả cách lưu trữ dữ liệu trong máy tính
bằng cách giới thiệu thông tin như khuôn dạng bản ghi, sắp xếp bản ghi,
đường truy cập,…
Trong một mô hình dữ liệu cần phải phân biệt rõ giữa mô tả của cơ sở
dữ liệu và bản thân cơ sở dữ liệu. Mô tả của một cơ sở dữ liệu được gọi là
lược đồ cơ sở dữ liệu, nó được xác định rõ trong quá trình thiết kế cơ sở dữ
liệu và không bị thay đổi thường xuyên. Đa số các mô hình dữ liệu có các quy
ước hiển thị các lược đồ như các biểu đồ. Một lược đồ được hiển thị được gọi
là một biểu đồ của lược đồ. Một biểu đồ lược đồ chỉ thể hiện một vài khía
cạnh của lược đồ như là tên của các kiểu bản ghi và các mục dữ liệu, và một
số kiểu ràng buộc. Các khía cạnh khác không được thể hiện trong biểu đồ
lược đồ. Hình vẽ sau đây trình bày biểu đồ lược đồ của cơ sở dữ liệu ví dụ ở
hình 1.2
sinhviên
Họ tên Mãsốsinhviên Lớp Chuyên ngành
Mônhọc
Mãsốmônhọc Tên môn học Sốđvht Khoa
Biếttrước
Mãsốmônhọc Mãsốmônbiếttrước
Họcphần
Mãsố HP Mãsốmônhọc Họckỳ Năm Têngiáoviên
Điểm
Mã số sinh viên Mã số HP Điểm

Hình 1.3 Sơ đồ lược đồ cho cơ sở dữ liệu ở hình 1.2

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 15
Các dữ liệu hiện tại trong một cơ sở dữ liệu có thể thay đổi một cách
thường xuyên. Các dữ liệu trong một cơ sở dữ liệu ở một thời điểm cụ thể
được gọi là một trạng thái cơ sở dữ liệu hoặc ảnh của cơ sở dữ liệu
(snapshot). Nó còn được gọi là tập hợp hiện tại các thể hiện trong cơ sở dữ
liệu. Nhiều trạng thái quan hệ có thể được xây dựng để làm tương ứng với
một lược đồ cơ sở dữ liệu cụ thể. Mỗi khi chúng ta chèn vào hoặc loại bỏ một
bản ghi, sửa đổi một giá trị của một mục dữ liệu trong một bản ghi, chúng ta
làm thay đổi trạng thái của cơ sở dữ liệu sang trạng thái khác.
Việc phân bịêt giữa lược đồ cơ sở dữ liệu và trạng thái cơ sở dữ liệu là
rất quan trọng. Khi chúng ta định nghĩa một cơ sở dữ liệu mới, chúng ta chỉ
đặc tả lược đồ cơ sở dữ liệu cho hệ quản trị cơ sở dữ liệu. Tại thời điểm này,
trạng thái cơ sở dữ liệu là một trạng thái rỗng, không có dữ liệu. Chúng ta
nhận được trạng thái ban đầu của cơ sở dữ liệu khi cơ sở dữ liêu lần đầu tiên
được cung cấp hoặc được nhập dữ liệu. Từ đó trở đi, mỗi khi một phép toán
cập nhật được thực hiện đối với cơ sở dữ liệu, chúng ta nhận được một trạng
thái cơ sở dữ liệu khác. tại mọi thời điểm, cơ sở dữ liệu có một trạng thái hiện
tại. Hệ quản trị cơ sở dữ liệu có trách nhiệm đảm bảo rằng tại mỗi trạng thái
của cơ sở dữ liệu là một trạng thái vững chắc, điều đó có nghĩa là một trạng
thái thoả mãn cấu trục và các ràng buộc được dặc tả trong lược đồ. Vì vậy,
việc đặc tả một lược đồ đúng đắn cho một hệ quản trị cơ sở dữ liệu là một
việc làm cực kỳ quan trọng, và lược đồ phải được thiết kế cực kỳ cẩn thận. Hệ
quản trị cơ sở dữ liệu lưu trữ các mô tả của các cấu trúc lược đồ và các ràng
buộc – còn gọi là siêu dữ liệu – vào trong catalog của hệ quản trị sao cho phần
mềm hệ quản trị cơ sở dữ liệu có thể tham khảo đến lược đồ khi nó cần. Lược
đồ đôi khi còn được gọi là mục tiêu (intension) và một trạng thái cơ sở dữ liệu
được gọi là mở rộng (extension) của lược đồ.
3. Con người trong hệ cơ sở dữ liệu
Với các cơ sở dữ liệu nhỏ, nói chung chỉ có một người định nghĩa, xây
dựng, và thao tác cơ sở dữ liệu. Tuy nhiên, với một cơ sở dữ liệu lớn, rất
nhiều người tham gia vào việc thiết kế, sử dụng và bảo trì cơ sở dữ liệu. Phần
này chúng ta giới thiệu những người liên quan đến một hệ cơ sở dữ liệu và vai
trò của họ.
Những người liên quan đến cơ sở dữ liệu được chia làm hai nhóm chính.
Nhóm thứ nhất gồm những người mà công việc của họ liên quan hàng ngày
đến cơ sở dữ liệu; đó là những người quản trị cơ sở dữ liệu, thiết kế cơ sở dữ
liệu, sử dụng cơ sở dữ liệu, phân tích hệ thống và lập trình ứng dụng. Nhóm
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 16
thứ hai gồm những người làm việc để duy trì môi trường hệ cơ sở dữ liệu
nhưng không quan tâm nhiều đến bản thân cơ sở dữ liệu; đó là những người
thiết kế và cài đặt hệ quản trị cơ sở dữ liệu, phát triển công cụ, thao tác viên
và bảo trì.
a. Người quản trị hệ cơ sở dữ liệu (Database Administrator-DBA)
Trong một tổ chức có nhiều người cùng sử dụng các tài nguyên cần phải
có một người giám sát và quản trị các tài nguyên đó. Trong môi trường hệ cơ
sở dữ liệu, các tài nguyên là cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và các
phần mềm liên quan. Người quản trị hệ cơ sở dữ liệu là người chịu trách
nhiệm quản lý các tài nguyên đó. Người này chịu trách nhiệm về việc cho
phép truy cập cơ sở dữ liệu, tổ chức và hướng dẫn việc sử dụng cơ sở dữ liệu,
cấp các phần mềm và phần cứng theo yêu cầu.
b. Người thiết kế cơ sở dữ liệu (Database Designer)
Người này chịu trách nhiệm xác định các dữ liệu sẽ được lưu giữ trong
cơ sở, chọn các cấu trúc thích hợp để biểu diễn và lưu giữ các dữ liệu đó.
Những nhiệm vụ này được thực hiện trước khi cơ sở dữ liệu được cái đặt và
phổ biến. Người thiết kế có trách nhiệm giao thiệp với tất cả những người sử
dụng tương lai để hiểu được các đòi hỏi của họ và đưa ra một thiết kế thoả
mãn các yêu cầu đó. Anh ta cũng có nhiệm vụ giao tiếp với các nhóm người
sử dụng và có khả năng hỗ trợ các yêu cầu của các nhóm.
c. Những người sử dụng (End User)
Những người sử dụng là những người mà công việc của họ đòi hỏi truy
cập đến cơ sở dữ liệu để truy vấn, cập nhật và sinh ra các thông tin. Có nhiều
loại người sử dụng:
Người sử dụng không thường xuyên: Những người này không thường
xuyên truy cập đến cơ sở dữ liệu, nhưng mỗi một lần truy cập họ có thể cần
nhiều thông tin. Họ sử dụng một ngôn ngữ truy vấn cơ sở dữ liệu để chỉ ra các
yêu cầu của mình. Đây là những người quản lý bậc trung bình hoặc bậc cao.
Người sử dụng ngây thơ: Những người này chiếm phần lớn các người
sử dụng. Chức năng công việc của họ gắn liền với việc truy vấn và cập nhật
thường xuyên cơ sở dữ liệu bằng cách sử dụng các câu hỏi và các cập nhật đã
được lập trình và kiểm tra cẩn thận (gọi là các giao dịch định sẵn).
Người sử dụng tinh tế: Đó là các kỹ sư, các nhà khoa học, các nhà phân
tích thương mại,….. Những người này hiểu biết các tiện ích của hệ quản trị cơ
sở dữ liệu và biết sử dụng để cài đặt các chương trình ứng dụng nhằm thoả
mãn các yêu cầu phức tạp của họ.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 17
Người sử dụng độc lập: Là những người duy trì các cơ sở dữ liệu cá
nhân bằng cách sử dụng các chương trình đóng gói lập sẵn cung cấp các bảng
chọn dễ sử dụng hoặc các giao diện đồ hoạ
d. Những người phân tích hệ thống và những người lập trình ứng
dụng
Những người phân tích hệ thống xác định các yêu cầu của những người
sử dụng, chủ yếu là những người sử dụng ngây thơ, để dặc tả các chương
trình phù hợp với yêu cầu của họ.
Những người viết chương trình ứng dụng thể hiện các đặc tả của những
người phân tích thành chương trình; sau đó kiểm thử, gỡ rối, làm tài liệu, và
bảo trì các giao dịch định sẵn.
e. Những người thiết kế và cài đặt hệ quản trị cơ sở dữ liêu
Đó là những người thiết kế và cài đặt các mô đul và giao diện của hệ
quản trị cơ sở dữ liệu thành các phần mềm đóng gói. Một hệ quản trj cơ sở dữ
liệu là một hệ thống phần mềm phức tạp bao gồm nhiều thành phần (module).
Đó là các module cài đặt từ điển dữ liệu, ngôn ngữ truy vấn, bộ xử lý giao
diện, truy cập dữ liệu, kiểm tra cạnh tranh, phục hồi và an toàn. Hệ quản trị cơ
sở dữ liệu phải giao diện với các hệ thống phần mềm khác như hệ điều hành
và các chương trình dịch cho nhiều ngôn ngữ khác nhau.
f. Những người phát triển công cụ
Là những người thiết kế và cài đặt các công cụ (tool); đó là các phần
mềm đóng gói làm dễ việc thiết kế và sử dụng cơ sở dữ liệu.
g. Các thao tác viên và những người bảo trì
Là những người quản trị hệ thống; họ chịu trách nhiệm về việc chạy và
bảo trì môi trường phần cứng và phần mềm của hệ cơ sở dữ liệu.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 18
CHƯƠNG 2 : MÔ HÌNH THỰC THỂ-LIÊN KẾT

Trong chương này chúng ta sẽ làm quên với mô hình thực thể-liên kết
(Entity-Relationship model), gọi tắt là mô hình ER. Đó là một mô hình dữ
liệu quan niệm bậc cao phổ biến, tập trung vào các cấu trúc cơ sở dữ liệu và
các ràng buộc.
Mô hình này thường được áp dụng để thiết kế khái niệm các áp dụng cơ
sở dữ liệu và nhiều công cụ thiết kế cơ sở dữ liệu sử dụng các khái niệm của
nó.
I. SỬ DỤNG MÔ HÌNH KHÁI NIỆM BẬC CAO CHO VIỆC THIẾT
KẾ CƠ SỞ DỮ LIỆU
Quá trình thiết kế một cơ sở dữ liệu bằng hình vẽ 2.1. Bước đầu tiên là
tập hợp các yêu cầu và phân tích. Trong bước này, người thiết kế cơ sở dữ
liệu phỏng vấn những người sử dụng cơ sở dữ liệu để hiểu và làm tài liệu về
các đòi hỏi về dữ liệu của họ. Kết quả của bước này là một tập hợp ghi chép
súc tích về các đòi hỏi của những người sử dụng. Những đòi hỏi này sẽ được
đặc tả dưới một dạng càng đầy đủ và càng chi tiết càng tốt. Song song với
việc đặc tả các yêu cầu dữ liệu, cần phải đặc tả các yêu cầu về chức năng của
ứng dụng; đó là các thao tác do người dùng định nghĩa sẽ được áp dụng đối
với cơ sở dữ liệu.
Mỗi khi tất cả các yêu cầu đã được thu thập và đã được phân tích, bước
tiếp theo là tạo ra lược đồ quan niệm cho cơ sở dữ liệu bằng cách sử dụng mô
hình dữ liệu quan niệm mức cao. Bước này được gọi là thiết kế khái niệm.
Lược đồ khái niệm là một mô tả súc tích về các yêu cầu dữ liệu của các người
sử dụng, nó bao gồm các mô tả chi tiết của các kiểu thực thể, các kiểu liên kết
và các ràng buộc ; chúng được biểu diễn bằng các khái niệm do các mô hình
dữ liệu bậc cao cung cấp. Vì những khái niệm này không chứa các chi tiết cài
đặt (thể hiện), chúng thường dễ hiểu và có thể sử dụng để giao lưu với các
người sử dụng. Lược đồ quan niệm mức cao cũng có thể được sử dụng như
một dẫn chứng để đảm bảo rằng tất cả các đòi hỏi của người sử dụng đều thoả
mãn và các đòi hỏi này không chứa các mâu thuẫn. Giải pháp này cho phép
những người thiết kế cơ sở dữ liệu tập trung vào việc đặc tả các tính chất của
dữ liệu mà không cần quan tâm đến các chi tiết lưu trữ. Một thiết kế cơ sở dữ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 19
liệu quan niệm tốt làm dễ cho công việc của những người thiết kế cơ sở dữ
liệu.
Trong quá trình (hoặc sau khi) thiết kế lược đồ quan niệm, ta có thể sử
dụng các phép toán mô hình dữ liệu cơ bản để đặc tả các thao tác của người
sử dụng được xác định trong khi phân tích chức năng. Điều đó cũng giúp
khẳng định rằng lược đồ quan niệm thoả mãn mọi yêu cầu chức năng được
xác định. Nếu có một số yêu cầu chức năng không thể chỉ ra trong lược đồ
ban đầu thì ở bước này có thể có sự sửa đổi lược đồ khái niệm cho phù hợp.
Bước tiếp theo trong thiết kế cơ sở dữ liệu là việc thể hiện (cài đặt) cơ
sở dữ liệu bằng cách sử dụng một hệ quản trị cơ sở dữ liệu có sẵn. Hầu hết
các hệ quản trị cơ sở dữ liệu sử dụng một mô hình dữ liệu thể hiện (chẳng hạn
như mô hình cơ sở dữ liệu quan hệ hoặc đối tượng) vì vậy lược đồ quan niệm
được chuyển đổi từ mô hình dữ liệu bậc cao thành mô hình dữ liệu thể hiện.
Bước này gọi là thiết kế lô gic hoặc là ánh xạ mô hình dữ liệu. Kết quả của
bước này là một lược đồ cơ sở dữ liệu dưới dạng một mô hình dữ liệu thể hiện
của hệ quản trị cơ sở dữ liệu.
Bước cuối cùng trong thiết kế cơ sở dữ liệu là thiết kế vật lý. Trong
bước này ta phải chỉ ra các cấu trúc lưu trữ bên trong, các đường dẫn truy cập,
tổ chức tệp cho các tệp cơ sở dữ liệu. Song song với các hoạt động đó, các
chương trình áp dụng cũng được thiết kế và cài đặt như là các giao dịch cơ sở
dữ liệu tương ứng với các đặc tả giao dịch mức cao.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 20
ThÕ gíi thùc
TÂP HOP VA PHÄN
TÍCH CÁC YÊU CÂU
THÌÊT KÊ QUAN NÌÊM
THÌÊT KÊ CHUONG
TRÌNH ÚNG DUNG
CAÌ ÐAT GÌAO TÁC
THÌÊT KÊ LOGÌC
THÌÊT KÊ VÂT LY
C¸c yªu cÇu c¬ së d÷ liÖu C¸c yªu cÇu c¬ së d÷ liÖu
PHÄN TÍCH CHÚC NANG
L­îc ®å quan niÖm
L­îc ®å logic
L­îc ®å bªn trong
§Æc t¶ giao t¸c møc cao
(§éc lËp víi hÖ QTCSDL)
C¸c ch­¬ng tr×nh øng dông


Hình 2.1 Sơ đồ mô tả các bước chính của việc thiết kế cơ sở dữ liệu

II. CÁC THÀNH PHẦN CƠ BẢN CỬA MÔ HÌNH THỰC THỂ-LIÊN
KẾT
1. Kiểu thực thể, tập thực thể, các thuộc tính và các khoá
a. Các thực thể và các thuộc tính
Đối tượng cơ bản được trình bày trong mô hình ER là thực thể. Thực thể
là môt “vật”trong thế giới thực có sự tồn tại độc lập. Một thực thể có thể là
một vật cụ thể, (chẳng hạn như một người, một cái ô tô,..)hoặc có thể là một
vật trừu tượng(chẳng hạn một công ty, một công việc, một môn học). Mỗi
thực thể có các thuộc tính, đó là các tính chất cụ thể mô tả nó. Ví dụ, một thực
thể nhân viên được môt tả bằng họtên, tuổi, địa chỉ, lương và công việc của
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 21
nhân viên đó. Một thực thể cụ thể sẽ có một giá trị cho mỗi thuộc tính của nó.
Các giá trị thuộc tính mô tả mỗi thực thể sẽ trở thành một phần chính của các
dữ liệu được lưu trữ trong cơ sở dữ liệu.
Hình vẽ 2.2 chỉ ra một số thực thể và các thuộc tính của chúng. Thực thể
nhân viên e
1
có 4 thuộc tính : Họ tên, Địa chỉ, Tuổi, và Số điện thoại. Giá trị
của các thuộc tính tương ứng là “Lê Vân”, “Hà nội”, “32”, “(04)855641”.
Thực thể công ty c
1
có ba thuộc tính Tên, Địa điểm, Giám đốc với các giá trị
tương ứng là “Công ty Dệt may”, “Thanh trì, Hànội”, “Phạm Mỹ Hoa”.

NHÂN VIÊN
(Họ tên, Địa chỉ, Tuổi, ĐT)


CÔNG TY
(Tên, Địa điểm, Giám đốc)
e1
(Lê Vân, Hà Nội, 32, (04)855641)
c1
(CT dệt may, Thanh Trì HN, Phạm
Mỹ Hoa)
e2
(Trần Bá, Hải Phòng, 45, 8739455)
c2
(CT Hoa quả, Hải phòng, Lê Hà)
e3
(Hoàng Vân, Hà Nội, 8431845)
.
.
.
c3
CT Máy tính, Hà Nội, Phan Anh
.
.
.
Hình 2.2 Kiểu thực thể và tập thực thể

b. Các loại thuộc tính
Trong mô hình ER có mặt nhiều kiểu thuộc tính : thuộc tính đơn và
thuộc tính phức hợp, thuộc tính đơn trị và thuộc tính đa trị, thuộc tính được
lưu trữ và thuộc tính suy diễn được. Chúng ta sẽ định nghĩa các kiểu thuộc
tính và minh hoạ chúng thông qua các ví dụ.
Thuộc tính đơn và thuộc tính phức hợp : Các thuộc tính phức hợp là các
thuộc tính có thể được phân chia ra thành các phần nhỏ hơn, biểu diễn các
thuộc tính cơ bản hơn với các ý nghĩa độc lập. Ví dụ, thuộc tính Họ tên của
thực thể Nhân viên có thể được phân chia thành Họ đệm, Tên. Các thuộc tính
không thể phân chia được được gọi là thuộc tính đơn hay thuộc tính nguyên
tố. Giá trị của một thuộcc tính phức hợp là sự kết hợp các giá trị của các thuộc
tính thành phần tạo nên nó.
Các thuộc tính phức hợp có lợi cho hoàn cảnh mô hình mà trong đó một
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 22
người sử dụng đôi khi tham khảo đến một thuộc tính phức hợp như là một
đơn vị nhưng vào lúc khác thì tham khảo đến các thành phần của nó. Nếu một
thuộc tính phức hợp được tham khảo chỉ như là một thì không cần thiết phải
chia nó thành các thuộc tính thành phần.
Thuộc tính đơn trị và thuộc tính đa trị: Đa số các thuộc tính có một giá
trị duy nhất cho một thực thể cụ thể, các thuộc tính như vậy gọi là các thuộc
tính đơn trị. Ví dụ, Tuổi là một thuộc tính đơn trị của một người. Trong một
số trường hợp, một thuộc tính có thể có một tập hợp các giá trị cho cùng một
thực thể. Ví dụ, thuộc tính Bằng cấp của một người. Một người có thể không
có bằng cấp nào, người khác có thể có một bằng, người khác nữa có thể có
nhiều bằng,…. Như vậy các người khác nhau có thể có một số các giá trị khác
nhau cho thuộc tính Bằng cấp. Những thuộc tính như vậy được gọi là thuộc
tính đa trị.
Thuộc tính được lưu trữ và thuộc tính suy diễn được: Trong một số
trường hợp, hai hay nhiều giá trị thuộc tính có liên quan đến nhau, ví dụ thuộc
tính Tuổi và thuộc tính Ngày sinh của một người. Với một người cụ thể ta có
thể tính Tuổi của anh ta bằng cách lấy năm hiện tại trừ đi năm của Ngày sinh.
Thuộc tính Tuổi như vậy gọi là thuộc tính suy diễn được và nó được suy diễn
từ thuộc tính Ngày sinh. Thuộc tính Ngày sinh được gọi là thuộc tính lưu trữ.
Các giá trị không xác định (null values): Trong một số trường hợp, một
thực thể cụ thể có thể không có các giá trị áp dụng được cho một thuộc tính.
Ví dụ, Thuộc tính Số điện thoại của thực thể Nhân viên sẽ không có giá trị đối
với các nhân viên không có số điện thoại. Trong trường hợp như vậy, ta phải
tạo ra một giá trị đặc biệt gọi là giá trị không xác định (null value). Giá trị
không xác định được tạo ra khi một thuộc tính không có các giá trị áp dụng
được hoặc khi không biết.
Các thuộc tính phức tạp: Là những thuộc tính phức hợp và đa trị.
c. Kiểu thực thể, tâp thực thể, khoávà tập giá trị
Các kiểu thực thể và các tập thực thể: Một cơ sở dữ liệu thường chứa
những nhóm thực thể tương tự như nhau. Ví dụ, một công ty thuê hàng trăm
nhân viên muốn lưư giữ những thông tin tương tự liên quan đến mỗi nhân
viên. Các thực thể nhân viên này chia sẻ các thuộc tính giống nhau nhưng mỗi
thực thể có các giá trị riêng cho các thuộc tính. Một kiểu thực thể là một tập
hợp các thực thể có các thuộc tính như nhau. Một kiểu thực thể trong cơ sở dữ
liệu được mô tả tên của nó và các thuộc tính. Hình vẽ 2.2 chỉ ra hai kiểu thực
thể có tên là CÔNGTY và NHÂNVIÊN và các thuộc tính của chúng. Một tập
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 23
hợp tất cả các thực thể của một kiểu thực thể cụ thể trong cơ sở dữ liệu tại
một thời điểm được gọi là một tập thực thể, nó thường được tham chiếu đến
bằng cách sử dụng tên của kiểu thực thể. Ví dụ, NHÂNVIÊN dùng để chỉ vừa
là một kiểu thực thể, vừa là tập hợp hiện tại của tất cả các thực thể nhân viên
trong cơ sở dữ liệu.
Một kiểu thực thể được biểu diễn trong sơ đồ ER như là một hộp hình
chữ nhật có chứa tên kiểu thực thể. Các tên thuộc tính được đặt trong các hình
ô van và được nối với kiểu thực thể bằng các đường thẳng. Các thuộc tính
phức hợp được nối với các thuộc tính thành phần của nó bằng các đường
thẳng. Các thuộc tính đa trị được hiển thị trong các hình ô van đúp.

NHÄN VÌÊN
M· sèNV
Hä tªn
Hä ®Öm Tªn
Ngµy sinh
B»ng cÊp

Hình 2.3 Biểu diễn kiểu thực thể và các thuộc tính

Một kiểu thực thể môt tả một lược đồ hoặc một mục đích cho một tập
các thực thể chia sẻ cùng một cấu trúc. Tập hợp các thực thể của một kiểu
thực thể cụ thể được nhóm vào một tập thực thể và được gọi là một thể hiện
của một kiểu thực thể.
Các thuộc tính khoá của một kiểu thực thể: Một ràng buộc quan trọng
trên các thực thể của một kiểu thực thể là Khoá hoặc là ràng buộc về tính duy
nhất trên các thuộc tính. Mỗi một kiểu thực thể thường có một thuộc tính mà
các giá trị của nó là khác nhau đối với mỗi thực thể riêng biệt trong một tập
hợp. Thuộc tính như vậy gọi là thuộc tính khoá và các giá trị của nó có thể
dùng để xác định từng thực thể một cách duy nhất. Ví dụ, thuộc tính Tên của
kiểu thực thể CÔNGTY là khoá của kiểu thực thể đó vì mỗi thực thể công ty
có một tên duy nhất. Đôi khi, nhiều thuộc tính kết hợp với nhau tạo thành một
khoá, nghĩa là tổ hợp các giá trị của các thuộc tính phải khác nhau đối với mỗi
thực thể. Trong trường hợp như vậy ta có thể định nghĩa một thuộc tính khoá
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 24
phức hợp. Chú ý rằng khoá phức hợp phải tối thiểu, nghĩa là tất cả các thuộc
tính thành phần phải có mặt trong thuộc tính phức hợp để thoả mãn tính chất
duy nhất. Trong biểu diễn đồ hoạ của mô hình ER, thuộc tính khoá có tên
được gạch dưới ở bên trong hình ô van.
Khi chỉ ra rằng một thuộc tính là khoá của một kiểu thực thể nghĩa là
tính chất duy nhất nêu ở trên phải được thoả mãn đối với mỗi mở rộng của
kiểu thực thể. Do đó, đó là ràng buộc cấm hai thực thể bất kỳ có giá trị cho
thuộc tính khoá như nhau tại cùng một thời điểm. Đó không phải là tính chất
của một thể hiện cụ thể, mà đúng hơn, nó là một ràng buộc trên tất cả các thể
hiện của kiểu thực thể. Ràng buộc khoá này cũng như các ràng buộc khác sẽ
được giới thiệu sau được lấy ra từ các ràng buộc của “thế giới nhỏ”mà cơ sở
dữ liệu biểu diễn.
Một kiểu thực thể có thể có nhiều hơn một thuộc tính khoá. Ví dụ, kiểu
thực thể NHÂNVIÊN có thể có hai thuộc tính Sốchứngminhthư và
Sốthẻbảohiểm, cả hai đều là thuộc tính khoá. Một kiểu thực thể cũng có thể
không có khoá; trong trường hợp đó, nó được gọi là kiểu thực thể yếu
Các tập hợp giá trị (miền) của các thuộc tính: Mỗi thuộc tính đơn của
một kiểu thực thể được kết hợp với một tập hợp giá trị (hay còn gọi là miền
giá trị). Đó là tập hợp các giá trị có thể gán cho thuộc tính này đối với mỗi
thực thể riêng biệt. Các tập giá trị không được hiển thị trong sơ đồ ER.
Một cách toán học, một thuộc tính A của kiểu thực thể E có tập giá
trị là V có thể được định nghĩa như là một hàm từ E vào tập hợp lực lượng
P(V) của V:
A: E → P(V)
Chúng ta tham chiếu đến giá trị của thuộc tính A đối với thực thể e như
là A(e). Định nghĩa ở trên đúng cho cả các thuộc tính đơn trị, thuộc tính đa trị,
và cả thuộc tính không xác định.
2. Các liên kết, các kiểu liên kết, các vai trò và các ràng buộc cấu trúc
a. Các kiểu liên kết, tập liên kết và các thể hiện
Một kiểu liên kết R giữa n kiểu thực thể E
1
, E
2
,…., En xác định một tập
hợp liên kết giữa các thực thể của các kiểu đó. Cũng như các kiểu thực thể và
các tập thực thể, một kiểu liên kết và tập liên kết tương ứng với nó cũng có
tên chung là R. Một cách toán học, tập liên kết R là một tập hợp các thể hiện
liên kết ri
,
trong đó mỗi ri liên kết n thực thể riêng biệt (e
1
, e
2
, …, en), và mỗi
thực thể ej trong ri là một thành phần của kiểu thực thể Ej, 1<=j<=n. Như vậy,
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 25
một kiểu liên kết là một quan hệ toán học trên E
1
,E
2
,…,En, hoặc có thể định
nghĩa như là một tập của tích Đề các E
1
x E
2
x ….x En. Mỗi kiểu thực thể E
1
,
E
2
,…., En đựoc gọi là tham gia vào kiểu liên kết R, và tương tự, mỗi thực thể
riêng biệt e
1
, e
2
, …., en được gọi là tham gia vào thể hiện liên kết ri = (e
1
, e
2
,
….., en).
Một cách không hình thức, mỗi thể hiện liên kết ri trong R là một sự kết
hợp của các thực thể, mỗi thực thể thuộc về một kiểu thực thể tham gia vào
liên kết. Mỗi thể hiện liên kết ri như thế biểu diễn một sự kiện rằng các thực
thể tham gia trong ri có một quan hệ với nhau theo một cách nào đó ở trong
thế giới thực. Ví dụ, trong thực tế, các nhân viên làm việc cho các đơn vị; như
vậy, có một kiểu liên kết giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể
ĐƠNVỊ liên kết các nhân viên với các đơn vị mà họ làm việc cho.
Trong sơ đồ ER, các kiểu liên kết được biểu diễn bằng một hình thoi
được nối trực tiếp với các hình chử nhật biểu diễn các kiểu thực thể tham gia
vào liên kết. Hình vẽ 2. 4 minh hoạ các ví dụ về kiểu liên kết, thể hiện liên
kết.
Lµm viÖc cho NHÄN VÌÊN ÐON VÌ
e1
e2
e3
e4
e5
.
.
.
c1
e2
.
.
.
Lµm viÖc cho NHÄN VÌÊN ÐON VÌ


Hình 2.4 Kiểu liên kết và thể hiện liên kết
b. Cấp liên kết, tên vai trò và liên kết đệ quy
Cấp của một liên kết: Cấp của một kiểu liên kết là số các kiểu thực thể
tham gia. Một kiểu liên kết có thể có cấp 1, cấp 2, cấp 3,… Ví dụ, kiểu liên
kết <làm việc cho> giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể ĐƠNVỊ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 26
là một kiểu liên kết cấp 2. Kiểu liên kết <biết trước> giữa kiểu thực thể
Mônhọc với chính nó là một kiểu liên kết cấp 1. v.v…
Các liên kết như các thuộc tính: Đôi khi chúng ta có thể coi một kiểu
liên kết như một thuộc tính của một kiểu thực thể. Ví dụ, nếu kiểu thực thể
NHÂNVIÊN có thuộc tính ĐƠNVỊ để chỉ ra tên đơn vị mà nhân viên làm
việc cho, thì thuộc tính ĐƠNVỊ biểu thị một liên kết. Các thuộc tính kiểu này
có thể đơn trị hoặc đa trị tuỳ theo bản chất của mối liên kết.
Các tên vai trò và các liên kết đệ quy: Mỗi một kiểu thực thể tham gia
vào một kiểu liên kết có một vai trò cụ thể trong liên kết. Tên vai trò chỉ rõ
vai trò mà thực thể của kiểu thực thể tham gia có trong mỗi thể hiện liên kết,
và giúp đỡ việc giải thích ý nghĩa liên kết là gì. Ví dụ: trong kiểu liên kết
<làm việc cho>, kiểu thực thể NHÂNVIÊN đóng vai trò của nhân viên hoặc
công nhân, còn kiểu thực thể ĐƠNVỊ đóng vai trò của đơn vị hoặc người thuê
nhân viên.
Các tên vai trò là hoàn toàn không cần thiết trong các kiểu liên kết mà
trong đó các kiểu thực thể tham gia đều khác nhau, bởi vì mỗi tên kiểu thực
thể có thể được sử dụng như là một tên vai trò. Tuy nhiên, trong một số
trường hợp, một kiểu thực thể có thể tham gia vào kiểu liên kết với các vai trò
khác nhau. Trong những trường hợp như vậy tên vai trò trở nên quan trọng để
phân biệt ý nghĩa của mỗi sự tham gia. Các kiểu liên kết như vậy gọi là liên
kết đệ quy. Hình vẽ 2.5 chỉ ra một ví dụ về liên kết đệ quy: Trong các nhân
viên làm việc cho một đơn vị, có nhân viên được giao nhiệm vụ theo dõi các
nhân viên khác (chẳng hạn làm tổ trưởng, quản đốc, v…v). Như vậy sẽ có
một kiểu liên kết <theo dõi> liên kết một nhân viên với một người theo dõi
(cũng là một nhân viên). Kiểu thực thể NHÂNVIÊN tham gia hai lần vào kiểu
liên kết < theo dõi>, một lần với vai trò người bị theo dõi và một lần với vai
trò người theo dõi.
c. Các ràng buộc trên các kiểu liên kết
Các kiểu liên kết thường có một số ràng buộc để hạn chế số các tổ hợp
có thể của các thực thể có thể tham gia trong tập hợp liên kết tương ứng. Các
ràng buộc này được xác định tù tình trạng của thế giơid thực mà các liên kết
biểu diễn. Ví dụ, nếu công ty có quy tắc là mỗi nhân viên chỉ phải làm việc
cho một đơn vị thì ta phải mô tả ràng buộc này trong lược đồ. Có hai loại ràng
buộc liên kết chính: tỷ số lực lượng và sự tham gia.
Các tỷ số lực lượng cho các mối liên kết cấp 2: Tỷ số lực lượng cho một
liên kết cấp 2 chỉ ra số các thể hiên liên kết mà một thực thể có thể tham gia
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 27
vào. Ví dụ, trong kiểu liên kết <làm việc cho> giữa ĐONVI và NHÂNVIÊN,
tỷ số lực lượng là 1:N, điều đó có nghĩa là mỗi đơn vị có thể liên kết với
nhiều nhân viên nhưng một nhân viên chỉ có thể liên kết với một đơn vị. Các
tỷ số lực lượng có thể có là 1:1, 1:N, N:1 và M:N.
Một ví dụ về liên kết 1:1 là: một nhân viên có thể <quản lý> một đơn vị
và một đơn vị có một nhân viên <quản lý>. Kiểu liên kết NHÂNVIÊN <làm
việc trên> Dựán có tỷ số lựclượng là N:M vì nó phản ánh quy tắc của thế giới
thực là một nhân viên có thể làm việc trên nhiều dự án và một dự án có nhiều
nhân viên làm việc.
Các tỷ số lực lượng cho các liên kết cấp 2 được hiển thị trên các lược đồ
ER bằng cách ghi 1, N, M trên các hình thoi (hình vẽ 2.5).
Qu¶n lý NHÄN VÌÊN ÐON VÌ
1 1
Lµm viÖc cho NHÄN VÌÊN ÐON VÌ
N 1
Lµm viÖc trªn NHÄN VÌÊN DU ÁN
M N

Hình 2.5 Tỷ số lực lượng của các kiểu liên kết

Các ràng buộc tham gia và sự phụ thuộc tồn tại: Ràng buộc tham gia chỉ
ra rằng có phải sự tồn tại của một thực thể phụ thuộc vào liên quan đến một
thực thể khác thông qua một kiểu liên kết hay không. Có hai kiểu ràng buộc
tham gia: ràng buộc tham gia toàn bộ và ràng buộc tham gia bộ phận. Ví dụ,
nếu chính sách của một công ty ấn định rằng mỗi nhân viên phải làm việc cho
một đơn vị, thì một thực thể NHÂNVIÊN chỉ có thể tồn tại khi tham gia vào
một thể hiện của liên kết < làm việc cho>. Như vậy, sự tham gia của kiểu thực
thể NHÂNVIÊN vào liên kết <làm việc cho> được gọi là tham gia toàn bộ,
nghĩa là mỗi thực thể trong “tập hợp toàn bộ”các thực thể NHÂNVIÊN phải
có liên kết với một thực thể ĐƠNVỊ thông qua kiểu liên kết < làm việc cho>.
Sự tham gia toàn bộ còn được gọi là sự phụ thuộc tồn tại. Xét một ví dụ khác:
Một nhân viên có thể quản lý (hoặc không) một đơn vị. Như vậy, việc tham
gia của kiểu thực thể Nhân viên vào kiểu liên kết <quản lý> là bộ phận, nghĩa
là chỉ có một số hoặc “một phần của tập hợp “các thực thể NHÂNVIÊN là có
liên kết với một Đơn vị thông qua kiểu liên kết < quản lý>, chứ không phải tất
cả. Chúng ta gọi tỷ số lực lượng và các ràng buộc tham gia bằng một cái tên
chung là các ràng buộc cấu trúc.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 28
Trong lược đồ ER, sự tham gia toàn bộ được hiển thị như một đường
thẳng đôi nối các kiểu thực thể tham gia vào kiểu liên kết. Sự tham gia bộ
phận được biểu diễn bằng một đường thẳng đơn.
• Thuộc tính của các kiểu liên kết
Các kiểu liên kết cũng có thể có các thuộc tính, giống như các thuộc tính
của các kiểu thực thể. Ví dụ, để ghi lại số giờ trong tuần một nhân viên làm
việc trên một dự án, chúng ta có thể đưa vào thuộc tính Sôgiờ cho kiểu liên
kết <làm việc trên> hoặc để ghi lại việc quản lý đơn vị của một nhân viên
chúng ta có thể đưa vào thuộc tính Ngày bắt đầu cho kiểu liên kết <quảnlý>.
• Các kiểu thực thể yếu
Các kiểu thực thể không có các thuộc tính khoá cho chính mình được
gọi là các thực thể yếu. Ngược lại, các kiểu thực thể thông thường (nghĩa là có
thuộc tính khoá) được gọi là thực thể mạnh. Các thực thể của một kiểu thực
thể yếu được xác định bằng cách liên kết với các thực thể cụ thể của một kiểu
thực thể khác tổ hợp với một số giá trị thuộc tính của nó. Ta gọi kiểu thực thể
khác đó là kiểu thực thể xác định hoặc kiểu thực thể chủ và ta sẽ gọi kiểu liên
kết làm liên kết một kiểu thực thể yếu với chủ của nó là liên kết xác định của
kiểu thực thể yếu. Một kiểu thực thể yếu luôn luôn có một ràng buộc tham gia
hoàn toàn (tồn tại phụ thuộc) vào liên kết xác định của nó bởi vì một thực thể
yếu không thể được xác định mà không có thực thể chủ. Ví dụ, ta xét kiểu
thực thể PHỤTHUỘC, liên kết với kiểu thực thể NHÂNVIÊN được sử dụng để
giữ dấu vết của các người phụ thuộc vào mỗi nhân viênthông qua một liên kết
1:N. Các thuộc tính của PHỤTHUỘC là Họtên, Ngàysinh, Giới tính, và
Mốiquanhệ (đối với nhân viên). Hai người phụ thuộc của hai nhân viên khác
nhau có thể có cùng giá trị cho các thuộc tính nhưng nó là hai thực thể khác
nhau. Chúng chỉ được xác định như hai thực thể khác nhau sau khi xác định
một thực thể nhân viên cụ thể có liên quan đến từng người phụ thuộc. Mỗi
thực thể nhân viên được gọi là chủ của các thực thể phụ thuộc liên kết với nó.
Thông thường một kiểu thực thể yếu có một khoá bộ phận, đó là một tập
hợp các thuộc tính có thể xác định một cách duy nhất các thực thể yếu liên kết
với cùng một thực thể chủ. Ví dụ, nếu như hai người phụ thuộc không bao giừ
có tên giống nhau thì thuộc tính Họtên của PHỤTHUỘC là một khoá bộ phận.
Trong trường hợp xấu nhất, thuộc tính phức hợp gồm tất cả các thuộc tính của
thực thể yếu sẽ là một khoá bộ phận.
Trong sơ đồ ER kiểu thực thể yếu và mối liên kết xác định của nó được
biểu diễn bằng một hình chử nhật và một hình thoi nét đúp.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 29
III. VÍ DỤ VỀ THIẾT KẾ MỘT MÔ HÌNH ER
Trong phần này chúng ta xét ví dụ về việc xây dựng mô hình ER cho cơ
sở dữ liệu CÔNGTY.
1. Đặt vấn đề
Giả sử rằng sau khi tập hợp các yêu cầu và sau bước phân tích, những
người thiết kế cơ sở dữ liệu mô tả lại hoạt động của công ty bằng những câu
như sau:
Công ty được tổ chức thành các đơn vị. Mỗi đơn vị có một tên duy nhất,
một mã số duy nhất, và một nhân viên cụ thể quản lý công ty.Việc nhân viên
quản lý công ty được ghi lại bằng ngày mà nhân viên đó bắt đầu làm quản lý.
Một đơn vị có thể có nhiều địa điểm.
Một đơn vị kiểm soát một số dự án. Mỗi dự án có một tên duy nhất, một
mã số duy nhất và một địa điểm.
Với mỗi nhân viên chúng ta lưu giữ Họ tên, Mã số bảo hiểm xã hội, địa
chỉ, lương, giới tính, ngày sinh. Một nhân viên được phân công vào một đơn
vị nhưng có thể làm việc trên nhiều dự án do nhiều đơn vị kiểm soát. Chúng
ta lưu giữ lại số giờ / tuần mà một nhân viên làm việc trên mỗi dự án. Chúng
ta cũng lưu giữ dấu vết của người theo dõi trực tiếp của mỗi nhân viên
Mỗi nhân viên có những người phụ thuộc, những người này được hưởng
chế độ bảo hiểm. Thông tin về những người phụ thuộc gồm Họ tên, giới tính,
ngày sinh và mối quan hệ với nhân viên (là con hoặc bố, mẹ, ….).
2. Xác định các kiểu thực thể, các thuộc tính và các kiểu liên kết
Theo các ghi chép ở trên, chúng ta có thể có 4 kiểu thực thể:
Một kiểu thực thể ĐƠNVỊ với các thuộc tính Tên, Mãsố, Địađiểm,
Ngườiquảnlý, và Ngàybắtđầuquảnlý. Các thuộc tính Tên, Mã số đều là các
thuộc tính khoá (do tính duy nhất của chúng). Địa điểm là một thuộc tính đa
trị (vì một đơn vị có thể có nhiều địa điểm).
Một kiểu thực thể dựán với các thuộc tính Tên, Mãsố, Địađiểm,
ĐƠNVỊkiểmsoát. Cả hai thuộc tính Tên, Mãsố đều là các thuộc tính khoá.
Một kiểu thực thể NHÂNVIÊN với các thuộc tính Họtên, MãsốBHXH
(Mã số bảo hiểm xã hội), Giớitính, Địa chỉ, lương, Ngày sinh, ĐƠNVỊ, và
Người theodõi. Thuộc tính Họtên là một thuộc tính phức hợp (gồm Họđệm,
Tên). Thuộc tính địa chỉ cũng là phức hợp. Thuộc tính MãsốBHXH là thuộc
tính khoá.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 30
Một kiểu thực thể PHỤTHUỘC với các thuộc tính NHÂNVIÊN, HọtênPT
(Họ tên của người phụ thuộc), Giới tính, Ngàysinh, và Mốiquanhệ (đối với
nhân viên).
Giữa các kiểu thực thể trên có các kiểu liên kết như sau:
Giữa ĐƠNVỊ vị và dựán có một kiểu liên kết : ĐƠNVỊ kiểm soát các dự án.
Đây là một liên kết kiểu 1:N. Sự tham gia của dự án vào kiểu liên kết là toàn
bộ (nghĩa là một dự án bao giờ cũng có một đơn vị kiểm soát). Nếu như
không phải mọi đơn vị đều quản lý dự án thì sự tham gia của ĐƠNVỊ là bộ
phận, ngược lại, sự tham gia đó là toàn bộ. Thuộc tính ĐƠNVỊkiểmsoát ở đây
đóng vai trò là đơn vị kiểm soát dự án, nó chỉ kiểu liên kết kiểm soát
Giữa NHÂNVIÊN và ĐƠNVỊ có hai kiểu liên kết: Nhân viên làm việc
cho đơn vị và nhân viên quản lý một đơn vị
Kiểu liên kết làm việc cho là một liên kết kiểu N:1. Sự tham gia của cả
hai kiểu thực thể là toàn bộ (một nhân viên phải làm việc cho một đơn vị và
một đơn vị phải có các nhân viên làm việc). Thuộc tính ĐƠNVỊ của kiểu thực
thể nhân viên đóng vai trò là đơn vị mà nhân viên làm việc cho nó. Thuộc tính
này chỉ kiểu liên kết làm việc choKiểu liên kết quản lý là một liên kết kiểu
1:1. Sự tham gia của NHÂNVIÊN là bộ phận bởi vì không phải nhân viên nào
cũng quản lý đơn vị. Sự tham gia của ĐƠNVỊ là toàn bộ vì đơn vị nào cũng
phải có một người quản lý. Thuộc tính Người quản lý của ĐƠNVỊ đóng vai trò
người nhân viên quản lý đơn vị và thuộc tính Ngàybắtđầuquảnlý là thuộc tính
của kiểu liên kết quản lý
Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể NHÂNVIÊN có một kiểu
liên kết đệ quy : NHÂNVIÊN theo dõi NHÂNVIÊN. Đây là một liên kết kiểu
1:N, một nhân viên theo dõi trực tiếp các nhân viên khác. Sự tham gia của
NHÂNVIÊN (ở cả hai phía) là bộ phận bởi vì không phải nhân viên nào cũng
có người theo dõi trực tiếp và không phải nhân viên nào cũng theo dõi nhân
viên khác. Thuộc tính Ngườitheodõi đóng vai trò là nhân viên theo dõi.
Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể dựán có một kiểu liên kết:
NHÂNVIÊN làm việc trên dựán, đây là một liên kết kiểu M:N, một nhân viên có
thể làm việc trên nhiều dự án và một dự án có thể có nhiều nhân viên làm
việc. Sự tham gia của NHÂNVIÊN là bộ phận vì một nhân viên có thể không
làm việc cho dự án nào, ngược lại, sự tham gia của dự án là toàn bộ vì dự án
nào cũng phải có nhân viên làm việc.
Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể PHỤTHUỘC có một mối
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 31
liên kết : người phụ thuộc phụ thuôc vào NHÂNVIÊN hoặc NHÂNVIÊN có những
người PHỤTHUỘC. Đây là kiểu liên kết 1:N, nhân viên có thể có những người
phụ thuộc. Sự tham gia của NHÂNVIÊN là bộ phận và sự tham gia của phụ
thuộc là toàn bộ vì không phải nhân viên nào cũng có người phụ thuộc nhưng
một người phụ thuộc phải phụ thuộc vào một nhân viên. thuộc tính Nhân viên
của kiểu thực thể PHỤTHUỘC đóng vai trò của nhân viên mà người phụ thuộc
phụ thuộc vào. Thuộc tính này chỉ liên kết phụ thuộc vào.
Sau khi phân tích như trên ta, loại bỏ các thuộc tính được xem như các
kiểu liên kết ra khỏi các kiểu thực thể. Đó là các thuộc tính Ngườiquảnlý và
Ngàybắtđầuquảnlý của kiểu thực thể ĐƠNVỊ, thuộc tính ĐƠNVỊkiểmsoát của
kiểu thực thể dự án, các thuộc tính ĐƠNVỊ, Ngườitheodõi, Làmviệctrên của
kiểu thực thể NHÂNVIÊN và thuộc tính NHÂNVIÊN của kiểu thực thể
PHỤTHUỘC. Kết quả chúng ta nhận được sơ đồ ER như hình vẽ 2.6

NHÄN VÌÊN
M· sèNV
Hä tªn
Hä ®Öm Tªn
Ngµy
sinh
Qu¶n lý
ÐON VÌ
1 1
Gi¸m s¸t
DU ÁN
1
L­¬ng
Giíi
tÝnh
Ngµy b¾t ®Çu
Lµm viÖc cho
N 1
1 N
Lµm viÖc trªn
M N
KiÓm so¸t
1
N
Sè giê
Cã Cã
PHU THUÔC PHU THUÔC
N
Tªn
Ngµy
sinh
Quan hÖ
Giíi
tÝnh
Tªn
M· sè §Þa ®iÓm

Hình 2.6 Lược đồ ER “CÔNG TY”
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 32
CHƯƠNG 3: MÔ HÌNH QUAN HỆ,
CÁC RÀNG BUỘC QUAN HỆ VÀ ĐẠI SỐ QUAN HỆ

Mô hình quan hệ được Ted Codd đưa ra đầu tiên vào năm 1970 và gây
được chú ý ngay tức khắc vì tính đơn giản và các cơ sở toán học của nó. Mô
hình quan hệ sử dụng khái niệm quan hệ toán học như là khối xây dựng cơ sở
và có cơ sở lý thuyết của nó trong lý thuyết tập hợp và logic vị từ bậc nhất.
Trong chương này chúng ta sẽ nói về các đặc trưng cơ bản của mô hình, các
ràng buộc của chúng và tập hợp các phép toán của mô hình quan hệ.
I. CÁC KHÁI NIỆM CỦA MÔ HÌNH QUAN HỆ
Mô hình quan hệ biểu thị cơ sở dữ liệu như một tập các quan hệ. Mỗi
quan hệ có thể được biểu diễn như một bảng giá trị, mỗi một dòng trong bảng
biểu thị một tấp hợp các giá trị dữ liệu liên quan với nhau. Trong chương
trước, chúng ta đã đưa ra các khái niệm về kiểu thực thể và kiểu liên kết như
là các khái niệm để mô hình hoá dữ liệu của thế giới thực. Trong mô hình
quan hệ, mỗi một dòng trong bảng biểu thị một sự kiện tương ứng với một
thực thể hoặc một liên kết của thế giới thực. Tên bảng và tên các cột dùng để
giúp giải thích ý nghĩa của các giá trị trong mỗi hàng. Mọi giá trị trong một
cột đều cùng một kiểu dữ liệu
Theo thuật ngữ mô hình quan hệ hình thức, mỗi hàng được gọi là một
bộ, mỗi đầu cột được gọi là một thuộc tính, và bảng được gọi là một quan hệ.
1. Miền, thuộc tính, bộ và quan hệ
Một miền D là một tập hợp các giá trị nguyên tử, điều đó có nghĩa là
mỗi giá trị trong miền là không thể phân chia trong phạm vi mô hình quan hệ.
Để dặc tả một miền, người ta chỉ ra một tên miền, một kiểu dữ liệu và khuôn
dạng dữ liệu. Một số ví dụ về miền:
. Họ tên : Là một tập hợp các dãy chữ cái có độ dài <= 30
. Tuổi : là một tập các số nguyên nằm trong khoảng từ 1 đến 120
Ngoài ra, trong cơ sở dữ liệu người ta còn chỉ ra các thông tin phụ để thể
hiện các giá trị của miền, chẳng hạn các đơn vị tính như tiền, trọng lượng, …
Một lược đồ quan hệ R, ký hiệu là R(A
1
,A
2
,…., An), được tạo nên từ
một tên quan hệ R một danh sách các thuộc tính A
1
,A
2
,…., An. Mỗi một
thuộc tính Ai là tên vai trò của một miền D nào đó trong lược đồ quan hệ R. D
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 33
được gọi là miền giá trị của Ai và được ký hiệu là Dom(Ai). Một lược đồ
quan hệ được sử dụng để môt tả một quan hệ ; R được gọi là tên của quan hệ
đó. Cấp của một quan hệ là số các thuộc tính của lược đồ quan hệ của nó.Ví
dụ, ta có lược đồ cấp 5: Sinhviên(Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ).
Quan hệ tương ứng với nó là một bảng có tên là Sinhviên, có 5 cột có tên là
các thuộc tính, mỗi thuộc tính có một miền.
Một quan hệ hoặc trạng thái quan hệ r của lược đồ quan hệ
R(A
1
,A
2
,…., An) được ký hiệu là r(R), là tập hợp các n-bộ r = {t
1
, t
2
, ….., tn
}. Mỗi n-bộ t là một danh sách có thứ tự của n giá trị, t = < v
1
, v
2
, ……, vn >,
trong đó mỗi vi
,
1<= i <= n, là một phần tử của Dom(Ai) hoặc là một giá trị
không xác định
(null value). Giá trị thứ i của bộ t, tương ứng với thuộc tính Ai được
tham chiếu đến như là t[Ai]. Hình 3.1 chỉ ra một ví dụ của quan hệ Sinhviên
tương ứng với sơ đồ quan hệ SINHVIÊN ở trên. Mỗi bộ trong quan hệ biểu
diễn một sinh viên cụ thể. Quan hệ được biểu diễn như một bảng, trong đó
mỗi bộ được biểu diễn như một hàng và mỗi thuộc tính tương ứng với mỗi
đầu cột chỉ ra vai trò của các giá trị trong cột đó. Các giá trị không xác định
biểu thị các thuộc tính mà giá trị của nó không biết được hoặc không tồn tại
đối với từng bộ Sinh viên cụ thể.

SINH VIÊN Họ tên Mã số Ngày sinh Giới tính Địa chỉ
Lê Vân 4515202 12/09/84 Nữ Hà Nội
Hoàng Tùng 4516802 21/03/84 Nam Bắc Ninh
Trương Định 4620503 15/05/85 Nam Hà Nam
Phạm An 4612203 16/04/85 Nam Nam Định
Đỗ Cung 4521402 10/01/84 Nam Nghệ An
Hình 3.1 Quan hệ SINH VIÊN

Định nghĩa quan hệ ở trên có thể phát biểu lại như sau : Một quan hệ
r(R) là một quan hệ toán học cấp n trên các miền giá trị dom(A1),
dom(A2),…….., dom(An), đó là tập con của tích Đề cac của các miền xác
định R:
r(R) ⊆ (dom(A
1
) x dom(A
2
) x ……x dom(An))
Tích Đề cac moi tổ hợp có thể có của các giá trị từ các miền đã cho. Như
vậy, nếu ta ký hiệu lực lượng của một miền D là D và giả thiết rằng mọi
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 34
miền đều hữu hạn thì tổng số các bộ trong tích Đề cac là
dom(A
1
)*dom(A
2
)* ………..*dom(An)
ở ngoài tất cả các tổ hợp có thể có này, một trạng thái quan hệ ở một
thời điểm cho trước – gọi là trạng thái quan hệ hiện tại – chỉ phản ảnh các bộ
giá trị biểu diễn một trạng thái cụ thể của thế giới thực. Nói chung, do trạng
thái của thế giới thực thay đổi, quan hệ cũng bị thay đổi thành trạng thái quan
hệ khác. Lược đồ R là ổn định, không thay đổi, trừ phi phải thêm vào một số
thuộc tính để biểu diễn một thông tin mới chưa được lưu trữ trong quan hệ.
Có thể xảy ra trường hợp nhiều thuộc tính có cùng một miền giá trị. Các
thuộc tính chỉ ra các vai trò khác nhau đói với miền. Ví dụ, hai thuộc tính
ĐịachỉNV và ĐịachỉĐV có cùng miền giá trị nhưng thuộc tính thứ nhất tham
chiếu đến địa chỉ của nhân viên còn địa chỉ thứ hai tham chiếu đến địa chỉ của
đơn vị.
2. Các đặc trưng của các quan hệ
a) Thứ tự của các bộ trong một quan hệ : Một quan hệ được định nghĩa
như một tập hợp các bộ. Các phần tử trong một tập hợp không có thứ tự, vì
vậy các bộ trong một quan hệ không có một thứ tự cụ thể. Tuy nhiên, trong
một tệp, các bản ghi được lưu trữ một cách vật lý trên đĩa vì vậy luôn có một
thứ tự giữa các bản ghi. Thứ tự này chỉ rõ bản ghi thứ nhất, bản ghi thứ i, …,
bản ghi thứ n. Một cách tương tự, khi ta biểu diễn một quan hệ như là một
bảng, các hàng được hiển thị theo một thứ tự nhất định.
Thứ tự các bộ không phải là một phần của định nghĩa quan hệ bởi vì
một quan hệ cố gắng biểu diễn các sự vật ở mức trừu tượng hoặc lôgic. Có thể
có nhiều thứ tự lô gic trên một quan hệ. Ví dụ, các bộ giá trị trong quan hệ
SINHVIÊN ở hình 3.1 có thể sắp xếp theo nhiều cách khác nhau: theo thứ tự
logic của Họtên, theo thứ tự logic của Mã số, …. Định nghĩa quan hệ không
chỉ ra thứ tự lôgic nào cả, vì vậy không có thứ tự logic nào hơn thứ tự lôgic
khác. Các quan hệ chứa cùng một số hàng như nhau nhưng các hàng được sắp
xếp khác nhau được xem như đồng nhất với nhau. Khi một quan hệ được cài
đặt như một tệp, một thứ tự vật lý có thể được chỉ ra trên các bản ghi của tệp.
b) Thứ tự của các giá trị bên trong một bộ : Theo định nghĩa quan hệ ở
trên, một n-bộ là một danh sách có thứ tự của n giá trị. Như vậy thứ tự của các
giá trị trong một bộ là quan trọng, từ đó suy ra thứ tự của các thuộc tính trong
một lược đồ quan hệ cũng quan trọng. Tuy nhiên, ở mức lô gic, thứ tự của các
thuộc tính và các giá trị của nó là không thực sự quan trọng khi gữ được sự
tương ứng giữa các thuộc tính và các giá trị.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 35
Có thể đưa ra một định nghĩa khác về quan hệ, định nghĩa này sẽ làm
cho thứ tự của các giá trị trong một bộ là không cần thiết. Theo định nghĩa
này, một lược đồ quan hệ R = { A
1
, A
2
, ….An} là một tập hợp các thuộc tính
và một quan hệ r = {t
1
, t
2
, …. tm}là một tập hợp hữu hạn các ánh xạ từ R vào
D, trong đó D = dom(A
1
) ∪ dom(A
2
) ∪ …..∪ dom(An). Trong định nghĩa
này, với mỗi ánh xạ t trong r, t[Ai] phải ở trong dom(Ai) với 1<= i <= n. Mỗi
ánh xạ ti được gọi là một bộ.
Theo định nghĩ này, một bộ có thể xem như một tập hợp các cặp
(<thuộc tính>, <giá trị>), trong đó mỗi cặp cho một giá trị của ánh xạ từ một
thuộc tính Ai đến một giá trị vi của dom(Ai). Vì tên thuộc tính xuất hiện cùng
với giá trị của nó nên thứ tự của các thuộc tính là không quan trọng. Điều này
làm nên ý nghĩa ở mực trừu tượng hoặc logic vì chẳng có lý do gì để thích có
một giá trị thuộc tính xuất hiện trước một giá trị thuộc tính khác trong một bộ.
Khi một quan hệ được cài đặt như một tệp, các thuộc tính được sắp xếp
một cách vật lý như là các trường trong một bản ghi. Trong trường hợp đó
chúng ta sẽ sử dụng định nghĩa thứ nhất của quan hệ, trong đó các giá trị của
các thuộc tính trong một bộ là có thứ tự vì nó làm đơn giản rất nhiều khái
niệm. Tuy nhiên, định nghĩa thứ hai là tổng quát hơn.
Các giá trị trong một bộ: Mỗi giá trị trong một bộ là một giá trị nguyên
tử ; điều đó có nghĩa là nó không phân chia được thành các thành phần trong
phạm vi của mô hình quan hệ. Như vậy, trong mô hình quan hệ không cho
phép có các thuộc tính phức hợp và các thuộc tính đa trị. Các thuộc tính đa trị
phải được biểu diễn bằng các quan hệ còn các thuộc tính phức hợp chỉ được
biểu diễn bằng các thuộc tính thành phần đơn của nó.
Các giá trị của một vài thuộc tính trong một bộ cụ thể có thể không
biết được hoặc không thích ứng cho nó. Trường hợp đó, người ta sử dụng một
giá trị đặc biệt gọi là giá trị null. Ví dụ, giả sử quan hệ SINHVIÊN có thuộc
tính Số điện thoaị ở nhà. Trong một tập thể sinh viên, có người có điện thoại ở
nhà, có người không có và cũng có người có nhưng không biết chắc. Với
những trường hợp không có hoặc không biết chắc, thuộc tính
Sốđiệnthoaịởnhà có giá trị null.
Thể hiện của một quan hệ: Một lược đồ quan hệ có thể được thể hiện
như là một tuyên bố hoặc một khẳng định. Ví dụ lược đồ quan hệ SINHVIÊN
ở trên khẳng định rằng, nói chung, một thực thể sinh viên có một mã số, họ
tên, ngày sinh, giới tính, địa chỉ. Mỗi bộ trong quan hệ được thể hiện như là
một sự kiện hoặc như một thể hiện cụ thể của một khẳng định. Ngoài các
quan hệ biểu diễn các sự kiện về các thực thể, một số quan hệ có thể biểu diễn
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 36
các sự kiện về mối liên kết. Ví dụ, lược đồ quan hệ
NHÂNVIÊN_Dựán(MãsốNV, MãsốDA, Sốgiờ) khẳng định các nhân viên
làm việc với các dự án. Mỗi bộ trong quan hệ này liên kết một sinh viên với
một dự án mà anh ta làm việc cho nó.
Như vậy, mô hình quan hệ biểu diễn các sự kiện về thực thể và các sự
kiện về liên kết dưới dạng duy nhất là các quan hệ.
II. CÁC RÀNG BUỘC QUAN HỆ, LƯỢC ĐỒ CSDL QUAN HỆ
Trong phần này chúng ta thảo luận về các hạn chế trên các dữ liệu
trong một lược đồ cơ sở dữ liệu quan hệ. Các hạn chế đó được gọi là các ràng
buộc. Có các loại ràng buộc : ràng buộc miền, ràng buộc khoá, ràng buộc toàn
vẹn thực thể và ràng buộc toàn vẹn quy chiếu.
1. Các ràng buộc miền
Các ràng buộc miền chỉ ra rằng giá trị của mỗi thuộc tính A phải là một
giá trị nguyên tử thuộc miền giá trị dom(A). Các kiểu dữ liệu liên kết với các
miền bao gồm: các kiểu dữ liệu số chuẩn cho các số nguyên (short integer,
integer, long integer), các số thực (float, double precision float). Ngoài ra còn
các kiểu dữ liệu ký tự (dãy ký tự với độ dài cố định, dãy ký tự với độ dài thay
đổi), ngày, thời gian và tiền tệ. Các loại miền khác có thể là các miền con của
một kiểu dữ liệu hoặc một kiểu dữ liệu đếm được trong đó mọi giá trị có thể
được liệt kê rõ ràng
2. Ràng buộc khoá và ràng buộc trên các giá trị rỗng (null)
Một quan hệ được định nghĩa như một tập hợp các bộ. Theo định nghĩa,
các phần tử của một tập hợp là khác nhau, vì vậy, mọi bộ trong quan hệ phải
khác nhau. Điều đó có nghĩa là không có hai bộ có cùng một tổ hợp giá trị cho
tất cả các thuộc tính của chúng. Thông thường, có tồn tại các tập con của các
thuộc tính của một lược đồ quan hệ có tính chất là không có hai bộ nào ở
trong mọi trạng thái quan hệ r của R có cùng một tổ hợp giá trị cho các thuộc
tính của nó. Giả sử chúng ta ký hiệu một tập con như vậy là SK; khi đó với
hai bộ khác nhau bất kỳ t
1
và t
2
trong một trạng thái quan hệ r của R chúng ta
có ràng buộc là t
1
[SK] ≠ t
2
[SK].
Tập hợp thuộc tính SK như vậy được gọi là một siêu khoá của lược đồ
quan hệ R. Một siêu khoá SK xác định rõ một ràng buộc về tính duy nhất,
phát biểu rằng không có hai bộ khác nhau trong một trạng thái r của R có
cùng một giá trị cho SK. Mỗi quan hệ có it nhất là một siêu khoá mặc định, đó
là tập hợp tất cả các thuộc tính của nó. Một khoá K của một lược đồ quan hệ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 37
R là một siêu khoá của R với tính chất là nếu bỏ đi bất kỳ thuộc tính A nào ra
khỏi K thì sẽ còn lại một tập K’ không phải là siêu khoá của R. Như vậy, một
khoá là một siêu khoá tối thiểu, nghĩa là đó là một siêu khoá mà ta không thể
vứt bỏ thuộc tính nào ra khỏi nó mà vẫn giữ được ràng buộc về tính duy nhất.
Ví dụ, xét quan hệ SINHVIÊN với các thuộc tính Mãsố, Họtên,
Ngàysinh, Giớitính, Địachỉ. Tập thuộc tính {Mãsố} là một khoá của
SINHVIÊN bởi vì không có hai bộ sinh viên có cùng một giá trị cho Mãsố.
Mọi tập hợp thuộc tính có chứa Mãsố, ví dụ { Mãsố, Họtên, Ngàysinh}, đều
là một siêu khoá. Tuy nhiên, siêu khoá { Mãsố, Họtên, Ngàysinh} không phải
là khoá bởi vì nếu bỏ đi thuộc tính Họtên hoặc Ngàysinh hoặc cả hai thì nó
vẫn còn là một siêu khoá.
Giá trị của một thuộc tính khoá có thể được sử dụng để xác định một
cách duy nhất mỗi bộ trong một quan hệ. Ví dụ, giá trị SV305 của Mãsố xác
định một cách duy nhất bộ giá trị tương ứng với sinh viên Lê Nam trong quan
hệ sinhviên. Chú ý rằng một tập hợp thuộc tính tạo nên một khoá là một tính
chất của lược đồ quan hệ. Điều ràng buộc là tính chất đó phải thoả mãn trên
mọi trạng thái của lược đồ. Một khoá được xác định từ ý nghĩa của các thuộc
tính và tính chất là bất biến ; tính chất đó phải thỏa mãn khi chúng ta chèn
thêm các bộ mới vào quan hệ. Ví dụ, ta không thể và không được chỉ định
thuôc tính Họtên của quan hệ SINHVIÊN là khoá bởi vì không có gì đảm bảo
rằng không tồn tại hai sinh viên có cùng họ tên.
Nói chung, một lược đồ quan hệ có thể có nhiều hơn một khoá. Trong
trường hợp đó, mỗi một khoá được gọi là một khoá dự tuyển. Thông thường
ta phải chỉ định một trong các khoá dự tuyển làm khoá chính của quan hệ.
Khoá chính là một khoá dự tuyển mà các giá trị của chúng được dùng để xác
định các bộ trong quan hệ. Ta quy ước rằng, các thuộc tính tạo nên khoá
chính của một lược đồ quan hệ được gạch dưới. Ví dụ:
Sinhviên(Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ).
Chú ý rằng khi một lược đồ quan hệ có nhiều khoá dự tuyển, việc lựa
chọn một khoá dự tuyển để làm khoá chính là tuỳ ý; tuy nhiên tốt nhất là chọn
khoá chính gồm một thuộc tính hoặc có số các thuộc tính it nhất.
Một ràng buộc khác trên các thuộc tính chỉ rõ khi nào thì cho phép các
giá trị null. Những thuộc tính luôn luôn phải có một giá trị xác định và hợp lệ
thì bị ràng buộc là not null.
3. Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ
Ở trên, chúng ta đã nói đến các lược đồ quan hệ đơn lẻ và các quan hệ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 38
đơn lẻ. Một cơ sở dữ liệu quan hệ thường gồm nhiều quan hệ với các bộ giá
trị trong các quan hệ được liên kết với nhau theo nhiều cách. Trong phần này
chúng ta sẽ định nghĩa một cơ sở dữ liệu quan hệ và một lược đồ cơ sở dữ liệu
uan hệ. Một lược đồ cơ sở dữ liệu quan hệ S là một tập hợp các lược đồ quan
hệ S = {R
1
, R
2
, …., Rn} và một tập các ràng buộc toàn vẹn. Một trạng thái
cơ sở dữ liệu quan hệ (hoặc một cơ sở dữ liệu quan hệ) DB của S là một tập
hợp các trạng thái quan hệ DB = {r
1
, r
2
, …., rn} sao cho mỗi ri là một trạng
thái của Ri

và sao cho các trạng thái quan hệ ri thoả mãn các ràng buộc toàn
vẹn chỉ ra trong tập các ràng buộc toàn vẹn.
Ví dụ, Hình vẽ 3.2 trình bày một lược đồ cơ sở dữ liệu CÔNGTY và
hình vẽ 3.3 Trình bày một cơ sở dữ liệu công ty

NHÂNVIÊN(Họđệm, Tên, Mã số NV, Ngày sinh, Địa chỉ, Giới tính, Lương, Mã số NGS, Mã số ĐV)
ĐƠNVỊ(Tên ĐV, Mã số ĐV, Mã số NQL, Ngày bắt đầu)
ĐƠNVỊ_ĐỊAĐIỂM(Mã số ĐV, Địa điểm ĐV)
DỰÁN(Tên DA, Mã số DA, Địa điểm DA, Mã số ĐV)
NHÂNVIÊN_DỰ ÁN(Mã số NV, Mã số DA, Số giờ)
PHỤTHUỘC(Mã số NV, Tên PT, Giới tính, Ngày sinh, Quan hệ)
Hình 3.2 : Lược đồ cơ sở dữ liệu công ty.
N
H
Â
N
V
I
Ê
N

M
ã
s

N
V

H

đ

m

T
ê
n

N
g
à
y
s
i
n
h

Đ

a
c
h


G
i

i
t
í
n
h

L
ư
ơ
n
g

M
ã
s

N
G
S

M
ã
s

Đ
V

NV001 Lê Vân 12/02/79 Hà Nội Nam 3000 NV002 5
NV002 Trần Đức Nam 14/02/66 Hà Nội Nam 4000 NV061 5
NV010 Hoàng Thanh 05/08/79 Nghệ An Nữ 2500 NV014 4
NV014 Phạm Bằng 26/06/52 Bắc Ninh Nam 4300 NV061 4
NV016 Nguyễn Sơn 14/08/73 Hà Nam Nam 3800 NV002 5
NV018 Vũ Hương Giang 26/03/83 Phú Thọ Nữ 2500 NV002 5
NV025 Trần Lê Hoa 15/05/80 Phú Thọ Nữ 2500 NV014 4
NV061 Hoàng Giáp 02/05/47 Hà Nội Nam 5500 Null 1

ĐƠNVỊ Mã số ĐV Tên ĐV Mã số NQL Ngày bắt đầu
5 Nghiên cứu NV002 15/09/2000
4 Hành Chính NV014 24/06/1997
1 Lãnh đạo NV061 25/01/1992

ĐƠNVỊ_ĐỊAĐIỂM Mã số ĐV Địa điểm ĐV
1 Hà Nội
4 Hà Nội
5 Nam Định
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 39
5 Hà Nội
5 Bắc Ninh

DỰÁN Tên DA Mã số DA Địa điểm DA Mã số ĐV
DA01 1 Hà Nội 5
DA02 2 Nam Định 5
DA03 3 Bắc Ninh 5
DA04 10 Hà Nội 4
DA05 20 Hà Nội 1
DA06 30 Hà Nội 4

NHÂNVIÊN_DỰ ÁN Mã số NV Mã số DA Số giờ
NV001
NV001
NV016
NV018
NV018
NV002
NV002
NV002
NV002
NV010
NV010
NV025
NV025
NV014
NV014
NV061

PHỤTHUỘC Mã số NV Tên PT Giới tính Ngày sinh Quan hệ
NV002 Giang Nữ 04/05/1997 Con
NV002 Bình Nam 25/10/1994 Con
NV002 Hoa Nữ 03/05/1969 Vợ
NV014 Lan Nữ 28/02/1953 Vợ
NV001 Bình Nam 04/01/1999 Con
NV001 Hòa Nữ 04/01/1999 Con
NV001 Hương Nữ 05/05/1981 Vợ
Hình 3.3 : Cơ sở dữ liệu công ty
Trong một lược đồ cơ sở dữ liệu quan hệ, các thuộc tính biểu diễn cùng
một khái niệm thế giới thực có thể (hoặc không) có cùng tên như nhau trong
các quan hệ khác nhau. Ngược lại, các thuộc tính biểu diễn các khái niệm
khác nhau có thể có tên như nhau trong các quan hệ khác nhau.
Trong một số phiên bản trược của mô hình quan hệ, người ta yêu cầu
rằng các thuộc tính biểu diễn cùng một khái niệm của thế giới thực thì phải có
tên như nhau trong mọi quan hệ. Điều đó sẽ gây ra khó khăn khi cùng một
khái niệm thế giới thực được sử dụng trong các vai trò khác nhau.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 40
Một hệ quản trị cơ sở dữ liệu phải có ngôn ngữ định nghĩa dữ liệu
(Data definition language DDL) để định nghĩa lược đồ cơ sở dữ liêu quan hệ.
Các hệ quản trị cơ sở dữ liệu hiện nay hầu như sử dụng SQL cho mục đích
này.
Các ràng buộc toàn vẹn được chỉ ra trên một lược đồ cơ sở dữ liệu và
được tôn trọng làm thoả mãn trên mỗi trạng thái cơ sở dữ liệu của lược đồ
này. Ngoài các ràng buộc miền và ràng buộc khoá còn có thêm các ràng buộc
được xem như một phần của mô hình quan hệ: ràng buộc toàn vẹn thực thể và
ràng buộc toàn vẹn quy chiếu.
4. Toàn vẹn thực thể, toàn vẹn quy chiếu và khoá ngoài
Ràng buộc toàn vẹn thực thể được phát biểu là : khoá chính phải luôn
luôn có giá trị xác định, nghĩa là không được phép có giá trị null. Sở dĩ có
điều đó là do giá trị của khoá chính được sử dụng để xác định các bộ giá trị
riêng biệt trong một quan hệ. Việc có giá trị null cho khoá chính kéo theo việc
chúng ta không thể xác định được một số bộ giá trị. Ví dụ, nếu có hai hay
nhiều hơn các bộ giá trị có giá trị null cho khoá chính thì chúng ta không có
khả năng phân biệt chúng.
Các ràng buộc khoá và ràng buộc toàn vẹn thực thể được chỉ ra trên các
quan hệ riêng biệt. Ràng buộc toàn vẹn quy chiếu được chỉ ra giữa hai quan
hệ để duy trì sự tương ứng giữa các bộ của hai quan hệ. Một cách không hình
thức, ràng buộc toàn vẹn quy chiếu được phát biểu là: một bộ giá trị trong một
quan hệ có liên kết đến một quan hệ khác phải liên kết đến một bộ giá trị tồn
tại trong quan hệ đó.
Để định nghĩa toàn vẹn quy chiếu một cách hình thức hơn, trước tiên
chúng ta đưa ra khái niệm khoá ngoài : Một tập hợp các thuộc tính FK trong
một lược đồ quan hệ R
1
là một khoá ngoài của R
1
quy chiếu đến quan hệ R
2

nếu nó thoả mãn hai quy tắc sau:
qt1. Các thuộc tính trong FK có cùng miền giá trị như các thuộc tính của
khoá chính PK của R
2
. Các thuộc tính FK được gọi là quy chiếu đến (hoặc là
liên hệ đến) quan hệ R
2
.
qt2. Một giá trị của FK trong một bộ t
1
của trạng thái hiện tại r
1
(R
1
)
hoặc có mặy như một giá trị của khoá chính của một bộ t
2
nào đấy trong trạng
thái hiện tại r
2
(R
2
), hoặc là null. Trong trường hợp này ta có t
1
[FK] = t
2
[PK]
và ta nói rằng bộ t
1
liên hệ (quy chiêú) đến bộ t
2
. R
1
được gọi là quan hệ quy
chiếu và R
2
được gọi là quan hệ bị quy chiếu.
Trong một cơ sở dữ liệu có nhiều quan hệ thường có nhiều ràng buộc
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 41
toàn vẹn quy chiếu. Để chỉ ra các ràng buộc này, trước tiên ta phải có một
hiểu biết rõ ràng về ý nghĩa hoặc vai trò của mỗi tập thuộc tính ở trong các
lược đồ quan hệ khác nhau của cơ sở dữ liệu. Các ràng buộc toàn vẹn quy
chiếu thường nảy sinh từ các mối liên kết giữa các thực thể được biểu diễn
bằng các lược đồ quan hệ.
Chú ý rằng một khoá ngoài có thể quy chiếu đến quan hệ của chính nó.
Trong trường hợp đó, khoá ngoài biểu thị một liên kết đệ quy.
Chúng ta có thể biểu diễn các ràng buộc quy chiếu bằng sơ đồ. Để làm
điều đó ta vẽ một cạnh có hướng từ mỗi khoá ngoài đến quan hệ mà nó quy
chiếu. Hình vẽ 3.4 biểu diễn lược đồ ở hình 3.2 với các ràng buộc quy chiếu
được biểu diễn theo cách này.
NHÄNVÌÊN(Hä®Öm, Tªn, M·sèNV, NgµySinh, §ÞachØ, GiíitÝnh, L­¬ng, M·sèNGS, M·sè§V)
ÐONVÌ(Tªn§V, M·sè§V, M·sèNQL, Ngµyb¾t®Çu)
ÐONVÌ_ÐÌAÐÌÊM(M·sè§V, §Þa®iÓm§V)
DUÁN(TªnDA, M·sèDA, §Þa®iÓmDA, M·sè§V)
PHUTHUÔC(M·sèNV, TªnPT, GiíitÝnh, NgµySinh, QuanhÖ)
NHÄNVÌÊN_DUÁN(M·sèNV, M·sèDA, Sègiê)

Hình 3.4 Lược đồ và sơ đồ tham chiếu

Ngoài các ràng buộc toàn vẹn ở trên, cơ sở dữ liệu còn phải thoả mãn
một số ràng buộc khác, như ràng buộc trạng thái, ràng buộc chuyển tiếp,….
Các ràng buộc trạng thái xác định các ràng buộc mà một trạng thái vững chắc
của cơ sở dữ liệu phải thoả mãn. Ví dụ về các ràng buộc đó là:”lương của một
nhân viên không được vượt quá lương của người giám sát nhân viên đó “hoặc
“số giờ nhiều nhất mà một nhân viên có thể làm việc trong một tuần trên tất
cả các dự án là 56”. Các ràng buộc như vậy có thể được đặc tả và bắt tuân
theo bằng cách sử dụng một ngôn ngữ đặc tả ràng buộc. Người ta có thể sử
dụng các cơ cấu như là trigger hoặc assertion. Các ràng buộc chuyển tiếp có
thể được định nghĩa để làm việc với những thay đổi trạng thái trong cơ sở dữ
liệu. Ví dụ về ràng buộc này là : “lương của một nhân viên chỉ có thể tăng “.
Các ràng buộc như vậy thường được định nghĩa bằng cách sử dụng các quy
tắc hoặc bằng các trigger.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 42
III. CÁC PHÉP TOÁN CỦA MÔ HÌNH QUAN HỆ
Trong phần này chúng ta thảo luận về các phép toán của mô hình quan
hệ. Các phép toán của mô hình quan hệ có thể phân thành hai loại : các phép
toán cập nhật và các phép toán đại số quan hệ. Các phép toán cập nhật được
sử dụng để tạo ra một quan hệ đúng đắn; các phép toán đại số quan hệ được
sử dụng để đặc tả các phép lấy thông tin ra.
1. Các phép toán cập nhật
Các phép toán cập nhật gồm ba phép toán cơ bản là chèn, xoá và sửa
đổi. Phép chèn được dùng để chèn một bộ giá trị hoặc nhiều bộ giá trị vào
một quan hệ. Phép xoá dùng để loại bỏ các bộ giá trị và phép sửa đổi dùng để
sửa đổi các giá trị của một số thuộc tính trong các bộ giá trị đã có. Mỗi khi
các phép toán cập nhật được áp dụng, các ràng buộc trên lược đồ cơ sở dữ
liệu có thể bị vi phạm. Trong phần này chúng ta sẽ nói đến khả năng vi phạm
các ràng buộc của từng phép toán và các kiểu hành động có thể thực hiện khi
một ràng buộc bị vi phạm.
a. Phép chèn (Insert)
Phép chèn cung cấp một danh sách các giá trị cho một bộ mới t được
chèn vào trong một quan hệ R. Phép chèn có thể vi phạm các kiểu ràng buộc
được mô tả ở trên. Các ràng buộc miền có thể bị vi phạm nếu một giá trị
thuộc tính được cho không thuộc vào miền tương ứng. Các ràng buộc khoá có
thể bị vi phạm nếu một giá trị khoá trong bộ mới t đã tồn tại trong một bộ
khác ở trong quan hệ r(R). Sự toàn vẹn thực thể có thể bị vi phạm nếu khoá
chính của bộ mới t là null. Sự toàn vẹn quy chiếu có thể bị vi phạm nếu một
giá trị của một khoá ngoài trong t quy chiếu đến một bộ không tồn tại trong
một quan hệ được quy chiếu.
Nếu một phép chèn vi phạm một hoặc nhiều ràng buộc, tuỳ chọn mặc
định là loại bỏ phép chèn. Trong trường hợp này, thường là các hệ quản trị cơ
sở dữ liệu có thể thông báo cho người sử dụng nguyên nhân của việc loại bỏ
phép chèn.
b. Phép xoá (Delete)
Phép xoá được sử dụng để xoá một hoặc nhiều bộ giá trị của một quan
hệ. Phép xoá chỉ có thể vi phạm ràng buộc quy chiếu trong trường hợp bộ bị
xoá được quy chiếu bởi một khoá ngoài từ các bộ khác trong cơ sở dữ liệu.
Ba tuỳ chọn được sẵn sàng được sử dụng nếu một phép xoá gây ra sự vi
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 43
phạm. Tuỳ chọn thứ nhất là loại bỏ phép xoá. Tuỳ chọn thứ hai là cố gắng lan
truyền phép xoá (cascade the deletion) bằng cách xoá đòng thời các bộ quy
chiếu đến bộ bị xoá. Tuỳ chọn thứ ba là sửa đổi các giá trị của các thuộc tính
quy chiếu gây ra sự vi phạm; mỗi giá trị như vậy hoặc là làm cho bằng null
hoặc được thay đổi thành bộ có hiệu lực quy chiếu khác. Chú ya rằng, nếu
một thuộc tính quy chiếu gây ra sự vi phạm là một phần của khoá chính thì
không thể làm cho thành null, bởi vì nếu làm vậy thì sẽ vi phạm ràng buộc
toàn vẹn thực thể.Có thể kết hợp cả ba tuỳ chọn ở trên.
c. Phép sửa đổi (Update)
Phép toán sửa đổi được dùng để thay đổi các giá trị của một hoặc nhiều
thuộc tính trong một (hoặc nhiều) bộ của một quan hệ R nào đấy. Để lựa chọn
các bộ cần được thay đổi, người sử dụng phải chỉ ra một điều kiện trên các
thuộc tính.
Việc sửa đổi một thuộc tính không phải là một khoá chính hợac một
khoá ngoài thường không gây ra các vi phạm ràng buộc; hệ quản trị cơ sở dữ
liệu chỉ cần kiểm tra để khẳng định rằng giá trị mới là thuộc miền và kiểu giá
trị đúng đắn. Việc sửa đổi giá trị một khoá chính tương tự như việc xoá một
bộ và chèn bộ khác vào chỗ của nó. Như vậy chúng ta trở về trường hợp đã
thảo luận với phép chèn và phép xoá. Nếu một thuộc tính khoá ngoài bị sửa
đổi thì hệ quản trị cơ sở dữ liệu phải đảm bảo rằng giá trị mới quy chiếu đến
một bộ có tồn tại trong quan hệ được quy chiếu (hoặc là null).
2. Các phép toán đại số quan hệ
Ngoài việc định nghĩa cấu trúc cơ sở dữ liệu và các ràng buộc, một mô
hình dữ liệu phải chứa một tập hợp phép toán để thao tác dữ liệu. Tập hợp cơ
sở các phép toán mô hình quan hệ tạo nên đại số quan hệ. Các phép toán này
giúp cho người sử dụng xác định rõ các yêu cầu lấy tin cơ bản. Kết quả của
một phép lấy tin là là một quan hệ mới, có thể được tạo ra từ một hoặc nhiều
quan hệ.. Các quan hệ đó có thể được thao tác tiếp theo bằng cách sử dụng
các phép toán của cùng đại số. Một dãy các phép toán quan hệ tạo nên một
biểu thức đại số quan hệ mà kết quả của nó cũng là một quan hệ.
Các phép toán đại số quan hệ được chia thành hai nhóm. Một nhóm bao
gồm các phép toán tập hợp lấy từ lý thuyết tập hợp toán học. Các phép toán
đó là phép hợp, phép giao, phép trừ tập hợp và phép tích Đề các. Nhóm kia
bao gồm các phép toán được xây dựng đặc biệt cho các cơ sở dữ liệu quan hệ.
Các phép toán đó là phép chọn, phép chiếu, phép nối và một số các phép toán
khác.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 44
a. Phép chọn (SELECT)
Phép chọn được sử dụng để chọn một tập hợp các bộ thoả mãn điều kiện
chọn từ một quan hệ. Ta có thể xem phép chọn như một bộ lọc, nó chỉ giữ lại
các bộ thoả mãn điều kiện đặt ra.
Phép chọn được ký hiệu là
σ
< điều kiện chọn>
(R)
trong đó ký hiệu σ được dùng để ký hiêu phép chọn, còn điều kiện chon
là một biểu thức lô gic được chỉ ra trên các thuộc tính của R. Ví dụ, để chọn
các bộ NHÂNVIÊN thuộc về đơn vị có mã số là 4 hoặc các bộ NHÂNVIÊN
có lương lớn hơn 800000đ ta có thể viết như sau:
σ
< Mãsố = 4>
(NHÂNVIÊN)
hoặc σ
< Lương > 800000>
(NHÂNVIÊN)
Chú ý rằng R nói chung là một biểu thức đại số quan hệ mà kết quả của
nó là một quan hệ; biểu thức đơn giản nhất chính là tên của một quan hệ của
một cơ sở dữ liệu. Quan hệ kết quả của phép chọn có cùng thuộc tính như R.
Biểu thức lo gic chỉ ra trong <điều kiện chọn> được tạo nên từ một số hạng
mục có dạng :
< tên thuộc tính> < phép so sánh> < giá trị hằng>
hoặc < tên thuộc tính> < phép so sánh> < tên thuộc tính>
trong đó <tên thuộc tính> là tên của một thuộc tính trong R, <phép so
sánh> là một trong các phép toán so sánh { <, ≤, =, ≥, >, ≠} còn < giá trị
hằng> là một giá trị hằng từ miền giá trị của thuộc tính. Các hạng mục có thể
được nối với nhau bằng các phép toán lô gic AND, OR, NOT để tạo ra một
điều kiện chọn chung. Ví dụ, để chọn ra các bộ giá trị NHÂNVIÊN làm việc
ở đơn vị có mã số là 4 và có lương lớn hơn 800000đ hoặc các bộ giá trị
NHÂNVIÊN làm việc ở đơn vị có mã số là 5 và có lương lớn hơn 500000đ ta
có thể viết phép chọn như sau:
σ
< Mãsố = 4>AND <lương>800000>OR< Mãsố = 5>AND <lương>500000>
(NHÂNVIÊN)
MãsốNV Họđệm Tên Ngàysinh Địachỉ Giớitính Lương MãsốNGS MãsốĐV
NV002 Trần Đức Nam 14/02/66 Hà Nội Nam 4000 NV061 5
NV014 Phạm Bằng 26/06/52 Bắc Ninh Nam 4300 NV061 4
NV016 Nguyễn Sơn 14/08/73 Hà Nam Nam 3800 NV002 5
Hình 3.5 Kết quả phép chọn
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 45
Chú ý rằng các phép toán so sánh trong tập hợp { <, ≤, =, ≥, >, ≠}áp
dụng cho các thuộc tính có miền giá trị là các giá trị có thứ tự như là miền giá
trị số. Miền giá trị các dãy ký tự được xem như có thứ tự dựa trên việc so sánh
các dãy ký tự. Nếu miền giá trị của một thuộc tính là một tập hợp các giá trị
không có thứ tự thì chỉ có các phép so sánh trong tập hợp { =, ≠ } là có thể áp
dụng được. Ngoài ra, có thể còn các phép so sánh bổ sung, chẳng hạn như “là
một dãy con của “hoặc “trong khoảng từ…. đến ….. “.
Kết quả một phép chọn được xác định như sau: < Điều kiện chọn> được
áp dụng cho mỗi bộ t trong R một cách độc lập. Điều đó được thực hiện bằng
cách thay thế mỗi xuất hiện của một thuộc tính Ai trong điều kiện chon bằng
giá trị t[Ai]của nó trong bộ. Nếu điều kiện chọn cho giá trị đúng thì bộ t sẽ
được chọn. Tất cả các bộ được chọn xuất hiện trong kết quả của phép toán
chọn. Các phếp toán logic AND, OR, NOT được thực hiện theo quy tắc bình
thường của chúng.
Phép chọn là phép toán một ngôi, nghĩa là nó được áp dụng cho một
quan hệ. Hơn nữa, phép chọn được áp dụng cho từng bộ một cách độc lập, vì
vậy, các các điều kiện chon không thể liên quan đến nhiều bộ. Quan hệ kết
quả của phép chọ có cấp giống như cấp của R. Số các bộ trong quan hệ kết
quả luôn luôn nhỏ hơn hoặc bằng số các bộ trong R.
Phép chọn là một phép toán có tính chất giao hoán, nghĩa là
σ
< Điều kiện 1>

< Điều kiện 2>
(R)) = σ
< Điều kiện 2>

< Điều kiện 1>
(R))
Hơn nữa ta có thể kết hợp một loạt các phép chọn thành một phép chọn
đơn giản bằng cách sử dụng phép toán AND, Ví dụ:
σ
< Điều kiện 1>

< Điều kiện 2>
(R)) = σ
< Điều kiện 2>AND< Điều kiện 1>
(R)
b. Phép chiếu (PROJECT)
Nếu ta coi một quan hệ như một bảng thì phép chọn chọn một số hàng
của bảng thoả mãn điều kiện chọn và bỏ qua các hàng không thoả mãn điều
kiện chọn. Phép chiếu là phếp toán chọn một số cột của bàng. Nếu chúng ta
chỉ quan tâm đến một số thuộc tính của quan hệ, chúng ta dùng phép chiếu để
chiếu lân các thuộc tính đó. Phép chiếu được ký hiệu là:
π
<danh sách các thuộc tính>
(R)
trong đó π là ký hiệu dùng để biểu diễn phép chiếu và <danh sách các
thuộc tính> là một danh sách con các thuộc tính của quan hệ R. Nói chung R
là một biểu thức đại số quan hệ mà kết quả của nó là một quan hệ ; trường
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 46
hợp đơn giản nhất nó là tên của một quan hệ của cơ sở dữ liệu. Kết quả của
phép chiếu là một quan hệ chỉ có các thuộc tính nằm trong <danh sách các
thuộc tính> và có cùng thứ tự như thứ tự của chúng có trong danh sách. Như
vậy, cấp của quan hệ kết quả là số các thuộc tính có trong <danh sách các
thuộc tính>.
Nếu <danh sách các thuộc tính> chỉ bao gồm các thuộc tính không phải
thuộc tính khoá của R thì quan hệ kết quả có thể có những bộ trùng nhau.Phép
chiếu loại bỏ mọi bộ trùng lặp, và như vậy, kết quả của phép chiếu là một tập
hợp các bộ và là một quan hệ đúng đắn.
Ví dụ, phép chiếu π
< Mãsố, Họtên, Lương>
(NHÂNVIÊN) cho kết quả là một
uan hệ có các thuộc tính Mãsố, Họtên, Lương (xem hình vẽ 3.6)

MãsốNV Họđệm Tên Địachỉ Lương
NV001 Lê Vân Hà Nội 3000
NV002 Trần Đức Nam Hà Nội 4000
NV010 Hoàng Thanh Nghệ An 2500
NV014 Phạm Bằng Bắc Ninh 4300
NV016 Nguyễn Sơn Hà Nam 3800
NV018 Vũ Hương Giang Phú Thọ 2500
NV025 Trần Lê Hoa Phú Thọ 2500
NV061 Hoàng Giáp Hà Nội 5500
Hình 3.6 Kết quả của phép chiếu

Số các bộ trong quan hệ kết quả từ một phép chiếu luôn luôn nhỏ hơn
hoặc bằng số các bộ trong R. Nếu danh sách chiếu là một siêu khoá của R –
nghĩa là nó chứa một khoá nào đó của R – thì quan hệ kết quả có cùng một số
bộ như R. Ngoài ra, nếu < danh sách 2> chứa tất cả các thuộc tính coa trong
<danh sách 1> thì
π
< danh sách1>

< danh sách2>
(R)) = π
< danh sách 1>
(R)
Phép chiếu không có tính giao hoán.
c. Phép đặt lại tên (RENAME)
Chúng ta có thể áp dụng nhiều phép toán quan hệ liên tiếp nhau. Trong
trường hợp đó hoặc chúng ta có thể viết các phép toán như là một biểu thức
đại số quan hệ đơn bằng cách xếp lồng các phép toán lại với nhau, hoặc chúng
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 47
ta có thể áp dụng mỗi phép toán tại một thời điểm và tạo ra các quan hệ kết
quả trung gian. Trong trường hợp tạo các quan hệ trung gian, ta phải đặt tên
cho quan hệ đó. Ví dụ: Để đưa ra Họtên và Lương của các NHÂNVIÊN làm
việc ở đơn vị có Mãsố là 4 chúng ta phải áp dụng một phép chọn và một phép
chiếu. Chúng ta có thể viết một biểu thức đại số quan hệ đơn như sau :
π
< Họtên, Lương >

<Mãsố = 4>
(NHÂNVIÊN))
Một cách khác, chúng ta có thể tạo ra kết quả trung gian và viết biểu
thức trên thành dãy các phép toán như sau:
KQTG ← σ
<Mãsố = 4>
(NHÂNVIÊN)
Ketqua ← π
< Họtên, Lương >
(FQTG)
Thông thường việc phân tích một dãy phức tạp các phép toán bằng cách
chỉ ra các quan hệ kết quả trung gian là dễ hơn việc viết một biểu thức đại số
quan hệ đơn. Chúng ta có thể dùng kỹ thuật này để đặt lại tên (rename) cho
các thuộc tính trong các quan hệ trung gian và kết quả. Để đặt lại tên cho các
thuộc tính của một quan hệ, chúng ta liệt kê các tên mới của các thuộc tính
trong cặp dấu ngoặc. Ví dụ:
R(Họ_và_tên, Lương) ← π
< Họtên, Lương >
(FQTG)
Cho kết quả là quan hệ R, trong đó thuộc tính Họtên được đặt lại tên
thành Ho_và_tên.
Nếu không có việc đặt lại tên thì tên của các thuộc tính trong quan hệ
kết quả của một phép chọn là giống như các tên trong quan hệ ban đầu và có
cùng một thứ tự như thứ tự của các thuộc tính đó. Đối với phép chiếu, nếu
không có việc đặt lại tên thì quan hệ kết quả có các tên thuộc tính giống như
các tên trong danh sách chiếu và có cùng thứ tự như chúng xuất hiện trong
danh sách.
Chúng ta có thể định nghĩa một phép toán đặt lại tên, nó có thể đặt lại
tên cho một tên quan hệ hoặc các tên thuộc tính hoặc cả hai. Phép đặt lại tên
được ký hiệu là
ρ
S(B1,B2,….Bn)
(R) hoặc ρ
S
(R) hoặc ρ
(B1,B2,….Bn)
(R)
trong đó ký hiệu ρ được dùng để ký hiệu phép toán đặt lại tên, S là tên
quan hệ mới, B
1
,B
2
,….Bn là các tên thuộc tính mới. Biểu thức thứ nhất đặt lại
tên quan hệ và các thuộc tính của nó; biểu thức thứ hai chỉ đặt lại tên quan hệ
và biểu thức thứ ba chỉ đặt lại tên các thuộc tính. Nếu các thuộc tính của R là
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 48
A
1
,A
2
, …..An thì sau khi đặt lại tên chúng có tên là B
1
, B
2
, …..Bn.
d. Các phép toán lý thuyết tập hợp
Nhóm tiếp theo của các phép toán đại số quan hệ là các phép toán toán
học thông thường trên các tập hợp. Đó là các phép toán hợp, giao và trừ tập
hợp. Các phép toán này là các phép toán hai ngôi, nghĩa là mỗi phép toán
được áp dụng cho hai tập hợp. Khi áp dụng các phép toán này cho cơ sở dữ
liệu quan hệ, hai quan hệ tham gia vào một trong các phép toán trên phải có
kiểu của các bộ như nhau, hay nói cách khác, chúng phải có cùng một cấu
trúc. Điều kiện này được gọi là tương thích đồng nhất. Hai quan hệ R(A
1
,A
2
,
…, An) và S(B
1
, B
2
, ….,Bn) được gọi là tương thích đồng nhất nếu chúng có
cùng cấp n và dom(Ai) = dom(Bi) với 1<= i <= n. Điều đó có nghĩa là hai
quan hệ có cùng số các thuộc tính và mỗi cặp thuộc tính tương ứng có cùng
miền giá trị.
Các phép toán được định nghĩa như sau:
. Phép hợp : Hợp của hai quan hệ R và S, được ký hiệu là R ∪ S, cho kết
quả là một quan hệ chứa tất cả các bộ có trong R hoặc ở trong S hoặc ở trong
cả hai. Các bộ trùng lặp bị loại bỏ.
. Phép giao: Giao của hai quan hệ R và S, được ký hiệu là R ∩ S, cho kết
quả là một quan hệ chứa tất các các bộ có trong cả hai quan hệ R và S
. Phép trừ quan hệ: Phép trừ quan hệ R và S, được ký hiệu là R – S, cho
kết quả là một quan hệ chứa tất cả các bộ có trong R nhưng không có trong S.
Ví dụ, xét hai quan hệ
R Họtên Tuổi Giớitính S Họtên Tuổi Giới tính
AA 20 Nam BB 18 Nữ
BB 18 Nữ EE 20 Nam
CC 21 Nam DD 25 Nữ
DD 25 Nữ FF 21 Nam

R ∪
S
Họtên Tuổi Giới tính R ∩
S
Họtên Tuổi Giới
tính
AA 20 Nam BB 18 Nữ
BB 18 Nữ DD 25 Nữ
CC 21 Nam
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 49
DD 25 Nữ R – S Họtên Tuổi Giới
tính
EE 20 Nam AA 20 Nam
FF 21 Nam CC 21 Nam
Hình 3.7 Kết quả của các phép toán tập hợp

Chú ý rằng các phép toán hợp và giao là các phép toán giao hoán, nghĩa là:
R ∪ S = S ∪ R và R ∩ S = S ∩ R
Các phép toán trên cũng có tính chất kết hợp, nghĩa là
R ∪ (S ∪ T) = (R ∪ S) ∪ T và R ∩ (S ∩ T) = (R∩S) ∩T
Phép toán trừ tập hợp không có tính chất giao hoán.
Ngoài các phép toán trên, còn có một phép toán gọi là tích Đề các. Tích
Đề các còn gọi là tích hỗn hợp (cross product) hoặc là nối hỗn hợp (cross
join), được ký hiệu là ×. Đó cùng là một phép toán hai ngôi nhưng những
quan hệ mà nó áp dụng trên đó không phải là tương thích đồng nhất. Phép
toán này được sử dụng để nối các bộ của hai quan hệ vào một kiểu kết hợp.
Kết quả của R(A
1
, A
2
,.., An) × S(B
1
, B
2
, …,Bm) là một quan hệ Q với n+m
thuộc tính
Q(A
1
, A
2
, …, An, B
1
, B
2
, …,Bm). Quan hệ kết quả Q có các bộ được
tạo thành do sự kết hợp một bộ của R và một bộ của S. Ví dụ, xét hai quan hệ
R và S như sau:

R
A1 A2 A3 S B1 B2 B3
aa bb cc dd da db
ab ba ac cd cb ac
Khi đó kết quả của Tích Đề các sẽ là:
R× S
A1 A2 A3 B1 B2 B3
aa bb cc dd da db
aa bb cc cd cb ac
ab ba ac dd da db
ab ba ac cd cb ac
Hình 3.8 Tích Đề các của hai quan hệ R và S.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 50
Như vậy, nếu R có nR bộ và S có nS bộ thì R× S có nR

* nS

bộ. Phép
toán này nếu áp dụng một mình thì không có ý nghĩa mấy. Nó chỉ có lợi khi
tiếp theo bằng một phép chọn các giá trị tương thích của các thuộc tính xuất
phát từ các quan hệ thành phần. Tích Đề các kết hợp với một phép chọn cho
ta một phép nối.
e. Phép nối (JOIN)
Phép nối được ký hiệu là được dùng để kết hợp các bộ có liên hệ với
nhau từ hai quan hệ thành một bộ. Phép toán này rất quan trọng đối với cơ sở
dữ liệu quan hệ có nhiều bảng bởi vì nó cho phép ta xử lý các mối liên kết
giữa các quan hệ. Dạng tổng quát của phép nối trên hai quan hệ R(A
1
, A
2
, …,
An) và S (B
1
, B
2
, …, Bm) là
R S
< Điều kiện nối>
Kết quả của phép nối là một quan hệ Q(A
1
, A
2
, …, An, B
1
, B
2
, …Bm)
có n+m thuộc tính theo thứ tự đó. Mỗi bộ của Q là một sự kết nối giữa một bộ
của R và một bộ của S khi chúng thoả mãn điều kiện nối. Sự khác nhau giữa
tích Đề các và phép nối là ở chỗ trong phép nối, chỉ có các bộ thoả mãn điều
kiện nối mới xuất hiện trong kết quả, trong khi đó trong tích Đề các mọi tổ
hợp của các bộ đều có trong kết quả. Điều kiện nối được chỉ ra trên các thuộc
tính của hai quan hệ R và S và được tính toán cho mỗi tổ hợp các bộ. Mọi tổ
hợp bộ mà điều kiện nối là đúng được chứa trong quan hệ kết quả Q như là
một bộ đơn. Một điều kiện nối tổng quát có dạng
<điều kiện> AND <điều kiện> AND ……..AND <điều kiện>
trong đó mỗi điều kiện có dạng Ai θ Bj, Ai là một thuộc tính của R, Bj
là một thuộc tính của S, Ai và Bj có cùng miền và θ là một trong các dấu phép
toán so sánh { <, ≤, =, ≥, >, ≠}. Một phép toán nối với điều kiện tổng quát
như vậy gọi là một phép nối tê-ta. Các bộ có các thuộc tính nối là null không
xuất hiện trong kết quả. Theo nghĩa đó, phép toán không nhất thiết phải xử lý
mọi thông tin trong các quan hệ tham gia. Ví dụ về phép nối:
Giả sử ta có hai quan hệ R và S như sau:

R A1 A2 A3 S B1 B2 B3
Aa Ca Ba Ba Aaa Bbb
Ab Cb Bb Bb Ccc Ddd
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 51
Ac Ca Ba
Ad Cc Null
Ae Cd Bb
kết quả phép nối sẽ là:
R S A1 A2 A3 B1 B2 B3
<A3=B1> Aa Ca Ba Ba Aaa Bbb
Ab Cb Bb Bb Ccc Ddd
Ac Ca Ba Ba Aaa Bbb
Ac Cd Bb Bb Ccc Ddd
Hình 3.8 Phép nối hai quan hệ

Phần lớn các phép nối chỉ cho phép các điều kiện nối với các so sánh
bằng. Những phép nối chỉ sử dụng phép so sánh bằng được gọi là nối bằng
(equi join). Ví dụ trong hình 3.8 là một phép nối bằng. Chú ý rằng trong kết
quả của phép nối bằng chúng ta thấy luôn luôn có một hoặc nhiều cặp thuộc
tính có các giá trị như nhau trong mỗi bộ. Việc có các cặp thuộc tính có giá trị
như nhau là thừa, vì vậy người ta đề nghị một phép nối mới gọi là nối tự
nhiên, ký hiệu là *.Phép nối tự nhiên nhằm loại bỏ thuộc tính thứ hai (thuộc
tính thừa) trong điều kiện nối bằng. Định nghĩa chuẩn của nối tự nhiên đòi hỏi
hai thuộc tính nối (hoặc mỗi cặp thuộc tính nối) phải có tên như nhau trong cả
hai quan hệ. Nếu các thuộc tính đó không cùng tên thì trước khi nối phải áp
dụng phép toán đặt lại tên. Ví dụ, ta cần nối tự nhiên hai quan hệ ĐƠNVỊ
(MãsốDV, TênDV) và Dựán(MãsốDA,TênDA, ĐƠNVỊkiểmsoát,..), trong đó
thuộc tính ĐƠNVỊkiểmsoát đóng vai trò của đơn vị kiểm soát dự án, nghĩa là
nó có cùng miền giá trị với thuộc tính MãsốDV của quan hệ ĐƠNVỊ. Để có
thể thực hiện được phép nối tự nhiên với điều kiện so sánh bằng, ta phải đổi
tên thuộc tính ĐƠNVỊkiểmsoát thành MãsốDV, nghĩa là ta phải viết
ĐƠNVỊ * ρ
(Mã sốDA, TênDA, Mã sốDV,..)
(Dựán)
Nếu các thuộc tính mà trên đó nối tự nhiên được chỉ ra có tên như nhau
thì việc đặt lại tên là không cần thiết.
Chú ý rằng nếu không có một tổ hợp các bộ nào thoả mãn điều kiện nối
thì kết quả của một phép nối là một quan hệ rỗng không chứa bộ nào. Nói
chung, nếu R có nR bộ và S có nS bộ thì kết quả của phép nối R với S sẽ có
số các bộ lớn hơn 0 và nhỏ hơn nR*nS. Cỡ của một kết quả nối chia cho cỡ
cực đại nR*nS tạo nên một tỷ kệ gọi là chọn lựa nối, đó là một tính chất của
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 52
mỗi điều kiện nối. Nếu không có điều kiện nối, mọi tổ hợp các bộ sẽ được
chọn và phép nối trở thành một tích Đề các.
Phép nối được sử dụng để kết hợp các dữ liệu từ nhiều quan hệ sao cho
các thông tin có liên hệ với nhau có thể được biểu diễn trong một bảng. Đoi
khi phếp nối được áp dụng nối một bảng với chính nó. Chúng ta có thể áp
dụng phép nối tự nhiên và nối bằng để nối nhiều bảng vời nhau. Nếu ta nối n
bảng với nhau thì phải chỉ ra n-1 điều kiện nối.
f. Tập hợp đầy đủ các phép toán quan hệ
Người ta đã chỉ rằng tập hợp các phép toán đại số quan hệ {σ, π, ∪, -,
×}là một tập đầy đủ ; nghĩa là mọi phép toán đại số quan hệ khác có thể được
biểu diễn thông qua các phép toán của tập hợp này. Ví dụ, phép giao có thể
được biểu diễn bằng cách sử dụng các phép hợp và trừ tập hợp như sau:
R ∩ S ≡(R ∪ S) – ((R-S) ∪ (S – R))
Như vậy, nói một cách chính xác là không cần phải có phép giao. Mỗi
khi cần thực hiện một phép giao, ta chỉ cần đưa ra biểu thức phức tạp này là
đủ.
Một ví dụ khác, một phép nối có thể được chỉ ra như một tích Đề các và
sau đó là một phép chọn:
R S = σ
< Đièu kiện chọn>
(R × S)
< Điều kiện nối>
Một cách tương tự, ta có thể thay thế phép nối tự nhiên bằng một tích
Đề các đi sau một phép đặt lại tên và sau đó là các phép toán chọn và chiếu.
Như vậy các phép toán nối cũng không cần thiết. Tuy nhiên các phép toán đó
rất quan trọng bởi vì chúng tiện dùng và rất thường xuyên được áp dụng trong
các cơ sở dữ liệu. Các phép toán đó được đưa vào trong đại số quan hệ là do
tiện dụng hoqn là do cần thiết. Một phép toán khác cũng được đưa vào, đó là
phép chia
g. Phép chia
Phép chia có lợi cho một loại truy vấn đặc biệt đôi khi có các ứng dụng
trong cơ sở dữ liệu. Phép chia được áp dụng cho hai quan hệ R(Z) và S(X) và
được ký hiệu là R(Z) ÷ S(X), trong đó X ⊆ Z.Giả sử Y = Z – X (như vậy
Z=X-Y).Kết quả của phép chia là quan hệ T(Y) chứa một bộ t nếu các bộ tR
xuất hiện trong R với tR[Y] = t và với tR[X] = tS với mọi bộ tS trong S. Điều
đó có nghĩa là để một bộ t xuất hiện trong kết quả T của phép chia, các giá trị
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 53
trong t phải xuất hiện trong R trong sự kết nối với mọi bộ của S.
Ví dụ:
R A B S A
a1 b1 a1
a2 b1 a2
a3 b1 a3
a4 b1
a1 b2
a3 b2
a2 b3
a3 b3
a4 b3 T B
a1 b4 b1
a2 b4 b4
a3 b4
Hình 3.9 : minh hoạ phép chia T(B) ← R(A,B) ÷ S(B).

Trong phép chia ở trên, do các bộ giá trị b1 và b4 xuất hiện trong R trong
sự kết hợp với tất cả ba bộ trong S, vì vậy chúng xuất hiện trong quan hệ kết
quả T. Tất cả các giá trị khabs của B trong R không xuất hiện với mọi bộ
trong S và không được chọn
Phép chia có thế được biểu diễn thông qua các phép toán π, ×, -như sau:
T
1
← π
Y
(R) ; T
2
←π
Y
((S × T
1
) – R) ; T ← T
1
– T
2

3. Các phép toán quan hệ bổ sung
Có nhiểu truy vấn cơ sở dữ liêu không thể thực hiện được bằng các
phép toán đại số cơ bản trình bày ở trên. Trong phần này chúng ta sẽ trình bày
các phép toán bổ sung để biểu diễn các truy vấn đó.Các phép toán này làm
tăng cường sức mạnh của đại số quan hệ.
Các hàm nhóm và các phép nhóm
Kiểu câu hỏi đầu tiên không thể biểu diễn được trong đại số quan hệ cơ
sở là chỉ ra các hàm nhóm toán học trên các tập hợp giá trị của các cơ sở dữ
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 54
liệu. Các ví dụ về các hàm như vaỵy có thể là đưa ra lương trung bình hoặc
tổng lương của tất cả nhân viên, hoặc cho biết số các bộ của bảng nhân viên.
Các hàm hay áp dụng để thu thập các giá trị số là hàm Tổng (SUM),
Trungbình (AVERAGE), Tính giá trị lớn nhất (MAX), Giá trị bé nhất (MIN).
Hàm Đếm (COUNT) được sử dụng để đếm các bộ giá trị.
Một kiểu câu hỏi hay dùng khác là đòi hỏi nhóm các bộ trong một quan
hệ theo một giá trị của một số các thuộc tính của chúng và sau đó áp dụng các
hàm nhóm một cách độc lập cho từng nhóm.. Ví dụ, nhóm các bộ của quan hệ
NHÂNVIÊN theo Mãsố đơn vị. Như vậy, mỗi nhóm bao gồm các nhân viên
cùng làm việc trong một đơn vị. Sau đó chúng ta có thể đưa ra mỗi giả trị của
Mãsố đơn vị cùng với lương trung bình của các nhân viên ở trong đơn vị.
Chúng ta có thể định nghĩa một phép toán nhóm như sau:
< các thuộc tính nhóm> ℑ
< danh sách các hàm>
(R)
trong đó ℑ là ký hiệu hàm nhóm, < các thuộc tính nhóm> là một một
danh sách các thuộc tính của quan hệ được chỉ ra trong R, <danh sách hàm>
là danh sách các cặp <hàm(đối số)>. Trong các cặp hư vậy, <hàm> là một
trong các hàm cho phép như SUM, AVERAGE, MAX, MIN, COUNT, và
<thuộc tính> là một thuộc tính của quan hệ được chỉ ra trong R. Quan hệ kết
quả có các thuộc tính nhóm cộng với một thuộc tính cho mỗi phần tử trong
danh sách hàm. Ví dụ, để lấy ra theo MãsốDV số các nhân viên và lương
trung bình của các nhân viên, ta có thể viết:
< MãsốDV> ℑ
COUNT (), AVERAGE(Lương)
(NHÂNVIÊN)
Kết quả được minh hoạ ở hình 3.10
Mã số ĐV COUNT() AVERAGE(Lương)
1 1 5500
4 3 3100
5 4 3325
Hình 3.10 Minh hoạ phép toán nhóm

Nếu không chỉ ra thuộc tính nhóm thì các hàm được áp dụng cho các giá
trị thuộc tính của tất cả các bộ trong quan hệ; vì vậy quan hệ kết quả chỉ có
một bộ. Cần chú ý rằng, nói chung, các trùng lặp không được loại bỏ khi hàm
nhóm được áp dụng. Kết quả của việc áp dụng một hàm nhóm là một quan hệ
chứ không phải là một đại lượng vô hướng, thậm chí nếu nó chỉ có một giá trị.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 55
Các phép toán khép kín đệ quy
Một kiểu phép toán khác, nói chung, không chỉ ra được trong các phép
toán đại số quan hệ cơ sở là phép toán khép kín đệ quy. Phép toán này được
áp dụng cho mối liên kết đệ quy giữ các bộ cùng kiểu.Với các phép toán này
chúng ta phải sử dụng kỹ thuật lặp.
Các phép toán nối ngoài (outer join) hợp ngoài (outer union)
Trong phần này chúng ta thảo luận một vài mở rộng của phép toán nối
và hợp. Các phép toán nối mô tả ở trên liên kết các bộ thoả mãn điều kiện nối.
Như vậy, các bộ không có bộ liên kết sẽ bị loại khỏi kết quả nối. Các bộ với
giá trị null trong các tthuộc tính nối cũng bị loại. Một tập hợp các phép toán
gọi là nối ngoài có thể được sử dụng khi chúng ta muốn giữ các bộ trong R
hoặc S hoặc trong cả hai quan hệ trong kết quả của phép nối dù chúng có
những bộ liên kết trong quan hệ kia hay không. Có ba phép nối ngoài gọi là
nối ngoài trái (left outer join), nối ngoài phải (right outer join)và nối ngoài
đầy đủ (full outer join), được ký hiệu tương ứng là:

Nối ngoài trái Nối ngoài phải Nối ngoài đầy đủ
Phép nối ngoài trái giữ lại mọi bộ trong quan hệ bên trái R trong phép
nối. Nếu không có bộ liên kết nào được tìm thấy trong S thì các thuộc tính của
S trong kết quả phép nối được “làm đầy”bằng các giá trị null.
Tương tự như vậy đối với các phép nối ngoài phải và các phép nối ngoài
đầy đủ.
Phép toán hợp ngoài được mở rộng để lấy hợp của các bộ từ các quan hệ
nếu các bộ không tương thích đồng nhất. Phép toán này chỉ lấy hợp của các
quan hệ mà chúng chỉ tương thích bộ phận, nghĩa là chỉ một vài thuộc tính
của chúng là tương thích phép hợp. Điều phải tôn trọng là danh sách các
thuộc tính tưông thích phải chứa một khoá cho các hai quan hệ. Các bộ từ các
quan hệ thành phần với cùng một khoá chỉ được biểu diễn một lần trong kết
quả và có giá trị cho tất cả các thuộc tính trong kết quả. Các thuộc tính không
tương thích phép hợp từ bất kỳ quan hệ nào cũng được giữ trong kết quả và
các bộ không có giá trị cho các thuộc tính này cũng được lấp đầy bằng những
giá trị null.
IV. CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ-LIÊNKẾT THÀNH MÔ
HÌNH QUAN HỆ
Như đã thảo luận ở chương II, bước tiếp theo sau việc xây dựng mô
hình dữ liệu mức khái niệm, ta phải chuyển đổi mô hình đó thành một mô
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 56
hình dữ liệu lô gic. Trong phần này chúng ta sẽ thảo luận về thuật toán
chuyển đổi một mô hình ER thành ra mô hình quan hệ.
1. Các quy tắc chuyển đổi
• Thuật toán chuyển đổi được thực hiện theo các bược sau:
Bước 1 : Với mỗi kiểu thực thể thông thường E trong lược đồ ER, hãy
tạo một quan hệ R chứa mọi thuộc tính đơn của E. Với các thuộc tính phức
hợp, chỉ lấy các thuộc tính thành phần đơn của nó. Chọn một trong các thuộc
tính khoá của E làm khoá chính cho R. Nếu khoá được chọn của E là phức
hợp (gồm nhiều thuộc tính) thì tập các thuộc tính đơn đó sẽ cùng nhau tạo nên
khoá chính của R.
Ví dụ: Giả sử ta có kiểu thực thể ĐƠNVỊ với các thuộc tính là MãsốDV,
TênDV, Địađiểm trong đó các thuộc tính khoá là MãsốDV, TênDV (do mỗi
đơn vị có một tên duy nhất), và Địađiểm là một thuộc tính đa trị (do mỗi đơn
vị có nhiề địa điểm). Khi đó kiểu thực thể ĐƠNVỊ được chuyển thành quan
hệ ĐƠNVỊ với các thuộc tính MãsốDV, TênDV. Khoá chính của quan hệ là
MãsốDV (chọn một trong hai thuộc tính khoá của kiểu thực thể)
Bước 2: Với mỗi kiểu thứ thể yếu W trong lược đồ ER cùng với kiểu
thực thể chủ E, hãy tạo một quan hệ chứa tất các các thành phần đơn (hoặc
các thành phần đơn của các thuộc tính phức hợp) của W như là các thuộc tính
của R. Đưa các thuộc tính khoá chính của các quan hệ tương ứng với kiểu
thực thể chủ làm khoá ngoài của R. Các thuộc tính này sẽ xác định kiểu liên
kết của W. Khoá chính của R là một tổ hợp của khoá chính của các quan hệ
tương ứng với kiểu thực thể chủ và khoá bộ phận của kiểu thực thể yếu W nếu
có.
Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <có> PHỤTHUỘC
trong đó NHÂNVIÊN là kiểu thực thể chủ với các thuộc tính MãsốNV,
HọtênNV, NgàysinhNV, GiớitínhNV.Thuộc tính khoá của NHÂNVIÊN là
MãsốNV.
PHỤTHUỘC là kiểu thực thể phụ thuộc (vào thực thể NHÂNVIÊN) với
các thuộc tính là HọtênPT, NgàysinhPT, GiớitínhPT, Mốiquanhệ. Kiểu thực
thể này không có thuộc tính khoá. Khi đó kiểu thực thể NHÂNVIÊN được
chuyển thành quan hệ NHÂNVIÊN với các thuộc tính như trên. Kiểu thực thể
PHỤTHUỘC được chuyển thành quan hệ PHỤTHUỘC với các thuộc tính
HọtênNV, HọtênPT, NgàysinhPT, GiớitínhPT, Mốiquanhệ. Quan hệ
này có khoá ngoài là HọtênNV, khoá chính là HọtênNV, HọtênPT.
Bước 3: Với mỗi kiểu liên kết 1:1 R trong lược đồ ER, hãy xác định các
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 57
quan hệ S và T tương ứng với các kiểu thực thể tham gia trong R. Hãy chọn
một trong các quan hệ, chẳng hạn S, và đưa khoá chính của T vào làm khoá
ngoài trong S. Tốt nhất là chọn S là một kiểu thực thể tham gia toàn bộ vào R.
Đưa tất các các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính
phức hợp) của kiểu liên kết 1:1 R vào làm các thuộc tính của S.
Chú ý: Có một cách chuyyển đổi mối liên kết 1:1 nữa nhập hia kiểu thực
thể và mối liên kết thành một quan hệ. Cách này thường được áp dụng khi cả
hai kiểu thực thể đều tam gia toàn bộ vào liên kết.
Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <quản lý> ĐƠNVỊ, với
các thuộc tính của các kiểu thực thể giống như ở trên. Kiểu liênkết <quản lý>
là một kiểu liên kết 1:1, đồng thời sự tham gia của NHÂNVIÊN vào kiểu liên
kết là bộ phận (không phải nhân viên nào cũng quản lý đơn vị), sự tham gia
của ĐƠNVỊ là đầy đủ (một đơn vị luôn luôn phải có một người quản lý). Khi
đó, kiểu thực thể NHÂNVIÊN sẽ được chuyển thành quan hệ NHÂNVIÊN
với các thuộc tính của nó, còn kiểu thực thể ĐƠNVỊ sẽ được chuyển thành
quan hệ ĐƠNVỊ với các thuộc tính của kiểu thực thể ĐƠNVỊ cộng thêm với
thuộc tính MãsốNV và thuộc tính của kiểu liên kết <quản lý>, nếu có. Thuộc
tính MãsốNV sẽ là khoá ngoài cho quan hệ ĐƠNVỊ
Bước 4: Với mỗi kiểu liên kết hai ngôi R kiểu 1:N, hãy xác định quan hệ
S biểu diễn kiểu thực thể tham gia ở phía N của kiểu liên kết. Đưa khoá chính
của quan hệ T biểu diễn kiểu thực thể tham gia vào R ở phía 1 vào làm khoá
ngoài trong S. Làm như vậy là vì mỗi thực thể cụ thể của phía N được liên kết
với nhiều nhất là một thực thể cụ thể của phía 1 của kiểu liên kết. Đưa các
thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của
kiểu liên kết 1:N vào làm các thuộc tính của S.
Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <làm việc cho>ĐƠNVỊ,
trong đó các kiểu thực thể NHÂNVIÊN, ĐƠNVỊ là các kiểu thực thể ở trên.
Kiểu liên kết < làm việc cho> là kiểu liên kết N:1 (một nhân viên chỉ làm việc
cho một đơn vị và mỗi đơn vị có nhiều nhân viên làm việc cho). Khi đó, Kiểu
thực thể ĐƠNVỊ sẽ được chuyển thành quan hệ ĐƠNVỊ với các thuộc tính
của kiểu thực thể ĐƠNVỊ còn kiểu thực thể NHÂNVIÊN sẽ được chuyển
thành quan hệ NHÂNVIÊN với các thuộc tính của kiểu thực thể NHÂNVIÊN
cộng thêm với thuộc tính MãsốDV (là khoá chính của quan hệ ĐƠNVỊ).
Thuộc tính MãsốDV sẽ là thuộc tính khoá ngoài của quan hệ NHÂNVIÊN
Bước 5: Với mỗi kiểu liên kết N:M hai ngôi R, hãy tạo ra một quan hệ
mới S để biểu diễn R. Đưa các khoá chính của các quan hệ biểu diễn các kiểu
thực thể tham gia vào làm khoá ngoài của S. Tổ hợp các khoá chính đó sẽ tạo
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 58
nên khoá chính của S. Đưa tất cả các thuộc tính đơn (hoặc các thành phần đơn
của các thuộc tính phức hợp) của kiểu liên kết N:M vào làm các thuộc tính
của S. Chú ý rằng ta không thể biểu diễn một kiểu liên kết N:M bằng một
thuộc tính khoá ngoài đơn giản trong một trong các quan hệ tham gia (như đã
làm với các kiểu liên kết 1:1 và 1:N) vì tỷ số lực lượng N:M.
Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN < làm việc với> Dựán.
Kiểu thực thể NHÂNVIÊN có các thuộc tính như trên với thuộc tính khoá là
MãsốNV. Kiểu thực thể Dựán có các thuộc tính là MãsốDA, TênDA,
Địađiểm trong đó thuộc tính khoá là MãsốDA. Kiểu liên kết < làm việc với>
là một kiểu liên kết N:M (một nhân viên có thể làm việc với nhiều dự án và
mỗi dự án có nhiều nhân viên làm việc với).Kiểu liên kết này có một thuộc
tính là Sốgiờ để lưu số giờ mà mỗi nhân viên làm việc cho một dự án. Khi đó
kiểu liên kết < làm việc với> sẽ được chuyển thành một quan hệ có tên là
NHÂNVIÊN_Dựán với các thuộc tính MãsốNV, MãsốDA, Sốgiờ trong đó
hai thuộc tính MãsốNV, MãsốDA tạo thành khoá chính (phức hợp) cho quan
hệ.
Bước 6: Với mỗi thuộc tính đa trị A, hãy tạo ra một quan hệ mới R.
Quan hệ R này sẽ chứa một thuộc tính tương ứng với A cộng với thuộc tính
khoá K của quan hệ biểu diễn kiểu thực thể hoặc kiểu liên kết có thuộc tính là
A làm khoá ngoài của. Khoá chính của R là một tổ hợp của A và K. Nếu
thuộc tính đa trị là phực hợp thì chúng ta chỉ đưa vào R các thành phần đơn
của nó.
Ví dụ: Xét kiểu thực thể ĐƠNVỊ ở trên. Thuộc tính Địađiểm là một
thuộc tính đa trị. khi chuyển thành mô hình quan hệ nó sẽ được chuyển thành
một quan hệ có khoá chính là MãsốDV, Địa điểm và có thể có thêm một số
thuộc tính khác lưu thông tin về địa điểm.
Bước 7: Với mỗi kiểu liên kết n ngôi R, trong đó n>2, hãy tạo ra một
quan hệ S để biểu diễn R. Đưa các khoá chính của các quan hệ biểu diễn các
kiểu thực thể tham gia vào làm khoá ngoài của S. Đưa tất cả các thuộc tính
đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của kiểu liên kết
n-ngôi vào làm thuộc tính của S. Khoá chính của S thường là một tổ hợp các
khoá chính của các quan hệ biểu diễn các kiểu thực thể tham gia. Tuy nhiên,
nếu ràng buộc lực lượng trên một kiểu thực thể E nào đó tham gia vào R là 1
thì khoá chính của S không được chứa thuộc tính khoá ngoài quy chiếu đến
quan hệ E’ tương ứng với E.
Ví dụ: Giả sử chúng ta có kiểu liên kết Đại lý <cung cấp> vậttư cho dựán
Đây là một kiểu liên kết cấp 3. Giả sử rằng kiểu thực thể ĐạIlý có thuộc
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 59
tính khoá là MãsốDL, kiểu thực thể Vậttư có thuộc tính khoá là MãsốVT,
kiểu thực thể Dự án có thuộc tính khoá là MãsốDA còn kiểu liên kết <cung
cấp> có thuộc tính là Sốlượng để lưu số lượng vật tư mà một đai lý cung cấp
cho môt dự án. Khi đó kiểu liên kết <cung cấp> sẽ được chuyển thành một
quan hệ có tên là CUNGCÂP với các thuộc tính MãsốDL, MãsốVT, MãsốDA,
Sốlượng và khoá chính gồm ba thuộc tính MãsốDL, MãsốVT, MãsốDA.
2. Chuyển đổi mô hình cụ thể
Trong chương 2 chúng ta đã phân tích và thiết kế mô hình ER cho bài
toán CÔNGTY (Hình vẽ 2.6). áp dụng các bước của thuật toán ở trên, chúng
ta có mô hình quan hệ cho bài toán CÔNGTY như sau:

NHÂNVIÊN(Họđệm, Tên, MãsốNV, Ngàysinh, Địachỉ, Giớitính, Lương, MãsốNGS, MãsốĐV)
ĐƠN VỊ (TênĐV, MãsốĐV, MãsốNQL, Ngàybắtđầu)
ĐƠNVỊ_ĐỊAĐIỂM (MãsốĐV, ĐịađiểmĐV)
DỰÁN(TênDA, MãsốDA, ĐịađiểmDA, MãsốĐV)
NHÂNVIÊN_DỰÁN(Mã sốNV, Mã số DA, Số giờ)
PHỤTHUỘC(MãsốNV, TênPT, Giớitính, Ngàysinh, Quanhệ)
Hinh 3.11. Lược đồ cơ sở dữ liệu “CÔNG TY”

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 60
CHƯƠNG 4: PHỤ THUỘC HÀM VÀ CHUẨN HOÁ
CƠ SỞ DỮ LIỆU QUAN HỆ

Trong chương này chúng ta sẽ thảo luận về một số vấn đề lý thuyết đã
được phát triển nhằm mục đích chọn được lược đồ quan hệ “tốt”, nghĩa là đo
đạc một cách hình thức vì sao tập hợp các thuộc tính này nhóm vào trong các
lược đồ quan hệ thì tốt hơn nhóm kia. Chúng ta có thể nói đến “tính tốt”của
các lược đồ quan hệ ở hai mức : mức thứ nhất là mức lôgic, mức thứ hai là
mức cài đặt. Mức thứ nhất liên quan đến việc các người sử dụng thể hiện các
lược đồ quan hệ và ý nghĩa của các thuộc tính của chúng như thế nào. Mức
thứ hai liên quan đến việc các bộ trong một quan hệ cơ sở được lưu trữ và cập
nhật như thế nào.
Việc thiết kế cơ sở dữ liệu có thể được thực hiện bằng cách sử dụng hai
giải pháp: dưới lên (bottom-up) hoặc trên xuống (top-down). Phương pháp
thiết kế dưới lên xem các mối liên kết cơ bản giữa các thuộc tính riêng rẽ như
là điểm xuất phát và sử dụng chúng để xây dựng nên các quan hệ.Giải pháp
này còn có tên gọi là thiết kế bằng tổng hợp (design by synthesis). Ngược lại,
phương pháp thiết kế trên xuống bắt đầu từ một số các nhóm thuộc tính trong
các quan hệ nhận được từ thiết kế quan niệm và các hoạt động chuyển đổi.
Sau đó việc thiết kế bằng phân tích được áp dụng đối với các quan hệ một
cách riêng rẽ và tập thể dẫn đến việc tách các quan hệ cho đến khi đạt được
tính chất mong muốn.
I. CÁC NGUYÊN TẮC THIẾT KẾ LƯỢC ĐỒ QUAN HỆ
1. Ngữ nghĩa của các thuộc tính quan hệ
Khi chúng ta nhóm các thuộc tính để tạo nên một lược đồ quan hệ, ta giả
thiết rằng có một ý nghĩa nào đó gắn với các thuộc tính. ý nghĩa này, hoặc
ngữ nghĩa, chỉ ra việc hiểu các giá trị thuộc tính lưu trong các bộ của một
quan hệ như thế nào. Nói cách khác, các giá trị thuộc tính trong một bộ liên
hệ với nhau như thế nào. Nếu việc thiết kế khái niệm được làm một cách cẩn
thận, sau đó là một chuyển đổi sang các quan hệ thì hầu hết ngữ nghĩa đã
được giải thích và thiết kế kết quả có một ý nghĩa rõ ràng. Nói chung, việc
giải thích ngữ nghĩa của quan hệ càng dễ dàng thì việc thiết kế lược đồ quan
hệ càng tốt. Nguyên tắc sau sẽ hỗ trợ cho việc thiết kế lược đồ quan hệ.
Nguyên tắc 1: Thiết kế một lược đồ quan hệ sao cho dễ giải thích ý
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 61
nghĩa của nó. Đừng góp các thuộc tính từ nhiều kiểu thực thể và kiểu liên kết
vào một quan hệ đơn. Một cách trực quan, nếu một lược đò quan hệ tương
ứng với một kiểu thực thể hoặc một kiểu liên kết thì ý nghĩa trở nên rõ ràng.
Ngược lại, một quan hệ tương ứng với một hỗn hợp các thực thể và liên kết
thì ý nghĩa trở nên không rõ ràng.
2. Thông tin dư thừa trong các bộ và cập nhật dị thường
Một mục tiêu của thiết kế lược đồ là làm tối thiểu không gian lưu trữ
các quan hệ cơ sở. Các thuộc tính được nhóm vào trong các lược đồ quan hệ
có một ảnh hưởng đáng kể đến không gian lưu trữ. Nếu cùng một thông tin
duực lưu giữ nhiều lần trong cơ sở dữ liệu thì ta gọi đó là dư thừa thông tin và
điều đó sẽ làm lãng phí không gian nhớ. Ngoài việc lãng phí không gian nhớ
nó còn dẫn đến một vấn đề nghiêm trọng là cập nhật bất thường. Cập nhật bất
thướng bao gồm : Chèn bất thường, Xoá bất thường, Sửa đổi bất thường.
Những cập nhật bất thường này sẽ đưa vào cơ sở dữ liệu những thông tin
“lạ”và làm cho cơ sở dữ liệu mất tính đúng đắn.
Nguyên tắc 2: Thiết kế các lược đồ quan hệ cơ sở sao cho không sinh ra
những cập nhật bất thường trong các quan hệ. Nếu có xuất hiện những cập
nhật bất thường thì phải ghi chép lại một cách rõ ràng và phải đảm bảo rằng
các chương trình cập nhật dữ liệu sãe thực hiện một cách đúng đắn.
Các giá trị rỗng trong các bộ
Trong một số thiết kế lược đồ, chúng ta có thể nhóm nhiều thuộc tính
với nhau vào một quan hệ “béo”. Nếu nhiều thuộc tính không áp dụng cho
mọi bộ trong một quan hệ, chúng ta sẽ kết thúc với nhiều giá trị null trong các
bộ đó. Điều đó có thể làm tăng không gian ở mức lưu trữ và có thể dẫn đến
vấn đề về hiểu ý nghĩa của các thuộc tính và về việc chỉ ra các phép nối ở
mức lô gic. Một vấn đề nữa với các giá trị null là không áp dụng được các
hàm nhóm như count, sum. Hơn nữa, các giá trị null có thể nhiều cách giải
thích, chẳng hạn như thuộc tính không áp dụng được cho bộ này, giá trị của
thuộc tính cho bộ này là không có hoặc giá trị cho thuộc tính là có nhưng
vắng mặt. Tóm lại, có cùng một cách biểu diễn cho moi giá trị null là thoả
hiệp các ý nghĩa khác nhau mà chung có thể có.
Nguyên tắc 3: Tránh càng xa càng tốt việc đặt vào trong các quan hệ cơ
sở những thuộc tính mà các giá trị của chúng thường xuyên là null. Nếu
không thể tránh được các giá trị null thì phải đảm bảo rằng chúng chỉ áp dụng
trong các trường hợp đặc biệt và không áp dụng cho một số lớn các bộ trong
quan hệ.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 62
3. Tạo ra các bộ giả
Nhiều khi chúng ta đưa vào cơ sở dữ liệu những quan hệ không đúng,
việc áp dụng các phép toán(nhất là các phép nối) sẽ sinh ra các bộ giá trị
không đúng, gọi là các bộ “giả”.
Nguyên tắc 4: Thiết kế các lược đồ quan hệ sao cho chúng có thể được
nối với điều kiện bằng trên các thuộc tính là khoá chính hoặc khoá ngoài theo
cách đảm bảo không sinh ra các bộ “giả”. Đừng có các quan hệ chứa các
thuộc tính nối khác với các tổ hợp khoá chính-khoá ngoài. Nếu không tránh
được những quan hệ như vậy thì đừng đừng nối chúng trên các thuộc tính đó,
bởi vì các phép nối có thể sinh ra các bộ “giả”.
II. CÁC PHỤ THUỘC HÀM
Khái niệm cơ bản nhất trong thiết kế lược đò quan hệ là khái niệm phụ
thuộc hàm. Trong phần này chúng ta sẽ định nghĩa hình thức khái niệm này
và cách sử dụng nó để định nghĩa các dạng chuẩn cho các lược đồ quan hệ
• Định nghĩa phụ thuộc hàm
Một phụ thuộc hàm là một ràng buộc giữa hai nhóm thuộc tính của một
cơ sở dữ liệu. Giả sử rằng lược đồ cơ sở dữ liệu của ta có n thuộc tính
A
1
,A
2
,…,An và ta hãy nghĩ rằng toàn bộ cơ sở dữ liệu được mô tả bằng một
lược đồ quan hệ chung R={A1, A2, …., An}. Bạn đừng suy ra rằng cơ sở dữ
liệu của chúng ta sẽ được lưu trữ trong một bảng chung, chúng ta chỉ sử dụng
khái niệm này để phát triển lý thuyết hình thức về sự phụ thuộc dữ liệu. Giả
sử X và Y là hai tập con của R, X ∩ Y = ∅.
Một phụ thuộc hàm, ký hiệu là X→ Y, giữa hai tập thuộc tính X và Y chỉ
ra một ràng buộc trên các bộ có thể có tạo nên một trạng thái quan hệ của R.
Ràng buộc đó là : với hai bộ bất kỳ t
1
và t
2
trong r, nếu có t
1
[X] = t
2
[X] thì
cũng phải có t
1
[Y] = t
2
[Y]. Điều đó có nghĩa là các giá trị của thành phần Y
của một bộ trong R phụ thuộc vào, hoặc được xác định bởi, các giá trị của
thành phần X; nói cách khác, các giá trị cua thành phần X của một bộ xác
định một cách duy nhất các giá trị của thành phần Y. Chúng ta cũng nói rằng
có một phụ thuộc hàm từ X vào Y hoặc Y phụ thuộc hàm vào X. Phụ thuộc
hàm được viết tắt là FD (functional dependency). Tập thuộc tính X được gọi
là vế trái của FD, tạpp thuộc tính Y được gọi là vế phải của FD.
Như vậy, X xác định hàm Y trong lược đồ quan hệ R khi và chỉ khi nếu
hai bộ của r (R) bằng nhau trên các giá trị của X thì chúng nhất thiết phải
bằng nhau trên các giá trị của Y.Ta có các nhận xét sau:

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 63
. Nếu có một ràng buộc trên các trạng thái của R là chỉ có một bộ giá trị
duy nhất của X trong mọi thể hiện quan hệ r(R) thì điều đó kéo theo X→ Y
với moi tập con các thuộc tính Y của R
. Nếu X→ Y thì không thể nói gì về Y→ X
Một phụ thuộc hàm là một tính chất ngữ nghĩa của các thuộc tính.
Những người thiết kế cơ sở dữ liệu sẽ dùng hiểu biết của họ về ý nghĩa của
các thuộc tính của R để chỉ ra các phụ thuộc hàm có thể có trên mọi trạng thái
quan hệ của r(R) của R. Khi ngữ nghiã của hai tập thuộc tính trong R chỉ ra
rằng có thể có một phụ thuộc hàm, chúng ta sẽ đặc tả phụ thuộc hàm như một
ràng buộc. Các trạng thái quan hệ r(R) thoả mãn các ràng buộc phụ thuộc hàm
được gọi là các trạng thái hợp pháp của R, bởi vì chúng tuân theo các ràng
buộc phụ thuộc hàm. Như vậy, việc sử dụng chủ yếu của các phụ thuộc hàm
là dùng để mô tả một lược đồ quan hệ R bằng việc chỉ ra các ràng buộc trên
các thuộc tính phải thoả mãn ở mọi thời điểm.
Một phụ thuộc hàm là một tính chất của lược đồ quan hệ R chứ không
phải là tính chất của một trạng thái hợp pháp r của R. Vì vậy, một phụ thuộc
hàm không thể được phát hiện một cách tự động từ một trạng thái r mà phải
do một người hiểu biết ngữ nghĩa của các thuộc tính xác định một cách rõ
ràng. Ví dụ, ta có quan hệ sau

Dạy Giáoviên Mônhọc Tàiliệu
AA Mônhọc 1 XX
AA Môn học 2 YY
BB Môn học 3 ZZ
CC Môn học 4 TT

Mới nhìn qua, chúng ta có thể nói có một phụ thuộc hàm Tàiliệu→
Mônhọc, tuy nhiên chúng ta không thể khẳng định được vì điều đó chỉ đúng
với trạng thái quan hệ này, biết đâu trong trạng thái quan hệ khác có thể có
hai môn học khác nhau sử dụng cùng một tài liệu tham khảo. Với một trạng
thái cụ thể, chúng ta chỉ có thể khẳng định là không có một phụ thuộc hàm
giữa nhóm thuộc tính này và nhóm thuộc tính khác. Để làm điều đó chúng ta
chỉ cần đưa ra một phản ví dụ. Chẳng hạn, ở trong quan hệ trên chúng ta có
thể khẳng định rằng không có phụ thuộc hàm giữa Giáoviên và Mônhọc bằng
cách chỉ ra ví dụ là AA dạy hai môn học “Môn học 1”và “Môn học 2”vậy
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 64
Giáo viên không thể xác định duy nhất Môn học.
Để biểu diễn các phụ thuộc hàm trong một lược đồ quan hệ, chúng ta sử
dụng khái niệm sơ đồ phụ thuộc hàm. Mỗi FD được biểu diễn bằng một
đường nằm ngang. Các thuộc tính ở vế trái của FD được nối với đường biểu
diễn FD bằng các đường thẳng đứng, các thuộc tính ở vế phải được nối với
đường biểu diễn FD bằng mũi tên chỉ đến các thuộc tính

Ví dụ: Ta có lược đồ quan hệ
Mượn(Sốthẻ, Mãsốsách, Tênngườimượn, Tênsách, Ngàymượn)
Với các phụ thuộc hàm:
Sốthẻ →Tênngườimượn
Mãsốsách → Tênsách
Sốthẻ, Mãsốsách → Ngàymượn
có sơ đồ phụ thuộc hàm như sau:

Mượn
Sốthẻ Mãsốsách Tênngườimượn Tênsách Ngàymượn
FD1
FD2
FD3

• Các quy tắc suy diễn đối với các phụ thuộc hàm
Chúng ta ký hiệu F là tập các phụ thuộc hàm được xác định trên một
lược đồ quan hệ R. Một phụ thuộc hàm X→ Y được gọi là suy diễn được từ
một tập các phụ thuộc hàm F được xác định trên R nếu X→ Y đúng trong mỗi
trạng thái quan hệ r là mở rộng hợp pháp của R; nghĩa là mỗi khi r làm thoả
mãn mọi phụ thuộc hàm trong F, X→ Y cũng đúng trong r. Tập hợp tất cảc
các phụ thuộc hàm suy diễn được từ F được gọi là bao đóng của F và được ký
hiệu là F
+
. Để xác định một cách suy diễn các phụ thuộc hàm có hệ thống,
chúng ta phải phát hiện một tập hợp các quy tắc suy diễn. Tập quy tắc này sẽ
được sử dụng để suy diễn các phụ thuộc hàm mới từ một tập các phụ thuộc
hàm cho trước. Ta sử dụng ký hiệu F |= X→ Y để ký hiệu phụ thuộc hàm X→
Y được suy diễn từ tập các phụ thuộc hàm F. Để cho tiện, ta viết tắt phụ thuộc
hàm có dạng {X,Y} → Z thành XY → Z (nghĩa là ta nối các biến và bỏ dấu
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 65
ngoặc nhọn đi). Có 6 quy tắc suy diễn đối với các phụ thuộc hàm:
QT1 (quy tắc phản xạ) : Nếu X ⊇ Y thì X→ Y
QT2 (quy tắc tăng) : { X→ Y } |= XZ → YZ
QT3 (quy tắc bắc cầu) : { X→ Y, Y→ Z } |= X→ Y
QT4 (quy tắc chiếu) : { X→ YZ } |= X→ Y
QT5 (quy tắc hợp) : { X→ Y, X→ Z } |= X→ YZ
QT6 (quy tắc tựa bắc cầu): { X→ Y, WY→ Z } |= WX→ Z
Quy tắc phản xạ phát biểu rằng một tập hợp các thuộc tính luôn luôn xác
định chính nó hoặc một tập con bất kỳ của nó. Vì QT1 tạo ra các phụ thuộc
luôn luôn đúng, những phụ thuộc như vậy được gọi là tầm thường. Một cách
hình thức, một phụ thuộc hàm X→ Y là tầm thường nếu X ⊇ Y; ngược lại,
noá được gọi là không tầm thường. Quy tắc tăng nói rằng việc thêm cùng một
tập thuộc tính vào cả hai vế của một phụ thuộc hàm sẽ tạo ra một phụ thuộc
hàm có giá trị. Theo quy tắc 3, các phụ thuộc hàm là bắc cầu. Quy tắc chiếu
(QT4) nói rằng chúng ta có thể bỏ bớt các thuộc tính ra khỏi vế phải của phụ
thuộc hàm. Việc áp dụng nhiều lần quy tắc này có thể tách phụ thuộc hàm
X→ {A1, A2, …., An} thành một tập hợp phụ thuộc hàm { X→ A1, X→ A2,
…., X→ An}. Quy tắc hợp cho phép chúng ta làm ngược lại; ta có thể gộp
các phụ thuộc hàm { X→ A1, X→ A2, …., X→ An}thành một phụ thuộc
hàm đơn X→ {A1, A2, …., An}.
Có thể chứng minh các quy tắc suy diễn ở trên một cách trực tiếp hoặc
bằng phản chứng dựa trên định nghĩa của phụ thuộc hàm. Để chúng minh
phản chứng, ta giả thiết một quy tắc là không đúng và chỉ ra rằng điều đó là
hkông thể. Sau đây là chứng minh các quy tắc.
Quy tắc 1:
Giả sử rằng X ⊇ Y và hai bộ t1 và t2 trong một thể hiện quan hệ r của R
sao cho t
1
[X] = t
2
[X]. Khi đó t
1
[Y] = t
2
[Y] bởi vì X ⊇ Y; như vậy X→ Y
phải xẩy ra trong r.
Quy tắc 2 (chứng minh phản chứng):
Giả sử rằng X→ Y đúng trong một thể hiện quan hệ r của R nhưng
XZ→ YZ không đúng. Khi đó phải có hai bộ t
1
và t
2
trong r sao cho (1) t
1
[X]
= t
2
[X], (2) t
1
[Y] = t
2
[Y], (3) t
1
[XZ] = t
2
[XZ] và (4) t
1
[YZ] ≠ t
2
[YZ]. Điều đó
là không thể bởi vì từ (1) và (3) chúng ta suy ra (5) t
1
[Z] = t
2
[Z], và từ (2) và
(5) ta suy ra t
1
[YZ] = t
2
[YZ], mâu thuẫn vói (4).
Quy tắc 3:
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 66
Giả sử rằng (1) X→ Y và (2) Y→ Z đúng trong một quan hệ r. Khi đó
với mọi bộ t
1
và t
2
trong r sao cho t
1
[X] = t
2
[X] ta phải có (3) t
1
[Y] = t
2
[Y]
theo giả thiết (1). Như vậy chúng ta cũng phải có (4) t
1
[Z] = t
2
[Z] theo (3) và
giả thiết (2). Vậy X→ Z phải đúng trong r.
Chúng ta có thể chứng minh các quy tắc từ QT4 đên QT6 thao phương
pháp trên. Tuy nhiên ta có thể lợi dụng các quy tắc đã được chứng minh là
đúng để chứng minh chúng. Sau đây ta chứng minh theo cách đấy.
Quy tắc 4:
1. X→ YZ (cho trước)
2. YZ → Y (sử dụng QT1 và YZ ⊇ Y)
3. X→ Y (sử dụng QT3 trên 1. và 2.)
Quy tắc 5:
X→ Y (cho trước)
X→ Z (cho trước)
X→ XY (sử dụng QT2 trên 1. bằng cách thêm vào cả hai vế X, và
XX=X)
X→ YZ (sử dụng QT2 trên 2. bằng cách thêm vào cả hai vế Y)
X→ YZ (sử dụng QT3 trên 3. và 4.)

Quy tắc 6:
X→ Y (cho trước)
WY→ Z (cho trước)
WX→ WY (sử dụng QT2 trên 1. bằng cách thêm vào cả hai vế W)
WX→ Y (sử dụng QT3 trên 3. và 2.)
Amstrong đã chứng minh rằng các quy tắc suy diễn từ QT1 đến QT3 là
đúng và đầy đủ. Đúng có nghĩa là cho trược một tập các phụ thuộc hàm F trên
một lược đồ quan hệ R, bất kỳ một phụ thuộc hàm nào suy diễn được bằng
cách áp dụng các quy tắc từ QT1 đến QT3 cũng đúng trong mỗi trạng thái
quan hệ r của R thoả mãn các các phụ thuộc trong F. Đầy đủ có nghĩa là việc
sử dụng các quy tắc từ QT1 đến QT3 lặp lại nhiều lần để suy diễn các phụ
thuộc hàm cho đến khi không còn suy diễn được nữa sẽ cho kết quả là một tập
hợp đầy đủ các phụ thuộc hàm có thể được suy diễn từ F. Nói cách khác, tập
hợp các phụ thuộc hàm F
+
(bao đóng của F) có thể xác định được từ F bằng
cách áp dụng các quy tắc suy diễn từ QT1 đến QT3. Các quy tắc từ QT1 đến
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 67
QT3 được gọi là các quy tắc suy diễn Amstrong.
Thông thường, những người thiết kế cơ sở dữ liệu đầu tiên chỉ ra một
tập các phụ thuộc hàm đễ xác định được nhờ ngũa nghĩa của các thuộc tính
của R.
Sau đó, sử dụng các quy tắc Amstrong để suy diễn các phụ thuộc hàm bổ
sung. Một cách có hệ thống để xác định tất cả các phụ thuộc hàm bổ sung là
đầu tiên hãy xác định mỗi tập thuộc tính X xuất hiện ở vế trái của một phụ
thuộc hàm nào đấy trong F và sau đó xác định tập hợp tất cả các thuộc tính
phụ thuộc vào X. Như vậy, với mỗi tập thuộc tính X, chúng ta xác định tập X
+
các thuộc tính phụ thuộc hàm vào X dựa trên F. X
+
được gọi là bao đóng của
X dưới F. Thuật toán xác định X
+
như sau:
Thuật toán 4.1 (xác định X
+
, bao đóng của X dưới F)
X
+
= X;
Repeat
Old X
+
= X
+
;
với mỗi phụ thuộc hàm Y → Z trong F thực hiện
M nếu X
+
⊇ Y thì X
+
= X
+
∪ Z;
until (X
+
= Old X
+
);
Ví dụ : Xét lược đồ quan hệ
R = {MãsốNV, HọtênNV, MãsốDA, TênDA, ĐịađiểmDA, Sốgiờ }
và tập phụ thuộc hàm F = { MãsốNV → HọtênNV,
MãsốDA → TênDA, ĐịađiểmDA,
{MãsốNV, MãsốDA} → Số giờ }
áp dụng thuật toán 4.1 ta có:
{ MãsốNV}
+
= { MãsốNV, HọtênNV }
{ MãsốDA }
+
= { MãsốDA, TênDA, ĐịađiểmDA }
{MãsốNV, MãsốDA}
+
= {MãsốNV, HọtênNV, MãsốDA, TênDA,
ĐịađiểmDA, Sốgiờ }.
• Sự tương đương của các tập phụ thuộc hàm
Trong phần này chúng ta thảo luận về sự tương đương của hai tập phụ
thuộc hàm. Một tập hợp các phụ thuộc hàm E được phủ bởi một tập các phụ
thuộc hàm F – hoặc F phủ E-nếu mỗi một phụ thuộc hàm trong E đều ở trong
F
+
, điều đó có nghĩa là mỗi phụ thuộc hàm trong E có thể suy diễn được từ F.
Hai tập phụ thuộc hàm E và F là tương đương nếu E
+
= F
+
. Như vậy tương
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 68
đương có nghĩa là mỗi phụ thuộc hàm trong E có thể suy diễn được từ F và
mỗi phụ thuộc hàm trong F có thể suy diễn được từ E.
Chúng ta có thể xác định xem F có phủ E hay không bằng cách tính X
+

đối với F đối với mỗi thuộc hàm X→ Y trong E và sau đó kiểm tr xem X
+
này
có các thuộc tính trong Y hay không. Nếu điều đó xẩy ra với mỗi phụ thuộc
hàm trong E, thì F phủ E. Chúng ta xác định xen E và F có tương đương hay
không bằng cách kiểm tra E phủ F và F phủ E.
Ví dụ : Xét hai tập phụ thuộc hàm
F = {A → C, AC → D, E→ AD, E → H }
E = { A → CD, E → AH }
Ta chứng minh F phủ E :
Tìm bao đóng của các vế trái của các phụ thuộc hàm trong E theo F. áp
dụng thuật toán 4.1 ở trên, ta có {A}
+
= { A, C, D }; {E}
+
= {E, A,D, H}, ta
thấy các bao đóng này chứa các vế phải tương ứng . Từ đó suy ra F phủ E.
Ta chứng minh E phủ F :
Tìm bao đóng của các vế trái của các phụ thuộc hàm trong F theo E. Ta
có {A}
+
={A,C,D }, {AC}
+
= { A,C,D}, {E}
+
= { E,A,H}, ta thấy các bao
đóng này chứa các vế phải tương ứng . Từ đó suy ra E phủ F.
Tóm lại E tương đương với F.
• Các tập tối thiểu các phụ thuộc hàm
Một tập phụ thuộc hàm là tối thiểu nếu nó thoả mãn các điều kiện sau
đây:
Vế phải của các phụ thuộc hàm trong F chỉ có một thuộc tính
Chúng ta không thể thay thế bất kỳ một phụ thuộc hàm X → A trong F
bằng phụ thuộc hàm Y→ A, trong đó Y là tập con đúng của X mà vẫn còn là
một tập phụ thuộc hàm tương đương với S.
Chúng ta không thể bỏ đi bất kỳ phụ thuộc hàm nào ra khỏi F mà vẫn có
một tập phụ thuộc hàm tương đương với F
Chúng ta có thể nghĩ về tập tối thiểu các phụ thuộc hàm như là một tập
hợp ở dạng chuẩn không có sự dư thừa. Điều kiện 1 đảm bảo rằng mỗi phụ
thuộc hàm là ở dạng chính tắc với một thuộc tính ở vế phải. Điều kiện 2 và 3
đảm bảo rằng không có sự dư thừa trong các phụ thuộc hoặc do có các thuộc
tính dư thừa ở vế trái của phụ thuộc, hoặc do có một phụ thuộc có thể được
suy diễn từ các phụ thuộc khác ở trong F.
Một phủ tối thiểu của một tập phụ thuộc hàm F là một tập tối thiểu các
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 69
phụ thuộc hàm Fmin tương đương với F. Thường có rất nhiều các phủ tối
thiểu cho một tập các phụ thuộc hàm. Chúng ta luôn luôn có thể tìm được ít
nhất là một phủ tối thiểu G cho một tập các phụ thuộc hàm F bất kỳ theo thuật
toán 4.2 sau đây:
Thuật toán 4.2 (Tìm phủ tối thiểu G cho F).
Đặt G := F;
Thay thế mỗi phụ thuộc hàm X → {A
1
, A
2
, …., An} trong G bằng n phụ
thuộc hàm X → A
1
, X → A
2
, …, X → An
Với mỗi phụ thuộc hàm X → A trong G,
với mỗi thuộc tính B là một phần tử của X
nếu ((G-(X → A) ∪ ((X – {B}) → A) là tương đương với G
thì thay thế X→ A bằng (X-{B})→ A ở trong G
Với mỗi phụ thuộc hàm X→ A còn lại trong G
nếu (G – { X→ A }) là tương đương với G
thì loại bỏ X → A ra khỏi G
III. CÁC DẠNG CHUẨN DỰA TRÊN KHOÁ CHÍNH
Sau khi đã nghiên cứu các phụ thuộc hàm và một số tính chất của
chúng, bây giờ chúng ta sẽ sử dụng chúng như thông tin về ngữ nghĩa của các
lược đồ quan hệ. Ta giả sử rằng mỗi một quan hệ được cho trước một tập các
phụ thuộc hàm và mỗi quan hệ có một khoá chính. Trong phần này chúng ta
sẽ nghiên cứu các dạng chuẩn và quá trình chuẩn hoá các lược đồ quan hệ
1. Nhập môn về chuẩn hoá
Quá trình chuẩn hoá (do Codd đề nghị 1972) lấy một lược đồ quan hệ
và thực hiện một loạt các kiểm tra để xác nhận nó có thoả mãn một dạng
chuẩn nào đó hay không. Quá trình này được thuạc hiện theo phương pháp
trên xuống bằng việc đánh giá mỗi quan hệ với tiêu chuấn của các dạng chuẩn
và tách các quan hệ nếu cần. Quá trình này có thể xem như là việc thiết kế
quan hệ bằng phân tích. Lúc đầu, Codd đề nghị ba dạng chuẩn gọi là dạng
chuẩn 1, dạng chuẩn 2 và dạng chuẩn 3. Một định nghĩa mạnh hơn cho dạng
chuẩn 3 gọi là dạng chuẩn Boyce-Codd do Boyce và Codd đề nghị muộn hơn.
Tất cả các dạng chuẩn này dựa trên các phụ thuộc hàm giữa các thuộc tính
của một quan hệ. Sau đó, dạng chuẩn 4 (4NF) và dạng chuẩn 5 (5NF) được đề
nghị dựa trên các phụ thuộc hàm đa trị và các phụ thuộc hàm nối.
Chuẩn hoá dữ liệu có thể được xem như một quá trính phân tích các
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 70
lược đồ quan hệ cho trước dựa trên các phụ thuộc hàm và các khoá chính của
chúng để đạt đến các tính chất mong muốn : (1) Cực tiểu sự dư thừa và (2)
cực tiểu các phép cập nhật bất thường. Các lược đồ quan hệ không thoả mãn
các kiểm tra dạng chuẩn sẽ được tách ra thành các lược đồ quan hệ nhỏ hơn
thoả mãn các kiểm tra và có các tính chất mong muốn. Như vậy, thủ tục
chuẩn hoá cung cấp cho những người thiết kế cơ sở dữ liệu
. Một cơ cấu hình thức để phân tích các lược đồ quan hệ dựa trên các
khoá của nó và các phụ thuộc hàm giữa các thuộc tính của nó.
. Một loạt các kiểm tra dạng chuẩn có thể thực hiện trên các lược đồ
quan hệ riêng rẽ sao cho cơ sở dữ liêu quan hệ có thể được chuẩn hoá đến một
mức cần thiết.
Dạng chuẩn của một quan hệ liên quan đến điều kiện dạng chuẩn cao
nhất mà nó thoả mãn. Các dạng chuẩn khi được xem xét độc lập với các sự
kiện khác không đảm bảo một thiết kế cơ sở dữ liệu tốt. Nói chung, việc xác
minh riêng biệt từng lược đồ quan hệ ở dạng chuẩn này dạng chuẩn nọ là
chưa đủ. Tốt hơn là quá trình chuẩn hoá thông qua phép tách phải khằng định
một vài tính chất hỗ trợ mà tất cả các lược đồ quan hệ phải có. Chúng gồm hai
tính chất sau:
. Tính chất nối không mất mát (hoặc nối không phụ thêm), nó đảm bảo
rằng vánn đề tạo ra các bộ giả không xuất hiện đối với các lược đồ quan hệ
được tạo ra sau khi tách.
. Tính chất bảo toàn sự phụ thuộc, nó đảm bảo rằng từng phụ thuộc hàm
sẽ được biểu hiện trong các quan hệ riêng rẽ nhận được sau khi tách.
Tính chất nối không mất mát là rất quan trọng, phải đạt được bằng mọi
giá, còn tính chất bảo toàn phụ thuộc thì cũng rất mong muốn nhưng đôi khi
có thể hy sinh.
a. Dạng chuẩn 1
Một quan hệ được gọi là ở dạng chuẩn 1 (1NF) nếu miền giá trị của
một thuộc tính chỉ chứa các giá trị nguyên tử (đơn, không phân chia được) và
giá trị của mỗi thuộc tính trong một bộ phải là một giá trị đơn lấy từ miền giá
trị của thuộc tính đó. Như vậy, 1NF không cho phép có một tập giá trị, một bộ
giá trị hoặc một tổ hợp của cả hai như là một giả trị thuộc tính cho một bộ.
Nói cách khác, 1NF không cho phép “các quan hệ bên trong quan hệ “hoặc
“các quan hệ như là các thuộc tính của một bộ “. Nó chỉ cho phép các giá trị
của các thuộc tính là nguyên tử.
Ví dụ, các quan hệ sau đây không thoả mãn điều kiện 1NF.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 71

1) ĐƠNVỊ
(1)
MãsốDV
Tên DV Ngườiquảnlý Địa điểm
DV1 Đơn vị 1 AA Hà nội, Bắc ninh
DV2 Đơn vị 2 BB Hải phòng
DV3 Đơn vị 3 CC Nghệ an, Hà tĩnh

2) NHÂNVIÊN_dựán
(a)
MãsốDA
TênDA TênNHÂNVIÊN Sốgiờ
DA1 Dự án 1 AA
BB
15
20
DA2 Dự án 2 BB
CC
DD
10
12
28
DA3 Dự án 3 AA 20

Bảng ĐƠNVỊ chứa một thuộc tính đa trị, Bảng NHÂNVIÊN_dựán chứa
các quan hệ lồng nhau, “quan hệ trong quan hệ “.
Để đạt đến dạng chuẩn 1 đối với các quan hệ ở trên chúng ta dùng
phương pháp sau :
Loại bỏ các thuộc tính vi phạm dạng chuẩn 1 và đặt chúng vào một bảng
riêng cùng với khoá chính của thuộc quan hệ ban đầu. Khoá chính của bảng
này là một tổ hợp của Khoá chính của quan hệ ban đầu và thuộc tính đa trị
hoặc khoá bộ phận của nhóm lặp.
Ví dụ:* Với bảng ĐƠNVỊ, ta chia làm hai bảng: Bảng thứ nhất gồm các
thuộc tính MãsốDV, TênDV, Ngườiquản lý ; bảng thứ hai gồm các thuộc tính
MãsốDV và Địađiểm.
* Với bảng NHÂNVIÊN_dựán ta chia làm hai bảng, bảng thứ nhất
gồm các thuộc tính MãsốDA, TênDA ; Bảng thứ hai gồm các thuộc tính
MãsốDA, TênNHÂNVIÊN, Số giờ.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 72
b. Dạng chuẩn 2
Dạng chuẩn 2 (2NF) dựa trên khái niệm phụ thuộc hàm đầy đủ. Một phụ
thuộc hàm X → Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính
A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa ; điều đó có nghĩa là,
với thuộc tính A bất kỳ, A∈ X, (X-{A}) không xác định Y. Một phụ thuộc
hàm X → Y là phụ thuộc bộ phận nếu có thể bỏ một thuộc tính A∈ X, ra khỏi
X phụ thuộc hàm vẫn đúng ; điều đó có nghĩa là với A∈ X, (X-{A}) → Y.
Ví dụ, xét lược đồ quan hệ
NHÂNVIÊN_Dựán (MãsốNV, MãsốDA, Sốgiờ, HọtênNV,
TênDA,ĐịađiểmDA)
Phụ thuộc hàm MãsốNV, MãsốDA → Sốgiờ là phụ thuộc hàm đầy đủ
Phụ thuộc hàm MãsốNV, MãsốDA → HọtênNV là phụ thuộc hàm bộ
phận, bởi vì có phụ thuộc hàm MãsốNV → HọtênNV
Việc kiểm trađối với 2NF bao gồm việc kiểm tra đối với các phụ thuộc
hàm có các thuộc tính ở vế trái của nó là một bộ phận của khoá chính. Nếu
khoá chính chứa một thuộc tính đơn thì không cần phải kiểm tra. Một lược đồ
quan hệ R là ở dạng chuẩn 2 nếu mỗi thuộc tính không khoá A trong R là phụ
thuộc hàm đầy đủ vào khoá chính của R.
Nếu một quan hệ không thoả mãn điều kiện 2NF ta có thể chuẩn hoá nó
để có các quan hệ 2NF như sau : Loại bỏ các thuộc tính không khoá phụ
thuộc vào một bộ phận khoá chính và tách thành ra một bảng riêng, khoá
chính của bảng là bộ phận khoá mà chúng phụ thuộc vào.
Ví dụ, xét lược đồ quan hệ
NHÂNVIÊN_Dựán (MãsốNV, MãsốDA, Sốgiờ, HọtênNV,
TênDA,ĐịađiểmDA)
với các phụ thuộc hàm
MãsốNV, MãsốDA → Sốgiờ
MãsốNV →HọtênNV
MãsốDA→TênDA,ĐịađiểmDA
Ta thấy ở đây có những thuộc tính không khoá phụ thuộc vào một bộ
phận của khoá chính, như vậy nó không thoả mãn điều kiên 2NF. áp dụng
phương pháp chuẩn hoá trên, lược đồ được tách thành các lược đồ như sau:
N_D1(MãsốDA, TênDA,ĐịađiểmDA)
N_D2(MãsốNV, HọtênNV)
N_D3(MãsốNV, MãsốDA, Sốgiờ)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 73
c. Dạng chuẩn 3
Dạng chuẩn 3 (3NF) dựa trên khái niệm phụ thuộcbắc cầu.Một phụ
thuộc hàm X → Y trong một lược đồ quan hệ R là một phụ thuộc hàm bắc cầu
nếu có một tập hợp thuộc tính Z không phải là một khoá dự tuyển cũng không
phải là một tập con của một khoá nào và cả hai X → Z và Z → Y đều đúng.
Theo định nghĩa nguyên thuỷ của Codd, một lược đồ quan hệ R là ở 3NF nếu
nó thoả mãn 2NF và không có thuộc tính không khoá nào của R là phụ thuộc
bắc cầu vào khoá chính.
Nếu một lược đồ quan hệ không thoả mãn điều kiện 3NF, ta có thể
chuẩn hoá nó để có được các lược đồ 3NF như sau : Loại bỏ các thuộc tính
phụ thuộc bắc cầu ra khỏi quan hệ và tách chúng thành một quan hệ riêng có
khoá chính là thuộc tính bắc cầu.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 74
CHƯƠNG 5: GIỚI THIỆU
NGÔN NGỮ VẤN TIN CÓ CẤU TRÚC SQL

Trong chương này bạn sẽ tìm hiểu các khái niệm cơ bản về ngôn ngữ
chuẩn của mô hình quan hệ, được gọi là ngôn ngữ vấn tin có cấu trúc SQL
(Structured Query Langague). Ngôn ngữ này gồm khoảng ba mươi lệnh và
được thiết kế để làm việc với bất cứ ứng dụng nào cần xử lý dữ liệu được lưu
trong CSDL quan hệ. Đa số các phần mềm quan hệ hỗ trợ SQL, đồng thời
nhiều nhà cung cấp phần mềm đã phát triển thêm cho tập lệnh SQL cơ bản.
Do từ khoá SQL tương đối ít nên SQL tương đối dễ học. Tính đơn giản
của nó được hoàn thiện là do các hoạt động xuất hiện trong quá trình sử dụng
được tổ chức ở hậu trường CSDL. Chẳng hạn, một lệnh SQL tạo ra một tập
phức tạp các cấu trúc CSDL. Một lệnh đơn giản khác lại tạo ra các cấu trúc
bảng phức tạp cần cho lưu trữ và xử lý thành công dữ liệu.
SQL là ngôn ngữ phi thủ tục: người dùng chỉ mô tả cái phải làm, không
phải mô tả cách thực hiện. Sử dụng lệnh SQL, người dùng và các lập trình
viên không cần phải biết khuôn dạng lưu trữ vật lý cũng như hoạt động phức
tạp được tổ chức khi lệnh SQL thực hiện.
Tuy nhiên, cho dù SQL hữu dụng và đầy năng lực, điều đó không có
nghĩa là nó hoạt động độc lập trong lĩnh vực ứng dụng. Nhập liệu có thể được
nhưng không tiện lợi, sửa và bổ sung dữ liệu cũng vậy. SQL không tạo ra các
menu, các khuôn dạng báo cáo cụ thể, các menu đổ xuống hoặc bất cứ một
tiện ích cũng như các công cụ màn hình nào khác thường được mong muốn
bởi người dùng đầu cuối. Ngược lại, các giao diện đó được tạo ra bởi các lập
trình viên ngôn ngữ thế hệ ba, hoặc bởi hàng loạt các tiện ích bổ sung đặc biệt
cho phép khai thác triệt để năng lực của SQL. Bạn sẽ thấy rằng SQL làm cho
các ứng dụng CSDL của bạn mạnh lên; các tiện ích bổ sung sẽ cho phép bạn
tạo ra các giao diện thân thiện và trình bày các kết quả lấy từ dữ liệu hấp dẫn
hơn.
I. GIỚI THIỆU SQL
Về mặt lý thuyết, ngôn ngữ CSDL phải cho phép chúng ta tạo ra các cấu
trúc CSDL và bảng; nó phải cho phép chúng ta thực hiện các công việc quản
lý dữ liệu cơ bản (bổ sung, xoá, và sửa dữ liệu); đồng thời nó phải cho phép
chúng ta thực hiện các câu vấn tin phức tạp được thiết kế để biến đổi dữ liệu
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 75
thoo thành thông tin hữu dụng. Hơn nữa, nó phải thực hiện các chức năng cơ
bản như vậy với một nỗ lực tối thiểu của người dùng, đồng thời cấu trúc lệnh
và cú pháp của nó phải dễ học. Cuối cùng, nó phải dễ chuyển đổi; nghĩa là, nó
phải tuân theo một chuẩn nào đó để chúng ta không phải học lại quá nhiều khi
chúng ta chuyển từ một RDBMS này sang RDBMS khác.
SQL đáp ứng tốt các yêu cầu ngôn ngữ CSDL lý tưởng này. Trước hết,
năng lực của SQL đáp ứng được cả ba loại:
Định nghĩa dữ liệu tạo ra cấu trúc CSDL và cấu trúc bảng của nó.
Quản lý dữ liệu dùng một tập các lệnh nhập, sửa, xoá và cập nhật dữ liệu
trong bảng CSDL.
Vấn tin dữ liệu dùng một tập các lệnh khảo sát nội dung CSDL và cho
phép người dùng chuyển dữ liệu thô thành thông tin hữu ích.
Thứ hai, SQL tương đối dễ học: nó thực các chức năng CSDL cần thiết
bởi một tập khoảng ba mươi lệnh cơ bản. Hơn nữa, SQL là ngôn ngữ phi thủ
tục: Bạn chỉ phải cần yêu cầu cái phải làm, bạn không phải bận tâm về cách
nó làm như thế nào.
Cuối cùng, Viện Tiêu chuẩn Quốc gia Mỹ ANSI (American National
Standards Institute) quy định chặt chẽ một chuẩn SQL. Không hẩn là chuẩn
ANSI đã chặt chẽ đến mức tất cả các sản phẩm SQL thương mại không thể
tuân theo nó. Trên thực tế, một số nhà cung cấp đã tiếp nhận ngay chuẩn
ANSI SQL 2, được cài đặt năm 1993. Do đó, hiếm khi chuyển một ứng dụng
từ một RDBMS này sang một RDBMS khác mà không phải tạo ra một vài
thay đổi. Tuy nhiên, các phiên bản SQL khác nhau dùng chung cùng một tập
lệnh và cấu trúc cơ bản, từ đó cho phép chúng ta kết luận rằng có một chuẩn
khả dùng.
Chúng ta sẽ dùng chuẩn này như một nền tảng cho trình bày của chúng
ta

. Tuy nhiên chúng ta cũng sẽ trình bày một số cải tiến SQL, đặc biệt là khi
các cải tiến đó cùng được sử dụng rộng rãi giữa nhiều nhà cung cấp RDBMS.
Đừng vội thất vọng vì sự tồn tại của một số phiên bản SQL đặc thù. Do
sự khác biệt giữa các phiên bản SQL đặc thù không lớn lắm, bạn chỉ phải thay
đổi một chút để điều chỉnh các yêu cầu phần mềm của bạn. Cho dù bạn sử
dụng XDB, ORACLE, dBASE IV, DB2, R:BASE trên DOS, OS/2 DataBase


Các mô tả SQL chuẩn được mô tả chi tiết trong C. J. Date. Hướng dẫn chuẩn SQL, Addison-Wesley,
1987. C. J. Date hoàn toàn đủ tư cách để viết về các chuẩn; Ông và E. F. Codd đã có một lịch sử lâu dài và
hiệu quả trong việc phát triển mô hình của Codd thành chuẩn CSDL hiện nay. Một chuẩn SQL chính thức và
đầy đủ hơn đang được tiếp tục hoàn thiện khi chúng tôi viết quyển sách này: các chuẩn SQL ANSI hoàn
chỉnh hơn nhiều sẽ được công bố vào năm 1995.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 76
Manager của IBM, hoặc bất cứ một phần mềm RDBMS được thiết lập đúng
đắn nào khác, kinh nghiệm của chúng tôi là chỉ cần vài giờ với một quyến sổ
tay phần mềm là đủ để bạn tăng tốc độ SQL nếu bạn biết các nội dung được
trình bày trong chương này. Tóm lại, kiến thức bạn nhận được trong chương
này là khả dùng.
Có một số lý do chính đáng để nghiên cứu những vấn đề cơ bản của
SQL:
Nỗ lực chuẩn hoá ANSI đã đưa đến một chuẩn vấn tin thực tế cho CSDL
quan hệ. Trên thực tế, nhiều chuyên gia CSDL quan hệ đã thiên về khẳng
định rằng “Không có SQL không phải là quan hệ”.
SQL đã trở thành cơ sở cho những nỗ lực hợp nhất DBMS hiện nay và
trong tương lai gần, cho phép chúng ta liên kết các CSDL quan hệ, mạng và
phân cấp.
SQL đã trở thành chất xúc tác trong quá trình phát triển CSDL phân tán
và các kiến trúc CSDL khách/chủ. Chúng ta sẽ khảo sát quá trình phát triển
này trong chương 10.
II. CÁC LỆNH ĐỊNH NGHĨA DỮ LIỆU
Các lệnh định nghĩa dữ liệu được dùng để tạo cấu trúc CSDL và các
bảng trong CSDL. Trước hết là một tin không vui: Tạo cấu trúc CSDL chính
là một đặc điểm giúp phân biệt rõ các RDBMS với nhau. Tin vui là tương đối
dễ dàng tạo ra các cấu trúc CSDL rất phức tạp với bất kì RDBMS nào bạn
dùng.
1. Tạo cấu trúc CSDL
Nếu RDBMS của bạn sử dụng cài đặt SQL chuẩn ANSI, tạo cấu trúc
CSDL lôgic (lược đồ) được hoàn thành bởi dòng lệnh
CREATE SCHEMA AUTHORIZATION <người tạo>
Do đó nếu người tạo là JONES, dùng lệnh
CREATE SCHEMA AUTHORIZATION JONES
Đa số các RDBMS, bao gồm DB2, XDB, và dBASE IV, sử dụng phiên
bản
CREATE DATABASE <tên CSDL>
hơi khác so với phiên bản CREATE SCHEMA được thừa nhận trong
SQL chuẩn ANSI nguyên gốc.
Bạn không phải bận tâm khi thấy rằng, trừ quá trình tạo CSDL, phần lớn
các thủ tục và lệnh SQL có xu hướng khác một chút so với trong SQL chuẩn.
Tuy nhiên, đôi khi bạn có thể gặp một số sai khác cú pháp nhỏ, và chúng tôi
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 77
sẽ chỉ cho bạn khuôn dạng của chúng bằng cách sử dụng các hộp chú giải như
dưới đây:
2. Tạo cấu trúc bảng
Sau khi đã tạo ra cấu trúc CSDL, chúng ta có thể tạo cấu trúc bảng cho
các bảng thuộc CSDL. Để trình bày cách thực hiện chúng ta tạo cấu trúc cho
hai bảng với tên INVENTRY và VENDOR tương ứng.
(1) Bảng 3.1 Nội dung của bảng INVENTRY
P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
13-Q2/P2
ZW-23116
2QQ23DRT
54778-2T
23114-AA
89-WRE-Q
2232/QWE
1546-QQ2
WWE/D324
2232/QTY
7.25in, power saw
blade
2.5in, wood screw,
100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in
fine
Sledge hammer,
12lb
Houselite chain
saw, 16in
B&D jigsaw, 8in,
blade
Hardware
cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in,
blade
08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90
32
237
188
43
8
11
6
15
23
8
15
100
75
20
5
5
3
5
10
3
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92
21344
21231
21344
21344
21231
24288
24288
23119
21225
24288

Bảng INVENTRY, chỉ ra trên bảng 3.1, sẽ được cấu trúc để chứa bảy
thuộc tính, với tên tương ứng là P_CODE, P_DESCRIPT, STOCK_DATE,
ON_HAND, MIN_QUANT, PRICE, và V_CODE. Lưu ý các đặc điểm thuộc
tính của bảng INVENTRY. Chẳng hạn, P_CODE là một xâu hỗn hợp các kí
tự chữ và số, đồng thời chiếm tối đa tám vị trí. Vì P_CODE chứa các kí tự
nên nó phải thuộc kiểu trường kí tự. Tương tự, thuộc tính P_DESCRIPT là
trường kí tự có thể gồm tới hai nhăm kí tự. Mặt khác, thuộc tính
STOCK_DATE chứa dữ liệu ngày, trong khi các thuộc tính ON_HAND,
MIN_QUANT và PRICE chứa dữ liệu số. Cuối cùng, chúng ta phải xem xét
V_CODE:
Nếu chúng ta định cho phép máy tính tạo ra các mã nhà cung cấp mới
bằng cách cộng 1 vào mã nhà cung cấp đã ghi lớn nhất, chúng ta phải xem
V_CODE là thuộc tính số. (Bạn không thể thực hiện các thủ tục toán trên dữ
liệu kí tự!)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 78
Nếu chúng ta không dự định thực hiện các thủ tục toán trên V_CODE,
chúng ta có thể gán cho nó thuộc kiểu kí tự ngay cả khi chúng gồm toàn các
kí tự số. Bạn sẽ thấy rằng dữ liệu kí tự cho phép vấn tin nhanh hơn. Do đó,
nếu không cần thực hiện các thủ tục toán (cộng, trừ, nhân, chia...) trên thuộc
tính, nên lưu nó theo kiểu kí tự.
Chúng ta sẽ sử dụng lựa chọn (1) để trình bày các thủ tục SQL trong
chương này.
Phần lớn các cài đặt SQL hiện nay cho phép phân loại các đặc điểm thuộc
tính như bảng 3.2; một số còn gồm các kiểu dữ liệu bổ sung như kiểu tiền,
kiểu kí tự với độ dài thay đổi, kiểu kí tự với độ dài cố định và một số kiểu
khác.
Bảng 3.2 Phân loại thuộc tính
Kiểu Mô tả
smallint Giá trị nguyên nhỏ. Giá trị smallint không chứa dấu chấm thập
phân và chứa sáu (hoặc ít hơn) chữ số. Số smallint âm dành một
vị trí cho dấu. Do đó, giá trị smallint thay đổi từ –99999 đến
999999.
integer Giá trị nguyên. Giá trị integer chứa tới mười một chữ số. Như vậy
giá trị integer thay đổi từ –9999999999 đến 99999999999.
decimal Giá trị thập phân. Giá trị decimal có thể chứa các vị trí thập phân.
Thuộc tính thuộc kiểu decimal cần mô tả tổng số chữ số (gồm cả
dấu chấm thập phân) và số dành cho các vị trí thập phân. Chẳng
hạn, mô tả decimal(6, 2) đưa ra khoảng giá trị có thể có –99.99
tới 999.99
numeric Số thập phân có thể chứa tới hai mưới chữ số, gồm dấu chấm
thập phân và các vị trí thập phân. Như vậy, các giá trị như
34256450967.85453567 là phù hợp.
float Số thập phân dấu chấm động có thể chứa tới mười chín chữ số.
date Dạng ngày Julian cho phép dùng các phép toán số học ngày.
char Kiểu (xâu) kí tự cho phép dùng dữ liệu xâu trong khoảng từ 1 đến
254 kí tự.
logical Có thể nhận các mục dữ liệu true (T) hoặc false (F)


BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 79
SQL chuẩn không hỗ trợ kiểu dữ liệu lôgic (logical) và ngày (date). Tuy
nhiên, nhiều RDBMS hỗ trợ dữ liệu lôgic, và tất cả RDBMS hiện nay đều hỗ
trợ kiểu ngày dựa vào biến đổi toán học, tự động chuyển dạng ngày chuẩn
như 11/24/92 thành dạng ngày Julian để cho phép chúng ta thực hiện tính toán
số học Julian. Đúng như tên của nó, số học ngày là quá trình cho phép chúng
ta cộng hoặc trừ ngày. Chẳng hạn, phép trừ
12/01/92 – 08/12/90
hoàn toàn hợp lệ trong môi trường ngày Julian và đưa ra số ngày giữa
12/01/92 và 08/12/90. Tương tự, ngày sáu mươi kể từ ngày 06/15/92 có thể
được tính toán bằng cách
06/15/92 + 60
hoặc ngày 90 kể từ ngày hiện hành trong hệ thống máy tính
SYSDATE + 90
Số học ngày hoàn toàn tiện lợi trong môi trường kinh doanh, đặc biệt khi
chúng ta muốn tính lãi trên tất cả các hoá đơn còn nợ cũ trong khoảng thời
gian nhiều hơn ba mươi ngày kể từ ngày ghi trong hoá đơn, hoặc khi chúng ta
muốn tính số ngày trung bình một sản phẩm nằm trong kho.
áp dụng các kiểu trong bảng 3.2 cho nội dung bảng INVENTRY trong
bảng 3.1, chúng ta có thể định kiểu các thuộc tính như trong bảng 3.3. Dùng
kiểu thuộc tính trong bảng 3.3, bây giờ chúng ta có thể tạo ra cấu trúc bảng.
Để có một định nghĩa bảng dễ đọc, chúng ta đặt mỗi thuộc tính trên một hàng
riêng biệt:
CREATE TABLE INVENTRY ( P_CODE CHAR(8) NOT NULL,
P_DESCRIPT CHAR(25) NOT NULL,
STOCK_DATE DATE,
ON_HAND SMALLINT NOT NULL,
MIN_QUANT SMALLINT,
PRICE DECIMAL(7,2),
V_CODE SMALLINT);

Bảng 3.3 Các đặc điểm thuộc tính bảng INVENTRY
Cột (thuộc tính) Đặc điểm Yêu cầu đặc biệt Chú thích
P_CODE char(8) Not null Tối đa 8 kí tự
P_DESCRIPT char(25) Not null Tối đa 25 kí tự
STOCK_DATE date Ngày Julian
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 80
ON_HAND smallint Not null Giá trị nguyên nằm trong khoảng 0 –
1000
MIN_QUANT smallint Giá trị nguyên nằm trong khoảng 0 –
1000
PRICE decimal(7,2) Đơn vị USD, giá trị trong khoảng 0.00 -
9999.99
V_CODE smallint Mã nhà cung cấp, giá trị nằm trong
khoảng 1-1000
Nhớ rằng chúng ta đã dùng mô tả NOT NULL để khẳng định rằng khóa
chính của bảng không thể nhận “giá trị” null, theo đó đảm bảo tính toàn vẹn
thực thể. Nếu mô tả NOT NULL không được dùng, về sau bảng sẽ chấp nhận
mục dữ liệu null, và bạn sẽ phải chấp nhận thiếu tính toàn vẹn thực thể hoặc
phải viết chương trình để duy trì toàn vẹn thực thể.
Khi khảo sát lệnh bảng được dùng để tạo cấu trúc bảng INVENTRY, bạn
lưu ý các đặc điểm sau đây:
Các mô tả thuộc tính được đặt trong cặp dấu ngoặc tròn.
Các mô tả thuộc tính tách nhau bởi dấu phảy.
Dãy lệnh chấm dứt với dấu chấm phảy trong ví dụ này. (Nhưng nhớ
rằng, RDBMS của bạn có thể yêu cầu bạn bỏ đi dấu chấm phảy.)

Bảng 3.4 Nội dung của bảng VENDOR
V_CODE V_COMPANY C_LNAME C_FNAME C_I V_PHONE
21231
24288
21344
23119
21225
J.I. Supplies, Inc
Harding Super
Wholesale
Q&D Building
Supplies
Charlie’s
Wholesale
Rather’s
Building, Inc.
Fielding
Smith
Cavazos
Smithson
Smith
Anne
Stanley
Maria
Ronald
Sally
K.
G.
D.
W.
K.
666-233-
1281
800-213-
9999
800-333-
9011
212-667-
0090
800-234-
1200

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 81

V_ADDRESS V_CITY V_STATE V_ZIP
1233 Industrial Blvd. W
855 Temco Plaza
1452 West End. Suite 23B
125-C contract Circle
1117 Industrial Plaza
Indianapolis
Rockford
Dallas
Murfreesboro
Champaign
IN
IL
TX
TN
IL
21456
27122
31126
37129
22134

Bảng thứ hai của CSDL, VENDOR, chứa dữ liệu như trong bảng 3.4.
Cấu trúc bảng VENDOR được tạo ra bởi lệnh sau:
CREATE TABLE VENDOR ( V_CODE SMALLINT NOT NULL,
V_COMPANY CHAR(25),
C_LNAME CHAR(12),
C_FNAME CHAR(10),
C_I CHAR(2),
V_PHONE CHAR(12),
V_ADDRESS CHAR(30),
V_CITY CHAR(20),
V_STATE CHAR(2),
V_ZIP CHAR(5));
3. Các ràng buộc toàn vẹn SQL
Trong chương 2 bạn đã thấy rằng sự tôn trọng các quy tắc toàn vẹn
tham chiếu và toàn vẹn thực thể là quan trọng trong môi trường CSDL
quan hệ. May mắn là phần lớn các cài đặt SQL đều hỗ trợ cả hai quy tắc
toàn vẹn này. Chẳng hạn, toàn vẹn thực thể được thực thi tự động nếu
khóa chính được mô tả trong dãy lệnh CREATE TABLE. Do đó, chúng
ta có thể tạo cấu trúc bảng VENDOR và chuẩn bị thực thi quy tắc toàn
vẹn thực thể bởi
CREATE TABLE VENDOR ( V_CODE SMALLINT NOT NULL,
V_COMPANY CHAR(25),
C_LNAME CHAR(12),
C_FNAME CHAR(10),
C_I CHAR(2),
V_PHONE CHAR(12),
V_ADDRESS CHAR(30),
V_CITY CHAR(20),
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 82
V_STATE CHAR(2),
V_ZIP CHAR(5)
PRIMARY KEY(V_CODE));
Chuẩn bị thực thi quy tắc toàn vẹn tham chiếu được thiết lập bởi mô tả
khoá ngoại trong lệnh CREATE TABLE. Chẳng hạn, chúng ta có thực hiện
nhiệm vụ này bằng cách tạo cấu trúc bảng INVENTRY như sau:
CREATE TABLE INVENTRY ( P_CODE CHAR(8) NOT NULL,
P_DESCRIPT CHAR(25),
STOCK_DATE DATE,
ON_HAND SMALLINT,
MIN_QUANT SMALLINT,
PRICE DECIMAL(7,2),
V_CODE SMALLINT
PRIMARY KEY(P_CODE),
FOREIGN KEY(V_CODE)
REFERENCES VENDOR);
Chúng ta sẽ thấy trong chương 4 mệnh đề khoá ngoại và khóa chính này
quan trọng như thế nào trong việc cài đặt mô hình E-R.
III. QUẢN LÝ DỮ LIỆU CƠ BẢN
Trong phần này bạn sẽ học sử dụng các lệnh SQL sau đây:


(b) Giải thích
INSERT Cho phép bạn chèn dữ liệu vào bảng, mỗi hàng một lần.
Thường dùng để tạo mục dữ liệu đầu tiên cho cấu trúc bảng mới
hoặc bổ sung dữ liệu cho bảng đang chứa dữ liệu.

SELECT
Liệt kê nội dung bảng. Thực tế, SELECT là lệnh vấn tin chứ không
phải lệnh quản lý dữ liệu. Tuy nhiên, SELECT được giới thiệu trong
phần này vì nó cho phép bạn kiểm tra kết quả của nỗ lực quản lý dữ
liệu.
COMMIT Cho phép bạn lưu kết quả làm việc lên đĩa
UPDATE Cho phép bạn tạo sự thay đổi dữ liệu.
DELETE Cho phép bạn xoá một hoặc nhiều hàng dữ liệu.
ROLLBACK Khôi phục lại nội dung CSDL về trạng thái ban đầu (từ sau
COMMIT cuối cùng được dùng).

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 83
2. Nhập dữ liệu
SQL yêu cầu dùng lệnh INSERT để nhập dữ liệu vào bảng. Chúng ta sẽ
trình bày INSERT với hai hàng dữ liệu đầu tiên từ bảng INVENTRY được
chỉ ra trên bảng 3.1:
13-Q2/P2
ZW-23116
25in, power saw blade
2.5in, wood screw, 100
08/12/91
06/25/91
32
237
15
100
14.99
8.45
21344
21231

Để nhập dữ liệu này, bạn gõ
INSERT INTO INVENTRY VALUES(‘13-Q2/P2’,’ 7.25in, power
saw blade’, ‘08/12/91’,32, 15, 14.99, 21344);
và nhấn phím ENTER; sau đó gõ
INSERT INTO INVENTRY VALUES(‘ZW-23116’,’ 2.5in, wood
screw, 100’, ‘06/25/91’,237, 100, 8.45, 21231);
và nhấn lại phím ENTER lần nữa.
Nhận xét rằng
Nội dung hàng được đưa vào giữa cặp dấu ngoặc. (Lưu ý rằng kí tự đầu
tiên sau VALUES là dấu mở ngoặc và kí tự cuối cùng trong dãy lệnh là dấu
đóng ngoặc)
Giá trị kiểu ngày và kiểu kí tự phải được đưa vào giữa cặp dấu nháy (‘).
Giá trị số không cần bao bởi dấu nháy.
Các mục dữ liệu tách nhau bởi dấu phảy.
Rõ ràng, nhập dữ liệu hơi rắc rối trong môi trường SQL. Nhớ rằng các
ứng dụng người dùng đầu cuối được tạo ra tốt nhất với các tiện ích có màn
hình nhập liệu hấp dẫn (và dễ dùng!).
3. Kiểm tra nội dung bảng
Để kiểm tra nội dung bảng tại mỗi thời điểm, dùng lệnh SELECT, kèm
theo sau là danh sách các thuộc tính cần kiểm tra. Hoặc nếu bạn muốn kiểm
tra theo tất cả thuộc tính, dùng * để chỉ ra “tất cả thuộc tính”. (Kí hiệu thay
thế cho các kí tự khác hoặc các lạnh được gọi là kí tự thay thế). Chẳng hạn,
một trong hai dãy lệnh
SELECT * FROM INVENTRY
hoặc
SELECT P_CODE, P_DESSCRIPT, STOCK_DATE, ON_HAND,
MIN_QUANT,
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 84
PRICE, V_CODE FROM INVENTRY
đều tạo ra kết quả sau đây:
P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
13-Q2/P2
ZW-
23116
7.25in, power
saw blade
2.5in, wood
screw, 100
08/12/91
06/25/91
32
237
15
100
14.99
8.45
21344
21231
Mặc dù các lệnh SQL có thể được đưa vào trên một dòng duy nhất, dãy
lệnh được xem là rõ ràng dễ đọc nhất (cấu trúc tốt nhất) khi các thành phần
của lệnh SQL được viết trên các dòng tách biệt. Vì vậy, chúng ta sẽ viết lại
các lệnh nêu trên như sau:
SELECT *
FROM INVENTRY;
hoặc
SELECT P_CODE, P_DESSCRIPT, STOCK_DATE,
ON_HAND, MIN_QUANT,
PRICE, V_CODE
FROM INVENTRY;
4. Lưu nội dung bảng
Mọi thay đổi được tạo ra cho nội dung bảng (như các giá trị được chèn
vào) không được lưu vật lý lên đĩa cho đến khi lệnh
COMMIT <tên bảng>
được dùng, bạn đóng CSDL hoặc bạn thoát khỏi SQL. Do đó, nếu mất
điện hoặc một ngắt khác nào đó đột ngột xuất hiện trước khi bạn thực hiện
lệnh COMMIT với bảng, nội dung bảng cũ sẽ được giữ lại. Vì vậy, sẽ là hữu
dụng nếu lưu cất hai bản ghi vừa được nhập vào bảng INVENTRY bằng lệnh
COMMIT INVENTRY;
Lệnh COMMIT thường dùng để lưu các kết quả bổ sung, thay đổi và xoá
được tạo ra cho nội dung bảng. Khi bạn đã lưu cấu trúc CSDL và bảng với
COMMIT, bạn có thể thoát khỏi phần mềm.

Lưu ý: Một số cài đặt SQL (chẳng hạn
ắ ể

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 85


Chúng tôi không muốn để lại một ấn tượng là vai trò chính của lệnh
COMMIT là để lưu các thay đổi. Trên thực tế, mục đích cơ bản của lệnh
COMMIT và ROLLBACK (xem phần 3.3.7) là bảo đảm toàn vẹn cập nhật
CSDL trong quản lý giao dịch. (Chúng ta sẽ khảo sát quản lý giao dịch trong
chương 9).
5. Bổ sung dữ liệu cho bảng
Cho đến giờ, chỉ có hai hàng đầu tiên được lưu vào trong bảng
INVENTRY. Tám hàng còn lại có thể được bổ sung bằng cùng một dãy lệnh
INSERT INTO INVENTRY
VALUES(..., ..., ..., ...)
mà chúng ta đã dùng để đưa vào hai hàng trên. Chẳng hạn, hàng thứ ba
sẽ được bổ sung như sau
INSERT INTO INVENTRY
VALUES(‘2QQ23DRT’,’ PVC pipe, 3.5in, 8ft’, ‘07/02/91’, 188,
75, 5.87, 21344);
Cứ tiếp tục như vậy để đưa vào từng hàng còn lại, mỗi lần một hàng.
(Đừng bận tâm về việc gây ra lỗi; bạn sẽ học cách sửa lỗi trong phần sau.)
Hãy đảm bảo là lưu nội dung bảng bằng lệnh COMMIT khi tất cả các hàng đã
được đưa vào. Khi bạn đã hoàn thành, lệnh
SELECT *
FROM INVENTRY
sẽ chỉ ra nội dung bảng kết quả:
Lưu ý người dùng dBASE IV 1.1: Vì SQL
không được tích hợp vào phần mềm dBASE, bạn
phải thoát khỏi SQL trước, sau đó thoat khỏi
dBASE. Chẳng hạn, nếu bạn dùng SQL của dBASE
IV, dùng lệnh








BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 86

P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
13-Q2/P2
ZW-
23116
2QQ23D
RT
54778-2T
23114-AA
89-WRE-
Q
2232/QW
E
1546-QQ2
WWE/D3
24
2232/QT
Y
7.25in, power
saw blade
2.5in, wood
screw, 100
PVC pipe,
3.5in, 8ft
Rat-tail file,
1/8in fine
Sledge
hammer, 12lb
Houselite chain
saw, 16in
B&D jigsaw,
8in, blade
Hardware
cloth,1/4in,50ft
Claw hammer
B&D jigsaw,
12in, blade
08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90
32
237
188
43
8
11
6
15
23
8
15
100
75
20
5
5
3
5
10
3
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92
21344
21231
21344
21344
21231
24288
24288
23119
21225
24288
6. Sửa chữa
Dùng lệnh UPDATE để sửa các mục dữ liệu. Chẳng hạn, nếu bạn muốn
thay đổi giá trị trường STOCK_DATE của hàng hai thành 05/26/91, dùng
khóa chính (ZW-23116) để định vị đúng hàng thứ hai.
UPDATE INVENTRY
SET STOCK_DATE = ‘05/26/91’
WHERE P_CODE = ‘ZW-23116’;
Nếu nhiều hơn một thuộc tính cần được sửa trên một hàng, tách các phép
sửa chữa bởi dấu phảy:
UPDATE INVENTRY
SET STOCK_DATE = ‘05/26/91’, PRICE = 8.54, MIN_QUANT = 75
WHERE P_CODE = ‘ZW-23116’;
Kiểm tra lại kết quả sửa chữa bằng cách liệt kê bảng với lệnh
SELECT *
FROM INVENTRY;
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 87
7. Xoá hàng
Dễ dàng xoá một hàng. Chẳng hạn, nếu bạn muốn xoá hàng tám (giá trị
khoá chính P_CODE = ‘1546-QQ2’ khỏi bảng INVENTRY, dùng lệnh
DELETE FROM INVENTRY
WHERE P_CODE = ‘1546-QQ2’;
Lưu ý rằng giá trị khóa chính cho phép SQL định vị chính xác bản ghi
cần xoá. Thao tác xoá không phụ thuộc vào khóa chính: thuộc tính bất kỳ có
thể được dùng. Chẳng hạn,
DELETE FROM INVENTRY
WHERE MIN_QUANT = 5;
sẽ xoá ba hàng.
8. Khôi phục nội dung bảng
Nếu bạn chưa dùng lệnh COMMIT để làm cho các thay đổi trong nội
dung bảng cố định lại, bạn có thể khôi phục lại CSDL về trạng thái trước đó
của nó với lệnh ROLLBACK. Lệnh ROLLBACK không yêu cầu bạn mô tả
tên bảng; SQL xem như CSDL hiện thời trong bộ phải được phục hồi. Vì vậy,
bạn chỉ cần gõ
ROLLBACK
và nhấn phím ENTER. Chúng ta sẽ khảo sát chi tiết hơn cách dùng cả
hai lệnh COMMIT và ROLLBACK khi thảo luận về quản lý giao dịch trong
chương 9.
IV. VẤN TIN
Mọi câu vấn tin đều dựa trên lệnh SELECT. Trên thực tế, để kiểm tra
công việc của mình ở phần trước bạn đã dùng câu vấn tin dạng đơn giản nhất,
SELECT *
FROM INVENTRY;
để liệt kê tất cả các hàng gồm tất cả các cột trong bảng đã mô tả. Trong
phần này bạn sẽ biết cách điều chỉnh phù hợp lệnh SELECT bằng cách bổ
sung các hạn chế cho yêu cầu tìm kiếm. Với cách đó SELECT, kết hợp với
các hạn chế tìm kiếm thích hợp, là một công cụ đầy năng lực sẽ cho phép bạn
chuyển đổi dữ liệu thành thông tin.
Lưu ý: Dùng ROLLBACK để phục hồi tình



BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 88
1. Liệt kê từng phần nội dung bảng
Bạn có thể chọn một phần nội dung bảng với SELECT bằng cách liệt kê
tên của các trường mong muốn và đặt điều kiện cho các hàng cần đưa ra. Cú
pháp dưới đây sẽ cho phép bạn mô tả các giá trị bảng cần đưa ra:
SELECT <danh sách cột>
FROM <tên bảng>
WHERE <các điều kiện>;
Chẩng hạn, câu vấn tin
SELECT P_DESCRIPT, STOCK_DATE, PRICE, V_CODE
FROM INVENTRY
WHERE V_CODE = 21344;
sẽ tạo ra kết quả
P_DESCRIPT STOCK_DATE PRICE V_CODE
7.25in, power saw blade
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
08/12/91
07/02/91
12/03/90
14.99
5.87
4.99
21344
21344
21344

Nhiều điều kiện lôgic có thể được đặt lên nội dung bảng được chọn.
Theo đó cấu trúc lệnh SQL đảm bảo khả năng vấn tin vô cùng linh hoạt.
Chẳng hạn, các kí hiệu toán học nêu trong bảng 3.5 có thể được dùng để hạn
chế kết quả đưa ra. Ví dụ dưới đây dùng phép toán khác (không bằng):
SELECT P_DESCRIPT, STOCK_DATE, PRICE, V_CODE
FROM INVENTRY
WHERE V_CODE <> 21344;
Kết quả đưa ra liệt kê tất cả các hàng ứng với mã nhà cung cấp không
phải là 21344:
P_DESCRIPT STOCK_DATE PRICE V_CODE
2.5in, wood screw, 100
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade
06/25/91
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90
8.45
14.40
256.99
99.87
39.95
5.95
109.92
21231
21231
24288
24288
23119
21225
24288
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 89
và dãy lệnh
SELECT P_DESCRIPT, ON_HAND, MIN_QUANT, PRICE
FROM INVENTRY
WHERE PRICE <= 10;
sẽ đưa ra kết quả

P_DESCRIPT ON_HAND MIN_QUANT PRICE
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Claw hammer
237
188
43
23
100
75
20
10
8.45
5.87
4.99
5.95

Bảng 3.5 Các toán tử toán học
Kí hiệu Ý nghĩa
= Bằng
< Nhỏ hơn
<= Nhỏ hơn hoặc bằng
> Lớn hơn
>= Lớn hơn hoặc bằng
<> Không bằng
*

* Một số phiên bản SQL dùng != thay
cho <>.
Sử dụng các toán tử toán học trên các thuộc tính kí tự. Vì máy tính nhận
biết mọi kí tự bằng số là mã chuẩn ASCII của nó, nên các toán tử toán học có
thể được dùng để đặt các hạn chế cho các thuộc tính dựa trên kí tự. Vì vậy,
lệnh
SELECT P_DESCRIPT, ON_HAND, MIN_QUANT, PRICE
FROM INVENTRY
WHERE P_CODE < ‘16-AAAAA’;
sẽ là đúng và có thể đưa ra một danh sách tất cả các hàng trong đó
P_CODE “nhỏ hơn” ‘16-2222AAAAA’ theo thứ tự bảng chữ cái. (Vì giá trị
mã ASCII ứng với chữ cái B lớn hơn giá trị mã của chữ cái A, suy ra rằng A
nhỏ hơn B.) Vì vậy, kết quả đưa ra sẽ là
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 90
P_DESCRIPT ON_HA
ND
MIN_QU
ANT
PRICE
7.25in, power saw blade
Hardware cloth,1/4in,50ft
32
15
15
5
14.99
39.95

So sánh xâu kí tự được thực hiện từ trái qua phải. Kiểu so sánh từ trái
qua phải này đặc biệt hữu dụng khi các thuộc tính kiểu như các tên được so
sánh. Chẳng hạn, xâu ‘Ardmore’ có thể được đánh giá lớn hơn xâu
‘Aarenson’ nhưng nhỏ hơn xâu ‘Brown’; các kết quả như vậy có thể được
dùng để tạo ra các danh sách xếp theo thứ tự bảng chữ cái như kiểu danh mục
điện thoại.
Nếu các kí tự 0-9 được lưu như các xâu, cùng một so sánh xâu từ trái qua
phải có thể làm xuất hiện các dị thường. Chẳng hạn, mã ASCII ứng với kí tự
‘5’ là, như mong muốn, lớn hơn mã ASCII ứng với kí tự ‘4’, nhưng cũng
chính ‘5’ lại được đánh giá lớn hơn xâu ‘44’ do kí tự đầu tiên trong xâu ‘44’
nhỏ hơn ‘5’. Vì lý do này bạn có thể nhận được kết quả không như mong
muốn khi so sánh giá trị ngày nếu chúng được lưu theo kiểu kí tự. Chẳng hạn,
phép so sánh kí tự ASCII từ trái qua phải có thể kết luận rằng ngày ‘01/01/91’
xuất hiện trước ngày ‘12/31/90’ do ‘01/01/91’ nhỏ hơn ‘12/31/90’ vì kí tự bên
trái nhất ‘0’ trong xâu ‘01/01/91’ nhỏ hơn kí tự trái nhất ‘1’ trong xâu
‘12/31/90’. Một cách tự nhiên, nếu xâu dữ liệu được lưu dưới dạng
yy/mm/dd, các phép so sánh sẽ đưa ra kết quả thích hợp, nhưng ít người muốn
sử dụng cách biểu diễn ngày không chuẩn đó. Điều này giải thích vì ssao tất
cả các RDBMS hiện nay đều hỗ trợ kiểu ngày, đồng thời cũng giải thích vì
sao bạn nên dùng chúng! (Hơn nữa, bạn tận dụng được các ưu điểm của số
học ngày nếu bạn dùng kiểu ngày.)
Dùng các toán tử toán học trên kiểu ngày. Các thủ tục ngày thường có
đặc điểm riêng theo từng phần mềm mà không phải là thủ tục SQL. Chẳng
hạn, nếu bạn dùng XDB, OS/2 EE Database Manager hoặc DB2 cho máy lớn
mainframe của IBM, câu vấn tin dựa trên kiểu ngày
Liệt kê tất cả các hàng sản phẩm có ngày nhập kho la trong hoặc trước
ngày 1 tháng 7,
có dạng như sau:
SELECT *
FROM INVENTRY
WHERE STOCK_DATE >= 07/01/91;
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 91
Kết quả sẽ là
P_CODE P_DESCRIPT STOCK_
DATE
ON_H
AND
MIN_QU
ANT
13-Q2/P2
2QQ23DRT
89-WRE-Q
1546-QQ2
WWE/D324
7.25in, power saw blade
PVC pipe, 3.5in, 8ft
Houselite chain saw, 16in
Hardware cloth,1/4in,50ft
Claw hammer
08/12/91
07/02/91
08/11/91
08/14/91
08/12/91
32
188
11
15
23
15
75
5
5
10

Để ý là lệnh trên không bao ngày vào trong cặp dấu nháy đơn hoặc kép.
Nếu bạn dùng ORACLE, câu vấn tin trên được viết như sau
SELECT *
2 FROM INVENTRY
3 WHERE STOCK_DATE >= ‘07-JUL-91’;
Để ý là ORACLE yêu cầu dùng cặp dấu nháy đơn và khuôn dạng ngày
mặc định khác.
Khuôn dạng ngày dBASE IV yêu cầu dùng hàm đặc biệt có tên là CTOD
để chuyển tập kí tự xâu ngày thành ngày Julian:
SELECT *
FROM INVENTRY
WHERE STOCK_DATE >= CTOD(‘07/01/91’);
Nhớ dùng cặp dấu nháy để bao quanh xâu ngày.
2. Các toán tử lôgic: AND, OR và NOT
SQL cho phép dùng các hạn chế lôgic trong các câu vấn tin của nó.
Chẳng hạn, nếu bạn muốn nhận được một danh sách gồm các mục ứng với giá
trị của V_CODE hoặc là 21344 hoặc 24288, bạn có thể dùng dãy lệnh sau
đây:
SELECT *
FROM INVENTRY
WHERE V_CODE = 21344
OR V_CODE = 24288;
Lệnh này tạo ra sáu hàng phù hợp với các hạn chế lôgic:
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 92

P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
13-Q2/P2
2QQ23DRT
54778-2T
89-WRE-Q
2232/QWE
2232/QTY
7.25in, power saw blade
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
B&D jigsaw, 12in, blade
08/12/91
07/02/91
12/03/90
08/11/91
11/26/90
11/26/90
32
188
43
11
6
8
15
75
20
5
3
3
14.99
5.87
4.99
256.99
99.87
109.92
21344
21344
21344
24288
24288
24288

AND lôgic có yêu cầu cú pháp SQL tương tự. Lệnh dưới đây tạo ra một
danh sách tất cả các hàng thoả mãn đồng thời hai điều kiện PRICE nhỏ hơn
50.000USD và STOCK_DATE là ngày xuất hiện trước 15 tháng bảy năm
1991:
SELECT *
FROM INVENTRY
WHERE PRICE < 50
AND STOCK_DATE < ‘07/15/91’;
Lệnh này sẽ đưa ra kết quả dưới đây:
P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
ZW-23116
2QQ23DRT
54778-2T
23114-AA
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
06/25/91
07/02/91
12/03/90
02/15/91
237
188
43
8
100
75
20
5
8.45
5.87
4.99
14.40
21231
21344
21344
21231
Bạn có thể kết hợp OR và AND để đặt thêm các hạn chế cho kết quả đưa
ra. Chẳng hạn, giả sử bạn muốn có một bảng với các điều kiện sau:
Giá trị STOCK_DATE trước ngày 15 tháng 7 năm 1991 và giá PRICE
nhỏ hơn 50.000USD.
Hoặc V_CODE là 24288.
Danh sách yêu cầu có thể được tạo ra với dãy lệnh
SELECT *
FROM INVENTRY
WHERE (PRICE < 50 AND STOCK_DATE < ‘07/15/91’)
OR V_CODE = 24288;
Lưu ý việc dùng các dấu đóng mở ngoặc tròn để kết hợp các hạn chế
lôgic. Nơi đặt cặp dấu ngoặc tròn phụ thuộc vào thứ tự ưu tiên bạn muốn các
hạn chế được thực hiện. Các điều kiện được liệt kê trong cặp dấu ngoặc tròn
thường được thực hiện trước. Bạn đã học về quy tắc ưu tiên này trong đại số
sơ cấp và số học: 2 + (3 × 5) = 17 vì 3 × 5 = 15 và 2 + 15 = 17.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 93
Việc dùng OR và AND lôgic có thể trở nên khá phức tạp khi nhiều hạn
chế được đặt trong câu vấn tin. Trên thực tế, một lĩnh vực đặc biệt trong toán
học là Đại số Bool đã đóng góp nhiều cho việc sử dụng các công cụ lôgic.
Câu vấn tin trên đây đưa ra kết quả dưới đây:

P_CODE P_DESCRIPT STOCK_DATE ON_HAN
D
MIN_QUANT PRICE V_CODE
ZW-23116
2QQ23DRT
54778-2T
23114-AA
89-WRE-Q
2232/QWE
2232/QTY
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
B&D jigsaw, 12in, blade
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
11/26/90
237
188
43
8
11
6
8
100
75
20
5
5
3
3
8.45
5.87
4.99
14.40
256.99
99.87
109.92
21231
21344
21344
21231
24288
24288
24288

Lưu ý rằng ba hàng với V_CODE là 24288 luôn có trong kết quả đưa ra
ứng với giá trị bất kỳ của STOCK_DATE và PRICE trong hàng đó.
Nếu phiên bản SQL của bạn hỗ trợ toán tử lôgic NOT, bạn phải dùng cú
pháp tương tự như OR hoặc AND. Chẳng hạn, nếu bạn muốn xem một danh
sách tất cả các hàng tương ứng với mã nhà cung cấp không phải là 21344,
dùng dãy lệnh
SELECT *
FROM INVENTRY
WHERE V_CODE NOT 21344;
NOT lôgic có thể kết hợp với AND và OR.
3. Các toán tử đặc biệt
SQL chuẩn ANSI cho phép dùng các toán tử đặc biệt chung với mệnh đề
WHERE. Các toán tử đặc biệt này bao gồm
BETWEEN, được dùng để định nghĩa các giới hạn thay đổi
IS NULL, được dùng để kiểm tra xem một giá trị thuộc tính có là null
hay không.
LIKE, được dùng để kiểm tra đối với các xâu kí tự giống nhau.
IN, được dùng để kiểm tra xem giá trị thuộc tính có phù hợp một giá trị
trong một tập các giá trị được liệt kê hay không.
EXIST, được dùng để kiểm tra một thuộc tính có giá trị hay không. Thực
tế là EXIST là ngược của IS NULL.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 94
Chúng ta hãy khảo sát cách sử dụng các toán tử này.
Nếu bạn dùng phần mềm cài đặt SQL chuẩn, điều kiện
BETWEEN
có thể được dùng để định nghĩa các giới hạn thuộc tính. Chẳng hạn, nếu
bạn muốn biết một danh sách tất cả các sản phẩm mà giá của nó nằm giữa
50.00USD và 100.00USD, dãy lệnh dưới đây sẽ làm việc đó:
SELECT *
FROM INVENTRY
WHERE PRICE BETWEEN 50.00 AND 100.00;
Cài đặt SQL dBASE IV không hỗ trợ BETWEEN, nhưng bạn có thể
nhận được cùng một kết quả với
SELECT *
FROM INVENTRY
WHERE PRICE > 50.00
PRICE < 100.00;
SQL chuẩn cho phép sử dụng IS NULL để kiểm tra đối với giá trị thuộc
tính rồng (hay null). Chẳng hạn, giả sử rằng giá trị MIN_QUANT chưa được
mô tả cho một hoặc nhiều sản phẩm trong bảng INVENTRY. Mục null như
vậy có thể được tìm thấy bởi dãy lệnh
SELECT P_CODE, P_DESCRIPT
FROM INVENTRY
WHERE MIN_QUANT IS NULL;
Tương tự, nếu mục ngày null được kiểm tra, dãy lệnh
SELECT P_CODE, P_DESCRIPT
FROM INVENTRY
WHERE STOCK_DATE IS NULL;
sẽ làm việc trong môi trường SQL chuẩn.
SQL cho phép bạn dùng các kí tự thay thế % và _ để tạo ra xâu tương
xứng khi toàn bộ xâu không được biết. Các kí tự thay thế % và _ được dùng
như các kí tự thay thế * và ? trong DOS. Tức là,
% muốn nói rằng mọi kí tự bất kì theo sau đều hợp lệ
_ muốn nói một kí tự bất kì có thể được thay thế cho dấu gạch dưới.
LIKE phải được dùng kết hợp với kí tự thay thế. Chẳng hạn, câu vấn tin
dưới dây có thể tìm tất cả các hàng VENDOR ứng với các hợp đồng có tên
cuối bắt đầu bằng ‘Smith’.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 95
SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE C_LNAME LIKE ‘Smith%’;
Kết quả đưa ra là:
V_COMPANY C_LNAME V_PHONE
Harding Super Wholesale
Charlie’s Wholesale
Rather’s Building, Inc.
Smith
Smithson
Smith
800-213-9999
212-667-0090
800-234-1200

Nhưng giả sử bạn đã gõ vào câu vấn tin dưới đây:
SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE C_LNAME LIKE ‘SMITH%’;
Không có hàng nào được in ra. Điều gì đã xảy ra?
Điều xảy ra là câu vấn tin dựa trên kí tự có thể nhạy cảm với dạng chữ.
Tức là, kí tự hoa có mã ASCII khác kí tự thường, do đó làm cho ‘SMITH’,
‘Smith’ và ‘smith’ được đánh giá là các xâu khác nhau (không bằng). Vì trong
bảng không có ai với tên cuối bắt đầu bằng ‘SMITH’ nên ‘SMITH%’ (các kí
tự in hoa) được dùng trong vấn tin không thể tạo ra xâu tương xứng. Các xâu
tương xứng chỉ có thể được tạo ra nếu xâu vấn tin được viết chính xác như
xâu trong bảng.
Một số RDBMS, chẳng hạn XDB, tự động tạo ra các quy ước cần thiết
để loại bỏ tính nhạy cảm dạng chữ. Số khác, như ORACLE và dBASE IV,
cung cấp một hàm UPPER đặc biệt để chuyển cả hai xâu kí tự bảng và vấn tin
về dạng chữ in hoa. (Quy ước được hoàn thành chỉ trong bộ nhớ máy tính; nó
không làm ảnh hưởng tới giá trị thực tế lưu trong bảng.) Chính vì vậy, nếu
bạn muốn tránh kết quả không tương xứng dựa trên tính nhạy cảm dạng chữ,
và nếu bạn RDBMS của bạn cho phép sử dụng hàm UPPER, bạn có thể tạo ra
các kết quả giống nhau với câu vấn tin
SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE UPPER(C_LNAME) LIKE ‘SMITH%’;
Câu vấn tin trên có thể đưa ra một danh sách gồm tất cả các hàng có tên
cuối bắt đầu với ‘Smith’, cho dù đó là xâu kí tự hoa hay thường như ‘Smith’,
‘SMith’, ‘smith’, ‘SMITH’,...
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 96
Một cách tự nhiên, các toán tử lôgic có thể dùng kết hợp với các kí tự
thay thế. Chẳng hạn, câu vấn tin
SELECT V_COMPANY, C_LNAME, V_PHONE
FROM VENDOR
WHERE C_LNAME NOT LIKE ‘Smith%’;
sẽ cho kết quả
V_COMPANY C_LNAME V_PHONE
J.I. Supplies, Inc
Q&D Building Supplies
Fielding
Cavazos
666-233-1281
800-333-9011

Giả sử bạn không biết tên của một người nào đó được đánh vần là
‘Johnson’ hay ‘Johnsen’. Kí tự thay thế _ sẽ cho phép bạn tìm xâu tương ứng
cho cả hai cách đánh vần. Tìm kiếm thích hợp được lập lên bởi câu vấn tin
SELECT *
FROM VENDOR
WHERE C_LNAME LIKE ‘Johns_n’;
Như vậy các kí tự thay thế cho phép chúng ta tạo ra xâu tương xứng khi
chỉ biết gần đúng về xâu đó.
Nhiều câu vấn tin dùng với OR lôgic có thể xử lý dễ dàng hơn với sự
giúp đowx của toán tử đặc biệt N. Chẳng hạn, câu vấn tin
SELECT *
FROM INVENTRY
WHERE V_CODE = 21344
ORV_CODE = 24288;
có thể được xử lý hiệu quả hơn với
SELECT *
FROM INVENTRY
WHERE V_CODE IN (21344, 24288);
Nếu thuộc tính định tập kí tự, các dấu nháy phải được sử để định nghĩa
tập con. Chẳng hạn, nếu V_CODE đã được định nghĩa là CHAR(5) trong
bước tạo bảng, câu vấn tin trên đây có thể viết lại
SELECT *
FROM INVENTRY
WHERE V_CODE IN (‘21344’, ‘24288’);
EXIST có thể được sử dụng bất cứ khi nào có yêu cầu thực hiện lệnh
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 97
trên các giá trị thuộc tính không phải là null. Chẳng hạn, các hàng
INVENTRY có thể được xoá với
DELETE FROM INVENTRY
WHERE P_CODE EXIST;
hoặc, nếu bạn muốn liệt kê tất cả các hàng ứng với các mã nhà cung cấp
hiện có (khác null), bạn có thể dùng
SELECT *
FROM INVENTRY
WHERE V_CODE EXIST;
V. CÁC LỆNH QUẢN LÝ DỮ LIỆU NÂNG CAO
Trong phần 3.2 bạn đã học cách tạo cấu trúc bảng và nhập, sửa, xoá và
liệt kê dữ liệu. Trong phần này, bạn sẽ học cách thay đổi cấu trúc bảng bằng
cách thay đổi các đặc điểm thuộc tính và bổ sung cột. Sau đó bạn sẽ học cách
nhập dữ liệu vào các cột mới vừa sửa. Cuối cùng, bạn sẽ học cách sao chép
bảng hoặc một phần bảng, cũng như cách xoá bảng.
Mọi sự thay đổi trong cấu trúc bảng đều sẽ dựa trên lệnh ALTER, kèm
theo sau là lệnh tạo ra sự thay đổi bạn mong muốn. Có hai lệnh thường dùng
là MODIFY và ADD. Lệnh MODIFY sẽ cho phép bạn thay đổi các đặc điểm
cột, còn lệnh ADD sẽ cho phép bạn bổ sung một cột. Phần lớn các RDBMS sẽ
không cho phép bạn xoá cột vì thao tác này có thể xoá dữ liệu quan trọng
được dùng trong bảng khác.
Cú pháp cơ bản của lệnh ALTER do đó có hai dạng:
ALTER TABLE <tên bảng>
MODIFY (<tên cột> <các đặc điểm cột mới>);
hoặc
ALTER TABLE <tên bảng>
ADD (<tên cột mới> <các đặc điểm cột mới>);

Lưu ý: XDB không dùng cặp cặp dấu ngoặc tròn như trên, do đó
các dãy lệnh viết lại tương ứng là
ALTER TABLE <tên bảng>
MODIFY <tên cột> <các đặc điểm cột mới>;



BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 98
1. Thay đổi kiểu dữ liệu của cột
Dùng cú pháp MODIFY vừa trình bày, thuộc tính V_CODE của bảng
INVENTRY có thể được thay đổi từ kiểu nguyên thành kiểu kí tự với lệnh
ALTER TABLE INVENTRY
MODIFY (V_CODE CHAR(5));
Hoặc, nếu bạn đang dùng SQL XDB, gõ
ALTER TABLE INVENTRY
MODIFY V_CODE CHAR(5);
Một số phiên bản SQL (như ORACLE) sẽ không cho phép bạn thay đổi
kiểu dữ liệu trừ khi cột được thay đổi rỗng. Chẳng hạn, nếu bạn muốn thay
đổi trường V_CODE từ kiểu nguyên thành kiểu kí tự, lệnh
ALTER TABLE INVENTRY
MODIFY (V_CODE CHAR(5));
sẽ đưa ra thông báo lỗi vì cột V_CODE hiện đang chứa dữ liệu. Nếu cột
V_CODE không chứa dữ liệu, dãy lệnh trên có thể tạo ra thay đổi cho cấu
trúc bảng mong muốn.
2. Thay đổi đặc điểm thuộc tính
Nếu cột cần thay đổi đang chứa dữ liệu, bạn có thể tạo ra bất cứ sự thay
đổi nào trên các đặc điểm cột nếu các thay đổi đó không làm thay đổi kiểu dữ
liệu. Chẳng hạn, nếu bạn muốn tăng độ rộng của cột PRICE thành tám chữ số,
dùng lệnh
ALTER TABLE INVENTRY
MODIFY (PRICE DECIMAL(8,2));
Nếu bây giờ bạn liệt kê lại nội dung, bạn sẽ thấy rằng độ rộng cột PRICE
đã tăng lên một chữ số. Nhớ rằng, phiên bản SQL của bạn có thể không dùng
cặp dấu ngoặc tròn:
ALTER TABLE INVENTRY
MODIFY PRICE DECIMAL(8,2);
3. Bổ sung cột cho bảng
Bạn có thể thay đổi bảng hiện tại với việc bổ sung một hoặc nhiều cột.
Trong ví dụ dưới đây, chúng ta sẽ bổ sung cột có tên SALE_CODE cho bảng
INVENTRY. (Chúng ta sẽ dùng cột này về sau để xác định xem có hay không
một sản phẩm có sẵn trong kho ứng với một khoảng thời gian nào đó đã được
bán trong một thương vụ cụ thể.)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 99
Giả sử chúng ta muốn các mục SALE_CODE là 1, 2, hoặc 3. Vì chúng
ta sẽ không thực hiện các phép toán số học với SALE_CODE nên
SALE_CODE sẽ được định kiểu là thuộc tính kí tự đơn. Lưu ý sự bao gồm tất
cả thông tin yêu cầu trong lệnh ALTER dưới đây:
ALTER TABLE INVENTRY
ADD (SALE_CODE CHAR(1));
Một số phiến bản SQL (chẳng hạn của XDB) có thể bỏ qua cặp dấu
ngoặc tròn:
ALTER TABLE INVENTRY
ADD SALE_CODE CHAR(1);
4. Nhập dữ liệu cho cột mới
Để đưa dữ liệu vào trong một phần của hàng, SQL dùng lệnh UPDATE.
Lệnh INSERT chúng ta dùng trước đây không đưa ra cách xác định ví trí các
mục dữ liệu cột cụ thể; hoặc một hàng đầy đủ hoặc không có hàng nào được
đưa vào. Chẳng hạn, đưa giá trị ‘2’ của thuộc tính SALE_CODE vào hàng
bốn, dùng lệnh UPDATE kết hợp với khóa chính P_CODE ‘54778-2T’ để
hoàn thành công việc. (Kiểm tra nội dung bảng gốc và lưu ý rằng P_CODE =
‘54778-2T’ định danh hàng bốn!) Nhập giá trị với dãy lệnh
UPDATE INVENTRY
SET SALE_CODE = ‘2’
WHERE P_CODE = ‘54778-2T’;
Lệnh dưới đây với bảng đã thay đổi kiểm tra ảnh hưởng của lệnh nêu trên:
SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY
WHERE P_CODE = ‘54778-2T’;
đưa ra kết quả
P_DESCRIPT STOCK_DATE SALE_CODE
Rat-tail file, 1/8in fine 12/03/90 2

Dãy dữ liệu có thể được nhập vào bởi cùng một cách, xác định từng vị trí
mục dữ liệu với khóa chính P_CODE và ví trí cột của nó SALE_CODE.
Chẳng hạn, nếu chúng ta muốn nhập giá trị SALE_CODE ‘1’ ứng với các giá
trị P_CODE là ‘2232/QWE’ và ‘2232/QTY’, chúng ta dùng
UPDATE INVENTRY
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 100
SET SALE_CODE = ‘1’
WHERE P_CODE IN (‘2232/QWE’, ‘2232/QTY’);
Hoặc nếu RDBMS của bạn không hỗ trợ IN, dùng hai lệnh dưới đây:
UPDATE INVENTRY
SET SALE_CODE = ‘1’
WHERE P_CODE = ‘2232/QWE’;
UPDATE INVENTRY
SET SALE_CODE = ‘1’
WHERE P_CODE = ‘2232/QTY’;
Kết quả có thể được kiểm tra với lệnh
SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY;
để đưa ra kết quả

P_DESCRIPT STOCK_DATE SALE_CODE
7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade
08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90



2


1


1

Mặc dù dãy UPDATE vừa chỉ ra cho phép chúng ta bổ sung dữ liệu vào
các ô bảng đã chỉ rõ, quá trình rất phức tạp. May mắn là, nếu mối quan hệ có
thể được thiết lập giữa các mục dữ liệu và các cột hiện có, mối quan hệ đó có
thể được dùng để gán các giá trị vào các ô thích hợp của chúng. Chẳng hạn,
giả sử rằng chúng ta muốn đặt mã bán hàng dựa trên STOCK_DATE vào
bảng, dùng lịch sau:
STOCK_DATE SALE_CODE
trước 01/01/91 2
trong khoảng 01/01/91 đến 07/01/91 1
Hai dãy lệnh dưới đây sẽ tạo ra các phép gán thích hợp. (Lưu ý: Một số
phiên bản SQL yêu cầu không dùng các ngoặc nhọn hoặc dấu nháy cho giá trị
ngày!)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 101
UPDATE INVENTRY
SET SALE_CODE = ‘2’
WHERE STOCK_DATE < ‘01/01/91’;
UPDATE INVENTRY
SET SALE_CODE = ‘1’
WHERE STOCK_DATE >= ‘01/01/91’
STOCK_DATE < ‘07/01/91’;
Kiểm tra kết quả gán như dưới đây:
SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY;
Kết quả đưa ra là
P_DESCRIPT STOCK_DATE PRICE SALE_CODE
7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade
08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92

1

2
1

2


2
(Lưu các thay đổi bởi lệnh COMMIT.)
5. Sao chép một phần bảng
Về sau bạn sẽ thấy rằng có thể cần phải tách cấu trúc bảng thành một số
phần nào đó khi nó không thỏa mãn một kiểm tra thiết kế nào đó. May mắn
là, SQL cho phép chúng ta sao chép nội dung của các cột đã chọn sang các
bảng mới vừa được tạo ra để tránh phải nhập lại dữ liệu một cách thủ công.
Để sao chép các cột đã chọn từ một bảng, trước hết cần tạo cấu trúc bảng
mới để nhận dữ liệu. Chẳng hạn, nếu bạn muốn sao chép P_CODE và PRICE
từ bảng INVENTRY sang bảng mới có tên là TEMP_1, trước hết cần tạo ra
cấu trúc bảng TEMP_1 như dưới đây.
CREATE TABLE TEMP_1 ( PART_CODE CHAR(8) NOT NULL,
PRICE DECIMAL(8,2));
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 102
Nhớ rằng các tên cột của bảng TEMP_1 không trùng với các tên cột của
bảng gốc và bảng mới không nhất thiết phải có số cột bằng số cột của bảng
gốc. Khi đó, cột đầu tiên trong bảng TEMP_1 được đặt tên là PART_CODE,
mà không phải là P_CODE có trong bảng INVENTRY; đồng thời bảng
TEMP_1 chỉ chứa hai cột, không phải bảy cột như trong bảng INVENTRY.
Tuy nhiên, các đặc điểm cột phải tương xứng; bạn không thể sao chép thuộc
tính kiểu kí tự vào cấu trúc số, và ngược lại.
Sau khi đã tạo được bảng nhận, sao chép các giá trị cột tương ứng vào
bảng TEMP_1 mới tạo ra bởi dãy lệnh
INSERT INTO <Bảng nhận> (Danh sách tên cột của bảng nhận)
SELECT <Danh sách tên cột của các cột cần sao chép>
FROM <Tên bảng gốc>
Do đó, chúng ta dùng
INSERT INTO TEMP_1 (PART_CODE, PRICE)
SELECT P_CODE, PRICE FROM INVENTRY;
Nội dung của bảng TEMP_1 bây giờ có thể được kiểm tra bởi câu vấn tin
SELECT * FROM TEMP_1;
để liệt kê nội dung của mới TEMP_1:
PART_CODE PRICE
13-Q2/P2
ZW-23116
2QQ23DRT
54778-2T
23114-AA
89-WRE-Q
2232/QWE
1546-QQ2
WWE/D324
2232/QTY
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92
Trong chương 5 bạn sẽ thấy tầm quan trọng của sao chép một phần bảng
trong cái gọi là quá trình chuẩn hoá.
6. Xoá bảng khỏi CSDL
Một bảng có thể bị xoá khỏi CSDL bởi lệnh DROP. Chẳng hạn, chúng ta có
thể xoá bảng TEMP_1 vừa tạo với
DROP TABLE TEMP_1;
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 103
VI. VẤN TIN PHỨC TẠP VÀ CÁC HÀM SQL
Một trong những ưu điểm quan trọng nhất của SQL là khả năng cho
phép người dùng tạo ra các câu vấn tin phức tạp với nhiều dạng khác nhau.
Các toán tử lôgic được giới thiệu ở phần trước để cập nhật nội dung bảng
cũng sẽ chỉ làm việc trong môi trường vấn tin. Ngoài ra, SQL còn cung cấp
các hàm hữu ích để đếm, tìm giá trị nhỏ nhất và lớn nhất, tính giá trị trung
bình... Hơn thế nữa, SQL cũng cho phép người dùng hạn chế các câu vấn tin
đối với các mục dữ liệu không trùng lặp hoặc các mục trùng lặp của nó có thể
được nhóm lại.
1. Sắp xếp danh sách
Mệnh đề ORDER BY của SQL đặc biệt hữu dụng nếu thứ tự liệt kê quan
trọng đối với bạn. Cú pháp
ORDER BY <thuộc tính>
tạo ra một danh sách theo thứ tự tăng dần. Nếu danh sách cần chỉ ra theo
thứ tự giảm dần, dùng
ORDER BY <thuộc tính> DESC
Chẳng hạn, nếu bạn muốn nội dung của bảng INVENTRY được liệt kê
bởi PRICE theo thứ tự tăng dần, dùng
SELECT *
FROM INVENTRY
ORDER BY PRICE;
để đưa ra kết quả như dưới đây.

P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
54778-2T Rat-tail file, 1/8in fine 12/03/1990 43 20 4.99 21344
2QQ23DRT PVC pipe, 3.5in, 8ft 07/02/1991 188 75 5.87 21344
WWE/D324 Claw hammer 08/12/1991 23 10 5.95 21225
ZW-23116 2.5in, wood screw, 100 06/25/1991 237 100 8.45 21231
23114-AA Sledge hammer, 12lb 02/15/1991 8 5 14.4 21231
13-Q2/P2 7.25in, power saw blade 08/12/1991 32 15 14.99 21344
1546-QQ2 Hardware cloth,1/4in,50ft 08/14/1991 15 5 39.95 23119
2232/QWE B&D jigsaw, 8in, blade 11/26/1990 6 3 99.87 24288
2232/QTY B&D jigsaw, 12in, blade 11/26/1990 8 3 109.92 24288
89-WRE-Q Houselite chain saw, 16in 08/11/1991 11 5 256.99 24288

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 104
So sánh danh sách này với nội dung bảng thực tế trong bảng 3.1 và lưu ý
sự thay đổi theo thứ tự được liệt kê: sản phẩm giá thấp nhất bây giờ được
đứng đầu tiên, tiếp theo là các sản phẩm giá thấp nhất tiếp theo... Bạn nên biết
rằng ORDER đưa ra quá trình sắp xếp lôgic; nội dung bảng thực tế không bị
ảnh hưởng bởi lệnh ORDER.
Tiếp theo, gõ dòng lệnh
SELECT *
FROM INVENTRY
ORDER BY PRICE DESC;
và khảo sát kết quả đưa ra:
P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
89-WRE-Q Houselite chain saw, 16in 08/11/1991 11 5 256.99 24288
2232/QTY B&D jigsaw, 12in, blade 11/26/1990 8 3 109.92 24288
2232/QWE B&D jigsaw, 8in, blade 11/26/1990 6 3 99.87 24288
1546-QQ2 Hardware cloth,1/4in,50ft 08/14/1991 15 5 39.95 23119
13-Q2/P2 7.25in, power saw blade 08/12/1991 32 15 14.99 21344
23114-AA Sledge hammer, 12lb 02/15/1991 8 5 14.4 21231
ZW-23116 2.5in, wood screw, 100 06/25/1991 237 100 8.45 21231
WWE/D324 Claw hammer 08/12/1991 23 10 5.95 21225
2QQ23DRT PVC pipe, 3.5in, 8ft 07/02/1991 188 75 5.87 21344
54778-2T Rat-tail file, 1/8in fine 12/03/1990 43 20 4.99 21344

Nếu bạn muốn tạo ra một danh mục điện thoại, có lẽ là hữu dụng nếu
bạn đưa ra dãy được sắp thứ tự (tên cuối, tên đầu, kí tự đầu của tên đệm) theo
ba bước:
Sắp xếp theo tên cuối.
Trong các tên cuối, sắp xếp theo tên đầu.
Trong các tên được sắp theo bước 2, sắp xếp theo kí tự đầu của tên đệm.
Dãy được sắp đa mức như vậy được gọi là dãy được sắp theo tầng, nó
được tạo ra một cách dễ dàng bởi việc liệt kê danh sách thuộc tính, cách nhau
bởi dấu phảy, sau mệnh đề ORDER BY:
ORDER BY <thuộc tính 1, thuộc tính 2, ...>
(Khái niệm tầng được dùng để mô tả điều kiện theo đó phép sắp xếp
lôgic được thực hiện theo bước.) Chẳng hạn, lệnh
SELECT C_LNAME, C_FNAME, C_I, V_PHONE
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 105
FROM VENDOR
ORDER BY C_LNAME, C_FNAME, C_I;
sẽ đưa ra kết quả dưới đây:
C_LNAME C_FNAME C_I V_PHONE
Cavazos Maria D. 800-333-9011
Fielding Anne K. 666-233-1281
Smith Sally K. 800-234-1200
Smith Stanley G. 800-213-9999
Smithson Ronald W. 212-667-0090

Mệnh đề ORDER BY hữu dụng trong nhiều ứng dụng, đặc biệt khi điều
kiện DESC được sử dụng. Hãy xem xét khả năng khi kiểm tra ngày đến hạn
hoá đơn theo thứ tự giảm dần, kiểm tra các hạng mục ngân sách các cơ quan
chính phủ theo số lượng, hoặc khảo sát một số bất kỳ các giao dịch tài chính.
Chúng ta cũng có thể dùng mệnh đề ORDER BY kết hợp với các lệnh
SQL khác. Chẳng hạn, để ý cách dùng các hạn chế trong dãy lệnh dưới đây:
SELECT P_DESCRIPT, V_CODE, STOCK_DATE, PRICE
FROM INVENTRY
WHERE STOCK_DATE < ‘07/15/91’
AND PRICE <= 50.00
ORDER BY V_CODE, PRICE DESC;
Kết quả đưa ra sẽ là danh sách dưới đây:
P_DESCRIPT V_CODE STOCK_DATE PRICE
Sledge hammer, 12lb 21231 02/15/1991 14.40
2.5in, wood screw, 100 21231 06/25/1991 8.45
PVC pipe, 3.5in, 8ft 21344 07/02/1991 5.87
Rat-tail file, 1/8in fine 21344 12/03/1990 4.99

Nhận xét rằng bên trong V_CODE đầu tiên các giá được liệt kê theo thứ
tự giảm dần, theo ngay sau bởi V_CODE thứ hai, cũng với các giá được liệt
kê theo thứ tự giảm dần.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 106
2. Loại bỏ trùng lặp
Có bao nhiêu nhà cung cấp khác nhau hiện được thể hiện trong bảng
INVENTRY? Một phép liệt kê đơn giản (SELECT) sẽ không hiệu quả lắm
nếu bảng chứa vài ngàn hàng và chúng ta phải chọn lọc ra một cách thủ công
các mã của nhà cung cấp. Máy mắn là, mệnh đề DISTINCT của SQL được
thiết kế để đưa ra một danh sách các giá trị khác nhau. Chẳng hạn, lệnh
SELECT DISTINCT V_CODE
FROM INVENTRY;
sẽ chỉ đưa ra các mã (V_CODE) nhà cung cấp khác nhau được tìm thấy
trong bảng INVENTRY:
V_CODE
21344
21231
24288
23119
21225

3. Các hàm số học SQL
SQL sẽ thực hiện các tóm tắt toán học khác nhau cho bạn, như đếm số
hàng thỏa mãn một điều kiện đã cho nào đó, tìm các giá trị lớn nhất và nhỏ
nhất của một thuộc tính đã cho nào đó, cộng các giá trị trong một cột đã cho,
tính trung bình các giá trị trong một cột đã cho... Các hàm được chỉ ra trong
bảng 3.6.
Bảng 3.6 Các hàm số học SQL
Hàm Kết quả thực hiện
COUNT Số hàng bao hàm thuộc tính đã mô tả
MIN Giá trị thuộc tính nhỏ nhất
MAX Giá trị thuộc tính lớn nhất
AVG Trung bình số học ứng với thuộc tính đã mô tả
SUM Tổng tất cả các giá trị của thuộc tính đã chọn

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 107
COUNT. Vì COUNT được thiết kế để đếm số “gí trị” cụ thể của thuộc
tính, nó thường được dùng kết hợp với mệnh đề DISTINCT. Chẳng hạn, trả
lời cho câu hỏi Có bao nhiêu nhà cung cấp khác nhau hiện được tìm thấy
trong bảng INVENTRY? chúng ta có thể dùng lệnh
SELECT COUNT (DISTINCT V_CODE)
FROM INVENTRY;
sẽ đưa ra kết quả

COUNT(DISTINCT V_CODE)
5

Nói cách khác, bảng chứa năm mã nhà cung cấp khác nhau.
Tất cả các hàm số học đều có thể được dùng kết hợp với các điều kiện
được chỉ ra. Giả sử bạn được yêu cầu đưa ra câu trả lời cho bài toán sau:
Tìm số mặt hàng trong bảng INVENTRY mà giá của chúng nhỏ hơn
hoặc bằng 10.00USD.
Câu trả lời được cho bởi dòng lệnh
SELECT COUNT(DISTINCT V_CODE)
FROM INVENTRY
WHERE PRICE <= 10.00;
Dãy lệnh này sẽ đưa ra kết quả
COUNT(DISTINCT V_CODE)
3

(Khảo sát bảng INVENTRY ta thấy rằng bảng chứa năm số V_CODE
khác nhau – 21344, 21231, 24288, 23119 và 21225 – trong đó có ba số ứng
với các sản phẩm mà giá của chúng nhỏ hơn hoặc bằng 10.00USD.)
Dấu hoa thị (*) vẫn được dùng như một kí tự thay thế để tất cả các bản
ghi thỏa mãn điều kiện đã mô tả. Trả lời câu hỏi
Có bao nhiêu hàng trong bảng INVENTRY chứa sản phẩm ứng với
PRICE nhỏ hơn hoặc bằng 10.00USD?
dùng dãy lệnh
SELECT COUNT(*)
FROM INVENTRY
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 108

WHERE PRICE <= 10.00;
để đưa ra câu trả lời đúng
COUNT(*)
4
(Khảo sát nội dung bảng INVENTRY ta thấy rằng có bốn hàng thoả mãn
điều kiện đã chỉ ra.)
MAX và MIN. Các hàm MAX và MIN sẽ giúp chúng ta tìm câu trả lời
cho các ài toán như
Tìm giá lớn nhất trong bảng INVENTRY.
Tìm giá nhỏ nhất trong bảng INVENTRY.
Câu trả lời đúng cho bài toán thứ nhất được tạo ra bởi
SELECT MAX(PRICE)
FROM INVENTRY;
Dãy lệnh này sẽ đưa ra kết quả
MAX(PRICE)
256.99
Câu trả lời đúng cho bài toán thứ hai được tạo ra bởi
SELECT MIN(PRICE)
FROM INVENTRY;
Dãy lệnh này sẽ đưa ra kết quả
MIN(PRICE)
4.99
Các hàm số học cũng có thể được dùng với các hạn chế lôgic phức tạp
hơn. Tuy nhiên, bạn phải nhớ rằng các hàm số học chỉ đưa ra một giá trị duy
nhất trên tất cả các giá trị được tìm thấy trong bảng: giá trị lớn nhất duy nhất,
giá trị nhỏ nhất duy nhất, tổng đếm duy nhất hoặc giá trị trung bình duy nhất.
Thường dễ quên các cảnh báo đơn giản này. Chẳng hạn, chúng ta cùng khảo
sát câu hỏi
Sản phẩm nào có giá cao nhất?
Mặc dù câu hỏi này khác đơn giản, dãy lệnh SQL
SELECT P_CODE, P_DESCRIPT, PRICE
FROM INVENTRY
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 109
WHERE PRICE = MAX(PRICE);
sẽ không đưa ra các kết quả mong muốn vì
SELECT đưa ra một danh sách nhiều giá trị giá.
Phép so sánh với MAX(PRICE) xảy ra quá muộn trong dãy lệnh; các giá
trị PRICE đã được lấy ra từ bảng trước khi hàm MAX(PRICE) có thể được
khớp vào phép so sánh.
Do đó, để trả lời câu hỏi, bạn phải duyệt các mục với một hạn chế giá trị
duy nhất bằng cách sử dụng một thủ tục được gọi là vấn tin lồng nhau. Như
tên của nó đã chỉ rõ, vấn tin lồng nhau là vấn tin trong vấn tin. Trong trường
hợp này, vấn tin lồng nhau gồm hai phần:
vòng trong, được thực hiện trước.
vòng ngoài, được thực hiện sau. (Vòng ngoài thường là SELECT đầu
tiên được gặp trong dãy lệnh.)
Dùng dãy lệnh dưới đây như một ví dụ, lưu ý rằng vòng trong trước hết
tìm giá trị giá lớn nhất, được lưu trong bộ nhớ. Vì bây giờ vòng ngoài có một
giá trị để so sánh từng giá trị PRICE với nó nên câu vấn tin được thực hiện
đúng đắn.
SELECT P_CODE, P_DESCRIPT, PRICE
FROM INVENTRY
WHERE PRICE = (SELECT MAX(PRICE)
FROM INVENTRY);
Như mong muốn, dãy lệnh trên đưa ra kết quả
P_CODE P_DESCRIPT PRICE
89-WRE-Q Houselite chain saw, 16in 256.99

AVG. Hàm AVG tương tự như các hàm MIN và MAX, có cùng các hạn
chế tính toán. Một giá trị PRICE trung bình duy nhất có thể được tạo ra bằng
cách dùng lệnh
SELECT AVG(PRICE)
FROM INVENTRY;
để đưa ra kết quả
AVG(PRICE)
56.14

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 110
Một danh sách theo thứ tự giá giảm dần của tất cả các sản phẩm có giá
lớn hơn giá trị trung bình có thể được tạo ra bởi
SELECT *
FROM INVENTRY
WHERE PRICE > (SELECT AVG(PRICE)
FROM INVENTRY)
ORDER BY PRICE DESC;
Kết quả đưa ra như sau:
P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE
89-WRE-Q Houselite chain saw, 16in 08/11/1991 11 5 256.99 24288
2232/QTY B&D jigsaw, 12in, blade 11/26/1990 8 3 109.92 24288
2232/QWE B&D jigsaw, 8in, blade 11/26/1990 6 3 99.87 24288

SUM. Hàm SUM tính tổng cho một thuộc tính đã chỉ ra nào đó, theo bất
cứ điều kiện nào bạn áp đặt. Chẳng hạn, nếu bạn muốn tìm giá trị tổng cộng
của tất cả các sản phẩm theo thống kê, bạn có thể dùng
SELECT SUM(ON_HAND*PRICE)
FROM INVENTRY;
vì giá trị tổng cộng là tích của số sản phẩm hiện có và giá của nó.
4. Nhóm dữ liệu
Phân loại tần số xuất hiện có thể được tạo ra một cách nhanh chóng và
dễ dàng với mệnh đề GROUP BY của SQL. Mệnh đề GROUP BY có thể
được kết hợp với mọi hàm số học. Chẳng hạn, để tìm ra giá trị nhỏ nhất ứng
với từng mã bán hàng, sử dụng
SELECT SALE_CODE, MIN(PRICE)
FROM INVENTRY
GROUP BY SALE_CODE;
để tạo ra kết quả dưới đây:

SALE_CODE MIN(PRICE)

1
2
5.87
8.45
4.99

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 111
Tương tự bạn có thể tìm được giá trung bình trong mỗi mã bán hàng bởi
SELECT SALE_CODE, AVG(PRICE)
FROM INVENTRY
GROUP BY SALE_CODE;
để đưa ra kết quả
SALE_CODE AVG(PRICE)

1
2
64.75
11.43
71.59

Nhớ rằng mệnh đề GROUP BY không thể theo dõi các thuộc tính không
được mô tả trong lệnh SELECT. Chẳng hạn, câu vấn tin
SELECT *
FROM INVENTRY
GROUP BY SALE_CODE;
sẽ đưa ra thông báo lỗi
not a GROUP BY expression (không phải biểu thức GROUP BY)
vì biến nhóm được chỉ rõ duy nhất là SALE_CODE, đồng thời bạn đang
ra lệnh so sánh một biến duy nhất này với tất cả các biến trong bảng. (Chẳng
hạn, không thể nhóm PRICE bởi SALE_CODE!)
5. Bảng ảo: việc tạo các khung nhìn
Bạn có thể tạo ra một bảng lôgic (ảo) với lệnh VIEW. Bảng lôgic này chỉ
tồn tại trong bộ nhớ, đồng thời vẫn được xử lý như một bảng thực. Do đó, có
thể tạo ra bảng ảo sẵn dùng để tránh các nguy cơ người dùng ngẫu nhiên hoặc
(chủ ý) xoá dữ liệu hoặc bổ sung dữ liệu sai vào bảng thực.
Lệnh VIEW đặc biệt hữu dụng do nó được dùng để hạn chế người dùng
truy cập vào phần đã chọn của dữ liệu trong bảng. Để ý cú pháp trong dãy
lệnh dưới đây, nó tạo ra bảng được đặt tên là INVENT_2. Bảng lôgic
INVENT_2 chỉ chứa hai thuộc tính được ấn định (P_CODE và PRICE) và
kèm theo đó là chỉ ứng với các giá lớn hơn 50.00USD.
CREATE VIEW INVENT_2 AS
SELECT P_CODE, PRICE
FROM INVENTRY
WHERE PRICE > 50.00;
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 112
Sau khi đã tạo ra bảng lôgic, SELECT sẽ chỉ trình bày các thuộc tính
được giới hạn ở trên:
SELECT *
FROM INVENT_2;
Kết quả đạt được là:
P_CODE PRICE
89-WRE-Q
2232/QWE
2232/QTY
256.99
99.87
109.92

Với các khung nhìn chúng ta có thể làm cho mọi dữ liệu sẵn dùng với
người dùng đồng thời không phải bận tâm đến các hành vi làm sai dữ liệu
trong bảng thực, theo đó nâng cao tính an toàn dữ liệu của hệ thống. Đồng
thời khả năng hạn chế người dùng vào các phần dữ liệu được chỉ rõ của chúng
ta là yếu tố cơ bản đảm bảo tính bí mật cũng như an toàn dữ liệu.
6. Chỉ mục SQL
Bạn đã biết trong chương 2 chỉ mục là gì và cách mà nó được dùng để
nâng cao hiệu quả tìm kiếm dữ liệu. Các chỉ mục thường được tạo ra để đáp
ứng một loại tìm kiếm đặc biệt sau khi các bảng đã được sử dụng một thời
gian nào đó. Tuy nhiên, nhiều RDBMS chứa các tiện ích sẽ cho phép bạn mô
tả các chỉ mục theo các thuộc tính được chọn khi các bảng được tạo ra. Và về
sau bạn cũng sẽ thấy nhu cầu cần có các chỉ mục bổ sung trong quá trình sử
dụng bảng. Vì vậy, khả năng tạo ra nhanh chóng và hiệu quả các chỉ mục tại
thời điểm bất kỳ là quan trọng. Các chỉ mục SQL có thể được tạo ra trên cơ sở
các thuộc tính đã chọn. Chẳng hạn, dãy lệnh dưới đây tạo ra chỉ mục với tên
P_CODEX, dựa vào thuộc tính P_CODE được lưu trong bảng INVENTRY:
CREATE INDEX P_CODEX
ON INVENTRY(P_CODE);
SQL sẽ không cho bạn ghi đè lên một chỉ mục đang tồn tại trước khi
cảnh báo bạn, theo đó bảo toàn cấu trúc chỉ mục trong từ điển dữ liệu. Bạn
cũng có thể tạo một chỉ mục kèm với việc ngăn chặn bạn dùng giá trị đã được
dùng trước đó. Đặc điểm như vậy đặc biệt hữu dụng khi thuộc tính chỉ mục là
khoá chính với các giá trị không trùng nhau.
CREATE UNIQUE INDEX P_CODEX
ON INVENTRY(P_CODE);
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 113
Nếu bạn cố gắng đưa vào giá trị P_CODE đã có, SQL sẽ đưa ra thông
báo lỗi
duplicate value in index (giá trị đã có trong chỉ mục)
7. Liên kết các bảng CSDL
Khả năng kết hợp (JOIN) các bảng theo các thuộc tính chung có lẽ là sự
phân biệt quan trọng nhất giữa CSDL quan hệ và các CSDL khác. Lệnh JOIN
được thực hiện khi dữ liệu cần lấy ra từ nhiều hơn một bảng tại một thời
điểm. (Nếu cần thiết, xem lại các định nghĩa JOIN tự nhiên, JOIN bằng và các
ví dụ trong chương 2. Nhớ rằng SQL dựa trên đại số quan hệ.)
Để thực hiện lệnh JOIN thành công, danh sách các thuộc tính được liệt
kê trong SELECT phải được xác định rõ. Chẳng hạn, giả sử bạn muốn liệt kê
thông tin được dẫn ra từ hai bảng CSDL ROBCOR. Vì V_CODE là khoá
ngoại trong bảng INVENTRY và khóa chính trong bảng VENDOR, liên kết
được thành lập theo V_CODE:
Bảng Các thuộc tính cần chỉ ra Thuộc tính liên kết
INVENTRY P_DESCRIPT, PRICE V_CODE
VENDOR V_COMPANY, V_PHONE

Vậy lệnh có thể là
SELECT INVENTRY.P_DESCRIPT,
INVENTRY.PRICE,
VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE;
Dãy lệnh trên đưa ra kết quả:
P_DESCRIPT PRICE V_COMPANY V_PHONE
7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade
14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92
Q&D Building Supplies
J.I. Supplies, Inc
Q&D Building Supplies
Q&D Building Supplies
J.I. Supplies, Inc
Harding Super Wholesale
Harding Super Wholesale
Charlie’s Wholesale
Rather’s Building, Inc.
Harding Super Wholesale
800-333-9011
666-233-1281
800-333-9011
800-333-9011
666-233-1281
800-213-9999
800-213-9999
212-667-0090
800-234-1200
800-213-9999

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 114
Kết quả đưa ra có thể được trình bày theo một thứ tự khác do lệnh SQL
đưa ra một danh sách dựa trên vị trí con trỏ hiện thời. Trên thực tế, bạn có thể
nhận được một danh sách với thứ tự khác nhau tại các thời điểm khác nhau.
Tuy nhiên, bạn có thể tạo ra một danh sách với thứ tự biết trước với điều kiện
ORDER:
SELECT INVENTRY.P_DESCRIPT, INVENTRY.PRICE,
VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE
ORDER BY PRICE;
Trong trường hợp này, danh sách của bạn sẽ luôn được sắp xếp từ giá
thấp nhất tới giá cao nhất:

P_DESCRIPT PRICE V_COMPANY V_PHONE
Rat-tail file, 1/8in fine 4.99 Q&D Building Supplies 800-333-9011
PVC pipe, 3.5in, 8ft 5.87 Q&D Building Supplies 800-333-9011
Claw hammer 5.95 Rather’s Building, Inc. 800-234-1200
2.5in, wood screw, 100 8.45 J.I. Supplies, Inc 666-233-1281
Sledge hammer, 12lb 14.4 J.I. Supplies, Inc 666-233-1281
7.25in, power saw blade 14.99 Q&D Building Supplies 800-333-9011
Hardware cloth,1/4in,50ft 39.95 Charlie’s Wholesale 212-667-0090
B&D jigsaw, 8in, blade 99.87 Harding Super Wholesale 800-213-9999
B&D jigsaw, 12in, blade 109.92 Harding Super Wholesale 800-213-9999
Houselite chain saw, 16in 256.99 Harding Super Wholesale 800-213-9999

Lưu ý rằng dãy lệnh SQL trên kết nối một hàng trong bảng INVENTRY
với một hàng phù hợp theo cột V_CODE của bảng VENDOR. Vì nhà cung
cấp bất kỳ có thể chuyển một số bất kỳ các sản phẩm được đặt mua vào
CSDL ROBCOR, bảng INVENTRY có thể nhiều mục V_CODE ứng với mỗi
mục V_CODE trong bảng VENDOR. Nói cách khác, mỗi V_CODE trong
VENDOR có thể tương ứng với nhiều hàng V_CODE trong INVENTRY.
Nếu chúng ta quên không mô tả mệnh đề WHERE, chúng ta sẽ nhận
được một kết quả là tích tương ứng với kết nối tự nhiên. (Xem chương 2 để
ôn lại các khái niệm này, nếu cần thiết.) Vì bảng INVENTRY chứa mười
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 115
hàng và bảng VENDOR chứa năm hàng, tích Đề-các có thể đưa ra một danh
sách (10 × 5) = 50 hàng do mỗi hàng trong INVENTRY có thể kết nối với
từng hàng của bảng VENDOR.
Tất cả các lệnh SQL đều có thể được dùng để kết nối bảng. Chẳng hạn,
dãy lệnh dưới đây hoàn toàn có thể chấp nhận được trong SQL:

SELECT INVENTRY.P_DESCRIPT, INVENTRY.PRICE,
VENDOR.V_COMPANY, VENDOR.V_PHONE
FROM INVENTRY, VENDOR
WHERE INVENTRY.V_CODE = VENDOR.V_CODE
AND INVENTRY.STOCK_DATE > 07/01/91;
Một bí danh (tên gọi khác) có thể được dùng để định danh các bảng
được dùng để lấy ra dữ liệu. Lưu ý rằng chúng ta đã dùng bí danh “A” và “B”
để gắn cho các bảng INVENTRY và VENDOR trong dãy lệnh dưới đây. Bất
cứ một tên bảng hợp pháp nào đều có thể được dùng như một bí danh. (Chúng
ta cũng đã chỉ liệt kê các tên bảng - không đi kèm thuộc tính – như một nguồn
dữ liệu do các bảng không chứa các tên trùng lặp xuất hiện trong lệnh
SELECT.)
SELECT P_DESCRIPT, PRICE, V_COMPANY, V_PHONE
FROM INVENTRY A, VENDOR B
WHERE A.V_CODE = B.V_CODE
ORDER BY PRICE;
Một bí danh đặc biệt hữu dụng khi một bảng phải được kết nối với chính
nó theo các nhóm.
VII. TÓM TẮT
Cấu trúc lệnh SQL có thể được chia thành ba tập thủ tục: định nghĩa dữ
liệu, quản lý dữ liệu, và thao tác (vấn tin) dữ liệu.
Định nghĩa dữ liệu
1. Tạo CSDL. SQL chuẩn sử dụng định nghĩa lược đồ:
CREATE SCHEMA AUTHORIZATION <Người tạo>
Nhiều cài đặt SQL sử dụng
CREATE DATABASE <Tên CSDL>
hoặc một số dạng gần gũi với lệnh này.
2. Tạo các bảng CSDL. Chuẩn SQL sử dụng cấu trúc lệnh
CREATE TABLE <Tên bảng>
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 116
Quản lý dữ liệu và vấn tin
INSERT được dùng để nhập dữ liệu vào trong bảng.
UPDATE được dùng để thay đổi (cập nhật) dữ liệu trong bảng.
DELETE được dùng để xoá các hàng bảng.
SELECT là cơ sở cho mọi câu vấn tin SQL.
Nhiều cài đặt SQL, chẳng hạn dBASE IV và ORACLE, yêu cầu một
lệnh SQL phải được kết thúc với một dấu chấm phảy. Một số khác, bao gồm
OS/2 Database Manager của IBM và XDB, không chấp nhận cách sử dụng
với dấu chấm phảy như vậy. Đọc tài liệu tra cứu của phần mềm tương ứng để
định rõ các cú pháp thích hợp.
Tóm tắt lệnh SQL dưới đây trình bày cách sử dụng các câu vấn tin SQL,
với bảng ví dụ là STUDENT, chứa các thuộc tính S_NUM, S_NAME,
S_DOB, S_STATE và S_GPA, S_NUM là khoá chính của bảng STUDENT.
• Tạo bảng STUDENT.
Dùng NOT NULL kết hợp với khoá chính để khẳng định toàn vẹn thực
thể.
CREATE TABLE STUDENT (S_NUM CHAR(8) NOT NULL,
S_NAME CHAR(25),
S_DOB DATE,
S_STATE CHAR(2),
S_GPA DECIMAL(4,2));
• Nhập dữ liệu vào bảng STUDENT.
INSERT INTO STUDENT
VALUES(‘23122456’, ‘Jane P. Genaldo’, ‘02/12/46’, ‘TN’, 3.67);
• Liệt kê tất cả các thuộc tính cho tất cả các hàng.
(Kí hiệu * là kí tự thay thế chỉ ra “tất cả các hàng.”)
SELECT *
FROM STUDENT;
• Liệt kê các thuộc tính đã chọn ứng với mọi hàng.
SELECT S_NAME, S_GPA
FROM STUDENT;
• Liệt kê các thuộc tính đã chọn ứng với sinh viên có tên là George W.
Batmman.
SELECT S_NAME, S_GPA
FROM STUDENT
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 117
WHERE S_NAME = ‘George W. Batmman’;
• Lưu bảng.
COMMIT STUDENT;
• Sửa chữa.
UPDATE STUDENT
SET S_NAME = ‘Jane G. Bronner’, S_GPA = 3.76
WHERE S_NUM = ‘231234536’;
• Xoá hàng.
DELETE FROM STUDENT
WHERE S_NUM = ‘24112324’;
• Khôi phục nội dung bảng.
ROLLBACK;
• Sử dụng các toán tử toán học để hạn chế kết quả vấn tin. Các toán tử
toán học bao gồm:
= Bằng
< Nhỏ hơn
> Lớn hơn
<= Nhỏ hơn hoặc bằng
>= Lớn hơn hoặc bằng
<> Không bằng
Các toán tử toán học có thể được dùng trên các xâu cũng như trên các số.
So sánh xâu được thực hiện từ trái qua phải theo các giá trị mã ASCII. Do đó
‘AB’ < ‘BB’.
SELECT *
FROM STUDENT
WHERE S_GPA = 3.00;
• Sử dụng thuộc tính dữ liệu để hạn chế kết quả vấn tin.
SELECT *
FROM STUDENT
WHERE S_DOB < ‘01/01/40’;
(Một số cài đặt SQL không yêu cầu dùng các dấu đóng mở ngoặc để
chặn các giá trị ngày; một số khác dùng dạng ngày mặc định ’01-JAN-40’;
riêng dBASE IV yêu cầu dùng hàm STOD đẻ chuyển xâu ngày thành ngày
Julian:
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 118
SELECT *
FROM STUDENT
WHERE S_DOB < CTOD(‘01/01/40’);)
• Sử dụng các toán tử lôgic để hạn chế các kết quả đưa ra.
Các toán tử lôgic bao gồm AND, OR, và NOT.
SELECT S_NAME, S_GPA
FROM STUDENT
WHERE S_DOB < ‘01/01/40’
AND S_GPA >= 3.00;
SELECT *
FROM STUDENT
WHERE S_STATE NOT ‘IN’;
• Xác định khoảng giá trị cho các thuộc tính trong vấn tin: BETWEEN.
SELECT *
FROM STUDENT
WHERE S_GPA BETWEEN 3.00 AND 3.50;
Một số cài đặt SQL không hỗ trợ BETWEEN. Một câu vấn tin tương tự
có thể được tạo ra với các toán tử toán học:
SELECT *
FROM STUDENT
WHERE S_GPA >= 3.00
AND S_GPA <= 3.50;
• Kiểm tra điều kiện null.
SELECT *
FROM STUDENT
WHERE S_DOB IS NULL;
dBASE IV không hỗ trợ toán tử null. Để kiểm tra ngày null, dùng
SELECT *
FROM STUDENT
WHERE DTOC(S_DOB = ‘ / / ‘);
• Kiểm tra các giá trị trong một tập.
SELECT *
FROM STUDENT
WHERE S_NUM IN (‘22122454’, ‘21222456’, ‘2543667’);
liệt kê các hàng tương ứng với các số sinh viên 22122454 hoặc
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 119
21222456 hoặc 2543667.
• Kiểm tra sự tồn tại của các giá trị trong thuộc tính.
SELECT *
FROM STUDENT
WHERE S_NUM EXIST;
• Thay đổi cấu trúc bảng.
- Thay đổi đặc điểm thuộc tính.
ALTER TABLE STUDENT
MODIFY (S_GPA DEC(5,3));
Lưu ý: Kiểu dữ liệu không thể bị thay đổi trừ khi cột không có giá trị
(rỗng).
- Thêm cột.
ALTER TABLE STUDENT
ADD (S_PHONE CHAR(8));
- Cập nhật nhiều cột.
ALTER TABLE STUDENT
ADD (S_PHONE CHAR(8)
S_HONOR CHAR(12));
• Cập nhật dữ liệu.
- Mục dữ liệu đơn.
UPDATE STUDENT
SET S_GPA = 2.79
WHERE S_NUM = ‘21332433’;
- Cập nhật phức tạp.
UPDATE STUDENT
SET S_HONOR = ‘President list’
WHERE S_GPA > 3.75;
• Sao chép một phần bảng.
- Tạo cấu trúc bảng.
CREATE TABLE TEMP ( ST_NUMBER CHAR(8)
NOT NULL,
ST_NAME CHAR(25));
- Sao chép các giá trị cột tương ứng vào bảng mới.
INSERT INTO TEMP(ST_NUMBER, ST_NAME)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 120
SELECT S_NUM, S_NAME
FROM STUDENT;
- Xoá bảng khỏi CSDL.
DROP TABLE <Tên bảng>;
- Nhạy cảm dạng chữ. SQL xem kí tự in hoa và in thườn là khác nhau.
Do đó, ‘Smith’ và ‘SMITH’ sẽ được xem là các tên khác nhau. Một số cài đặt
SQL (dBASE IV, ORACLE) hỗ trợ hàm UPPER cho phép chuyển chữ in
thường thành chữ in hoa, qua đó cho phép tạo sự tương ứng trong mọi trường
hợp.
SELECT *
FROM STUDENT
WHERE UPPER(S_NAME) = ‘JOHN D. SMITH’;
• Tạo sự phù hợp cho các xâu bộ phận
Sử dụng các kí tự thay thế % và _.
SELECT *
FROM STUDENT
WHERE S_NAME LIKE ‘Smith%’;
SELECT *
FROM STUDENT
WHERE S_NAME LIKE ‘J__n_s’;
SELECT *
FROM STUDENT
WHERE S_NAME NOT LIKE ‘Smith%’;
• Liệt kê theo thứ tự
Sử dụng ORDER BY <danh sách thuộc tính> DESC.
SELECT *
FROM STUDENT
ORDER BY S_NAME, S_GPA;
SELECT *
FROM STUDENT
ORDER BY S_NAME, S_GPA DESC;
• Loại bỏ trùng lặp trong danh sách.
SELECT DíTINCT S_GPA
FROM STUDENT;
• Các hàm sô học SQL: COUNT, MIN, MAX, SUM.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 121
SELECT COUNT(DISTINCT S_GPA)
FROM STUDENT;
đưa ra số các điểm trung bình GPA của các sinh viên khác nhau.
SELECT MAX(S_GPA)
FROM STUDENT;
đưa ra điểm GPA cao nhất.
SELECT AVG(S_GPA)
FROM STUDENT;
đưa ra điểm GPA trung bình...
SELECT SUM(S_GPA)
FROM STUDENT;
đưa ra tổng số điểm GPA của tất cả các sinh viên.
Tìm ra các thuộc tính kết hợp với các kết quả của các hàm số học này,
dùng câu vấn tin lặp.
SELECT *
FROM STUDENT
WHERE S_GPA = (SELECT MAX(S_GPA)
FROM STUDENT);
• Nhóm dữ liệu
SELECT S_GPA, S_STATE
FROM STUDENT
GROUP BY S_GPA;
• • Tạo bảng ảo: VIEW
CREATE VIEW TEMP_2
SELECT S_NAME, S_GPA
FROM STUDENT
WHERE S_STATE = ‘TN’;
• Tạo chỉ mục SQL.
CREATE INDEX NUMDEX
ON STUDENT(S_NUM);
Nếu chỉ mục được dùng để giúp bạn tránh sử dụng giá trị trùng lặp, sử
dụng điều kiện UNIQUE.
CREATE UNIQUE INDEX NUMDEX
ON STUDENT(S_NUM);
• Kết nối các bảng
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 122
Thao tác được thực hiện khi dữ liệu cần được lấy ra từ hai hay nhiều
bảng khác nhau. Bảng dữ liệu nguồn phải được xác định. Giả sử tồn tại hai
bảng PROD và VENDOR. Các thuộc tính của bảng PROD là P_NUM (khoá
chính), P_DESCRIPT và V_CODE. Các thuộc tính của bảng VENDOR là
V_CODE (khoá chính) và V_NAME. Danh sách chứa các thuộc tính
P_DESCRIPT và V_NAME có thể nhận được bởi
SELECT PROD.P_DESCRIPT, VENDOR.V_NAME
FROM PROD.VENDOR
WHERE PROD.V_CODE = VENDOR.V_CODE;
Tất cả các lệnh SQL và các hàm nêu trên đều có thể được dùng kết hợp
với các bảng kết nối.
VIII. CÂU HỎI ÔN TẬP
Tất cả các câu hỏi ôn tập đều dựa vào bảng có tên EMP_1 dưới đây.
PER_NUM LASTNAME FIRSTNAME MI HIRED JOB_CODE
287
853
778
855
750
Johnson
Smithfied
Alonzo
Washington
Smith
Alice
William
Maria
Brandon
Larry
K.
P.
D.
B.
W.
09/29/83
03/20/88
07/01/87
12/12/85
11/09/89
5
2
4
2
3
Cấu trúc bảng EMP_1 được chỉ ra dưới đây:
PER_NUM CHAR(3)
LASTNAME CHAR(12)
FIRSTNAME CHAR(10)
MI CHAR(2)
HIRED DATE
JOB_CODE CHAR(1)
Với các thông tin này, trả lời các câu hỏi dưới đây:
1. Viết mã lệnh SQL tạo cấu trúc bảng.
2. Sau khi tạo được cấu trúc bảng ở câu 1, viết mã lệnh SQL để nhập hai
hàng dữ liệu vào trong bảng EMP_1.
3. Giả sử dữ liệu còn lại đã được đưa vào, viết mã lệnh SQL liệt kê tất cả
các thuộc tính ứng với mã công việc 5.
4. Viết mã lệnh SQL lưu bảng EMP_1.
5. Viết mã lệnh SQL thay đổi mã công việc thành 5 cho tất cả những
người có số nhân sự PER_NUM là 778.
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 123
6. Viết mã lệnh SQL xoá hàng ứng với người có tên là Wiliam P.
Smithfield, được thuê vào ngày 03/20/88 và mã công việc của họ là 2.
Lưu ý: Sử dụng toán tử lôgic gộp mọi thông tin được cho trong câu hỏi
này.
7. Viết mã lệnh SQL khôi phục dữ liệu về trạng thái trước đó; tức là,
bảng sẽ chứa dữ liệu tồn tại trước khi bạn tạo ra sự thay đổi ở câu 5 và 6.
8. Viết mã lệnh SQL để bổ sung hai cột, BONUS_PCT và PROJ_NUM,
cho bảng EMP_1. Thuộc tính BONUS_PCT là DECIMAL có hai vị trí thập
phân, thuộc tính PROJ_NUM là xâu gồm tối đa hai kí tự.
9. Viết mã lệnh SQL để nhập giá trị thuộc tính BONú_PCT 3.85 ứng với
người có số nhân sự PER_NUM tương ứng là 287. Giả sử rằng tất cả các mục
BONUS_PCT đã được tạo ra tại thời điểm này và bảng EMP_1 hiện chứa dữ
liệu như dưới đây:
PER_NUM LASTNAME FIRSTNAME MI HIRED JOB_CODE BONUS_PCT PROJ_NUM
287
853
778
855
750
Johnson
Smithfied
Alonzo
Washington
Smith
Alice
William
Maria
Brandon
Larry
K.
P.
D.
B.
W.
09/29/83
03/20/88
07/01/87
12/12/85
11/09/89
5
2
4
2
3
3.85
2.00
3.75
0.00
4.52


10. Sử dụng dãy lệnh đơn, viết mã lệnh SQL đưa vào số dự án
PROJ_NUM là 18 ứng với các nhân viên có loại mã công việc (JOB_CODE)
là 2.
11. Sử dụng dãy lệnh đơn, viết mã lệnh SQL đưa vào số dự án
(PROJ_NUM) là 25 ứng với các nhân viên có loại mã công việc
(JOB_CODE) là 3 hoặc cao hơn. Khi bạn hoàn thành các câu hỏi 10 và 11,
bảng EMP_1 sẽ chứa dữ liệu như dưới đây:
PER_NUM LASTNAME FIRSTNAME MI HIRED JOB_CODE BONUS_PCT PROJ_NUM
287
853
778
855
750
Johnson
Smithfied
Alonzo
Washington
Smith
Alice
William
Maria
Brandon
Larry
K.
P.
D.
B.
W.
09/29/83
03/20/88
07/01/87
12/12/85
11/09/89
5
2
4
2
3
3.85
2.00
3.75
0.00
4.52
25
18
25
18
25
(Bạn có thể giả thiết rằng bảng đã được lưu lại tại thời điểm này!)
12. Viết mã lệnh SQL nhập PROJ_NUM là 14 ứng với các nhân viên
được thue trước ngày 1 tháng 1 năm 1987 và có mã công việc ít nhất là 3.
(Bạn có thể giả thiết rằng bảng được khôi phục về trạng thái chỉ ra trong bài
tập 11.)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 124
13. Viết dãy lệnh SQL để
a. Tạo bảng tạm thời có tên là TEMP_1, với cấu trúc gồm các thuộc tính
PER_NUM và BONUS_PCT của bảng EMP_1.
b. Sao chép các giá trị EMP_1 tương ứng sang bảng TEMP_1.
14. Viết lệnh SQL xoá bảng TEMP_1 vừa tạo ra khỏi CSDL.
15. Viết mã lệnh SQL để liệt kê tất cả các nhân viên có tên cuối bắt đầu
bằng ‘Smith’. Nói cách khác, các hàng ứng với cả Smith và Smithfield đều sẽ
được gộp vào danh sách kết quả.
Gợi ý: Dùng kí tự thay thế.
16. Giả sử rằng CSDL của bạn cũng chứa bảng PROJECT dưới đây:
PROJ_NUM PROJ_NAME PROJ_MGR
18
25
Starflight
Rolling Run
Jane M. Gosinger
George W. Carson

Với thông tin đã cho, viết mã lệnh SQL đưa ra kết quả dưới đây:
PROJ_NAME LASTNAME FIRSTNAME MI JOB_CODE PROJ_MGR
Rolling Run
Starflight
Rolling Run
Starflight
Rolling Run
Johnson
Smithfied
Alonzo
Washington
Smith
Alice
William
Maria
Brandon
Larry
K.
P.
D.
B.
W.
5
2
4
2
3
George W. Carson
Jane M. Gosinger
George W. Carson
Jane M. Gosinger
George W. Carson

Gợi ý: Bạn phải kết nối các bảng EMP_1 và PROJECT.
17. Viết mã lệnh SQL tạo ra một bảng ảo với tên REP_1, chứa thông tin
giống trong câu 16.
18. Viết mã lệnh SQL tìm giá trị trung bình tỉ lệ phần trăm phần thưởng
trong bảng EMP_1.
19. Viết mã lệnh SQL tạo một danh sách cho dữ liệu trong bảng EMP_1
theo thứ tự tăng dần của phần trăm phần thưởng.
20. Viết mã lệnh SQL chỉ liệt kê số dự án khác nhau có trong bảng
EMP_1.
IX. BÀI TẬP
1. Tạo CSDL với tên ROBAIR chứa các bảng CHARTER, PILóT,
CHAR_CUS và AIRCRAFT. (Nội dung bảng đã chỉ ra trong 2, bài tập 12.)
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 125
2. Với nội dung của bốn bảng được tạo ra trong bài tập 1, viết mã lệnh
SQL để
a. Tạo danh sách dưới đây ứng với máy bay 2778V:
C_DATE AC_NO DEST DIST HR_F
L
FUEL
05/26/91
05/30/91
06/01/91
01/03/91
2778V
2778V
2778V
2778V
TYS
MOB
BNA
GNV
644
884
320
1574
3.6
4.9
2.1
9.2
138.4
184.9
78.4
345.2

b. Tạo bảng ảo (đặt tên là AC2778V) chứa kết quả đưa ra trình bày ở 2a.
c. Tạo danh sách dưới đây cho máy bay 2778V:
C_DATE AC_NO DEST AC_TYPE DIST HR_FL FUEL P_LNAME
05/26/91
05/30/91
06/01/91
01/03/91
2778V
2778V
2778V
2778V
TYS
MOB
BNA
GNV
PA-31-350 Navajo
PA-31-350 Navajo
PA-31-350 Navajo
PA-31-350 Navajo
644
884
320
1574
3.6
4.9
2.1
9.2
138.4
184.9
78.4
345.2
Tallahoga
Browing
Lamont
Lamont

d. Tạo danh sách dưới đây cho máy bay 2778V:
C_DATE AC_NO DIST HR_FL FUEL DIST/HR_FL DIST/FUEL FUEL/HR_FL P_LNAME
05/26/91
05/30/91
06/01/91
01/03/91
2778V
2778V
2778V
2778V
644
884
320
1574
3.6
4.9
2.1
9.2
138.4
184.9
78.4
345.2
178.88889
180.40816
152.38095
171.08696
4.6531792
4.7809627
4.0816327
4.5596756
38.444444
37.734694
37.333333
37.521739
Tallahoga
Browing
Lamont
Lamont

Gợi ý: Hai cột kết quả cuối cùng được tính toán thay vì được lấy ra từ
bảng. Chẳng hạn, có thể dùng dãy lệnh SQL
SELECT HR_FL, FUEL, FUEL/HR_FL
FROM CHARTER
WHERE AC_NO = ‘2778V’;
Lưu ý: Mặc dù các giá trị đưa ra không phù hợp với danh sách được chỉ
ra, khuôn dạng kết quả đưa ra được xác định bởi phần mềm bạn dùng. Bạn
nên học cách điều chỉnh khuôn dạng với sự giúp đỡ của các tiện ích riêng
DBMS của bạn.
3. Cập nhật bảng AIRCRAFT cho máy bay 2778V, sử dụng số giờ tổng
cộng đã bay được lấy từ bảng CHARTER.
Lưu ý: Vì số giờ bay tổng cộng đã bay trong một giai đoạn có trong bảng
BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế, xây dựng và quản trị CSDL

Trang 126
CHARTER là 19.8 nên số giờ trên hàng cập nhật ứng với máy bay 2778V
phải lớn hơn số giờ ban đầu 19.8.
BAN ĐẦU
AC_NO AC_TYPE FB LAST_100 TTA TTLE TTRE TAS P_PAY
2778V PA-31-350 Navajo 36.0 08/05/91 9211.9 1124.2 429.8 180 25.00

SAU CẬP NHẬT
AC_NO AC_TYPE FB LAST_100 TTA TTLE TTRE TAS P_PAY
2778V PA-31-350 Navajo 36.0 08/05/91 9231.7 1144.0 449. 180 25.00

4. Tạo một danh sách khách hàng chưa thanh toán.
C_DATE DEST AC_TYPE C_NAME
05/26/91
05/30/91
05/30/91
06/01/91
STL
MY
MOB
BNA
PA-23-250 Aztec
C-90A King Air
PA-31-350 Navajo
PA-31-350 Navajo
C. J. Pary
Smithson Industries
C. J. Pary
Smithson Industries

5. Cho dữ lưu trong bảng CHAR_CUS, tìm dư nợ trung bình.
6. Cho dữ lưu trong bảng CHAR_CUS, tìm dư nợ tổng cộng.
7. Nhóm dữ liệu máy bay theo số máy bay để tạo ra kết quả sau đây:

AC_NO COUNT(*) AVG(DIST) AVG(HR_FL) AVG(FUEL)
1484P
2289L
2778V
4278Y
2
4
4
2
478
664
855.5
947
2.95
3.825
4.95
5.45
80.15
222.075
186.725
203.45

8. Tạo ra một báo cáo tương tự như mô tả trong bài tập 7, nhưng hạn chế
kết quả đưa ra theo ngày, gồm những ngày nằm trong khoảng từ 30 tháng 5
năm 1991 đến 1 tháng 6 năm 1991, kể các ngày đó.
9. CSDL CH3SQL được tạo ra để giúp tự động các thủ tục bán hàng.
Đặc biệt, bán hàng đưa ra một hoá đơn có dạng tương tự dạng đơn giản mô tả
như hình dưới đây.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

MỤC LỤC
CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ CƠ SỞ DỮ LIỆU.. .......…. 4 I. CƠ SỞ DỮ LIỆU .................................................................................................. 5

1. Định nghĩa cơ sở dữ liệu ........................................................................ 5 2. Các tính chất của một cơ sở dữ liệu ....................................................... 6
II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ...................................................................... 6

1. Định nghĩa hệ quản trị Cơ sở dữ liệu ..................................................... 6 2. Các chức năng của một hệ quản trị cơ sở dữ liệu .................................. 8 3. Các đặc trưng của giải pháp cơ sở dữ liệu ............................................. 9 a. Bản chất tự mô tả của hệ cơ sở dữ liệu .............................................. 9 b. Sự cô lập giữa các chương trình và dữ liệu. ...................................... 9 c. Hỗ trợ các khung nhìn dữ liệu nhiều thành phần ............................. 10 d. Chia sẻ dữ liệu và nhiều người sử dụng ........................................... 10 e. Ví dụ về một cơ sở dữ liệu ................................................................ 10
III. MÔ HÌNH CƠ SỞ DỮ LIỆU ........................................................................... 12

1. Định nghĩa mô hình cơ sở dữ liệu ........................................................ 13 2. Các loại mô hình cơ sở dữ liệu............................................................. 13 3. Con người trong hệ cơ sở dữ liệu ......................................................... 15 a. Người quản trị hệ cơ sở dữ liệu (Database Administrator-DBA) .... 16 b. Người thiết kế cơ sở dữ liệu (Database Designer) ........................... 16 c. Những người sử dụng (End User) .................................................... 16 d. Những người phân tích hệ thống và những người lập trình ứng dụng17 e. Những người thiết kế và cài đặt hệ quản trị cơ sở dữ liêu ............... 17 f. Những người phát triển công cụ ....................................................... 17 g. Các thao tác viên và những người bảo trì ........................................ 17
CHƯƠNG 2 : MÔ HÌNH THỰC THỂ-LIÊN KẾT.............................................18 I. SỬ DỤNG MÔ HÌNH KHÁI NIỆM BẬC CAO CHO VIỆC THIẾT KẾ CƠ SỞ DỮ LIỆU ................................................................................................................... 18 II. CÁC THÀNH PHẦN CƠ BẢN CỬA MÔ HÌNH THỰC THỂ-LIÊN KẾT .... 20

1. Kiểu thực thể, tập thực thể, các thuộc tính và các khoá ....................... 20 a. Các thực thể và các thuộc tính ......................................................... 20 b. Các loại thuộc tính............................................................................ 21
Trang 1

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

c. Kiểu thực thể, tâp thực thể, khoávà tập giá trị ................................. 22 2. Các liên kết, các kiểu liên kết, các vai trò và các ràng buộc cấu trúc .. 24 a. Các kiểu liên kết, tập liên kết và các thể hiện ................................ 24 b. Cấp liên kết, tên vai trò và liên kết đệ quy ..................................... 25 c. Các ràng buộc trên các kiểu liên kết ............................................. 26
III. VÍ DỤ VỀ THIẾT KẾ MỘT MÔ HÌNH ER ................................................... 29

1. Đặt vấn đề............................................................................................. 29 2. Xác định các kiểu thực thể, các thuộc tính và các kiểu liên kết .......... 29
CHƯƠNG 3: MÔ HÌNH QUAN HỆ, CÁC RÀNG BUỘC QUAN HỆ VÀ ĐẠI SỐ QUAN HỆ .........................................................................................................32 I. CÁC KHÁI NIỆM CỦA MÔ HÌNH QUAN HỆ ............................................... 32

1. Miền, thuộc tính, bộ và quan hệ ........................................................... 32 2. Các đặc trưng của các quan hệ ............................................................. 34
II. CÁC RÀNG BUỘC QUAN HỆ, LƯỢC ĐỒ CSDL QUAN HỆ...................... 36

1. Các ràng buộc miền .............................................................................. 36 2. Ràng buộc khoá và ràng buộc trên các giá trị rỗng (null) .................... 36 3. Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ ..................... 37 4. Toàn vẹn thực thể, toàn vẹn quy chiếu và khoá ngoài ......................... 40
III. CÁC PHÉP TOÁN CỦA MÔ HÌNH QUAN HỆ ............................................ 42

1. Các phép toán cập nhật ........................................................................ 42 a. Phép chèn (Insert)............................................................................. 42 b. Phép xoá (Delete) ............................................................................. 42 c. Phép sửa đổi (Update) ...................................................................... 43 2. Các phép toán đại số quan hệ ............................................................... 43 a. Phép chọn (SELECT) ........................................................................ 44 b. Phép chiếu (PROJECT) .................................................................... 45 c. Phép đặt lại tên (RENAME) ............................................................. 46 d. Các phép toán lý thuyết tập hợp ....................................................... 48 e. Phép nối (JOIN) ................................................................................ 50 f. Tập hợp đầy đủ các phép toán quan hệ ............................................ 52 g. Phép chia .......................................................................................... 52 3. Các phép toán quan hệ bổ sung ............................................................ 53
Trang 2

.................................................................................................... Tạo cấu trúc bảng ......... Dạng chuẩn 1 ...... 87 8............................................... 73 CHƯƠNG 5: GIỚI THIỆU NGÔN NGỮ VẤN TIN CÓ CẤU TRÚC SQL ........ 69 a.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế........................................... 56 2................................ 83 4......................................................................... 76 1................................................................. OR và NOT ................................... GIỚI THIỆU SQL ......... Tạo cấu trúc CSDL ....................................................................... 87 1............................................... Bổ sung dữ liệu cho bảng ...... Các ràng buộc toàn vẹn SQL ................................................................................................................. 62 III......................................... 84 5.......................... Xoá hàng.......................... Nhập môn về chuẩn hoá ......................................................... 82 2............................. 62 II............................................................................................. 85 6................... 87 IV.............. Liệt kê từng phần nội dung bảng......... Sửa chữa .................................. Các toán tử lôgic: AND... 72 c.................. 81 III....................... Kiểm tra nội dung bảng ......................................................................... Nhập dữ liệu . 59 CHƯƠNG 4: PHỤ THUỘC HÀM VÀ CHUẨN HOÁ CƠ SỞ DỮ LIỆU QUAN HỆ . Dạng chuẩn 2 .......... 60 1. Tạo ra các bộ giả ................................ Thông tin dư thừa trong các bộ và cập nhật dị thường .... 77 3............................................................................................................. 70 b.............................................................. 86 7................... CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ-LIÊNKẾT THÀNH MÔ HÌNH QUAN HỆ.......................................... CÁC PHỤ THUỘC HÀM .......................... VẤN TIN .................................................... 69 1.................... 61 3....... Dạng chuẩn 3 ........................................ QUẢN LÝ DỮ LIỆU CƠ BẢN ..................... Chuyển đổi mô hình cụ thể .... CÁC NGUYÊN TẮC THIẾT KẾ LƯỢC ĐỒ QUAN HỆ ........ 55 1........ 74 II.............................................................................. CÁC DẠNG CHUẨN DỰA TRÊN KHOÁ CHÍNH ....................................................................................... 60 2.................................................... 76 2...............................................................................74 I........................................................... 88 2................................ Các quy tắc chuyển đổi ................................................................................... Khôi phục nội dung bảng .................................................. 83 3.... 91 Trang 3 .............................. xây dựng và quản trị CSDL IV........ Lưu nội dung bảng ...60 I.. Ngữ nghĩa của các thuộc tính quan hệ .................................................... CÁC LỆNH ĐỊNH NGHĨA DỮ LIỆU ........................................................................

....... Sắp xếp danh sách ................................................................................................................................................................................. TÓM TẮT .......... 97 1.............................................. CÂU HỎI ÔN TẬP ............................................................................... Nhập dữ liệu cho cột mới ............................. 102 VI....... BÀI TẬP ................................... xây dựng và quản trị CSDL 3...................................................................................................... Thay đổi đặc điểm thuộc tính ...................................................................... 98 4....... Các toán tử đặc biệt ..................BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. 98 3.............................................................................. 93 V.... Thay đổi kiểu dữ liệu của cột . 101 6................. 103 2............... Liên kết các bảng CSDL ................................ 99 5................................................................................................................ 106 4.................. 112 7............. 113 VII.......... 122 IX............................. Chỉ mục SQL ............... 103 1............................................................................................................. Bổ sung cột cho bảng ........................................................................ Loại bỏ trùng lặp ...................... Các hàm số học SQL ..... 124 Trang 4 ........................... VẤN TIN PHỨC TẠP Và CỎC HàM SQL ........ CÁC LỆNH QUẢN LÝ DỮ LIỆU NÂNG CAO ..... 110 5..................... Xoá bảng khỏi CSDL ............................................................................................................................................. 98 2....... Nhóm dữ liệu ............... 115 VIII................... Sao chép một phần bảng . Bảng ảo: việc tạo các khung nhìn ....... 106 3............... 111 6...............

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. đặt mua tạp chí ở một nhà xuất bản. Trong các cơ sở dữ liệu truyền thống. người ta cũng cập nhật tự động việc quản lý tiền bạc hoặc hàng hoá. được Trang 5 . xây dựng và quản trị CSDL CHƯƠNG I CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ CƠ SỞ DỮ LIỆU Các cơ sở dữ liệu và hệ cơ sở dữ liệu đã trở thành một thành phần chủ yếu của cuộc sống hàng ngày trong xã hội hiện đại.…. mô hình cơ sở dữ liệu và các thuật ngữ cơ bản khác. đăng ký chỗ trên máy bay hoặc khách sạn. CƠ SỞ DỮ LIỆU 1. Thuật ngữ cơ sở dữ liệu trở thành một thuật ngữ phổ dụng. thương mại. chẳng hạn. kỹ nghệ. Các kỹ thuật cơ sở dữ liệu động và thời gian thực được sử dụng trong việc kiểm tra các tiến trình công nghiệp và sản xuất. Kho dữ liệu và các hệ thống phân tích trực tuyến được sử dụng trong nhiều công ty để lấy ra và phân tích những thông tin có lợi từ các cơ sở dữ liệu rất lớn nhằm đưa ra các quyết định. Để hiểu được các cơ sở kỹ thuật cơ sở dữ liệu chúng ta phải bắt đầu từ các cơ sở của của việc áp dụng cơ sở dữ liệu truyền thống. truy cập vào một thư viện đã tin học hoá để tìm sách báo. Trong vòng một ngày con người có thể có nhiều hoạt động cần có sự giao tiếp với cơ sở dữ liệu. Trong chương này chúng ta sẽ định nghĩa cơ sở dữ liệu. …. hệ quản trị cơ sở dữ liệu. Tại các ngân hàng. Một vài năm lại đây. những tiến bộ về kỹ thuật đã đưa đến những áp dụng mới của hệ cơ sở dữ liệu. Các cơ sở dữ liệu đa phương tiện bây giờ có thể lưu trữ hình ảnh. Một cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau. I. các dữ liệu về thời tiết và các ảnh vệ tinh. hầu hết các thông tin được lưu giữ và truy cập là văn bản hoặc số. Các hệ thống thông tin địa lý có thể lưu trữ và phân tích các bản đồ. Có thể nói rằng cơ sở dữ liệu đóng vai trò quan trọng trong mọi lĩnh vự có sử dụng máy tính như giáo dục. đến ngân hàng để rút tiền và gửi tiền. Các kỹ thuật tìm kiếm cơ sở dữ liệu đang được áp dụng cho World Wide Web để cung cấp việc tìm kiếm các thông tin cần thiết cho người sử dụng bằng cách duyệt qua Internet. các cửa hàng. khoa học thư viện. Tất cả những giao tiếp như trên được gọi là các áp dụng của cơ sở dữ liệu truyền thống. Định nghĩa cơ sở dữ liệu Cơ sở dữ liệu và kỹ thuật cơ sở dữ liệu đã có ảnh hưởng rất lớn đến việc sử dụng máy tính. phim và tiếng nói.

Các tính chất của một cơ sở dữ liệu Một cơ sở dữ liệu có các tính chất sau: Một cơ sở dữ liệu biểu thị một khía cạnh nào đó của thế giới thực: hoạt động của một công ty. của một nhà trường. Một cơ sở dữ liệu có thể có cỡ tuỳ ý và có độ phức tạp thay đổi. để quản lý việc học tập trong một môi trường đại học. xây dựng và thao tác cơ sở dữ liệu cho các áp dụng khác nhau. về các môn học. Một cơ sở dữ liệu không phải là một tập hợp tuỳ tiện các dữ liệu. về điểm thi. Định nghĩa hệ quản trị Cơ sở dữ liệu Một hệ quản trị cơ sở dữ liệu là một tập hợp chương trình giúp cho người sử dụng tạo ra và duy trì một cơ sở dữ liệu. Ví dụ. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 1. 2.… Chúng ta tổ chức các dữ liệu đó thành các bảng và lưu giữ chúng vào sổ sách hoặc sử dụng một phần mềm máy tính để lưu giữ chúng trên máy. Có những cơ sở dữ liệu chỉ gồm vài trăm bản ghi (như cơ sở dữ liệu phục vụ quản lý lương của một cơ quan nhỏ) và có những cơ sở dữ liệu có dung lượng rất lớn (như cơ sở dữ liệu phục vụ cho tính cước điện thoại. các dữ liệu là các thông tin về sinh viên. đôi khi nó được gọi là một “thế giới nhỏ”(miniword) hoặc một “không gian tranh luận”(Universe of Discourse). đó là một cơ sở dữ liệu. Nó có một nhóm người sử dụng có chủ định và có một số áp dụng được xác định phù hợp với những lợi ích của người sử dụng. II. Trang 6 . Dữ liệu là những sự kiện có thể ghi lại được và có ý nghĩa. cập nhật và lấy ra khi cần thiết.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Một cơ sở dữ liệu là một tập hợp dữ liệu cố kết một cách logic và mang một ý nghĩa bên trong nào đó. một ngân hàng. Những thông tin được đưa vào trong cơ sở dữ liệu tạo thành một không gian cơ sở dữ liệu. Một cơ sở dữ liệu được thiết kế và được phổ biến với các dữ liệu cho một mục đích riêng. Đó là một tập hợp các dữ liệu có liên quan đến nhau và mang nhiều ý nghĩa. Nó là một hệ thống phần mềm phổ dụng làm dễ quá trình định nghĩa. Các dữ liệu phải được tổ chức quản lý sao cho những người sử dụng có thể tìm kiếm. quản lý nhân sự trên một phạm vi lớn).… Những thay đổi của thế giới thực phải được phản ánh trung thực trong cơ sở dữ liệu. xây dựng và quản trị CSDL nhiều người sử dụng và được tổ chức theo một mô hình. Một cơ sở dữ liệu được tin học hoá được tạo ra và duy trì bằng một nhóm chương trình áp dụng hoặc bằng một hệ quản trị cơ sở dữ liệu. Một cơ sở dữ liệu có thể được tạo ra và bảo trì một cách thủ công và cũng có thể được tin học hoá.

Thao tác một cơ sở dữ liệu bao gồm các chức năng như truy vấn cơ sở dữ liệu để lấy ra các dữ liệu cụ thể. xây dựng và quản trị CSDL Định nghĩa một cơ sở dữ liệu bao gồm việc đặc tả các kiểu dữ liệu. Xây dựng một cơ sở dữ liệu là quá trình lưu trữ các dữ liệu trên các phương tiện lưu trữ được hệ quản trị cơ sở dữ liệu kiểm soát.1) dưới đây. Các hệ quản trị cơ sở dữ liệu để thể hiện một cơ sở dữ liệu tin học hoá có thể là phổ dụng (là một tập các phần mềm đóng gói) hoặc có thể là chuyên dụng (là một tập các phần mềm được tạo ra với một mục đích riêng). Người sử dụng / Người lập trình Chương trình áp dụng/ Truy vấn Phần mềm xử lý truy vấn / chương trình Phần mềm truy cập đến các dữ Định nghĩa cơ sở dữ liệu được lưu giữ (Siêu dữ Cơ sở dữ liệu được lưu giữ Hình 1: Môi trường hệ cơ sở dữ liệu Trang 7 .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ta gọi cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu bằng một thuật ngữ chung là hệ cơ sở dữ liệu. cập nhật cơ sở dữ liệu để phản ánh các thay đổi trong thế giới nhỏ và tạo ra các báo cáo từ các dữ liệu. các cấu trúc và các ràng buộc cho dữ liệu sẽ được lưu giữ trong cơ sở dữ liệu. Môi trường của một hệ cơ sở dữ liệu được mô tả bằng hình vẽ (hình 1.

Hệ quản trị cơ sở dữ liệu sử dụng dữ liệu trong từ điển dữ liệu để tìm kiếm các cấu trúc thành phần dữ liệu và các mối liên kết được yêu cầu. (Một ngôn ngữ truy vấn là một ngôn ngữ phi thủ tục cho phép người sử dụng chỉ ra cái gì cần phải làm mà không cần phải chỉ ra nó được làm như thế nào). Điều đó có nghĩa là hệ quản trị cơ sở dữ liệu tạo khuôn dạng cho các dữ liệu được lấy ra để làm cho nó phù hợp với các mong muốn logic của người sử dụng. Tạo ra một hệ thống bảo mật và áp đặt tính bảo mật và riêng tư trong CSDL. Cung cấp các thủ tục sao lưu và phục hồi dữ liệu để đảm bảo sự an toàn và toàn vẹn dữ liệu Xúc tiến và áp đặt các quy tắc an toàn để loại bỏ vấn đề toàn vẹn dữ liệu. tất cả các chương trình truy cập đến cơ sở dữ liệu làm việc thông qua hệ quản trị cơ sở dữ liệu. chúng ta được giải phóng khỏi việc lập trình cho các mối liên kết phức tạp như vậy trong từng mỗi chương trình. Điều đó cho phép ta làm tối thiểu sự dư thừa dữ liệu và làm tối đa tính nhất quán dữ liệu Cung cấp việc truy cập dữ liệu thông qua một ngôn ngữ truy vấn. hệ quản trị cơ sở dữ liệu loại bỏ sự phụ thuộc dữ liệu và cấu trúc ra khỏi hệ thống Tạo ra các cấu trúc phức tạp theo yêu cầu để lưu trữ dữ liệu. Biến đổi các dữ liệu được nhập vào để phù hợp với các cấu trúc dữ liệu ở điểm 2. Nói cách khác. Tạo ra các cấu trúc phức tạp cho phép nhiều người sử dụng truy cập đến dữ liệu.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Các hệ quản trị cơ sở dữ liệu cũng cung cấp việc truy cập dữ liệu cho những người lập trình thông qua các ngôn ngữ thủ tục. điều đó giải phóng chúng ta khỏi nhiệm vụ khó khăn là định nghĩa và lập trình cho các đặc trưng dữ liệu vật lý. điều đó giải phóng ta khỏi việc sửa đổi tất cả các chương trình truy cập đến tệp cơ sở dữ liệu đã bị sửa đổi. xây dựng và quản trị CSDL 2. Tóm lại. Các chức năng của một hệ quản trị cơ sở dữ liệu Một hệ quản trị cơ sở dữ liệu ngày nay có các chức năng sau: Lưu trữ các định nghĩa của các mối liên kết dữ liệu (gọi là siêu dữ liệu) vào một từ điển dữ liệu. Mọi sự thay đổi được thực hiện trong các tệp cơ sở dữ liệu sẽ được tự động ghi lại vào từ điển dữ liệu. Như vậy hệ quản trị cơ sở dữ liệu giúp ta không phải làm phân biệt giữa dạng logic và dạng vật lý của dữ liệu. hệ quản trị cơ sở dữ liệu chuyển các yêu cầu logic thành các lệnh định vị một cách vật lý và lấy ra các dữ liệu yêu cầu. Trang 8 . Lần lượt. Bằng việc duy trì sự độc lập dữ liệu.

Phần mềm hệ quản trị cơ sở dữ liệu và các người sử dụng cơ sở dữ liệu sử dụng từ điển dữ liệu để lấy thông tin về cấu trúc của cơ sở dữ liệu. kiểu và dạng lưu trữ của từng mục dữ liệu. hệ thống tệp là một phương pháp được áp dụng rộng rãi. Các thông tin được lưu trữ trong từ điển được gọi là siêu dữ liệu (meta-data). b. Các cặp hồ sơ được chuyển thành các tệp dữ liệu trên máy tính và việc xử lý thông tin được thực hiện bằng cách lập trình (trong một ngôn ngữ lập trình thế hệ 3). bộ phận tài vụ sẽ có một cặp hồ sơ liên quan đến lương của các nhân viên. việc xử lý thông tin ngày càng phức tạp. có thể sinh ra các dữ liệu không đúng. người ta sử dụng máy tính vào việc quản lý.Việc xử lý để lấy ra các thông tin như là các thống kê về lương. giải pháp cơ sở dữ liệu có những đặc trưng sau: a. Thứ hai. Ví dụ. Ngược lại. trong một cơ quan. xây dựng và quản trị CSDL 3. đó là sự phụ thuộc giữa các chương trình áp dụng và dữ liệu. chương trình áp dụng để khai thác thông tin trên tệp đó cũng phải thay đổi theo. Cụ thể. về quá trình công tác.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. bộ phận tổ chức có cặp hồ sơ liên quan đến vấn đề nhân sự. Việc quản lý theo giải pháp hệ thống tệp có rất nhiều nhược điểm. và chúng mô tả của cấu trúc cơ sở dữ liệu nguyên thuỷ (hình 1. như vậy sẽ gây ra việc lãng phí bộ nhớ và dễ gây sai sót trong khi cập nhật dữ liệu. nó chứa thông tin như là cấu trúc của mỗi tệp. Dần dần khối lượng thông tin ngày càng lớn. Trong hệ thống tệp. Bản chất tự mô tả của hệ cơ sở dữ liệu Một đặc trưng cơ bản của giải pháp cơ sở dữ liệu là hệ thống cơ sở dữ liệu không chỉ gồm bản thân cơ sở dữ liệu mà còn có cả một định nghĩa hoặc mô tả đầy đủ về cấu trúc cơ sở dữ liệu và các ràng buộc. đó là sự dư tthừa thông tin : cùng một thông tin (chẳng hạn danh sách các nhân viên) được lưu trữ nhiều lần (trong tệp lương và cả ở trong tệp nhân sự …). Mỗi khi có sự thay đổi cấu trúc tệp và các dữ liệu trong tệp. Giải pháp cơ sở dữ liệu ra đời đã giải quyết được những nhược điểm đó. Sự cô lập giữa các chương trình và dữ liệu. điều đó làm cho việc bảo trì rất khó khăn. Các đặc trưng của giải pháp cơ sở dữ liệu Trước khi khái niệm cơ sở dữ liệu ra đời. Thứ nhất. cấu trúc của các tệp cơ sở dữ liệu được nhúng vào trong các chương trình truy cập vì vậy bất kỳ một thay đổi nào về cấu trúc của một tệp cũng đòi hỏi phải thay đổi tất cả các chương trình truy cập đến tệp đó. các chương trình truy cập của hệ quản trị cơ sở dữ liệu không đòi Trang 9 .1).….… lúc đầu được thực hiện thủ công. Một tệp có thể xem là một cặp hồ sơ lưu trữ các thông tin liên quan đến từng loại công việc riêng biệt. Định nghĩa này được lưu trữ trong từ điển hệ thống.

mỗi một người có thể đòi hỏi một phối cảnh hoặc một khung nhìn (view) khác nhau. Cấu trúc của các tệp dữ liệu được lưu trữ trong từ điển tách rời với các chương trình truy cập. tệp họcphần lưu giữ các dữ liệu về mỗi học phần của môn học. và tệp biếttrước lưu giữ các môn học cần biết trưóc của từng môn học. d. Chia sẻ dữ liệu và nhiều người sử dụng Một hệ quản trị cơ sở dữ liệu nhiều người sử dụng phải cho phép nhiều người sử dụng truy cập đồng thời đến cơ sở dữ liệu. tệp mônhọc lưu giữ dữ liệu về mỗi môn học. Một hệ quản trị cơ sở dữ liệu nhiều người sử dụng phải cung cấp nhiều công cụ để định nghĩa các khung nhìn nhiều thành phần. Cơ sở dữ liệu này nhằm lưu giữ thông tin liên quan đến sinh viên. Tính chất này gọi là sự độc lập dữ liệu-chương trình.2 Sinhviên Họtênsinhviên Nguyễn Nam Lê Bắc Mônhọc Tênmônhọc Tin học Cơ sở Mãsốsinhviên 17 8 Lớp K45T K45C Chuyên ngành Tinhọc CôngnghệTT Mã số môn học 101 Trang 10 Số đvht 8 Khoa Công nghệ . các môn học. c. xây dựng và quản trị CSDL hỏi việc thay đổi như thế. Cơ sở dữ liệu được tổ chức thành 5 tệp. e. tệp điểm lưu giữ các điểm của từng học phần của sinh viên. đó là các dữ liệu được trích ra từ các tệp cơ sở dữ liệu khác nhau nhưng không được lưu trữ một cách rõ ràng.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Hệ quản trị cơ sở dữ liệu phải có phần mềm kiểm tra cạnh tranh để đảm bảo rằng các người sử dụng cập nhật đến cùng một dữ liệu phải được thực hiện theo cách được kiểm tra để cho kết quả của các cập nhật là đúng đắn. Ví dụ về một cơ sở dữ liệu Chúng ta hãy xem một cơ sở dữ liệu mà nhiều bạn đọc đã quen biết: cơ sở dữ liệu trường. điểm trong một môi trường đại học. Hỗ trợ các khung nhìn dữ liệu nhiều thành phần Một cơ sở dữ liệu có nhiều người sử dụng. mỗi tệp lưu trữ các bản ghi dữ liệu cùng một kiểu. Tệp sinhviên lưu giữ dữ liệu về mỗi sinh viên. Một khung nhìn có thể là một tập con của cơ sở dữ liệu hoặc nó có thể chứa các dữ liệu ảo. Cấu trúc của cơ sở dữ liệu và một vài mẫu dữ liệu ví dụ được chỉ ra ở hình 1.

mã số sinh viên. lớp.2: Cơ sở dữ liệu ví dụ trường Để định nghĩa cơ sở dữ liệu này. Trang 11 . xây dựng và quản trị CSDL Cấu trúc DL&GT Toán rời rạc Cơ sở dữ liệu họcphần Mã số HP 1011 1012 1031 1032 1020 1040 102 103 104 5 5 4 Công nghệ Công nghệ Công nghệ Mãsố mônhọc 101 101 103 103 102 104 Họckỳ 1 2 1 2 3 4 Năm 2001 2002 2001 2002 2002 2002 Têngiáovi ên Vân Vân Hoàng Hoàng Lân Huy Điểm Mãsốsinhviên 17 17 8 8 8 8 Mã sốHP 1031 102 1031 1011 1020 1040 Điểm 8 6 9 10 7 9 Biếttrước Mãsốmôn học 104 104 102 Mãsốmônbiếttrước 102 103 101 Hình 1.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. mỗi bản ghi sinhviên bao gồm các dữ liệu để biểu diễn Họ tên sinh viên. Theo hình 2. chuyên ngành. chúng ta phải chỉ ra của mỗi bản ghi của mỗi tệp bằng cách đặc tả các kiểu khác nhau của các phần tử dữ liệu sẽ được lưu trữ trong các bản ghi.

biết trước vào các tệp thích hợp.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. một bản ghi biếttrước có liên quan đến hai bản ghi mônhọc…. điểm. Nếu các mô hình không đúng đắn logic. xây dựng và quản trị CSDL Mỗi bản ghi môn học bao gồm các dữ liệu để biểu diễn tên môn học. Các mô hình là sự trừu tượng đơn giản của các sự kiện trong thế giới thực. MÔ HÌNH CƠ SỞ DỮ LIỆU Các hệ quản trị cơ sở dữ liệu tạo ra khả năng giải quyết các sử dụng tài nguyên dữ liệu phức tạp hơn rất nhiều nếu cơ sở dữ liệu được thiết kế để sử dụng năng lực sẵn có đó. Thao tác cơ sở dữ liệu bao gồm việc truy vấn và cập nhật cơ sở dữ liệu.… Các truy vấn và các cập nhật phải được đặc tả chính xác trong ngôn ngữ hệ cơ sở dữ liệu một cách chính xác trước khi chúng được xử lý. Trang 12 . Ví dụ. học phần. mỗi môn học. Việc thiết kế cơ sở dữ liệu được thực hiện đơn giản hơn nhiều khi bạn dùng các mô hình. Các mô hình tốt sẽ đưa ra các cơ sở dữ liệu tốt và trên cơ sở đó sẽ có các ứng dụng tốt. bản ghi đối với “Nguyễn Nam”trong tệp sinhviên có liên quan đến hai bản ghi trong tệp Điểm chỉ ra điểm của Nguyễn Nam trong hai học phần. thiết kế cơ sở dữ liệu trở thành hoạt động chính trong môi trường cơ sở dữ liệu. mô hình không tốt sẽ đưa đến thiết kế cở dữ liệu tồi và dẫn đến những áp dụng không đúng. mã số sinh viên là một số nguyên. Các trừu tượng như vậy sẽ cho phép chúng ta khảo sát các đặc điểm của các thực thể và các mối liên kết được tạo ra giữa các thực thể đó. …. Các loại cấu trúc dữ liệu được tạo ra trong cơ sở dữ liệu và mối liên kết giữa chúng đóng vai trò rất lớn trong việc xác định tính hiệu quả của hệ quản trị cơ sở dữ liệu. chúng ta lưu giữ các dữ liệu để biểu diễn mỗi sinh viên. Để ý rằng các bản ghi trong các tệp khác nhau có thể có mối quan hệ với nhau. mã số môn học. Tương tự như vậy. Chúng ta phải chỉ ra một kiểu dữ liệu cho mỗi phần tử dữ liệu bên trong một bản ghi. Thông thường một cơ sở dữ liệu chứa nhiều kiểu của các bản ghi và chứa nhiều mối liên kết giữa các tệp. v. khoa.Các truy vấn có dạng : “Liệt kê các môn học và điểm của sinh viên Nguyễn Nam”.v… Cập nhật cơ sở dữ liệu bao gồm thêm vào một môn học mới. các thiết kế cơ sở dữ liệu rút ra từ đó sẽ không cho phép rút ra được các thông tin đúng đắn. III. sửa lại một điểm của một học phần. “Đưa ra danh sách các sinh viên thi trượt môn cơ sở dữ liệu”.. Vì vậy. số đơn vị học trình. Ví dụ: ta có thể đặc tả họ tên sinh viên là một dãy ký tự có độ dài 30. Ngược lại.… Để xây dựng cơ sở dữ liệu trường.

ví dụ mối liên kết làm việc trên là mối quan hệ giữa một nhân viên và một dự án (Nhân viên làm việc trên dự án). chẳng hạn như một nhân viên hoặc một dự án được mô tả trong một cơ sở dữ liệu. thông điệp. cung cấp những khái niệm như lớp. chúng ta có thể phân loại chúng theo các kiểu khái niệm mà chúng dùng để mô tả cấu trúc cơ sở dữ liệu. 2. ở giữa hai loại mô hình này là một lớp các mô hình dữ liệu thể hiện. nó quan tâm đến cái được biểu diễn trong cơ sở dữ liệu chứ không phải cách mà nó được biểu diễn. Các loại mô hình cơ sở dữ liệu Có rất nhiều các mô hình dữ liệu đã được đề nghị. gọi tắt là mô hình ER.. Các mô hình này tập trung vào bản chất logic của biểu diễn dữ liệu. Cấu trúc của một cơ sở dữ liệu là các kiểu dữ liệu. chúng cung cấp những khái niệm mà những người sử dụng có thể hiểu được và không xa với cách tổ chức dữ liệu bên trong máy tính. Một mối liên kết giữa hai hay nhiều thực thể biểu diễn một mối quan hệ qua lại giữa các thực thể. Các mô hình dữ liệu thể hiện che dấu một số chi tiết về việc lưu trữ dữ liệu nhưng có thể được cài đặt trực tiếp trên hệ thống máy tính. chúng ta sẽ nghiên cứu mô hình liên kết -thực thể (Entity-Relationship model). Định nghĩa mô hình cơ sở dữ liệu Một mô hình cơ sở dữ liệu là một tập hợp các khái niệm dùng để biểu diễn các cấu trúc của cơ sở dữ liệu. Một thực thể biểu diễn một đối tượng hoặc một khái niệm của thế giới thực. chẳng hạn như tên hay lương của nhân viên. Đa số các mô hình còn có thêm một tập hợp các phép toán cơ bản để đặc tả các phép rút ra và cập nhật trên cơ sở dữ liệu. các thuộc tính. Trong chương 2. các mối liên kết và các ràng buộc phải tuân theo trên các dữ liệu. Mô hình dữ liệu hướng đối tượng cũng là một mô hình bậc cao. và một số mở rộng của mô hình này. phương thức. Một thuộc tính biểu diễn một đặc trưng nào đó của một thực thể. Các mô hình dữ liệu bậc thấp hoặc các mô hình dữ liệu vật lý cung cấp các khái niệm mô tả chi tiết về việc các dữ liệu được lưu trữ trong máy tính như thế nào.. Các mô hình dữ liệu quan niệm sử dụng các khái niệm như các thực thể. Trang 13 . Các khái niệm do mô hình dữ liệu vật lý cung cấp nói chung có ý nghĩa đối với các chuyên gia máy tính chứ không có ý nghĩa mấy đối với các người sử dụng thông thường..BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. các mối liên kết. xây dựng và quản trị CSDL 1. Các mô hình dữ liệu bậc cao hoặc mô hình dữ liệu quan niệm cung cấp các khái niệm gắn liền với cách cảm nhận dữ liệu của nhiều người sử dụng.

3 Sơ đồ lược đồ cho cơ sở dữ liệu ở hình 1. mô hình quan hệ đần dần thay thế các mô hình mạng và phân cấp.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. sắp xếp bản ghi. chúng gồm các mô hình dữ liệu quan hệ. đường truy cập. nó được xác định rõ trong quá trình thiết kế cơ sở dữ liệu và không bị thay đổi thường xuyên.2 sinhviên Họ tên Mãsốsinhviên Mônhọc Mãsốmônhọc Mãsốmônhọc Mãsố HP Tên môn học Biếttrước Mãsốmônbiếttrước Họcphần Mãsốmônhọc Mã số HP Họckỳ Điểm Mã số sinh viên Điểm Năm Têngiáoviên Sốđvht Khoa Lớp Chuyên ngành Hình 1. chúng ta sẽ nghiên cứu mô hình cơ sở dữ liệu quan hệ. Đa số các mô hình dữ liệu có các quy ước hiển thị các lược đồ như các biểu đồ. và một số kiểu ràng buộc. Các mô hình mạng và phân cấp được sử dụng rộng rãi trong quá khứ nhưng từ khi mô hình dữ liệu quan hệ ra đời (vào đầu những năm 70).2 Trang 14 . Hình vẽ sau đây trình bày biểu đồ lược đồ của cơ sở dữ liệu ví dụ ở hình 1. Các mô hình dữ liệu vật lý mô tả cách lưu trữ dữ liệu trong máy tính bằng cách giới thiệu thông tin như khuôn dạng bản ghi. Trong chương 3. Mô tả của một cơ sở dữ liệu được gọi là lược đồ cơ sở dữ liệu. Một lược đồ được hiển thị được gọi là một biểu đồ của lược đồ. xây dựng và quản trị CSDL Các mô hình dữ liệu thể hiện là các mô hình được sử dụng thường xuyên nhất trong các hệ cơ sở dữ liệu thương mại. mô hình dữ liệu mạng và mô hình dữ liệu phân cấp.… Trong một mô hình dữ liệu cần phải phân biệt rõ giữa mô tả của cơ sở dữ liệu và bản thân cơ sở dữ liệu. do tính ưu việt của nó. Các khía cạnh khác không được thể hiện trong biểu đồ lược đồ. Một biểu đồ lược đồ chỉ thể hiện một vài khía cạnh của lược đồ như là tên của các kiểu bản ghi và các mục dữ liệu. các ngôn ngữ và các phép toán của chúng.

sửa đổi một giá trị của một mục dữ liệu trong một bản ghi. trạng thái cơ sở dữ liệu là một trạng thái rỗng. Nhiều trạng thái quan hệ có thể được xây dựng để làm tương ứng với một lược đồ cơ sở dữ liệu cụ thể. Từ đó trở đi. sử dụng cơ sở dữ liệu. đó là những người quản trị cơ sở dữ liệu. Phần này chúng ta giới thiệu những người liên quan đến một hệ cơ sở dữ liệu và vai trò của họ. Chúng ta nhận được trạng thái ban đầu của cơ sở dữ liệu khi cơ sở dữ liêu lần đầu tiên được cung cấp hoặc được nhập dữ liệu. Các dữ liệu trong một cơ sở dữ liệu ở một thời điểm cụ thể được gọi là một trạng thái cơ sở dữ liệu hoặc ảnh của cơ sở dữ liệu (snapshot). Hệ quản trị cơ sở dữ liệu có trách nhiệm đảm bảo rằng tại mỗi trạng thái của cơ sở dữ liệu là một trạng thái vững chắc. điều đó có nghĩa là một trạng thái thoả mãn cấu trục và các ràng buộc được dặc tả trong lược đồ. 3. nói chung chỉ có một người định nghĩa.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. tại mọi thời điểm. và thao tác cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu lưu trữ các mô tả của các cấu trúc lược đồ và các ràng buộc – còn gọi là siêu dữ liệu – vào trong catalog của hệ quản trị sao cho phần mềm hệ quản trị cơ sở dữ liệu có thể tham khảo đến lược đồ khi nó cần. Vì vậy. Nhóm thứ nhất gồm những người mà công việc của họ liên quan hàng ngày đến cơ sở dữ liệu. chúng ta chỉ đặc tả lược đồ cơ sở dữ liệu cho hệ quản trị cơ sở dữ liệu. phân tích hệ thống và lập trình ứng dụng. Lược đồ đôi khi còn được gọi là mục tiêu (intension) và một trạng thái cơ sở dữ liệu được gọi là mở rộng (extension) của lược đồ. và lược đồ phải được thiết kế cực kỳ cẩn thận. thiết kế cơ sở dữ liệu. chúng ta nhận được một trạng thái cơ sở dữ liệu khác. không có dữ liệu. mỗi khi một phép toán cập nhật được thực hiện đối với cơ sở dữ liệu. Mỗi khi chúng ta chèn vào hoặc loại bỏ một bản ghi. Tuy nhiên. Con người trong hệ cơ sở dữ liệu Với các cơ sở dữ liệu nhỏ. cơ sở dữ liệu có một trạng thái hiện tại. với một cơ sở dữ liệu lớn. Những người liên quan đến cơ sở dữ liệu được chia làm hai nhóm chính. rất nhiều người tham gia vào việc thiết kế. Nhóm Trang 15 . Nó còn được gọi là tập hợp hiện tại các thể hiện trong cơ sở dữ liệu. chúng ta làm thay đổi trạng thái của cơ sở dữ liệu sang trạng thái khác. xây dựng. Việc phân bịêt giữa lược đồ cơ sở dữ liệu và trạng thái cơ sở dữ liệu là rất quan trọng. việc đặc tả một lược đồ đúng đắn cho một hệ quản trị cơ sở dữ liệu là một việc làm cực kỳ quan trọng. Khi chúng ta định nghĩa một cơ sở dữ liệu mới. Tại thời điểm này. xây dựng và quản trị CSDL Các dữ liệu hiện tại trong một cơ sở dữ liệu có thể thay đổi một cách thường xuyên. sử dụng và bảo trì cơ sở dữ liệu.

Người sử dụng tinh tế: Đó là các kỹ sư. hệ quản trị cơ sở dữ liệu và các phần mềm liên quan. Đây là những người quản lý bậc trung bình hoặc bậc cao. các tài nguyên là cơ sở dữ liệu. Trong môi trường hệ cơ sở dữ liệu. Người sử dụng ngây thơ: Những người này chiếm phần lớn các người sử dụng. xây dựng và quản trị CSDL thứ hai gồm những người làm việc để duy trì môi trường hệ cơ sở dữ liệu nhưng không quan tâm nhiều đến bản thân cơ sở dữ liệu. Người thiết kế có trách nhiệm giao thiệp với tất cả những người sử dụng tương lai để hiểu được các đòi hỏi của họ và đưa ra một thiết kế thoả mãn các yêu cầu đó. Những nhiệm vụ này được thực hiện trước khi cơ sở dữ liệu được cái đặt và phổ biến. đó là những người thiết kế và cài đặt hệ quản trị cơ sở dữ liệu. các nhà phân tích thương mại. Người thiết kế cơ sở dữ liệu (Database Designer) Người này chịu trách nhiệm xác định các dữ liệu sẽ được lưu giữ trong cơ sở. phát triển công cụ. c. cập nhật và sinh ra các thông tin. Người này chịu trách nhiệm về việc cho phép truy cập cơ sở dữ liệu. nhưng mỗi một lần truy cập họ có thể cần nhiều thông tin. Người quản trị hệ cơ sở dữ liệu là người chịu trách nhiệm quản lý các tài nguyên đó. a. chọn các cấu trúc thích hợp để biểu diễn và lưu giữ các dữ liệu đó. thao tác viên và bảo trì. Anh ta cũng có nhiệm vụ giao tiếp với các nhóm người sử dụng và có khả năng hỗ trợ các yêu cầu của các nhóm. Họ sử dụng một ngôn ngữ truy vấn cơ sở dữ liệu để chỉ ra các yêu cầu của mình. cấp các phần mềm và phần cứng theo yêu cầu. Người quản trị hệ cơ sở dữ liệu (Database Administrator-DBA) Trong một tổ chức có nhiều người cùng sử dụng các tài nguyên cần phải có một người giám sát và quản trị các tài nguyên đó. Những người này hiểu biết các tiện ích của hệ quản trị cơ sở dữ liệu và biết sử dụng để cài đặt các chương trình ứng dụng nhằm thoả mãn các yêu cầu phức tạp của họ. b.…. Những người sử dụng (End User) Những người sử dụng là những người mà công việc của họ đòi hỏi truy cập đến cơ sở dữ liệu để truy vấn.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Chức năng công việc của họ gắn liền với việc truy vấn và cập nhật thường xuyên cơ sở dữ liệu bằng cách sử dụng các câu hỏi và các cập nhật đã được lập trình và kiểm tra cẩn thận (gọi là các giao dịch định sẵn). tổ chức và hướng dẫn việc sử dụng cơ sở dữ liệu.. Trang 16 . các nhà khoa học. Có nhiều loại người sử dụng: Người sử dụng không thường xuyên: Những người này không thường xuyên truy cập đến cơ sở dữ liệu.

Những người viết chương trình ứng dụng thể hiện các đặc tả của những người phân tích thành chương trình. Những người phân tích hệ thống và những người lập trình ứng dụng Những người phân tích hệ thống xác định các yêu cầu của những người sử dụng.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. đó là các phần mềm đóng gói làm dễ việc thiết kế và sử dụng cơ sở dữ liệu. Những người thiết kế và cài đặt hệ quản trị cơ sở dữ liêu Đó là những người thiết kế và cài đặt các mô đul và giao diện của hệ quản trị cơ sở dữ liệu thành các phần mềm đóng gói. g. truy cập dữ liệu. phục hồi và an toàn. làm tài liệu. để dặc tả các chương trình phù hợp với yêu cầu của họ. Một hệ quản trj cơ sở dữ liệu là một hệ thống phần mềm phức tạp bao gồm nhiều thành phần (module). gỡ rối. bộ xử lý giao diện. chủ yếu là những người sử dụng ngây thơ. ngôn ngữ truy vấn. f. Những người phát triển công cụ Là những người thiết kế và cài đặt các công cụ (tool). Các thao tác viên và những người bảo trì Là những người quản trị hệ thống. xây dựng và quản trị CSDL Người sử dụng độc lập: Là những người duy trì các cơ sở dữ liệu cá nhân bằng cách sử dụng các chương trình đóng gói lập sẵn cung cấp các bảng chọn dễ sử dụng hoặc các giao diện đồ hoạ d. Đó là các module cài đặt từ điển dữ liệu. và bảo trì các giao dịch định sẵn. e. Trang 17 . Hệ quản trị cơ sở dữ liệu phải giao diện với các hệ thống phần mềm khác như hệ điều hành và các chương trình dịch cho nhiều ngôn ngữ khác nhau. họ chịu trách nhiệm về việc chạy và bảo trì môi trường phần cứng và phần mềm của hệ cơ sở dữ liệu. sau đó kiểm thử. kiểm tra cạnh tranh.

xây dựng và quản trị CSDL CHƯƠNG 2 : MÔ HÌNH THỰC THỂ-LIÊN KẾT Trong chương này chúng ta sẽ làm quên với mô hình thực thể-liên kết (Entity-Relationship model).1. Lược đồ khái niệm là một mô tả súc tích về các yêu cầu dữ liệu của các người sử dụng. Trong bước này. Vì những khái niệm này không chứa các chi tiết cài đặt (thể hiện).BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. người thiết kế cơ sở dữ liệu phỏng vấn những người sử dụng cơ sở dữ liệu để hiểu và làm tài liệu về các đòi hỏi về dữ liệu của họ. cần phải đặc tả các yêu cầu về chức năng của ứng dụng. Những đòi hỏi này sẽ được đặc tả dưới một dạng càng đầy đủ và càng chi tiết càng tốt. đó là các thao tác do người dùng định nghĩa sẽ được áp dụng đối với cơ sở dữ liệu. nó bao gồm các mô tả chi tiết của các kiểu thực thể. Một thiết kế cơ sở dữ Trang 18 . gọi tắt là mô hình ER. Mỗi khi tất cả các yêu cầu đã được thu thập và đã được phân tích. bước tiếp theo là tạo ra lược đồ quan niệm cho cơ sở dữ liệu bằng cách sử dụng mô hình dữ liệu quan niệm mức cao. Song song với việc đặc tả các yêu cầu dữ liệu. Mô hình này thường được áp dụng để thiết kế khái niệm các áp dụng cơ sở dữ liệu và nhiều công cụ thiết kế cơ sở dữ liệu sử dụng các khái niệm của nó. Bước này được gọi là thiết kế khái niệm. Kết quả của bước này là một tập hợp ghi chép súc tích về các đòi hỏi của những người sử dụng. chúng thường dễ hiểu và có thể sử dụng để giao lưu với các người sử dụng. tập trung vào các cấu trúc cơ sở dữ liệu và các ràng buộc. Lược đồ quan niệm mức cao cũng có thể được sử dụng như một dẫn chứng để đảm bảo rằng tất cả các đòi hỏi của người sử dụng đều thoả mãn và các đòi hỏi này không chứa các mâu thuẫn. Bước đầu tiên là tập hợp các yêu cầu và phân tích. chúng được biểu diễn bằng các khái niệm do các mô hình dữ liệu bậc cao cung cấp. I. Giải pháp này cho phép những người thiết kế cơ sở dữ liệu tập trung vào việc đặc tả các tính chất của dữ liệu mà không cần quan tâm đến các chi tiết lưu trữ. SỬ DỤNG MÔ HÌNH KHÁI NIỆM BẬC CAO CHO VIỆC THIẾT KẾ CƠ SỞ DỮ LIỆU Quá trình thiết kế một cơ sở dữ liệu bằng hình vẽ 2. các kiểu liên kết và các ràng buộc . Đó là một mô hình dữ liệu quan niệm bậc cao phổ biến.

Song song với các hoạt động đó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Bước tiếp theo trong thiết kế cơ sở dữ liệu là việc thể hiện (cài đặt) cơ sở dữ liệu bằng cách sử dụng một hệ quản trị cơ sở dữ liệu có sẵn. Hầu hết các hệ quản trị cơ sở dữ liệu sử dụng một mô hình dữ liệu thể hiện (chẳng hạn như mô hình cơ sở dữ liệu quan hệ hoặc đối tượng) vì vậy lược đồ quan niệm được chuyển đổi từ mô hình dữ liệu bậc cao thành mô hình dữ liệu thể hiện. tổ chức tệp cho các tệp cơ sở dữ liệu. xây dựng và quản trị CSDL liệu quan niệm tốt làm dễ cho công việc của những người thiết kế cơ sở dữ liệu. Kết quả của bước này là một lược đồ cơ sở dữ liệu dưới dạng một mô hình dữ liệu thể hiện của hệ quản trị cơ sở dữ liệu. Nếu có một số yêu cầu chức năng không thể chỉ ra trong lược đồ ban đầu thì ở bước này có thể có sự sửa đổi lược đồ khái niệm cho phù hợp. Bước cuối cùng trong thiết kế cơ sở dữ liệu là thiết kế vật lý. Trang 19 . các đường dẫn truy cập. Trong quá trình (hoặc sau khi) thiết kế lược đồ quan niệm. các chương trình áp dụng cũng được thiết kế và cài đặt như là các giao dịch cơ sở dữ liệu tương ứng với các đặc tả giao dịch mức cao. ta có thể sử dụng các phép toán mô hình dữ liệu cơ bản để đặc tả các thao tác của người sử dụng được xác định trong khi phân tích chức năng. Điều đó cũng giúp khẳng định rằng lược đồ quan niệm thoả mãn mọi yêu cầu chức năng được xác định. Trong bước này ta phải chỉ ra các cấu trúc lưu trữ bên trong. Bước này gọi là thiết kế lô gic hoặc là ánh xạ mô hình dữ liệu.

một môn học).1 Sơ đồ mô tả các bước chính của việc thiết kế cơ sở dữ liệu II. một cái ô tô. Các thực thể và các thuộc tính Đối tượng cơ bản được trình bày trong mô hình ER là thực thể. Mỗi thực thể có các thuộc tính. một thực thể nhân viên được môt tả bằng họtên. địa chỉ. xây dựng và quản trị CSDL ThÕ gíi thùc TËp hîp vµ ph©n tÝch c¸c yªu cÇu C¸c yªu cÇu c¬ së d÷ liÖu Ph©n tÝch chøc n¨ng §Æc t¶ giao t¸c møc cao (§éc lËp víi hÖ QTCSDL) C¸c yªu cÇu c¬ së d÷ liÖu thiÕt kÕ quan niÖm L­îc ®å quan niÖm ThiÕt kÕ logic thiÕt kÕ ch­¬ng tr×nh øng dông L­îc ®å logic thiÕt kÕ vËt lý cµi ®Æt giao t¸c L­îc ®å bªn trong C¸c ch­¬ng tr×nh øng dông Hình 2. Thực thể là môt “vật”trong thế giới thực có sự tồn tại độc lập.. đó là các tính chất cụ thể mô tả nó. CÁC THÀNH PHẦN CƠ BẢN CỬA MÔ HÌNH THỰC THỂ-LIÊN KẾT 1. tập thực thể. Kiểu thực thể.)hoặc có thể là một vật trừu tượng(chẳng hạn một công ty. Một thực thể có thể là một vật cụ thể. tuổi. Ví dụ. một công việc.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. (chẳng hạn như một người. lương và công việc của Trang 20 .. các thuộc tính và các khoá a.

Các loại thuộc tính Trong mô hình ER có mặt nhiều kiểu thuộc tính : thuộc tính đơn và thuộc tính phức hợp. “Hà nội”. thuộc tính đơn trị và thuộc tính đa trị. Tuổi. Giám đốc với các giá trị tương ứng là “Công ty Dệt may”. và Số điện thoại. Hà Nội. .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Địa điểm. xây dựng và quản trị CSDL nhân viên đó. Lê Hà) c3 CT Máy tính. . Thuộc tính đơn và thuộc tính phức hợp : Các thuộc tính phức hợp là các thuộc tính có thể được phân chia ra thành các phần nhỏ hơn. Hà Nội. Tên. “Thanh trì. “32”. thuộc tính Họ tên của thực thể Nhân viên có thể được phân chia thành Họ đệm. “(04)855641”.2 Kiểu thực thể và tập thực thể b. thuộc tính được lưu trữ và thuộc tính suy diễn được. 8739455) e3 (Hoàng Vân. Địa điểm. Các giá trị thuộc tính mô tả mỗi thực thể sẽ trở thành một phần chính của các dữ liệu được lưu trữ trong cơ sở dữ liệu. Các thuộc tính không thể phân chia được được gọi là thuộc tính đơn hay thuộc tính nguyên tố. Hải Phòng. biểu diễn các thuộc tính cơ bản hơn với các ý nghĩa độc lập. (04)855641) e2 (Trần Bá. Một thực thể cụ thể sẽ có một giá trị cho mỗi thuộc tính của nó. Phạm Mỹ Hoa) c2 (CT Hoa quả. Giám đốc) c1 (CT dệt may.2 chỉ ra một số thực thể và các thuộc tính của chúng. Ví dụ. Địa chỉ. ĐT) e1 (Lê Vân. Hà Nội. 45. . NHÂN VIÊN (Họ tên. Giá trị của một thuộcc tính phức hợp là sự kết hợp các giá trị của các thuộc tính thành phần tạo nên nó. 32. Hình 2. Tuổi. Chúng ta sẽ định nghĩa các kiểu thuộc tính và minh hoạ chúng thông qua các ví dụ. . Thực thể nhân viên e 1 có 4 thuộc tính : Họ tên. Giá trị của các thuộc tính tương ứng là “Lê Vân”. Các thuộc tính phức hợp có lợi cho hoàn cảnh mô hình mà trong đó một Trang 21 . CÔNG TY (Tên. Thực thể công ty c 1 có ba thuộc tính Tên. Địa chỉ. Hànội”. Hải phòng. Thanh Trì HN. Phan Anh . 8431845) . “Phạm Mỹ Hoa”. Hình vẽ 2.

một thực thể cụ thể có thể không có các giá trị áp dụng được cho một thuộc tính. Tuổi là một thuộc tính đơn trị của một người. ta phải tạo ra một giá trị đặc biệt gọi là giá trị không xác định (null value). Một tập Trang 22 . Giá trị không xác định được tạo ra khi một thuộc tính không có các giá trị áp dụng được hoặc khi không biết. Thuộc tính Ngày sinh được gọi là thuộc tính lưu trữ. Thuộc tính được lưu trữ và thuộc tính suy diễn được: Trong một số trường hợp. Một người có thể không có bằng cấp nào. thuộc tính Bằng cấp của một người. Ví dụ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ví dụ. hai hay nhiều giá trị thuộc tính có liên quan đến nhau. Trong một số trường hợp. Ví dụ. Như vậy các người khác nhau có thể có một số các giá trị khác nhau cho thuộc tính Bằng cấp.…. Một kiểu thực thể là một tập hợp các thực thể có các thuộc tính như nhau. Một kiểu thực thể trong cơ sở dữ liệu được mô tả tên của nó và các thuộc tính. Thuộc tính đơn trị và thuộc tính đa trị: Đa số các thuộc tính có một giá trị duy nhất cho một thực thể cụ thể. xây dựng và quản trị CSDL người sử dụng đôi khi tham khảo đến một thuộc tính phức hợp như là một đơn vị nhưng vào lúc khác thì tham khảo đến các thành phần của nó. các thuộc tính như vậy gọi là các thuộc tính đơn trị. khoávà tập giá trị Các kiểu thực thể và các tập thực thể: Một cơ sở dữ liệu thường chứa những nhóm thực thể tương tự như nhau. c. Trong trường hợp như vậy. Ví dụ. một công ty thuê hàng trăm nhân viên muốn lưư giữ những thông tin tương tự liên quan đến mỗi nhân viên. Hình vẽ 2. Thuộc tính Tuổi như vậy gọi là thuộc tính suy diễn được và nó được suy diễn từ thuộc tính Ngày sinh.2 chỉ ra hai kiểu thực thể có tên là CÔNGTY và NHÂNVIÊN và các thuộc tính của chúng. Các thuộc tính phức tạp: Là những thuộc tính phức hợp và đa trị. tâp thực thể. Các thực thể nhân viên này chia sẻ các thuộc tính giống nhau nhưng mỗi thực thể có các giá trị riêng cho các thuộc tính. ví dụ thuộc tính Tuổi và thuộc tính Ngày sinh của một người. Các giá trị không xác định (null values): Trong một số trường hợp. Với một người cụ thể ta có thể tính Tuổi của anh ta bằng cách lấy năm hiện tại trừ đi năm của Ngày sinh. Thuộc tính Số điện thoại của thực thể Nhân viên sẽ không có giá trị đối với các nhân viên không có số điện thoại. một thuộc tính có thể có một tập hợp các giá trị cho cùng một thực thể. Kiểu thực thể. người khác nữa có thể có nhiều bằng. Những thuộc tính như vậy được gọi là thuộc tính đa trị. người khác có thể có một bằng. Nếu một thuộc tính phức hợp được tham khảo chỉ như là một thì không cần thiết phải chia nó thành các thuộc tính thành phần.

Một kiểu thực thể được biểu diễn trong sơ đồ ER như là một hộp hình chữ nhật có chứa tên kiểu thực thể. Các thuộc tính đa trị được hiển thị trong các hình ô van đúp. Thuộc tính như vậy gọi là thuộc tính khoá và các giá trị của nó có thể dùng để xác định từng thực thể một cách duy nhất. nó thường được tham chiếu đến bằng cách sử dụng tên của kiểu thực thể. xây dựng và quản trị CSDL hợp tất cả các thực thể của một kiểu thực thể cụ thể trong cơ sở dữ liệu tại một thời điểm được gọi là một tập thực thể. thuộc tính Tên của kiểu thực thể CÔNGTY là khoá của kiểu thực thể đó vì mỗi thực thể công ty có một tên duy nhất. vừa là tập hợp hiện tại của tất cả các thực thể nhân viên trong cơ sở dữ liệu. Trong trường hợp như vậy ta có thể định nghĩa một thuộc tính khoá Trang 23 . Các tên thuộc tính được đặt trong các hình ô van và được nối với kiểu thực thể bằng các đường thẳng. Tập hợp các thực thể của một kiểu thực thể cụ thể được nhóm vào một tập thực thể và được gọi là một thể hiện của một kiểu thực thể. nhiều thuộc tính kết hợp với nhau tạo thành một khoá. Hä ®Öm Tªn Hä tªn M· sèNV Ngµy sinh B»ng cÊp NH¢N VI£N Hình 2. nghĩa là tổ hợp các giá trị của các thuộc tính phải khác nhau đối với mỗi thực thể.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. NHÂNVIÊN dùng để chỉ vừa là một kiểu thực thể.3 Biểu diễn kiểu thực thể và các thuộc tính Một kiểu thực thể môt tả một lược đồ hoặc một mục đích cho một tập các thực thể chia sẻ cùng một cấu trúc. Ví dụ. Các thuộc tính phức hợp được nối với các thuộc tính thành phần của nó bằng các đường thẳng. Các thuộc tính khoá của một kiểu thực thể: Một ràng buộc quan trọng trên các thực thể của một kiểu thực thể là Khoá hoặc là ràng buộc về tính duy nhất trên các thuộc tính. Mỗi một kiểu thực thể thường có một thuộc tính mà các giá trị của nó là khác nhau đối với mỗi thực thể riêng biệt trong một tập hợp. Đôi khi. Ví dụ.

tập liên kết và các thể hiện Một kiểu liên kết R giữa n kiểu thực thể E 1 . tập liên kết R là một tập hợp các thể hiện liên kết ri . Do đó. kiểu thực thể NHÂNVIÊN có thể có hai thuộc tính Sốchứngminhthư và Sốthẻbảohiểm. thuộc tính khoá có tên được gạch dưới ở bên trong hình ô van. Trong biểu diễn đồ hoạ của mô hình ER. cả hai đều là thuộc tính khoá. Đó không phải là tính chất của một thể hiện cụ thể.…. Các kiểu liên kết. 1<=j<=n. nó là một ràng buộc trên tất cả các thể hiện của kiểu thực thể. Cũng như các kiểu thực thể và các tập thực thể. Một cách toán học. các kiểu liên kết. trong đó mỗi ri liên kết n thực thể riêng biệt (e 1 . Như vậy. Một kiểu thực thể cũng có thể không có khoá. Định nghĩa ở trên đúng cho cả các thuộc tính đơn trị. Các tập giá trị không được hiển thị trong sơ đồ ER. Chú ý rằng khoá phức hợp phải tối thiểu. trong trường hợp đó. nó được gọi là kiểu thực thể yếu Các tập hợp giá trị (miền) của các thuộc tính: Mỗi thuộc tính đơn của một kiểu thực thể được kết hợp với một tập hợp giá trị (hay còn gọi là miền giá trị). thuộc tính đa trị. các vai trò và các ràng buộc cấu trúc a. en). Các liên kết. Trang 24 . nghĩa là tất cả các thuộc tính thành phần phải có mặt trong thuộc tính phức hợp để thoả mãn tính chất duy nhất. Khi chỉ ra rằng một thuộc tính là khoá của một kiểu thực thể nghĩa là tính chất duy nhất nêu ở trên phải được thoả mãn đối với mỗi mở rộng của kiểu thực thể. Một kiểu thực thể có thể có nhiều hơn một thuộc tính khoá. …. đó là ràng buộc cấm hai thực thể bất kỳ có giá trị cho thuộc tính khoá như nhau tại cùng một thời điểm.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. mà đúng hơn. Một cách toán học. 2. một thuộc tính A của kiểu thực thể E có tập giá trị là V có thể được định nghĩa như là một hàm từ E vào tập hợp lực lượng P(V) của V: A: E → P(V) Chúng ta tham chiếu đến giá trị của thuộc tính A đối với thực thể e như là A(e). e 2 . Đó là tập hợp các giá trị có thể gán cho thuộc tính này đối với mỗi thực thể riêng biệt.. Ràng buộc khoá này cũng như các ràng buộc khác sẽ được giới thiệu sau được lấy ra từ các ràng buộc của “thế giới nhỏ”mà cơ sở dữ liệu biểu diễn. một kiểu liên kết và tập liên kết tương ứng với nó cũng có tên chung là R. xây dựng và quản trị CSDL phức hợp. E 2 . và cả thuộc tính không xác định. Ví dụ. En xác định một tập hợp liên kết giữa các thực thể của các kiểu đó. và mỗi thực thể ej trong ri là một thành phần của kiểu thực thể Ej.

. thể hiện liên kết. trong thực tế. . NH¢N VI£N NH¢N VI£N Lµm viÖc cho §¬n vÞ §¬n vÞ Lµm viÖc cho e1 e2 e3 e4 e5 . …. xây dựng và quản trị CSDL một kiểu liên kết là một quan hệ toán học trên E 1 . e 2 .En. mỗi thể hiện liên kết ri trong R là một sự kết hợp của các thực thể. 4 minh hoạ các ví dụ về kiểu liên kết. các kiểu liên kết được biểu diễn bằng một hình thoi được nối trực tiếp với các hình chử nhật biểu diễn các kiểu thực thể tham gia vào liên kết. Ví dụ.x En. mỗi thực thể riêng biệt e 1 .. e 2 . kiểu liên kết <làm việc cho> giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể ĐƠNVỊ Trang 25 .. ..…. Cấp liên kết. . en được gọi là tham gia vào thể hiện liên kết ri = (e 1 . c1 Hình 2. En đựoc gọi là tham gia vào kiểu liên kết R. …. Một cách không hình thức. en). Mỗi kiểu thực thể E 1 .… Ví dụ. tên vai trò và liên kết đệ quy Cấp của một liên kết: Cấp của một kiểu liên kết là số các kiểu thực thể tham gia. . cấp 3. Một kiểu liên kết có thể có cấp 1. Trong sơ đồ ER. E 2 .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.E 2 . các nhân viên làm việc cho các đơn vị. cấp 2.…. như vậy. Hình vẽ 2. Mỗi thể hiện liên kết ri như thế biểu diễn một sự kiện rằng các thực thể tham gia trong ri có một quan hệ với nhau theo một cách nào đó ở trong thế giới thực. có một kiểu liên kết giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể ĐƠNVỊ liên kết các nhân viên với các đơn vị mà họ làm việc cho. mỗi thực thể thuộc về một kiểu thực thể tham gia vào liên kết. hoặc có thể định nghĩa như là một tập của tích Đề các E 1 x E 2 x …. và tương tự.4 Kiểu liên kết và thể hiện liên kết b. e2 .

thì thuộc tính ĐƠNVỊ biểu thị một liên kết.v… Các liên kết như các thuộc tính: Đôi khi chúng ta có thể coi một kiểu liên kết như một thuộc tính của một kiểu thực thể. Ví dụ: trong kiểu liên kết <làm việc cho>. một kiểu thực thể có thể tham gia vào kiểu liên kết với các vai trò khác nhau. Các kiểu liên kết như vậy gọi là liên kết đệ quy. một lần với vai trò người bị theo dõi và một lần với vai trò người theo dõi. Các tên vai trò là hoàn toàn không cần thiết trong các kiểu liên kết mà trong đó các kiểu thực thể tham gia đều khác nhau. Tuy nhiên. v…v). Trong những trường hợp như vậy tên vai trò trở nên quan trọng để phân biệt ý nghĩa của mỗi sự tham gia. Tên vai trò chỉ rõ vai trò mà thực thể của kiểu thực thể tham gia có trong mỗi thể hiện liên kết. bởi vì mỗi tên kiểu thực thể có thể được sử dụng như là một tên vai trò. Các thuộc tính kiểu này có thể đơn trị hoặc đa trị tuỳ theo bản chất của mối liên kết. Ví dụ. Các tên vai trò và các liên kết đệ quy: Mỗi một kiểu thực thể tham gia vào một kiểu liên kết có một vai trò cụ thể trong liên kết. c.5 chỉ ra một ví dụ về liên kết đệ quy: Trong các nhân viên làm việc cho một đơn vị. nếu kiểu thực thể NHÂNVIÊN có thuộc tính ĐƠNVỊ để chỉ ra tên đơn vị mà nhân viên làm việc cho. Các ràng buộc này được xác định tù tình trạng của thế giơid thực mà các liên kết biểu diễn. và giúp đỡ việc giải thích ý nghĩa liên kết là gì. Hình vẽ 2. nếu công ty có quy tắc là mỗi nhân viên chỉ phải làm việc cho một đơn vị thì ta phải mô tả ràng buộc này trong lược đồ. trong một số trường hợp.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ví dụ. Các tỷ số lực lượng cho các mối liên kết cấp 2: Tỷ số lực lượng cho một liên kết cấp 2 chỉ ra số các thể hiên liên kết mà một thực thể có thể tham gia Trang 26 . Kiểu thực thể NHÂNVIÊN tham gia hai lần vào kiểu liên kết < theo dõi>. v. Có hai loại ràng buộc liên kết chính: tỷ số lực lượng và sự tham gia. quản đốc. có nhân viên được giao nhiệm vụ theo dõi các nhân viên khác (chẳng hạn làm tổ trưởng. xây dựng và quản trị CSDL là một kiểu liên kết cấp 2. Như vậy sẽ có một kiểu liên kết <theo dõi> liên kết một nhân viên với một người theo dõi (cũng là một nhân viên). Kiểu liên kết <biết trước> giữa kiểu thực thể Mônhọc với chính nó là một kiểu liên kết cấp 1. còn kiểu thực thể ĐƠNVỊ đóng vai trò của đơn vị hoặc người thuê nhân viên. kiểu thực thể NHÂNVIÊN đóng vai trò của nhân viên hoặc công nhân. Các ràng buộc trên các kiểu liên kết Các kiểu liên kết thường có một số ràng buộc để hạn chế số các tổ hợp có thể của các thực thể có thể tham gia trong tập hợp liên kết tương ứng.

Như vậy. N:1 và M:N. điều đó có nghĩa là mỗi đơn vị có thể liên kết với nhiều nhân viên nhưng một nhân viên chỉ có thể liên kết với một đơn vị.5). Có hai kiểu ràng buộc tham gia: ràng buộc tham gia toàn bộ và ràng buộc tham gia bộ phận. nghĩa là mỗi thực thể trong “tập hợp toàn bộ”các thực thể NHÂNVIÊN phải có liên kết với một thực thể ĐƠNVỊ thông qua kiểu liên kết < làm việc cho>. N. M trên các hình thoi (hình vẽ 2.5 Tỷ số lực lượng của các kiểu liên kết Các ràng buộc tham gia và sự phụ thuộc tồn tại: Ràng buộc tham gia chỉ ra rằng có phải sự tồn tại của một thực thể phụ thuộc vào liên quan đến một thực thể khác thông qua một kiểu liên kết hay không. nghĩa là chỉ có một số hoặc “một phần của tập hợp “các thực thể NHÂNVIÊN là có liên kết với một Đơn vị thông qua kiểu liên kết < quản lý>. NH¢N VI£N NH¢N VI£N NH¢N VI£N 1 Qu¶n lý 1 §¬n vÞ §¬n vÞ Dù ¸n N Lµm viÖc cho 1 M Lµm viÖc trªn N Hình 2. việc tham gia của kiểu thực thể Nhân viên vào kiểu liên kết <quản lý> là bộ phận. Một ví dụ về liên kết 1:1 là: một nhân viên có thể <quản lý> một đơn vị và một đơn vị có một nhân viên <quản lý>. Chúng ta gọi tỷ số lực lượng và các ràng buộc tham gia bằng một cái tên chung là các ràng buộc cấu trúc. Sự tham gia toàn bộ còn được gọi là sự phụ thuộc tồn tại. 1:N. Ví dụ. Như vậy. chứ không phải tất cả. xây dựng và quản trị CSDL vào. thì một thực thể NHÂNVIÊN chỉ có thể tồn tại khi tham gia vào một thể hiện của liên kết < làm việc cho>. Ví dụ. sự tham gia của kiểu thực thể NHÂNVIÊN vào liên kết <làm việc cho> được gọi là tham gia toàn bộ. Các tỷ số lực lượng có thể có là 1:1. Các tỷ số lực lượng cho các liên kết cấp 2 được hiển thị trên các lược đồ ER bằng cách ghi 1. nếu chính sách của một công ty ấn định rằng mỗi nhân viên phải làm việc cho một đơn vị. Xét một ví dụ khác: Một nhân viên có thể quản lý (hoặc không) một đơn vị. Trang 27 . tỷ số lực lượng là 1:N. trong kiểu liên kết <làm việc cho> giữa ĐONVI và NHÂNVIÊN. Kiểu liên kết NHÂNVIÊN <làm việc trên> Dựán có tỷ số lựclượng là N:M vì nó phản ánh quy tắc của thế giới thực là một nhân viên có thể làm việc trên nhiều dự án và một dự án có nhiều nhân viên làm việc.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.

xây dựng và quản trị CSDL Trong lược đồ ER. Mỗi thực thể nhân viên được gọi là chủ của các thực thể phụ thuộc liên kết với nó. Các thuộc tính của PHỤTHUỘC là Họtên. Hai người phụ thuộc của hai nhân viên khác nhau có thể có cùng giá trị cho các thuộc tính nhưng nó là hai thực thể khác nhau. Trong sơ đồ ER kiểu thực thể yếu và mối liên kết xác định của nó được biểu diễn bằng một hình chử nhật và một hình thoi nét đúp. thuộc tính phức hợp gồm tất cả các thuộc tính của thực thể yếu sẽ là một khoá bộ phận. Một kiểu thực thể yếu luôn luôn có một ràng buộc tham gia hoàn toàn (tồn tại phụ thuộc) vào liên kết xác định của nó bởi vì một thực thể yếu không thể được xác định mà không có thực thể chủ. Ví dụ. Giới tính. Trong trường hợp xấu nhất. Chúng chỉ được xác định như hai thực thể khác nhau sau khi xác định một thực thể nhân viên cụ thể có liên quan đến từng người phụ thuộc. ta xét kiểu thực thể PHỤTHUỘC.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. • Các kiểu thực thể yếu Các kiểu thực thể không có các thuộc tính khoá cho chính mình được gọi là các thực thể yếu. Thông thường một kiểu thực thể yếu có một khoá bộ phận. để ghi lại số giờ trong tuần một nhân viên làm việc trên một dự án. sự tham gia toàn bộ được hiển thị như một đường thẳng đôi nối các kiểu thực thể tham gia vào kiểu liên kết. Ví dụ. Ngàysinh. và Mốiquanhệ (đối với nhân viên). đó là một tập hợp các thuộc tính có thể xác định một cách duy nhất các thực thể yếu liên kết với cùng một thực thể chủ. nếu như hai người phụ thuộc không bao giừ có tên giống nhau thì thuộc tính Họtên của PHỤTHUỘC là một khoá bộ phận. giống như các thuộc tính của các kiểu thực thể. các kiểu thực thể thông thường (nghĩa là có thuộc tính khoá) được gọi là thực thể mạnh. Sự tham gia bộ phận được biểu diễn bằng một đường thẳng đơn. Ví dụ. Ta gọi kiểu thực thể khác đó là kiểu thực thể xác định hoặc kiểu thực thể chủ và ta sẽ gọi kiểu liên kết làm liên kết một kiểu thực thể yếu với chủ của nó là liên kết xác định của kiểu thực thể yếu. Trang 28 . liên kết với kiểu thực thể NHÂNVIÊN được sử dụng để giữ dấu vết của các người phụ thuộc vào mỗi nhân viênthông qua một liên kết 1:N. chúng ta có thể đưa vào thuộc tính Sôgiờ cho kiểu liên kết <làm việc trên> hoặc để ghi lại việc quản lý đơn vị của một nhân viên chúng ta có thể đưa vào thuộc tính Ngày bắt đầu cho kiểu liên kết <quảnlý>. Ngược lại. Các thực thể của một kiểu thực thể yếu được xác định bằng cách liên kết với các thực thể cụ thể của một kiểu thực thể khác tổ hợp với một số giá trị thuộc tính của nó. • Thuộc tính của các kiểu liên kết Các kiểu liên kết cũng có thể có các thuộc tính.

Thông tin về những người phụ thuộc gồm Họ tên. Mã số đều là các thuộc tính khoá (do tính duy nhất của chúng). và Người theodõi. ngày sinh. MãsốBHXH (Mã số bảo hiểm xã hội). Trang 29 . Các thuộc tính Tên. một mã số duy nhất và một địa điểm. các thuộc tính và các kiểu liên kết Theo các ghi chép ở trên. Giớitính. ĐƠNVỊkiểmsoát. Mãsố. Địa chỉ. Ngườiquảnlý. Địađiểm. Chúng ta cũng lưu giữ dấu vết của người theo dõi trực tiếp của mỗi nhân viên Mỗi nhân viên có những người phụ thuộc.). …. ngày sinh và mối quan hệ với nhân viên (là con hoặc bố. Thuộc tính MãsốBHXH là thuộc tính khoá. Đặt vấn đề Giả sử rằng sau khi tập hợp các yêu cầu và sau bước phân tích. 1. mẹ. ĐƠNVỊ. Với mỗi nhân viên chúng ta lưu giữ Họ tên. Mã số bảo hiểm xã hội. xây dựng và quản trị CSDL III. lương. Mỗi dự án có một tên duy nhất. Địađiểm. VÍ DỤ VỀ THIẾT KẾ MỘT MÔ HÌNH ER Trong phần này chúng ta xét ví dụ về việc xây dựng mô hình ER cho cơ sở dữ liệu CÔNGTY. và Ngàybắtđầuquảnlý. giới tính. Chúng ta lưu giữ lại số giờ / tuần mà một nhân viên làm việc trên mỗi dự án. một mã số duy nhất. Xác định các kiểu thực thể. Thuộc tính Họtên là một thuộc tính phức hợp (gồm Họđệm. lương.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. 2. và một nhân viên cụ thể quản lý công ty. Thuộc tính địa chỉ cũng là phức hợp. Mãsố đều là các thuộc tính khoá. Một đơn vị kiểm soát một số dự án. Một nhân viên được phân công vào một đơn vị nhưng có thể làm việc trên nhiều dự án do nhiều đơn vị kiểm soát. những người thiết kế cơ sở dữ liệu mô tả lại hoạt động của công ty bằng những câu như sau: Công ty được tổ chức thành các đơn vị. Một đơn vị có thể có nhiều địa điểm. Mỗi đơn vị có một tên duy nhất. Ngày sinh. Một kiểu thực thể dựán với các thuộc tính Tên. Cả hai thuộc tính Tên. Địa điểm là một thuộc tính đa trị (vì một đơn vị có thể có nhiều địa điểm). những người này được hưởng chế độ bảo hiểm. Tên). chúng ta có thể có 4 kiểu thực thể: Một kiểu thực thể ĐƠNVỊ với các thuộc tính Tên. Mãsố. địa chỉ. Một kiểu thực thể NHÂNVIÊN với các thuộc tính Họtên.Việc nhân viên quản lý công ty được ghi lại bằng ngày mà nhân viên đó bắt đầu làm quản lý. giới tính.

ngược lại. Giữa các kiểu thực thể trên có các kiểu liên kết như sau: Giữa ĐƠNVỊ vị và dựán có một kiểu liên kết : ĐƠNVỊ kiểm soát các dự án. Nếu như không phải mọi đơn vị đều quản lý dự án thì sự tham gia của ĐƠNVỊ là bộ phận.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Thuộc tính Ngườitheodõi đóng vai trò là nhân viên theo dõi. đây là một liên kết kiểu M:N. Thuộc tính ĐƠNVỊ của kiểu thực thể nhân viên đóng vai trò là đơn vị mà nhân viên làm việc cho nó. Sự tham gia của dự án vào kiểu liên kết là toàn bộ (nghĩa là một dự án bao giờ cũng có một đơn vị kiểm soát). một nhân viên có thể làm việc trên nhiều dự án và một dự án có thể có nhiều nhân viên làm việc. ngược lại. Sự tham gia của cả hai kiểu thực thể là toàn bộ (một nhân viên phải làm việc cho một đơn vị và một đơn vị phải có các nhân viên làm việc). Đây là một liên kết kiểu 1:N. một nhân viên theo dõi trực tiếp các nhân viên khác. sự tham gia đó là toàn bộ. nó chỉ kiểu liên kết kiểm soát Giữa NHÂNVIÊN và ĐƠNVỊ có hai kiểu liên kết: Nhân viên làm việc cho đơn vị và nhân viên quản lý một đơn vị Kiểu liên kết làm việc cho là một liên kết kiểu N:1. Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể dựán có một kiểu liên kết: NHÂNVIÊN làm việc trên dựán. Ngàysinh. và Mốiquanhệ (đối với nhân viên). sự tham gia của dự án là toàn bộ vì dự án nào cũng phải có nhân viên làm việc. Thuộc tính này chỉ kiểu liên kết làm việc choKiểu liên kết quản lý là một liên kết kiểu 1:1. Thuộc tính Người quản lý của ĐƠNVỊ đóng vai trò người nhân viên quản lý đơn vị và thuộc tính Ngàybắtđầuquảnlý là thuộc tính của kiểu liên kết quản lý Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể NHÂNVIÊN có một kiểu liên kết đệ quy : NHÂNVIÊN theo dõi NHÂNVIÊN. Sự tham gia của ĐƠNVỊ là toàn bộ vì đơn vị nào cũng phải có một người quản lý. Giới tính. Thuộc tính ĐƠNVỊkiểmsoát ở đây đóng vai trò là đơn vị kiểm soát dự án. Giữa kiểu thực thể NHÂNVIÊN và kiểu thực thể PHỤTHUỘC có một mối Trang 30 . Sự tham gia của NHÂNVIÊN là bộ phận vì một nhân viên có thể không làm việc cho dự án nào. xây dựng và quản trị CSDL Một kiểu thực thể PHỤTHUỘC với các thuộc tính NHÂNVIÊN. HọtênPT (Họ tên của người phụ thuộc). Đây là một liên kết kiểu 1:N. Sự tham gia của NHÂNVIÊN là bộ phận bởi vì không phải nhân viên nào cũng quản lý đơn vị. Sự tham gia của NHÂNVIÊN (ở cả hai phía) là bộ phận bởi vì không phải nhân viên nào cũng có người theo dõi trực tiếp và không phải nhân viên nào cũng theo dõi nhân viên khác.

nhân viên có thể có những người phụ thuộc. Làmviệctrên của kiểu thực thể NHÂNVIÊN và thuộc tính NHÂNVIÊN của kiểu thực thể PHỤTHUỘC. Đó là các thuộc tính Ngườiquảnlý và Ngàybắtđầuquảnlý của kiểu thực thể ĐƠNVỊ. thuộc tính ĐƠNVỊkiểmsoát của kiểu thực thể dự án. Đây là kiểu liên kết 1:N.6 Hä ®Öm Tªn Ngµy sinh Giíi tÝnh L­¬ng 1 Ngµy b¾t ®Çu Hä tªn M· sèNV Qu¶n lý 1 NH¢N VI£N N §¬n vÞ Lµm viÖc cho 1 1 1 Gi¸m s¸t N 1 Sè giê Cã N M KiÓm so¸t N Lµm viÖc trªn N Dù ¸n Phô thuéc Tªn Quan hÖ Tªn M· sè §Þa ®iÓm Ngµy sinh Giíi tÝnh Hình 2. Sau khi phân tích như trên ta.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. loại bỏ các thuộc tính được xem như các kiểu liên kết ra khỏi các kiểu thực thể. Sự tham gia của NHÂNVIÊN là bộ phận và sự tham gia của phụ thuộc là toàn bộ vì không phải nhân viên nào cũng có người phụ thuộc nhưng một người phụ thuộc phải phụ thuộc vào một nhân viên. xây dựng và quản trị CSDL liên kết : người phụ thuộc phụ thuôc vào NHÂNVIÊN hoặc NHÂNVIÊN có những người PHỤTHUỘC. các thuộc tính ĐƠNVỊ.6 Lược đồ ER “CÔNG TY” Trang 31 . Ngườitheodõi. Kết quả chúng ta nhận được sơ đồ ER như hình vẽ 2. thuộc tính Nhân viên của kiểu thực thể PHỤTHUỘC đóng vai trò của nhân viên mà người phụ thuộc phụ thuộc vào. Thuộc tính này chỉ liên kết phụ thuộc vào.

Mọi giá trị trong một cột đều cùng một kiểu dữ liệu Theo thuật ngữ mô hình quan hệ hình thức. Để dặc tả một miền. mỗi một dòng trong bảng biểu thị một sự kiện tương ứng với một thực thể hoặc một liên kết của thế giới thực. … Một lược đồ quan hệ R.A 2 . Mô hình quan hệ sử dụng khái niệm quan hệ toán học như là khối xây dựng cơ sở và có cơ sở lý thuyết của nó trong lý thuyết tập hợp và logic vị từ bậc nhất. Một số ví dụ về miền: .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. CÁC KHÁI NIỆM CỦA MÔ HÌNH QUAN HỆ Mô hình quan hệ biểu thị cơ sở dữ liệu như một tập các quan hệ.…. An).. An. một kiểu dữ liệu và khuôn dạng dữ liệu. Tuổi : là một tập các số nguyên nằm trong khoảng từ 1 đến 120 Ngoài ra. Mỗi một thuộc tính Ai là tên vai trò của một miền D nào đó trong lược đồ quan hệ R. được tạo nên từ một tên quan hệ R một danh sách các thuộc tính A 1 . chúng ta đã đưa ra các khái niệm về kiểu thực thể và kiểu liên kết như là các khái niệm để mô hình hoá dữ liệu của thế giới thực. điều đó có nghĩa là mỗi giá trị trong miền là không thể phân chia trong phạm vi mô hình quan hệ. mỗi đầu cột được gọi là một thuộc tính. Mỗi quan hệ có thể được biểu diễn như một bảng giá trị. Trong chương này chúng ta sẽ nói về các đặc trưng cơ bản của mô hình. Tên bảng và tên các cột dùng để giúp giải thích ý nghĩa của các giá trị trong mỗi hàng. mỗi một dòng trong bảng biểu thị một tấp hợp các giá trị dữ liệu liên quan với nhau. trọng lượng.. người ta chỉ ra một tên miền. Trong mô hình quan hệ. Họ tên : Là một tập hợp các dãy chữ cái có độ dài <= 30 . chẳng hạn các đơn vị tính như tiền. các ràng buộc của chúng và tập hợp các phép toán của mô hình quan hệ. 1. bộ và quan hệ Một miền D là một tập hợp các giá trị nguyên tử. I. mỗi hàng được gọi là một bộ. CÁC RÀNG BUỘC QUAN HỆ VÀ ĐẠI SỐ QUAN HỆ Mô hình quan hệ được Ted Codd đưa ra đầu tiên vào năm 1970 và gây được chú ý ngay tức khắc vì tính đơn giản và các cơ sở toán học của nó.A 2 . Trong chương trước.…. thuộc tính. xây dựng và quản trị CSDL CHƯƠNG 3: MÔ HÌNH QUAN HỆ. D Trang 32 . và bảng được gọi là một quan hệ. trong cơ sở dữ liệu người ta còn chỉ ra các thông tin phụ để thể hiện các giá trị của miền. ký hiệu là R(A 1 . Miền.

trong đó mỗi vi . Như vậy. trong đó mỗi bộ được biểu diễn như một hàng và mỗi thuộc tính tương ứng với mỗi đầu cột chỉ ra vai trò của các giá trị trong cột đó.. tương ứng với thuộc tính Ai được tham chiếu đến như là t[Ai]. Giá trị thứ i của bộ t. Địachỉ).A 2 . Họtên. An) được ký hiệu là r(R). là tập hợp các n-bộ r = {t 1 . xây dựng và quản trị CSDL được gọi là miền giá trị của Ai và được ký hiệu là Dom(Ai). dom(An). đó là tập con của tích Đề cac của các miền xác định R: r(R) ⊆ (dom(A 1 ) x dom(A 2 ) x ……x dom(An)) Tích Đề cac moi tổ hợp có thể có của các giá trị từ các miền đã cho. tn }. SINH VIÊN Họ tên Lê Vân Hoàng Tùng Trương Định Phạm An Đỗ Cung Mã số 4515202 4516802 4620503 4612203 4521402 Ngày sinh 12/09/84 21/03/84 15/05/85 16/04/85 10/01/84 Giới tính Nữ Nam Nam Nam Nam Địa chỉ Hà Nội Bắc Ninh Hà Nam Nam Định Nghệ An Hình 3. v 2 .. Một quan hệ hoặc trạng thái quan hệ r của lược đồ quan hệ R(A 1 .1 Quan hệ SINH VIÊN Định nghĩa quan hệ ở trên có thể phát biểu lại như sau : Một quan hệ r(R) là một quan hệ toán học cấp n trên các miền giá trị dom(A1). t = < v 1 . Quan hệ tương ứng với nó là một bảng có tên là Sinhviên. ta có lược đồ cấp 5: Sinhviên(Mãsố. là một phần tử của Dom(Ai) hoặc là một giá trị không xác định (null value). …. Mỗi bộ trong quan hệ biểu diễn một sinh viên cụ thể. R được gọi là tên của quan hệ đó. 1<= i <= n. dom(A2). vn >. nếu ta ký hiệu lực lượng của một miền D là D và giả thiết rằng mọi Trang 33 . t 2 .…. Cấp của một quan hệ là số các thuộc tính của lược đồ quan hệ của nó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. có 5 cột có tên là các thuộc tính. mỗi thuộc tính có một miền.Ví dụ.1 chỉ ra một ví dụ của quan hệ Sinhviên tương ứng với sơ đồ quan hệ SINHVIÊN ở trên.. Ngàysinh. Quan hệ được biểu diễn như một bảng. ……. Các giá trị không xác định biểu thị các thuộc tính mà giá trị của nó không biết được hoặc không tồn tại đối với từng bộ Sinh viên cụ thể.…….. Mỗi n-bộ t là một danh sách có thứ tự của n giá trị. Một lược đồ quan hệ được sử dụng để môt tả một quan hệ . Giớitính.. Hình 3.

quan hệ cũng bị thay đổi thành trạng thái quan hệ khác. khi ta biểu diễn một quan hệ như là một bảng.*dom(An) ở ngoài tất cả các tổ hợp có thể có này. Nói chung. một n-bộ là một danh sách có thứ tự của n giá trị. Các phần tử trong một tập hợp không có thứ tự. b) Thứ tự của các giá trị bên trong một bộ : Theo định nghĩa quan hệ ở trên. vì vậy không có thứ tự logic nào hơn thứ tự lôgic khác. Tuy nhiên. một trạng thái quan hệ ở một thời điểm cho trước – gọi là trạng thái quan hệ hiện tại – chỉ phản ảnh các bộ giá trị biểu diễn một trạng thái cụ thể của thế giới thực. theo thứ tự logic của Mã số. Các đặc trưng của các quan hệ a) Thứ tự của các bộ trong một quan hệ : Một quan hệ được định nghĩa như một tập hợp các bộ. Các thuộc tính chỉ ra các vai trò khác nhau đói với miền.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Có thể có nhiều thứ tự lô gic trên một quan hệ. Thứ tự này chỉ rõ bản ghi thứ nhất. vì vậy các bộ trong một quan hệ không có một thứ tự cụ thể. không thay đổi.. Một cách tương tự. từ đó suy ra thứ tự của các thuộc tính trong một lược đồ quan hệ cũng quan trọng. ở mức lô gic. các hàng được hiển thị theo một thứ tự nhất định. 2. các bộ giá trị trong quan hệ SINHVIÊN ở hình 3. Khi một quan hệ được cài đặt như một tệp. do trạng thái của thế giới thực thay đổi. Tuy nhiên. hai thuộc tính ĐịachỉNV và ĐịachỉĐV có cùng miền giá trị nhưng thuộc tính thứ nhất tham chiếu đến địa chỉ của nhân viên còn địa chỉ thứ hai tham chiếu đến địa chỉ của đơn vị. bản ghi thứ i. bản ghi thứ n. Ví dụ. trong một tệp. Thứ tự các bộ không phải là một phần của định nghĩa quan hệ bởi vì một quan hệ cố gắng biểu diễn các sự vật ở mức trừu tượng hoặc lôgic. các bản ghi được lưu trữ một cách vật lý trên đĩa vì vậy luôn có một thứ tự giữa các bản ghi. Trang 34 . thứ tự của các thuộc tính và các giá trị của nó là không thực sự quan trọng khi gữ được sự tương ứng giữa các thuộc tính và các giá trị. một thứ tự vật lý có thể được chỉ ra trên các bản ghi của tệp. Các quan hệ chứa cùng một số hàng như nhau nhưng các hàng được sắp xếp khác nhau được xem như đồng nhất với nhau. Lược đồ R là ổn định. Ví dụ.1 có thể sắp xếp theo nhiều cách khác nhau: theo thứ tự logic của Họtên. Có thể xảy ra trường hợp nhiều thuộc tính có cùng một miền giá trị. trừ phi phải thêm vào một số thuộc tính để biểu diễn một thông tin mới chưa được lưu trữ trong quan hệ. Như vậy thứ tự của các giá trị trong một bộ là quan trọng. Định nghĩa quan hệ không chỉ ra thứ tự lôgic nào cả. …. xây dựng và quản trị CSDL miền đều hữu hạn thì tổng số các bộ trong tích Đề cac là dom(A 1 )*dom(A 2 )* ………. ….

<giá trị>). trong đó mỗi cặp cho một giá trị của ánh xạ từ một thuộc tính Ai đến một giá trị vi của dom(Ai). điều đó có nghĩa là nó không phân chia được thành các thành phần trong phạm vi của mô hình quan hệ. Ví dụ. tm}là một tập hợp hữu hạn các ánh xạ từ R vào D. định nghĩa thứ hai là tổng quát hơn. Ngoài các quan hệ biểu diễn các sự kiện về các thực thể. trong đó các giá trị của các thuộc tính trong một bộ là có thứ tự vì nó làm đơn giản rất nhiều khái niệm. trong mô hình quan hệ không cho phép có các thuộc tính phức hợp và các thuộc tính đa trị. xây dựng và quản trị CSDL Có thể đưa ra một định nghĩa khác về quan hệ. giới tính. giả sử quan hệ SINHVIÊN có thuộc tính Số điện thoaị ở nhà. Trong định nghĩa này. Mỗi bộ trong quan hệ được thể hiện như là một sự kiện hoặc như một thể hiện cụ thể của một khẳng định. Mỗi ánh xạ ti được gọi là một bộ. địa chỉ. trong đó D = dom(A 1 ) ∪ dom(A 2 ) ∪ …. t[Ai] phải ở trong dom(Ai) với 1<= i <= n. Các giá trị trong một bộ: Mỗi giá trị trong một bộ là một giá trị nguyên tử . một số quan hệ có thể biểu diễn Trang 35 . Trong một tập thể sinh viên. A 2 . thuộc tính Sốđiệnthoaịởnhà có giá trị null. một bộ có thể xem như một tập hợp các cặp (<thuộc tính>. có người có điện thoại ở nhà.∪ dom(An). các thuộc tính được sắp xếp một cách vật lý như là các trường trong một bản ghi. …. nói chung. định nghĩa này sẽ làm cho thứ tự của các giá trị trong một bộ là không cần thiết. Điều này làm nên ý nghĩa ở mực trừu tượng hoặc logic vì chẳng có lý do gì để thích có một giá trị thuộc tính xuất hiện trước một giá trị thuộc tính khác trong một bộ. một lược đồ quan hệ R = { A 1 . có người không có và cũng có người có nhưng không biết chắc. ngày sinh. …. Như vậy.An} là một tập hợp các thuộc tính và một quan hệ r = {t 1 . Theo định nghĩ này. với mỗi ánh xạ t trong r. Các thuộc tính đa trị phải được biểu diễn bằng các quan hệ còn các thuộc tính phức hợp chỉ được biểu diễn bằng các thuộc tính thành phần đơn của nó.. họ tên. Vì tên thuộc tính xuất hiện cùng với giá trị của nó nên thứ tự của các thuộc tính là không quan trọng. Khi một quan hệ được cài đặt như một tệp. Trường hợp đó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Các giá trị của một vài thuộc tính trong một bộ cụ thể có thể không biết được hoặc không thích ứng cho nó. Ví dụ lược đồ quan hệ SINHVIÊN ở trên khẳng định rằng. Với những trường hợp không có hoặc không biết chắc. Theo định nghĩa này. một thực thể sinh viên có một mã số. Tuy nhiên. Trong trường hợp đó chúng ta sẽ sử dụng định nghĩa thứ nhất của quan hệ. người ta sử dụng một giá trị đặc biệt gọi là giá trị null. t 2 . Thể hiện của một quan hệ: Một lược đồ quan hệ có thể được thể hiện như là một tuyên bố hoặc một khẳng định.

Mỗi quan hệ có it nhất là một siêu khoá mặc định. thời gian và tiền tệ. Thông thường. Các ràng buộc miền Các ràng buộc miền chỉ ra rằng giá trị của mỗi thuộc tính A phải là một giá trị nguyên tử thuộc miền giá trị dom(A). các số thực (float. Một khoá K của một lược đồ quan hệ Trang 36 . Các loại miền khác có thể là các miền con của một kiểu dữ liệu hoặc một kiểu dữ liệu đếm được trong đó mọi giá trị có thể được liệt kê rõ ràng 2. Có các loại ràng buộc : ràng buộc miền. integer. 1. Một siêu khoá SK xác định rõ một ràng buộc về tính duy nhất. Tập hợp thuộc tính SK như vậy được gọi là một siêu khoá của lược đồ quan hệ R. phát biểu rằng không có hai bộ khác nhau trong một trạng thái r của R có cùng một giá trị cho SK. khi đó với hai bộ khác nhau bất kỳ t 1 và t 2 trong một trạng thái quan hệ r của R chúng ta có ràng buộc là t 1 [SK] ≠ t 2 [SK]. LƯỢC ĐỒ CSDL QUAN HỆ Trong phần này chúng ta thảo luận về các hạn chế trên các dữ liệu trong một lược đồ cơ sở dữ liệu quan hệ. lược đồ quan hệ NHÂNVIÊN_Dựán(MãsốNV. ngày. xây dựng và quản trị CSDL các sự kiện về mối liên kết. dãy ký tự với độ dài thay đổi). Giả sử chúng ta ký hiệu một tập con như vậy là SK. Như vậy. Các kiểu dữ liệu liên kết với các miền bao gồm: các kiểu dữ liệu số chuẩn cho các số nguyên (short integer. Các hạn chế đó được gọi là các ràng buộc. ràng buộc khoá. double precision float). long integer). MãsốDA. ràng buộc toàn vẹn thực thể và ràng buộc toàn vẹn quy chiếu. vì vậy. mọi bộ trong quan hệ phải khác nhau.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. mô hình quan hệ biểu diễn các sự kiện về thực thể và các sự kiện về liên kết dưới dạng duy nhất là các quan hệ. Điều đó có nghĩa là không có hai bộ có cùng một tổ hợp giá trị cho tất cả các thuộc tính của chúng. CÁC RÀNG BUỘC QUAN HỆ. II. Ràng buộc khoá và ràng buộc trên các giá trị rỗng (null) Một quan hệ được định nghĩa như một tập hợp các bộ. có tồn tại các tập con của các thuộc tính của một lược đồ quan hệ có tính chất là không có hai bộ nào ở trong mọi trạng thái quan hệ r của R có cùng một tổ hợp giá trị cho các thuộc tính của nó. Theo định nghĩa. Mỗi bộ trong quan hệ này liên kết một sinh viên với một dự án mà anh ta làm việc cho nó. đó là tập hợp tất cả các thuộc tính của nó. các phần tử của một tập hợp là khác nhau. Ví dụ. Sốgiờ) khẳng định các nhân viên làm việc với các dự án. Ngoài ra còn các kiểu dữ liệu ký tự (dãy ký tự với độ dài cố định.

siêu khoá { Mãsố. các thuộc tính tạo nên khoá chính của một lược đồ quan hệ được gạch dưới. tuy nhiên tốt nhất là chọn khoá chính gồm một thuộc tính hoặc có số các thuộc tính it nhất. Một khoá được xác định từ ý nghĩa của các thuộc tính và tính chất là bất biến . Điều ràng buộc là tính chất đó phải thoả mãn trên mọi trạng thái của lược đồ. Nói chung. Ví dụ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ngàysinh}. Ngàysinh. một lược đồ quan hệ có thể có nhiều hơn một khoá. Ngàysinh} không phải là khoá bởi vì nếu bỏ đi thuộc tính Họtên hoặc Ngàysinh hoặc cả hai thì nó vẫn còn là một siêu khoá. Ngàysinh. việc lựa chọn một khoá dự tuyển để làm khoá chính là tuỳ ý. Họtên. Tập thuộc tính {Mãsố} là một khoá của SINHVIÊN bởi vì không có hai bộ sinh viên có cùng một giá trị cho Mãsố. Ví dụ: Sinhviên(Mãsố. ta không thể và không được chỉ định thuôc tính Họtên của quan hệ SINHVIÊN là khoá bởi vì không có gì đảm bảo rằng không tồn tại hai sinh viên có cùng họ tên. xây dựng và quản trị CSDL R là một siêu khoá của R với tính chất là nếu bỏ đi bất kỳ thuộc tính A nào ra khỏi K thì sẽ còn lại một tập K’ không phải là siêu khoá của R. nghĩa là đó là một siêu khoá mà ta không thể vứt bỏ thuộc tính nào ra khỏi nó mà vẫn giữ được ràng buộc về tính duy nhất. giá trị SV305 của Mãsố xác định một cách duy nhất bộ giá trị tương ứng với sinh viên Lê Nam trong quan hệ sinhviên. Thông thường ta phải chỉ định một trong các khoá dự tuyển làm khoá chính của quan hệ. Chú ý rằng khi một lược đồ quan hệ có nhiều khoá dự tuyển. Như vậy. mỗi một khoá được gọi là một khoá dự tuyển. ví dụ { Mãsố. Họtên. Một ràng buộc khác trên các thuộc tính chỉ rõ khi nào thì cho phép các giá trị null. Giớitính. Địachỉ. đều là một siêu khoá. Mọi tập hợp thuộc tính có chứa Mãsố. xét quan hệ SINHVIÊN với các thuộc tính Mãsố. Những thuộc tính luôn luôn phải có một giá trị xác định và hợp lệ thì bị ràng buộc là not null. Ví dụ. Họtên. Ta quy ước rằng. Giớitính. Họtên. Ví dụ. Giá trị của một thuộc tính khoá có thể được sử dụng để xác định một cách duy nhất mỗi bộ trong một quan hệ. Địachỉ). Trong trường hợp đó. Khoá chính là một khoá dự tuyển mà các giá trị của chúng được dùng để xác định các bộ trong quan hệ. tính chất đó phải thỏa mãn khi chúng ta chèn thêm các bộ mới vào quan hệ. chúng ta đã nói đến các lược đồ quan hệ đơn lẻ và các quan hệ Trang 37 . Chú ý rằng một tập hợp thuộc tính tạo nên một khoá là một tính chất của lược đồ quan hệ. Tuy nhiên. 3. một khoá là một siêu khoá tối thiểu. Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ Ở trên.

Ngày sinh. …. Một cơ sở dữ liệu quan hệ thường gồm nhiều quan hệ với các bộ giá trị trong các quan hệ được liên kết với nhau theo nhiều cách. Mã số NV. Giới tính. Quan hệ) Hình 3. NHÂNVIÊN MãsốNGS Ngàysinh MãsốNV NV001 NV002 NV010 NV014 NV016 NV018 NV025 NV061 Lê Trần Đức Hoàng Phạm Nguyễn Vũ Hương Trần Lê Hoàng Vân Nam Thanh Bằng Sơn Giang Hoa Giáp 12/02/79 14/02/66 05/08/79 26/06/52 14/08/73 26/03/83 15/05/80 02/05/47 Hà Nội Hà Nội Nghệ An Bắc Ninh Hà Nam Phú Thọ Phú Thọ Hà Nội Nam Nam Nữ Nam Nam Nữ Nữ Nam 3000 4000 2500 4300 3800 2500 2500 5500 NV002 NV061 NV014 NV061 NV002 NV002 NV014 Null 5 5 4 4 5 5 4 1 ĐƠNVỊ Mã số ĐV 5 4 1 Mã số ĐV 1 4 5 Tên ĐV Nghiên cứu Hành Chính Lãnh đạo Địa điểm ĐV Hà Nội Hà Nội Nam Định Mã số NQL NV002 NV014 NV061 Ngày bắt đầu 15/09/2000 24/06/1997 25/01/1992 ĐƠNVỊ_ĐỊAĐIỂM Trang 38 MãsốĐV Giớitính Họđệm Lương Địachỉ Tên . Số giờ) PHỤTHUỘC(Mã số NV. Tên. Trong phần này chúng ta sẽ định nghĩa một cơ sở dữ liệu quan hệ và một lược đồ cơ sở dữ liệu uan hệ. Giới tính. Địa điểm ĐV) DỰÁN(Tên DA. Một trạng thái cơ sở dữ liệu quan hệ (hoặc một cơ sở dữ liệu quan hệ) DB của S là một tập hợp các trạng thái quan hệ DB = {r 1 .. xây dựng và quản trị CSDL đơn lẻ. Mã số DA.2 : Lược đồ cơ sở dữ liệu công ty. Rn} và một tập các ràng buộc toàn vẹn..2 trình bày một lược đồ cơ sở dữ liệu CÔNGTY và hình vẽ 3. Tên PT. Mã số ĐV) NHÂNVIÊN_DỰ ÁN(Mã số NV. Ngày sinh. Hình vẽ 3. Ngày bắt đầu) ĐƠNVỊ_ĐỊAĐIỂM(Mã số ĐV. rn} sao cho mỗi ri là một trạng thái của Ri và sao cho các trạng thái quan hệ ri thoả mãn các ràng buộc toàn vẹn chỉ ra trong tập các ràng buộc toàn vẹn. Lương. Ví dụ. Mã số ĐV) ĐƠNVỊ(Tên ĐV. ….3 Trình bày một cơ sở dữ liệu công ty NHÂNVIÊN(Họđệm. Mã số NQL.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Địa chỉ. Mã số DA. R 2 . Mã số ĐV. Một lược đồ cơ sở dữ liệu quan hệ S là một tập hợp các lược đồ quan hệ S = {R 1 . Mã số NGS. Địa điểm DA. r 2 .

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG 5 5 DỰÁN Tên DA DA01 DA02 DA03 DA04 DA05 DA06 Mã số NV NV001 NV001 NV016 NV018 NV018 NV002 NV002 NV002 NV002 NV010 NV010 NV025 NV025 NV014 NV014 NV061 Mã số NV NV002 NV002 NV002 NV014 NV001 NV001 NV001 Tên PT Giang Bình Hoa Lan Bình Hòa Hương Hà Nội Bắc Ninh Mã số DA 1 2 3 10 20 30 Thiết kế. các thuộc tính biểu diễn cùng một khái niệm thế giới thực có thể (hoặc không) có cùng tên như nhau trong các quan hệ khác nhau. Trang 39 . người ta yêu cầu rằng các thuộc tính biểu diễn cùng một khái niệm của thế giới thực thì phải có tên như nhau trong mọi quan hệ.3 : Cơ sở dữ liệu công ty Trong một lược đồ cơ sở dữ liệu quan hệ. các thuộc tính biểu diễn các khái niệm khác nhau có thể có tên như nhau trong các quan hệ khác nhau. Trong một số phiên bản trược của mô hình quan hệ. xây dựng và quản trị CSDL Địa điểm DA Hà Nội Nam Định Bắc Ninh Hà Nội Hà Nội Hà Nội Mã số DA Mã số ĐV 5 5 5 4 1 4 Số giờ NHÂNVIÊN_DỰ ÁN PHỤTHUỘC Giới tính Nữ Nam Nữ Nữ Nam Nữ Nữ Ngày sinh 04/05/1997 25/10/1994 03/05/1969 28/02/1953 04/01/1999 04/01/1999 05/05/1981 Quan hệ Con Con Vợ Vợ Con Con Vợ Hình 3. Điều đó sẽ gây ra khó khăn khi cùng một khái niệm thế giới thực được sử dụng trong các vai trò khác nhau. Ngược lại.

Sở dĩ có điều đó là do giá trị của khoá chính được sử dụng để xác định các bộ giá trị riêng biệt trong một quan hệ. Các ràng buộc khoá và ràng buộc toàn vẹn thực thể được chỉ ra trên các quan hệ riêng biệt. qt2. Một cách không hình thức. toàn vẹn quy chiếu và khoá ngoài Ràng buộc toàn vẹn thực thể được phát biểu là : khoá chính phải luôn luôn có giá trị xác định. Trong trường hợp này ta có t 1 [FK] = t 2 [PK] và ta nói rằng bộ t 1 liên hệ (quy chiêú) đến bộ t 2 . Các thuộc tính trong FK có cùng miền giá trị như các thuộc tính của khoá chính PK của R 2 . Ngoài các ràng buộc miền và ràng buộc khoá còn có thêm các ràng buộc được xem như một phần của mô hình quan hệ: ràng buộc toàn vẹn thực thể và ràng buộc toàn vẹn quy chiếu. Các hệ quản trị cơ sở dữ liệu hiện nay hầu như sử dụng SQL cho mục đích này. Để định nghĩa toàn vẹn quy chiếu một cách hình thức hơn. nghĩa là không được phép có giá trị null. xây dựng và quản trị CSDL Một hệ quản trị cơ sở dữ liệu phải có ngôn ngữ định nghĩa dữ liệu (Data definition language DDL) để định nghĩa lược đồ cơ sở dữ liêu quan hệ. Toàn vẹn thực thể. Việc có giá trị null cho khoá chính kéo theo việc chúng ta không thể xác định được một số bộ giá trị. Ràng buộc toàn vẹn quy chiếu được chỉ ra giữa hai quan hệ để duy trì sự tương ứng giữa các bộ của hai quan hệ. Một giá trị của FK trong một bộ t 1 của trạng thái hiện tại r 1 (R 1 ) hoặc có mặy như một giá trị của khoá chính của một bộ t 2 nào đấy trong trạng thái hiện tại r 2 (R 2 ). Trong một cơ sở dữ liệu có nhiều quan hệ thường có nhiều ràng buộc Trang 40 . ràng buộc toàn vẹn quy chiếu được phát biểu là: một bộ giá trị trong một quan hệ có liên kết đến một quan hệ khác phải liên kết đến một bộ giá trị tồn tại trong quan hệ đó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. trước tiên chúng ta đưa ra khái niệm khoá ngoài : Một tập hợp các thuộc tính FK trong một lược đồ quan hệ R 1 là một khoá ngoài của R 1 quy chiếu đến quan hệ R 2 nếu nó thoả mãn hai quy tắc sau: qt1. Ví dụ. R 1 được gọi là quan hệ quy chiếu và R 2 được gọi là quan hệ bị quy chiếu. hoặc là null. Các thuộc tính FK được gọi là quy chiếu đến (hoặc là liên hệ đến) quan hệ R 2 . nếu có hai hay nhiều hơn các bộ giá trị có giá trị null cho khoá chính thì chúng ta không có khả năng phân biệt chúng. 4. Các ràng buộc toàn vẹn được chỉ ra trên một lược đồ cơ sở dữ liệu và được tôn trọng làm thoả mãn trên mỗi trạng thái cơ sở dữ liệu của lược đồ này.

NgµySinh. QuanhÖ) Hình 3.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ví dụ về ràng buộc này là : “lương của một nhân viên chỉ có thể tăng “. M·sèNQL. ràng buộc chuyển tiếp. Ngµyb¾t®Çu) §¬nvÞ_§IA§iÓm(M·sè§V. NgµySinh. Để làm điều đó ta vẽ một cạnh có hướng từ mỗi khoá ngoài đến quan hệ mà nó quy chiếu. Trang 41 . Tªn. Ví dụ về các ràng buộc đó là:”lương của một nhân viên không được vượt quá lương của người giám sát nhân viên đó “hoặc “số giờ nhiều nhất mà một nhân viên có thể làm việc trong một tuần trên tất cả các dự án là 56”. §Þa®iÓm§V) Dù¸n(TªnDA. M·sèDA.2 với các ràng buộc quy chiếu được biểu diễn theo cách này. Sègiê) phôthuéc(M·sèNV. GiíitÝnh. xây dựng và quản trị CSDL toàn vẹn quy chiếu. M·sèDA. Các ràng buộc chuyển tiếp có thể được định nghĩa để làm việc với những thay đổi trạng thái trong cơ sở dữ liệu. L­¬ng. §ÞachØ. như ràng buộc trạng thái. Nh©nVIªn(Hä®Öm. Các ràng buộc toàn vẹn quy chiếu thường nảy sinh từ các mối liên kết giữa các thực thể được biểu diễn bằng các lược đồ quan hệ. M·sè§V.…. Chú ý rằng một khoá ngoài có thể quy chiếu đến quan hệ của chính nó. Hình vẽ 3. Chúng ta có thể biểu diễn các ràng buộc quy chiếu bằng sơ đồ. trước tiên ta phải có một hiểu biết rõ ràng về ý nghĩa hoặc vai trò của mỗi tập thuộc tính ở trong các lược đồ quan hệ khác nhau của cơ sở dữ liệu. M·sè§V) §¬nvÞ(Tªn§V. cơ sở dữ liệu còn phải thoả mãn một số ràng buộc khác. GiíitÝnh. Các ràng buộc như vậy có thể được đặc tả và bắt tuân theo bằng cách sử dụng một ngôn ngữ đặc tả ràng buộc. Để chỉ ra các ràng buộc này. M·sèNV.4 Lược đồ và sơ đồ tham chiếu Ngoài các ràng buộc toàn vẹn ở trên. Các ràng buộc trạng thái xác định các ràng buộc mà một trạng thái vững chắc của cơ sở dữ liệu phải thoả mãn. §Þa®iÓmDA. M·sèNGS. Người ta có thể sử dụng các cơ cấu như là trigger hoặc assertion. Các ràng buộc như vậy thường được định nghĩa bằng cách sử dụng các quy tắc hoặc bằng các trigger. khoá ngoài biểu thị một liên kết đệ quy.4 biểu diễn lược đồ ở hình 3. TªnPT. Trong trường hợp đó. M·sè§V) Nh©nVIªn_Dù¸n(M·sèNV.

Phép xoá chỉ có thể vi phạm ràng buộc quy chiếu trong trường hợp bộ bị xoá được quy chiếu bởi một khoá ngoài từ các bộ khác trong cơ sở dữ liệu. Sự toàn vẹn thực thể có thể bị vi phạm nếu khoá chính của bộ mới t là null. Phép xoá (Delete) Phép xoá được sử dụng để xoá một hoặc nhiều bộ giá trị của một quan hệ. a. b.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ba tuỳ chọn được sẵn sàng được sử dụng nếu một phép xoá gây ra sự vi Trang 42 . Các phép toán cập nhật được sử dụng để tạo ra một quan hệ đúng đắn. Các ràng buộc khoá có thể bị vi phạm nếu một giá trị khoá trong bộ mới t đã tồn tại trong một bộ khác ở trong quan hệ r(R). xoá và sửa đổi. Các phép toán cập nhật Các phép toán cập nhật gồm ba phép toán cơ bản là chèn. 1. Mỗi khi các phép toán cập nhật được áp dụng. Phép chèn (Insert) Phép chèn cung cấp một danh sách các giá trị cho một bộ mới t được chèn vào trong một quan hệ R. Phép chèn có thể vi phạm các kiểu ràng buộc được mô tả ở trên. các ràng buộc trên lược đồ cơ sở dữ liệu có thể bị vi phạm. Phép chèn được dùng để chèn một bộ giá trị hoặc nhiều bộ giá trị vào một quan hệ. Trong phần này chúng ta sẽ nói đến khả năng vi phạm các ràng buộc của từng phép toán và các kiểu hành động có thể thực hiện khi một ràng buộc bị vi phạm. Nếu một phép chèn vi phạm một hoặc nhiều ràng buộc. tuỳ chọn mặc định là loại bỏ phép chèn. Trong trường hợp này. Phép xoá dùng để loại bỏ các bộ giá trị và phép sửa đổi dùng để sửa đổi các giá trị của một số thuộc tính trong các bộ giá trị đã có. các phép toán đại số quan hệ được sử dụng để đặc tả các phép lấy thông tin ra. xây dựng và quản trị CSDL III. Các ràng buộc miền có thể bị vi phạm nếu một giá trị thuộc tính được cho không thuộc vào miền tương ứng. CÁC PHÉP TOÁN CỦA MÔ HÌNH QUAN HỆ Trong phần này chúng ta thảo luận về các phép toán của mô hình quan hệ. Sự toàn vẹn quy chiếu có thể bị vi phạm nếu một giá trị của một khoá ngoài trong t quy chiếu đến một bộ không tồn tại trong một quan hệ được quy chiếu. thường là các hệ quản trị cơ sở dữ liệu có thể thông báo cho người sử dụng nguyên nhân của việc loại bỏ phép chèn. Các phép toán của mô hình quan hệ có thể phân thành hai loại : các phép toán cập nhật và các phép toán đại số quan hệ.

một mô hình dữ liệu phải chứa một tập hợp phép toán để thao tác dữ liệu. 2. Trang 43 . Các phép toán đó là phép hợp. Các phép toán đó là phép chọn. hệ quản trị cơ sở dữ liệu chỉ cần kiểm tra để khẳng định rằng giá trị mới là thuộc miền và kiểu giá trị đúng đắn. Nhóm kia bao gồm các phép toán được xây dựng đặc biệt cho các cơ sở dữ liệu quan hệ. Để lựa chọn các bộ cần được thay đổi. phép chiếu. Chú ya rằng. Tuỳ chọn thứ hai là cố gắng lan truyền phép xoá (cascade the deletion) bằng cách xoá đòng thời các bộ quy chiếu đến bộ bị xoá. Các phép toán này giúp cho người sử dụng xác định rõ các yêu cầu lấy tin cơ bản. Một nhóm bao gồm các phép toán tập hợp lấy từ lý thuyết tập hợp toán học. Nếu một thuộc tính khoá ngoài bị sửa đổi thì hệ quản trị cơ sở dữ liệu phải đảm bảo rằng giá trị mới quy chiếu đến một bộ có tồn tại trong quan hệ được quy chiếu (hoặc là null). Phép sửa đổi (Update) Phép toán sửa đổi được dùng để thay đổi các giá trị của một hoặc nhiều thuộc tính trong một (hoặc nhiều) bộ của một quan hệ R nào đấy. bởi vì nếu làm vậy thì sẽ vi phạm ràng buộc toàn vẹn thực thể. Kết quả của một phép lấy tin là là một quan hệ mới. Việc sửa đổi một thuộc tính không phải là một khoá chính hợac một khoá ngoài thường không gây ra các vi phạm ràng buộc. Tuỳ chọn thứ ba là sửa đổi các giá trị của các thuộc tính quy chiếu gây ra sự vi phạm. Tuỳ chọn thứ nhất là loại bỏ phép xoá. Như vậy chúng ta trở về trường hợp đã thảo luận với phép chèn và phép xoá.Có thể kết hợp cả ba tuỳ chọn ở trên. phép nối và một số các phép toán khác. mỗi giá trị như vậy hoặc là làm cho bằng null hoặc được thay đổi thành bộ có hiệu lực quy chiếu khác. Các phép toán đại số quan hệ được chia thành hai nhóm. Các phép toán đại số quan hệ Ngoài việc định nghĩa cấu trúc cơ sở dữ liệu và các ràng buộc. phép trừ tập hợp và phép tích Đề các. nếu một thuộc tính quy chiếu gây ra sự vi phạm là một phần của khoá chính thì không thể làm cho thành null. phép giao. Tập hợp cơ sở các phép toán mô hình quan hệ tạo nên đại số quan hệ. Việc sửa đổi giá trị một khoá chính tương tự như việc xoá một bộ và chèn bộ khác vào chỗ của nó. Một dãy các phép toán quan hệ tạo nên một biểu thức đại số quan hệ mà kết quả của nó cũng là một quan hệ. Các quan hệ đó có thể được thao tác tiếp theo bằng cách sử dụng các phép toán của cùng đại số. c.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. có thể được tạo ra từ một hoặc nhiều quan hệ. xây dựng và quản trị CSDL phạm. người sử dụng phải chỉ ra một điều kiện trên các thuộc tính..

Phép chọn được ký hiệu là σ < điều kiện chọn> (R) trong đó ký hiệu σ được dùng để ký hiêu phép chọn. để chọn ra các bộ giá trị NHÂNVIÊN làm việc ở đơn vị có mã số là 4 và có lương lớn hơn 800000đ hoặc các bộ giá trị NHÂNVIÊN làm việc ở đơn vị có mã số là 5 và có lương lớn hơn 500000đ ta có thể viết phép chọn như sau: σ < Mãsố = 4>AND <lương>800000>OR< Mãsố = 5>AND <lương>500000 > (NHÂNVIÊN) MãsốNV NV002 NV014 NV016 Họđệm Trần Đức Phạm Nguyễn Tên Nam Bằng Sơn Ngàysinh 14/02/66 26/06/52 14/08/73 Địachỉ Hà Nội Bắc Ninh Hà Nam Giớitính Nam Nam Nam Lương 4000 4300 3800 MãsốNGS NV061 NV061 NV002 MãsốĐV 5 4 5 Hình 3. Quan hệ kết quả của phép chọn có cùng thuộc tính như R. OR. Ví dụ. ≠} còn < giá trị hằng> là một giá trị hằng từ miền giá trị của thuộc tính. biểu thức đơn giản nhất chính là tên của một quan hệ của một cơ sở dữ liệu. ≤. ≥. còn điều kiện chon là một biểu thức lô gic được chỉ ra trên các thuộc tính của R. <phép so sánh> là một trong các phép toán so sánh { <. nó chỉ giữ lại các bộ thoả mãn điều kiện đặt ra. để chọn các bộ NHÂNVIÊN thuộc về đơn vị có mã số là 4 hoặc các bộ NHÂNVIÊN có lương lớn hơn 800000đ ta có thể viết như sau: σ < Mãsố = 4>(NHÂNVIÊN) hoặc σ < Lương > 800000> (NHÂNVIÊN) Chú ý rằng R nói chung là một biểu thức đại số quan hệ mà kết quả của nó là một quan hệ. Phép chọn (SELECT) Phép chọn được sử dụng để chọn một tập hợp các bộ thoả mãn điều kiện chọn từ một quan hệ. NOT để tạo ra một điều kiện chọn chung. >. Ví dụ. =. Biểu thức lo gic chỉ ra trong <điều kiện chọn> được tạo nên từ một số hạng mục có dạng : < tên thuộc tính> < phép so sánh> < giá trị hằng> hoặc < tên thuộc tính> < phép so sánh> < tên thuộc tính> trong đó <tên thuộc tính> là tên của một thuộc tính trong R. Ta có thể xem phép chọn như một bộ lọc. xây dựng và quản trị CSDL a.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.5 Kết quả phép chọn Trang 44 . Các hạng mục có thể được nối với nhau bằng các phép toán lô gic AND.

các các điều kiện chon không thể liên quan đến nhiều bộ. OR. Ngoài ra. ≤. Phép chiếu là phếp toán chọn một số cột của bàng.. phép chọn được áp dụng cho từng bộ một cách độc lập. Phép chiếu được ký hiệu là: π <danh sách các thuộc tính> (R) trong đó π là ký hiệu dùng để biểu diễn phép chiếu và <danh sách các thuộc tính> là một danh sách con các thuộc tính của quan hệ R. “. trường Trang 45 . Phép chọn là phép toán một ngôi. Phép chiếu (PROJECT) Nếu ta coi một quan hệ như một bảng thì phép chọn chọn một số hàng của bảng thoả mãn điều kiện chọn và bỏ qua các hàng không thoả mãn điều kiện chọn. Nếu chúng ta chỉ quan tâm đến một số thuộc tính của quan hệ. Tất cả các bộ được chọn xuất hiện trong kết quả của phép toán chọn. Hơn nữa. nghĩa là nó được áp dụng cho một quan hệ. vì vậy. NOT được thực hiện theo quy tắc bình thường của chúng. chẳng hạn như “là một dãy con của “hoặc “trong khoảng từ…. Nếu điều kiện chọn cho giá trị đúng thì bộ t sẽ được chọn. có thể còn các phép so sánh bổ sung. Nói chung R là một biểu thức đại số quan hệ mà kết quả của nó là một quan hệ . ≥. Các phếp toán logic AND. Phép chọn là một phép toán có tính chất giao hoán. Nếu miền giá trị của một thuộc tính là một tập hợp các giá trị không có thứ tự thì chỉ có các phép so sánh trong tập hợp { =. Điều đó được thực hiện bằng cách thay thế mỗi xuất hiện của một thuộc tính Ai trong điều kiện chon bằng giá trị t[Ai]của nó trong bộ. >. chúng ta dùng phép chiếu để chiếu lân các thuộc tính đó. ≠}áp dụng cho các thuộc tính có miền giá trị là các giá trị có thứ tự như là miền giá trị số. Ví dụ: σ < Điều kiện 1> (σ < Điều kiện 2> (R)) = σ < Điều kiện 2>AND< Điều kiện 1> (R) b. =. Quan hệ kết quả của phép chọ có cấp giống như cấp của R. nghĩa là σ < Điều kiện 1> (σ< Điều kiện 2>(R)) = σ < Điều kiện 2> (σ< Điều kiện 1> (R)) Hơn nữa ta có thể kết hợp một loạt các phép chọn thành một phép chọn đơn giản bằng cách sử dụng phép toán AND.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Miền giá trị các dãy ký tự được xem như có thứ tự dựa trên việc so sánh các dãy ký tự. xây dựng và quản trị CSDL Chú ý rằng các phép toán so sánh trong tập hợp { <. Số các bộ trong quan hệ kết quả luôn luôn nhỏ hơn hoặc bằng số các bộ trong R. Kết quả một phép chọn được xác định như sau: < Điều kiện chọn> được áp dụng cho mỗi bộ t trong R một cách độc lập. đến …. ≠ } là có thể áp dụng được.

cấp của quan hệ kết quả là số các thuộc tính có trong <danh sách các thuộc tính>. Nếu <danh sách các thuộc tính> chỉ bao gồm các thuộc tính không phải thuộc tính khoá của R thì quan hệ kết quả có thể có những bộ trùng nhau. phép chiếu π < Mãsố. Phép đặt lại tên (RENAME) Chúng ta có thể áp dụng nhiều phép toán quan hệ liên tiếp nhau. xây dựng và quản trị CSDL hợp đơn giản nhất nó là tên của một quan hệ của cơ sở dữ liệu. Ngoài ra. c. và như vậy.6 Kết quả của phép chiếu Số các bộ trong quan hệ kết quả từ một phép chiếu luôn luôn nhỏ hơn hoặc bằng số các bộ trong R. Như vậy. Kết quả của phép chiếu là một quan hệ chỉ có các thuộc tính nằm trong <danh sách các thuộc tính> và có cùng thứ tự như thứ tự của chúng có trong danh sách. Lương>(NHÂNVIÊN) cho kết quả là một uan hệ có các thuộc tính Mãsố. Trong trường hợp đó hoặc chúng ta có thể viết các phép toán như là một biểu thức đại số quan hệ đơn bằng cách xếp lồng các phép toán lại với nhau. Họtên.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.Phép chiếu loại bỏ mọi bộ trùng lặp. Lương (xem hình vẽ 3.6) MãsốNV NV001 NV002 NV010 NV014 NV016 NV018 NV025 NV061 Họđệm Lê Trần Đức Hoàng Phạm Nguyễn Vũ Hương Trần Lê Hoàng Tên Vân Nam Thanh Bằng Sơn Giang Hoa Giáp Địachỉ Hà Nội Hà Nội Nghệ An Bắc Ninh Hà Nam Phú Thọ Phú Thọ Hà Nội Lương 3000 4000 2500 4300 3800 2500 2500 5500 Hình 3. nếu < danh sách 2> chứa tất cả các thuộc tính coa trong <danh sách 1> thì π < danh sách1>(π < danh sách2> (R)) = π < danh sách 1> (R) Phép chiếu không có tính giao hoán. Họtên. kết quả của phép chiếu là một tập hợp các bộ và là một quan hệ đúng đắn. Nếu danh sách chiếu là một siêu khoá của R – nghĩa là nó chứa một khoá nào đó của R – thì quan hệ kết quả có cùng một số bộ như R. hoặc chúng Trang 46 . Ví dụ.

chúng ta liệt kê các tên mới của các thuộc tính trong cặp dấu ngoặc.…. Ví dụ: R(Họ_và_tên.B2. trong đó thuộc tính Họtên được đặt lại tên thành Ho_và_tên. Ví dụ: Để đưa ra Họtên và Lương của các NHÂNVIÊN làm việc ở đơn vị có Mãsố là 4 chúng ta phải áp dụng một phép chọn và một phép chiếu. Nếu các thuộc tính của R là Trang 47 .Bn là các tên thuộc tính mới.Bn) (R) trong đó ký hiệu ρ được dùng để ký hiệu phép toán đặt lại tên. Lương >(σ <Mãsố = 4> (NHÂNVIÊN)) Một cách khác.…. Phép đặt lại tên được ký hiệu là ρ S(B1. Lương > (FQTG) Cho kết quả là quan hệ R. Chúng ta có thể viết một biểu thức đại số quan hệ đơn như sau : π < Họtên.….B 2 . Chúng ta có thể dùng kỹ thuật này để đặt lại tên (rename) cho các thuộc tính trong các quan hệ trung gian và kết quả. S là tên quan hệ mới.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. xây dựng và quản trị CSDL ta có thể áp dụng mỗi phép toán tại một thời điểm và tạo ra các quan hệ kết quả trung gian. nếu không có việc đặt lại tên thì quan hệ kết quả có các tên thuộc tính giống như các tên trong danh sách chiếu và có cùng thứ tự như chúng xuất hiện trong danh sách. nó có thể đặt lại tên cho một tên quan hệ hoặc các tên thuộc tính hoặc cả hai. Lương) ← π < Họtên. chúng ta có thể tạo ra kết quả trung gian và viết biểu thức trên thành dãy các phép toán như sau: KQTG ← σ <Mãsố = 4> (NHÂNVIÊN) Ketqua ← π < Họtên.Bn) (R) hoặc ρ S (R) hoặc ρ (B1. Chúng ta có thể định nghĩa một phép toán đặt lại tên. ta phải đặt tên cho quan hệ đó. Trong trường hợp tạo các quan hệ trung gian. Nếu không có việc đặt lại tên thì tên của các thuộc tính trong quan hệ kết quả của một phép chọn là giống như các tên trong quan hệ ban đầu và có cùng một thứ tự như thứ tự của các thuộc tính đó. Đối với phép chiếu. Lương > (FQTG) Thông thường việc phân tích một dãy phức tạp các phép toán bằng cách chỉ ra các quan hệ kết quả trung gian là dễ hơn việc viết một biểu thức đại số quan hệ đơn.B2. Biểu thức thứ nhất đặt lại tên quan hệ và các thuộc tính của nó. Để đặt lại tên cho các thuộc tính của một quan hệ. B 1 . biểu thức thứ hai chỉ đặt lại tên quan hệ và biểu thức thứ ba chỉ đặt lại tên các thuộc tính.

Các phép toán được định nghĩa như sau: . được ký hiệu là R – S. Điều kiện này được gọi là tương thích đồng nhất. Đó là các phép toán hợp. Ví dụ. …. …. được ký hiệu là R ∩ S. giao và trừ tập hợp.A 2 . xây dựng và quản trị CSDL A 1 . Các phép toán lý thuyết tập hợp Nhóm tiếp theo của các phép toán đại số quan hệ là các phép toán toán học thông thường trên các tập hợp. Hai quan hệ R(A 1 . nghĩa là mỗi phép toán được áp dụng cho hai tập hợp.Bn) được gọi là tương thích đồng nhất nếu chúng có cùng cấp n và dom(Ai) = dom(Bi) với 1<= i <= n. …. d.An thì sau khi đặt lại tên chúng có tên là B 1 . . xét hai quan hệ R Họtên Tuổi AA BB CC DD 20 18 21 25 Giớitính Nam Nữ Nam Nữ S Họtên Tuổi Giới tính BB EE DD FF 18 20 25 21 Nữ Nam Nữ Nam R S ∪ Họtên Tuổi AA BB CC 20 18 21 Giới tính Nam Nữ Nam Trang 48 R ∩ Họtên Tuổi Giới tính S BB DD 18 25 Nữ Nữ .. hay nói cách khác. …. Các phép toán này là các phép toán hai ngôi. Khi áp dụng các phép toán này cho cơ sở dữ liệu quan hệ. cho kết quả là một quan hệ chứa tất cả các bộ có trong R nhưng không có trong S. An) và S(B 1 . B 2 . hai quan hệ tham gia vào một trong các phép toán trên phải có kiểu của các bộ như nhau. B 2 .A 2 . Điều đó có nghĩa là hai quan hệ có cùng số các thuộc tính và mỗi cặp thuộc tính tương ứng có cùng miền giá trị. Phép giao: Giao của hai quan hệ R và S.Bn.. Phép hợp : Hợp của hai quan hệ R và S. cho kết quả là một quan hệ chứa tất cả các bộ có trong R hoặc ở trong S hoặc ở trong cả hai. chúng phải có cùng một cấu trúc. Các bộ trùng lặp bị loại bỏ..BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Phép trừ quan hệ: Phép trừ quan hệ R và S. được ký hiệu là R ∪ S. cho kết quả là một quan hệ chứa tất các các bộ có trong cả hai quan hệ R và S .

B 2 . B 1 . Phép toán này được sử dụng để nối các bộ của hai quan hệ vào một kiểu kết hợp. Quan hệ kết quả Q có các bộ được tạo thành do sự kết hợp một bộ của R và một bộ của S. B 2 . nghĩa là R ∪ (S ∪ T) = (R ∪ S) ∪ T và R ∩ (S ∩ T) = (R∩S) ∩T Phép toán trừ tập hợp không có tính chất giao hoán. xét hai quan hệ R và S như sau: A1 R aa ab bb ba cc ac dd cd da cb db ac A2 A3 S B1 B2 B3 Khi đó kết quả của Tích Đề các sẽ là: R× S A1 aa aa ab ab A2 bb bb ba ba A3 cc cc ac ac B1 dd cd dd cd B2 da cb da cb B3 db ac db ac Hình 3. còn có một phép toán gọi là tích Đề các.. Tích Đề các còn gọi là tích hỗn hợp (cross product) hoặc là nối hỗn hợp (cross join).Bm) là một quan hệ Q với n+m thuộc tính Q(A 1 . An. A 2 . xây dựng và quản trị CSDL DD EE FF 25 20 21 Nữ Nam Nam R–S Họtên Tuổi Giới tính AA CC 20 21 Nam Nam Hình 3.Bm). …. nghĩa là: R ∪ S = S ∪ R và R ∩ S = S ∩ R Các phép toán trên cũng có tính chất kết hợp. …. Ví dụ. Ngoài các phép toán trên... A 2 . …. Trang 49 .7 Kết quả của các phép toán tập hợp Chú ý rằng các phép toán hợp và giao là các phép toán giao hoán.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.8 Tích Đề các của hai quan hệ R và S. được ký hiệu là ×. Đó cùng là một phép toán hai ngôi nhưng những quan hệ mà nó áp dụng trên đó không phải là tương thích đồng nhất. Kết quả của R(A 1 . An) × S(B 1 .

AND <điều kiện> trong đó mỗi điều kiện có dạng Ai θ Bj. trong khi đó trong tích Đề các mọi tổ hợp của các bộ đều có trong kết quả. nếu R có nR bộ và S có nS bộ thì R× S có nR * nS bộ. B 2 . chỉ có các bộ thoả mãn điều kiện nối mới xuất hiện trong kết quả. …. B 2 . …. Bj là một thuộc tính của S. …. A 2 . Phép toán này rất quan trọng đối với cơ sở dữ liệu quan hệ có nhiều bảng bởi vì nó cho phép ta xử lý các mối liên kết giữa các quan hệ. ≤. A 2 . Dạng tổng quát của phép nối trên hai quan hệ R(A 1 . xây dựng và quản trị CSDL Như vậy. e. Ví dụ về phép nối: Giả sử ta có hai quan hệ R và S như sau: R A1 Aa Ab A2 Ca Cb A3 Ba Bb S B1 Ba Bb B2 Aaa Ccc B3 Bbb Ddd Trang 50 . B 1 . Mọi tổ hợp bộ mà điều kiện nối là đúng được chứa trong quan hệ kết quả Q như là một bộ đơn.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Các bộ có các thuộc tính nối là null không xuất hiện trong kết quả. Ai là một thuộc tính của R. …Bm) có n+m thuộc tính theo thứ tự đó. Bm) là R S < Điều kiện nối> Kết quả của phép nối là một quan hệ Q(A 1 . Điều kiện nối được chỉ ra trên các thuộc tính của hai quan hệ R và S và được tính toán cho mỗi tổ hợp các bộ. ≥. Ai và Bj có cùng miền và θ là một trong các dấu phép toán so sánh { <. phép toán không nhất thiết phải xử lý mọi thông tin trong các quan hệ tham gia. =. An) và S (B 1 . Theo nghĩa đó. Mỗi bộ của Q là một sự kết nối giữa một bộ của R và một bộ của S khi chúng thoả mãn điều kiện nối. Phép nối (JOIN) Phép nối được ký hiệu là được dùng để kết hợp các bộ có liên hệ với nhau từ hai quan hệ thành một bộ. Tích Đề các kết hợp với một phép chọn cho ta một phép nối. Nó chỉ có lợi khi tiếp theo bằng một phép chọn các giá trị tương thích của các thuộc tính xuất phát từ các quan hệ thành phần. Một phép toán nối với điều kiện tổng quát như vậy gọi là một phép nối tê-ta.. An. >. Một điều kiện nối tổng quát có dạng <điều kiện> AND <điều kiện> AND ……. Sự khác nhau giữa tích Đề các và phép nối là ở chỗ trong phép nối. ≠}. Phép toán này nếu áp dụng một mình thì không có ý nghĩa mấy.

. xây dựng và quản trị CSDL Ac Ad Ae Ca Cc Cd Ba Null Bb kết quả phép nối sẽ là: R S A1 Aa Ab Ac Ac A2 Ca Cb Ca Cd A3 Ba Bb Ba Bb B1 Ba Bb Ba Bb B2 Aaa Ccc Aaa Ccc B3 Bbb Ddd Bbb Ddd <A3=B1> Hình 3. ký hiệu là *. Nói chung.TênDA. Cỡ của một kết quả nối chia cho cỡ cực đại nR*nS tạo nên một tỷ kệ gọi là chọn lựa nối. ta phải đổi tên thuộc tính ĐƠNVỊkiểmsoát thành MãsốDV. Ví dụ trong hình 3..8 là một phép nối bằng. Việc có các cặp thuộc tính có giá trị như nhau là thừa. vì vậy người ta đề nghị một phép nối mới gọi là nối tự nhiên. ĐƠNVỊkiểmsoát.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. nghĩa là ta phải viết ĐƠNVỊ * ρ (Mã sốDA. ta cần nối tự nhiên hai quan hệ ĐƠNVỊ (MãsốDV. Mã sốDV. đó là một tính chất của Trang 51 .. Nếu các thuộc tính đó không cùng tên thì trước khi nối phải áp dụng phép toán đặt lại tên.). nghĩa là nó có cùng miền giá trị với thuộc tính MãsốDV của quan hệ ĐƠNVỊ. Chú ý rằng trong kết quả của phép nối bằng chúng ta thấy luôn luôn có một hoặc nhiều cặp thuộc tính có các giá trị như nhau trong mỗi bộ. Ví dụ. TênDV) và Dựán(MãsốDA. TênDA. trong đó thuộc tính ĐƠNVỊkiểmsoát đóng vai trò của đơn vị kiểm soát dự án. nếu R có nR bộ và S có nS bộ thì kết quả của phép nối R với S sẽ có số các bộ lớn hơn 0 và nhỏ hơn nR*nS.Phép nối tự nhiên nhằm loại bỏ thuộc tính thứ hai (thuộc tính thừa) trong điều kiện nối bằng. Định nghĩa chuẩn của nối tự nhiên đòi hỏi hai thuộc tính nối (hoặc mỗi cặp thuộc tính nối) phải có tên như nhau trong cả hai quan hệ.8 Phép nối hai quan hệ Phần lớn các phép nối chỉ cho phép các điều kiện nối với các so sánh bằng.. Những phép nối chỉ sử dụng phép so sánh bằng được gọi là nối bằng (equi join).) (Dựán) Nếu các thuộc tính mà trên đó nối tự nhiên được chỉ ra có tên như nhau thì việc đặt lại tên là không cần thiết. Chú ý rằng nếu không có một tổ hợp các bộ nào thoả mãn điều kiện nối thì kết quả của một phép nối là một quan hệ rỗng không chứa bộ nào. Để có thể thực hiện được phép nối tự nhiên với điều kiện so sánh bằng.

Chúng ta có thể áp dụng phép nối tự nhiên và nối bằng để nối nhiều bảng vời nhau. π. một phép nối có thể được chỉ ra như một tích Đề các và sau đó là một phép chọn: R S= σ < Đièu kiện chọn> (R × S) < Điều kiện nối> Một cách tương tự. trong đó X ⊆ Z. Một phép toán khác cũng được đưa vào. nghĩa là mọi phép toán đại số quan hệ khác có thể được biểu diễn thông qua các phép toán của tập hợp này. nói một cách chính xác là không cần phải có phép giao. ∪. Phép chia được áp dụng cho hai quan hệ R(Z) và S(X) và được ký hiệu là R(Z) ÷ S(X). xây dựng và quản trị CSDL mỗi điều kiện nối.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Điều đó có nghĩa là để một bộ t xuất hiện trong kết quả T của phép chia. -. Phép nối được sử dụng để kết hợp các dữ liệu từ nhiều quan hệ sao cho các thông tin có liên hệ với nhau có thể được biểu diễn trong một bảng. Đoi khi phếp nối được áp dụng nối một bảng với chính nó. phép giao có thể được biểu diễn bằng cách sử dụng các phép hợp và trừ tập hợp như sau: R ∩ S ≡(R ∪ S) – ((R-S) ∪ (S – R)) Như vậy. đó là phép chia g. ta chỉ cần đưa ra biểu thức phức tạp này là đủ. Ví dụ. mọi tổ hợp các bộ sẽ được chọn và phép nối trở thành một tích Đề các. f. Nếu không có điều kiện nối. Tuy nhiên các phép toán đó rất quan trọng bởi vì chúng tiện dùng và rất thường xuyên được áp dụng trong các cơ sở dữ liệu. ta có thể thay thế phép nối tự nhiên bằng một tích Đề các đi sau một phép đặt lại tên và sau đó là các phép toán chọn và chiếu. Các phép toán đó được đưa vào trong đại số quan hệ là do tiện dụng hoqn là do cần thiết. Tập hợp đầy đủ các phép toán quan hệ Người ta đã chỉ rằng tập hợp các phép toán đại số quan hệ {σ. Như vậy các phép toán nối cũng không cần thiết. Mỗi khi cần thực hiện một phép giao. Phép chia Phép chia có lợi cho một loại truy vấn đặc biệt đôi khi có các ứng dụng trong cơ sở dữ liệu. ×}là một tập đầy đủ . các giá trị Trang 52 .Kết quả của phép chia là quan hệ T(Y) chứa một bộ t nếu các bộ tR xuất hiện trong R với tR[Y] = t và với tR[X] = tS với mọi bộ tS trong S.Giả sử Y = Z – X (như vậy Z=X-Y). Một ví dụ khác. Nếu ta nối n bảng với nhau thì phải chỉ ra n-1 điều kiện nối.

T 2 ←π Y ((S × T 1 ) – R) .B) ÷ S(B). xây dựng và quản trị CSDL trong t phải xuất hiện trong R trong sự kết nối với mọi bộ của S. Trong phần này chúng ta sẽ trình bày các phép toán bổ sung để biểu diễn các truy vấn đó. Các hàm nhóm và các phép nhóm Kiểu câu hỏi đầu tiên không thể biểu diễn được trong đại số quan hệ cơ sở là chỉ ra các hàm nhóm toán học trên các tập hợp giá trị của các cơ sở dữ Trang 53 . Trong phép chia ở trên. do các bộ giá trị b1 và b4 xuất hiện trong R trong sự kết hợp với tất cả ba bộ trong S. Ví dụ: R A a1 a2 a3 a4 a1 a3 a2 a3 a4 a1 a2 a3 B b1 b1 b1 b1 b2 b2 b3 b3 b3 b4 b4 b4 T B b1 b4 S A a1 a2 a3 Hình 3.Các phép toán này làm tăng cường sức mạnh của đại số quan hệ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. T ← T 1 – T 2 3. Tất cả các giá trị khabs của B trong R không xuất hiện với mọi bộ trong S và không được chọn Phép chia có thế được biểu diễn thông qua các phép toán π.9 : minh hoạ phép chia T(B) ← R(A. Các phép toán quan hệ bổ sung Có nhiểu truy vấn cơ sở dữ liêu không thể thực hiện được bằng các phép toán đại số cơ bản trình bày ở trên. -như sau: T 1 ← π Y (R) . vì vậy chúng xuất hiện trong quan hệ kết quả T. ×.

ta có thể viết: < MãsốDV> ℑ Mã số ĐV 1 4 5 COUNT (). Kết quả của việc áp dụng một hàm nhóm là một quan hệ chứ không phải là một đại lượng vô hướng.10 COUNT() 1 3 4 AVERAGE(Lương) 5500 3100 3325 Hình 3. Cần chú ý rằng. nhóm các bộ của quan hệ NHÂNVIÊN theo Mãsố đơn vị. vì vậy quan hệ kết quả chỉ có một bộ. Trang 54 . Chúng ta có thể định nghĩa một phép toán nhóm như sau: < các thuộc tính nhóm> ℑ < danh sách các hàm> (R) trong đó ℑ là ký hiệu hàm nhóm. hoặc cho biết số các bộ của bảng nhân viên. Các ví dụ về các hàm như vaỵy có thể là đưa ra lương trung bình hoặc tổng lương của tất cả nhân viên. Ví dụ. MIN. Trong các cặp hư vậy. AVERAGE. MAX.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. các trùng lặp không được loại bỏ khi hàm nhóm được áp dụng. nói chung. mỗi nhóm bao gồm các nhân viên cùng làm việc trong một đơn vị. để lấy ra theo MãsốDV số các nhân viên và lương trung bình của các nhân viên. Hàm Đếm (COUNT) được sử dụng để đếm các bộ giá trị. Tính giá trị lớn nhất (MAX). <hàm> là một trong các hàm cho phép như SUM.. AVERAGE(Lương) (NHÂNVIÊN) Kết quả được minh hoạ ở hình 3.10 Minh hoạ phép toán nhóm Nếu không chỉ ra thuộc tính nhóm thì các hàm được áp dụng cho các giá trị thuộc tính của tất cả các bộ trong quan hệ. Quan hệ kết quả có các thuộc tính nhóm cộng với một thuộc tính cho mỗi phần tử trong danh sách hàm. Các hàm hay áp dụng để thu thập các giá trị số là hàm Tổng (SUM). <danh sách hàm> là danh sách các cặp <hàm(đối số)>. thậm chí nếu nó chỉ có một giá trị. Như vậy. Sau đó chúng ta có thể đưa ra mỗi giả trị của Mãsố đơn vị cùng với lương trung bình của các nhân viên ở trong đơn vị. Ví dụ. xây dựng và quản trị CSDL liệu. Một kiểu câu hỏi hay dùng khác là đòi hỏi nhóm các bộ trong một quan hệ theo một giá trị của một số các thuộc tính của chúng và sau đó áp dụng các hàm nhóm một cách độc lập cho từng nhóm. Giá trị bé nhất (MIN). Trungbình (AVERAGE). < các thuộc tính nhóm> là một một danh sách các thuộc tính của quan hệ được chỉ ra trong R. và <thuộc tính> là một thuộc tính của quan hệ được chỉ ra trong R. COUNT.

xây dựng và quản trị CSDL Các phép toán khép kín đệ quy Một kiểu phép toán khác. nói chung. Các bộ với giá trị null trong các tthuộc tính nối cũng bị loại. Các thuộc tính không tương thích phép hợp từ bất kỳ quan hệ nào cũng được giữ trong kết quả và các bộ không có giá trị cho các thuộc tính này cũng được lấp đầy bằng những giá trị null. Như vậy. CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ-LIÊNKẾT THÀNH MÔ HÌNH QUAN HỆ Như đã thảo luận ở chương II. các bộ không có bộ liên kết sẽ bị loại khỏi kết quả nối. Điều phải tôn trọng là danh sách các thuộc tính tưông thích phải chứa một khoá cho các hai quan hệ. Nếu không có bộ liên kết nào được tìm thấy trong S thì các thuộc tính của S trong kết quả phép nối được “làm đầy”bằng các giá trị null. Phép toán này được áp dụng cho mối liên kết đệ quy giữ các bộ cùng kiểu. Tương tự như vậy đối với các phép nối ngoài phải và các phép nối ngoài đầy đủ. Có ba phép nối ngoài gọi là nối ngoài trái (left outer join). Các phép toán nối mô tả ở trên liên kết các bộ thoả mãn điều kiện nối. IV. ta phải chuyển đổi mô hình đó thành một mô Trang 55 . không chỉ ra được trong các phép toán đại số quan hệ cơ sở là phép toán khép kín đệ quy. Phép toán hợp ngoài được mở rộng để lấy hợp của các bộ từ các quan hệ nếu các bộ không tương thích đồng nhất. Các phép toán nối ngoài (outer join) hợp ngoài (outer union) Trong phần này chúng ta thảo luận một vài mở rộng của phép toán nối và hợp.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Các bộ từ các quan hệ thành phần với cùng một khoá chỉ được biểu diễn một lần trong kết quả và có giá trị cho tất cả các thuộc tính trong kết quả. được ký hiệu tương ứng là: Nối ngoài trái Nối ngoài phải Nối ngoài đầy đủ Phép nối ngoài trái giữ lại mọi bộ trong quan hệ bên trái R trong phép nối. bước tiếp theo sau việc xây dựng mô hình dữ liệu mức khái niệm.Với các phép toán này chúng ta phải sử dụng kỹ thuật lặp. Một tập hợp các phép toán gọi là nối ngoài có thể được sử dụng khi chúng ta muốn giữ các bộ trong R hoặc S hoặc trong cả hai quan hệ trong kết quả của phép nối dù chúng có những bộ liên kết trong quan hệ kia hay không. Phép toán này chỉ lấy hợp của các quan hệ mà chúng chỉ tương thích bộ phận. nghĩa là chỉ một vài thuộc tính của chúng là tương thích phép hợp. nối ngoài phải (right outer join)và nối ngoài đầy đủ (full outer join).

TênDV. Mốiquanhệ. NgàysinhPT. Khi đó kiểu thực thể ĐƠNVỊ được chuyển thành quan hệ ĐƠNVỊ với các thuộc tính MãsốDV.Thuộc tính khoá của NHÂNVIÊN là MãsốNV. hãy tạo một quan hệ R chứa mọi thuộc tính đơn của E. Trong phần này chúng ta sẽ thảo luận về thuật toán chuyển đổi một mô hình ER thành ra mô hình quan hệ. Địađiểm trong đó các thuộc tính khoá là MãsốDV. TênDV. Khoá chính của quan hệ là MãsốDV (chọn một trong hai thuộc tính khoá của kiểu thực thể) Bước 2: Với mỗi kiểu thứ thể yếu W trong lược đồ ER cùng với kiểu thực thể chủ E. Mốiquanhệ. HọtênPT. NgàysinhNV. Nếu khoá được chọn của E là phức hợp (gồm nhiều thuộc tính) thì tập các thuộc tính đơn đó sẽ cùng nhau tạo nên khoá chính của R. hãy xác định các Trang 56 . Các thuộc tính này sẽ xác định kiểu liên kết của W. TênDV (do mỗi đơn vị có một tên duy nhất). xây dựng và quản trị CSDL hình dữ liệu lô gic. Quan hệ này có khoá ngoài là HọtênNV. khoá chính là HọtênNV. và Địađiểm là một thuộc tính đa trị (do mỗi đơn vị có nhiề địa điểm). 1. chỉ lấy các thuộc tính thành phần đơn của nó. HọtênNV. Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <có> PHỤTHUỘC trong đó NHÂNVIÊN là kiểu thực thể chủ với các thuộc tính MãsốNV. GiớitínhPT. Bước 3: Với mỗi kiểu liên kết 1:1 R trong lược đồ ER. NgàysinhPT. GiớitínhNV. Ví dụ: Giả sử ta có kiểu thực thể ĐƠNVỊ với các thuộc tính là MãsốDV. PHỤTHUỘC là kiểu thực thể phụ thuộc (vào thực thể NHÂNVIÊN) với các thuộc tính là HọtênPT.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Các quy tắc chuyển đổi • Thuật toán chuyển đổi được thực hiện theo các bược sau: Bước 1 : Với mỗi kiểu thực thể thông thường E trong lược đồ ER. Chọn một trong các thuộc tính khoá của E làm khoá chính cho R. Kiểu thực thể này không có thuộc tính khoá. HọtênPT. hãy tạo một quan hệ chứa tất các các thành phần đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của W như là các thuộc tính của R. Đưa các thuộc tính khoá chính của các quan hệ tương ứng với kiểu thực thể chủ làm khoá ngoài của R. Với các thuộc tính phức hợp. Khi đó kiểu thực thể NHÂNVIÊN được chuyển thành quan hệ NHÂNVIÊN với các thuộc tính như trên. Khoá chính của R là một tổ hợp của khoá chính của các quan hệ tương ứng với kiểu thực thể chủ và khoá bộ phận của kiểu thực thể yếu W nếu có. GiớitínhPT. Kiểu thực thể PHỤTHUỘC được chuyển thành quan hệ PHỤTHUỘC với các thuộc tính HọtênNV.

Kiểu thực thể ĐƠNVỊ sẽ được chuyển thành quan hệ ĐƠNVỊ với các thuộc tính của kiểu thực thể ĐƠNVỊ còn kiểu thực thể NHÂNVIÊN sẽ được chuyển thành quan hệ NHÂNVIÊN với các thuộc tính của kiểu thực thể NHÂNVIÊN cộng thêm với thuộc tính MãsốDV (là khoá chính của quan hệ ĐƠNVỊ). với các thuộc tính của các kiểu thực thể giống như ở trên. kiểu thực thể NHÂNVIÊN sẽ được chuyển thành quan hệ NHÂNVIÊN với các thuộc tính của nó. Tốt nhất là chọn S là một kiểu thực thể tham gia toàn bộ vào R. Đưa khoá chính của quan hệ T biểu diễn kiểu thực thể tham gia vào R ở phía 1 vào làm khoá ngoài trong S. Đưa tất các các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của kiểu liên kết 1:1 R vào làm các thuộc tính của S. và đưa khoá chính của T vào làm khoá ngoài trong S. Khi đó. trong đó các kiểu thực thể NHÂNVIÊN. Làm như vậy là vì mỗi thực thể cụ thể của phía N được liên kết với nhiều nhất là một thực thể cụ thể của phía 1 của kiểu liên kết. Cách này thường được áp dụng khi cả hai kiểu thực thể đều tam gia toàn bộ vào liên kết. nếu có. ĐƠNVỊ là các kiểu thực thể ở trên. Tổ hợp các khoá chính đó sẽ tạo Trang 57 . hãy tạo ra một quan hệ mới S để biểu diễn R. còn kiểu thực thể ĐƠNVỊ sẽ được chuyển thành quan hệ ĐƠNVỊ với các thuộc tính của kiểu thực thể ĐƠNVỊ cộng thêm với thuộc tính MãsốNV và thuộc tính của kiểu liên kết <quản lý>. Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <quản lý> ĐƠNVỊ. Chú ý: Có một cách chuyyển đổi mối liên kết 1:1 nữa nhập hia kiểu thực thể và mối liên kết thành một quan hệ. Thuộc tính MãsốDV sẽ là thuộc tính khoá ngoài của quan hệ NHÂNVIÊN Bước 5: Với mỗi kiểu liên kết N:M hai ngôi R. đồng thời sự tham gia của NHÂNVIÊN vào kiểu liên kết là bộ phận (không phải nhân viên nào cũng quản lý đơn vị). Kiểu liênkết <quản lý> là một kiểu liên kết 1:1. chẳng hạn S. Đưa các khoá chính của các quan hệ biểu diễn các kiểu thực thể tham gia vào làm khoá ngoài của S. sự tham gia của ĐƠNVỊ là đầy đủ (một đơn vị luôn luôn phải có một người quản lý). Kiểu liên kết < làm việc cho> là kiểu liên kết N:1 (một nhân viên chỉ làm việc cho một đơn vị và mỗi đơn vị có nhiều nhân viên làm việc cho). Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN <làm việc cho>ĐƠNVỊ. Hãy chọn một trong các quan hệ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Thuộc tính MãsốNV sẽ là khoá ngoài cho quan hệ ĐƠNVỊ Bước 4: Với mỗi kiểu liên kết hai ngôi R kiểu 1:N. hãy xác định quan hệ S biểu diễn kiểu thực thể tham gia ở phía N của kiểu liên kết. Đưa các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của kiểu liên kết 1:N vào làm các thuộc tính của S. Khi đó. xây dựng và quản trị CSDL quan hệ S và T tương ứng với các kiểu thực thể tham gia trong R.

hãy tạo ra một quan hệ S để biểu diễn R. Đưa tất cả các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của kiểu liên kết n-ngôi vào làm thuộc tính của S. Tuy nhiên. trong đó n>2. Sốgiờ trong đó hai thuộc tính MãsốNV. Nếu thuộc tính đa trị là phực hợp thì chúng ta chỉ đưa vào R các thành phần đơn của nó. Khi đó kiểu liên kết < làm việc với> sẽ được chuyển thành một quan hệ có tên là NHÂNVIÊN_Dựán với các thuộc tính MãsốNV. Đưa các khoá chính của các quan hệ biểu diễn các kiểu thực thể tham gia vào làm khoá ngoài của S. khi chuyển thành mô hình quan hệ nó sẽ được chuyển thành một quan hệ có khoá chính là MãsốDV. Giả sử rằng kiểu thực thể ĐạIlý có thuộc Trang 58 . Chú ý rằng ta không thể biểu diễn một kiểu liên kết N:M bằng một thuộc tính khoá ngoài đơn giản trong một trong các quan hệ tham gia (như đã làm với các kiểu liên kết 1:1 và 1:N) vì tỷ số lực lượng N:M. Ví dụ: Xét kiểu thực thể ĐƠNVỊ ở trên. Khoá chính của S thường là một tổ hợp các khoá chính của các quan hệ biểu diễn các kiểu thực thể tham gia. MãsốDA tạo thành khoá chính (phức hợp) cho quan hệ. Đưa tất cả các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức hợp) của kiểu liên kết N:M vào làm các thuộc tính của S.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. xây dựng và quản trị CSDL nên khoá chính của S. MãsốDA. Quan hệ R này sẽ chứa một thuộc tính tương ứng với A cộng với thuộc tính khoá K của quan hệ biểu diễn kiểu thực thể hoặc kiểu liên kết có thuộc tính là A làm khoá ngoài của.Kiểu liên kết này có một thuộc tính là Sốgiờ để lưu số giờ mà mỗi nhân viên làm việc cho một dự án. Khoá chính của R là một tổ hợp của A và K. nếu ràng buộc lực lượng trên một kiểu thực thể E nào đó tham gia vào R là 1 thì khoá chính của S không được chứa thuộc tính khoá ngoài quy chiếu đến quan hệ E’ tương ứng với E. hãy tạo ra một quan hệ mới R. Bước 6: Với mỗi thuộc tính đa trị A. Kiểu thực thể NHÂNVIÊN có các thuộc tính như trên với thuộc tính khoá là MãsốNV. Thuộc tính Địađiểm là một thuộc tính đa trị. Ví dụ: Giả sử chúng ta có kiểu liên kết Đại lý <cung cấp> vậttư cho dựán Đây là một kiểu liên kết cấp 3. Bước 7: Với mỗi kiểu liên kết n ngôi R. Kiểu liên kết < làm việc với> là một kiểu liên kết N:M (một nhân viên có thể làm việc với nhiều dự án và mỗi dự án có nhiều nhân viên làm việc với). Địađiểm trong đó thuộc tính khoá là MãsốDA. Ví dụ: Giả sử ta có kiểu liên kết NHÂNVIÊN < làm việc với> Dựán. TênDA. Địa điểm và có thể có thêm một số thuộc tính khác lưu thông tin về địa điểm. Kiểu thực thể Dựán có các thuộc tính là MãsốDA.

chúng ta có mô hình quan hệ cho bài toán CÔNGTY như sau: NHÂNVIÊN(Họđệm. Ngàysinh. Sốlượng và khoá chính gồm ba thuộc tính MãsốDL. MãsốNV. ĐịađiểmDA. MãsốNQL. MãsốĐV. Giớitính. Ngàybắtđầu) ĐƠNVỊ_ĐỊAĐIỂM (MãsốĐV. Lương. Ngàysinh. Lược đồ cơ sở dữ liệu “CÔNG TY” Trang 59 . Địachỉ. MãsốDA. MãsốVT. MãsốĐV) NHÂNVIÊN_DỰÁN(Mã sốNV. Giớitính. áp dụng các bước của thuật toán ở trên. MãsốDA. MãsốVT. kiểu thực thể Vậttư có thuộc tính khoá là MãsốVT. MãsốNGS.11. Số giờ) PHỤTHUỘC(MãsốNV. Mã số DA. kiểu thực thể Dự án có thuộc tính khoá là MãsốDA còn kiểu liên kết <cung cấp> có thuộc tính là Sốlượng để lưu số lượng vật tư mà một đai lý cung cấp cho môt dự án. Quanhệ) Hinh 3. Chuyển đổi mô hình cụ thể Trong chương 2 chúng ta đã phân tích và thiết kế mô hình ER cho bài toán CÔNGTY (Hình vẽ 2. MãsốĐV) ĐƠN VỊ (TênĐV. Khi đó kiểu liên kết <cung cấp> sẽ được chuyển thành một quan hệ có tên là CUNGCÂP với các thuộc tính MãsốDL. MãsốDA. xây dựng và quản trị CSDL tính khoá là MãsốDL.6).BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. ĐịađiểmĐV) DỰÁN(TênDA. TênPT. 2. Tên.

mức thứ hai là mức cài đặt. Mức thứ nhất liên quan đến việc các người sử dụng thể hiện các lược đồ quan hệ và ý nghĩa của các thuộc tính của chúng như thế nào.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ngược lại.Giải pháp này còn có tên gọi là thiết kế bằng tổng hợp (design by synthesis). nghĩa là đo đạc một cách hình thức vì sao tập hợp các thuộc tính này nhóm vào trong các lược đồ quan hệ thì tốt hơn nhóm kia. Chúng ta có thể nói đến “tính tốt”của các lược đồ quan hệ ở hai mức : mức thứ nhất là mức lôgic. Việc thiết kế cơ sở dữ liệu có thể được thực hiện bằng cách sử dụng hai giải pháp: dưới lên (bottom-up) hoặc trên xuống (top-down). Nói cách khác. Nói chung. I. các giá trị thuộc tính trong một bộ liên hệ với nhau như thế nào. ta giả thiết rằng có một ý nghĩa nào đó gắn với các thuộc tính. Nếu việc thiết kế khái niệm được làm một cách cẩn thận. chỉ ra việc hiểu các giá trị thuộc tính lưu trong các bộ của một quan hệ như thế nào. sau đó là một chuyển đổi sang các quan hệ thì hầu hết ngữ nghĩa đã được giải thích và thiết kế kết quả có một ý nghĩa rõ ràng. CÁC NGUYÊN TẮC THIẾT KẾ LƯỢC ĐỒ QUAN HỆ 1. ý nghĩa này. hoặc ngữ nghĩa. xây dựng và quản trị CSDL CHƯƠNG 4: PHỤ THUỘC HÀM VÀ CHUẨN HOÁ CƠ SỞ DỮ LIỆU QUAN HỆ Trong chương này chúng ta sẽ thảo luận về một số vấn đề lý thuyết đã được phát triển nhằm mục đích chọn được lược đồ quan hệ “tốt”. việc giải thích ngữ nghĩa của quan hệ càng dễ dàng thì việc thiết kế lược đồ quan hệ càng tốt. phương pháp thiết kế trên xuống bắt đầu từ một số các nhóm thuộc tính trong các quan hệ nhận được từ thiết kế quan niệm và các hoạt động chuyển đổi. Phương pháp thiết kế dưới lên xem các mối liên kết cơ bản giữa các thuộc tính riêng rẽ như là điểm xuất phát và sử dụng chúng để xây dựng nên các quan hệ. Sau đó việc thiết kế bằng phân tích được áp dụng đối với các quan hệ một cách riêng rẽ và tập thể dẫn đến việc tách các quan hệ cho đến khi đạt được tính chất mong muốn. Nguyên tắc sau sẽ hỗ trợ cho việc thiết kế lược đồ quan hệ. Nguyên tắc 1: Thiết kế một lược đồ quan hệ sao cho dễ giải thích ý Trang 60 . Ngữ nghĩa của các thuộc tính quan hệ Khi chúng ta nhóm các thuộc tính để tạo nên một lược đồ quan hệ. Mức thứ hai liên quan đến việc các bộ trong một quan hệ cơ sở được lưu trữ và cập nhật như thế nào.

Đừng góp các thuộc tính từ nhiều kiểu thực thể và kiểu liên kết vào một quan hệ đơn. Nếu có xuất hiện những cập nhật bất thường thì phải ghi chép lại một cách rõ ràng và phải đảm bảo rằng các chương trình cập nhật dữ liệu sãe thực hiện một cách đúng đắn. Nguyên tắc 3: Tránh càng xa càng tốt việc đặt vào trong các quan hệ cơ sở những thuộc tính mà các giá trị của chúng thường xuyên là null. Xoá bất thường. Những cập nhật bất thường này sẽ đưa vào cơ sở dữ liệu những thông tin “lạ”và làm cho cơ sở dữ liệu mất tính đúng đắn. Cập nhật bất thướng bao gồm : Chèn bất thường. chúng ta có thể nhóm nhiều thuộc tính với nhau vào một quan hệ “béo”. sum. Nguyên tắc 2: Thiết kế các lược đồ quan hệ cơ sở sao cho không sinh ra những cập nhật bất thường trong các quan hệ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Nếu không thể tránh được các giá trị null thì phải đảm bảo rằng chúng chỉ áp dụng trong các trường hợp đặc biệt và không áp dụng cho một số lớn các bộ trong quan hệ. chẳng hạn như thuộc tính không áp dụng được cho bộ này. nếu một lược đò quan hệ tương ứng với một kiểu thực thể hoặc một kiểu liên kết thì ý nghĩa trở nên rõ ràng. Ngược lại. Các giá trị rỗng trong các bộ Trong một số thiết kế lược đồ. Thông tin dư thừa trong các bộ và cập nhật dị thường Một mục tiêu của thiết kế lược đồ là làm tối thiểu không gian lưu trữ các quan hệ cơ sở. Tóm lại. Một cách trực quan. có cùng một cách biểu diễn cho moi giá trị null là thoả hiệp các ý nghĩa khác nhau mà chung có thể có. xây dựng và quản trị CSDL nghĩa của nó. Một vấn đề nữa với các giá trị null là không áp dụng được các hàm nhóm như count. 2. Điều đó có thể làm tăng không gian ở mức lưu trữ và có thể dẫn đến vấn đề về hiểu ý nghĩa của các thuộc tính và về việc chỉ ra các phép nối ở mức lô gic. Hơn nữa. Sửa đổi bất thường. Các thuộc tính được nhóm vào trong các lược đồ quan hệ có một ảnh hưởng đáng kể đến không gian lưu trữ. giá trị của thuộc tính cho bộ này là không có hoặc giá trị cho thuộc tính là có nhưng vắng mặt. một quan hệ tương ứng với một hỗn hợp các thực thể và liên kết thì ý nghĩa trở nên không rõ ràng. Nếu cùng một thông tin duực lưu giữ nhiều lần trong cơ sở dữ liệu thì ta gọi đó là dư thừa thông tin và điều đó sẽ làm lãng phí không gian nhớ. chúng ta sẽ kết thúc với nhiều giá trị null trong các bộ đó. Nếu nhiều thuộc tính không áp dụng cho mọi bộ trong một quan hệ. Trang 61 . các giá trị null có thể nhiều cách giải thích. Ngoài việc lãng phí không gian nhớ nó còn dẫn đến một vấn đề nghiêm trọng là cập nhật bất thường.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Nguyên tắc 4: Thiết kế các lược đồ quan hệ sao cho chúng có thể được nối với điều kiện bằng trên các thuộc tính là khoá chính hoặc khoá ngoài theo cách đảm bảo không sinh ra các bộ “giả”. nói cách khác. II. hoặc được xác định bởi. Trong phần này chúng ta sẽ định nghĩa hình thức khái niệm này và cách sử dụng nó để định nghĩa các dạng chuẩn cho các lược đồ quan hệ • Định nghĩa phụ thuộc hàm Một phụ thuộc hàm là một ràng buộc giữa hai nhóm thuộc tính của một cơ sở dữ liệu. CÁC PHỤ THUỘC HÀM Khái niệm cơ bản nhất trong thiết kế lược đò quan hệ là khái niệm phụ thuộc hàm. X xác định hàm Y trong lược đồ quan hệ R khi và chỉ khi nếu hai bộ của r (R) bằng nhau trên các giá trị của X thì chúng nhất thiết phải bằng nhau trên các giá trị của Y. A2.…. giữa hai tập thuộc tính X và Y chỉ ra một ràng buộc trên các bộ có thể có tạo nên một trạng thái quan hệ của R. Một phụ thuộc hàm. chúng ta chỉ sử dụng khái niệm này để phát triển lý thuyết hình thức về sự phụ thuộc dữ liệu. X ∩ Y = ∅.An và ta hãy nghĩ rằng toàn bộ cơ sở dữ liệu được mô tả bằng một lược đồ quan hệ chung R={A1. Giả sử rằng lược đồ cơ sở dữ liệu của ta có n thuộc tính A 1 . Giả sử X và Y là hai tập con của R. việc áp dụng các phép toán(nhất là các phép nối) sẽ sinh ra các bộ giá trị không đúng. các giá trị cua thành phần X của một bộ xác định một cách duy nhất các giá trị của thành phần Y. tạpp thuộc tính Y được gọi là vế phải của FD. Tập thuộc tính X được gọi là vế trái của FD. xây dựng và quản trị CSDL 3..A 2 . Phụ thuộc hàm được viết tắt là FD (functional dependency). An}. Tạo ra các bộ giả Nhiều khi chúng ta đưa vào cơ sở dữ liệu những quan hệ không đúng. Như vậy. Điều đó có nghĩa là các giá trị của thành phần Y của một bộ trong R phụ thuộc vào. …. Nếu không tránh được những quan hệ như vậy thì đừng đừng nối chúng trên các thuộc tính đó. ký hiệu là X→ Y. Đừng có các quan hệ chứa các thuộc tính nối khác với các tổ hợp khoá chính-khoá ngoài. nếu có t 1 [X] = t 2 [X] thì cũng phải có t 1 [Y] = t 2 [Y]. Bạn đừng suy ra rằng cơ sở dữ liệu của chúng ta sẽ được lưu trữ trong một bảng chung. các giá trị của thành phần X. gọi là các bộ “giả”. Chúng ta cũng nói rằng có một phụ thuộc hàm từ X vào Y hoặc Y phụ thuộc hàm vào X. bởi vì các phép nối có thể sinh ra các bộ “giả”. Ràng buộc đó là : với hai bộ bất kỳ t 1 và t 2 trong r.Ta có các nhận xét sau: Trang 62 .

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

. Nếu có một ràng buộc trên các trạng thái của R là chỉ có một bộ giá trị duy nhất của X trong mọi thể hiện quan hệ r(R) thì điều đó kéo theo X→ Y với moi tập con các thuộc tính Y của R . Nếu X→ Y thì không thể nói gì về Y→ X Một phụ thuộc hàm là một tính chất ngữ nghĩa của các thuộc tính. Những người thiết kế cơ sở dữ liệu sẽ dùng hiểu biết của họ về ý nghĩa của các thuộc tính của R để chỉ ra các phụ thuộc hàm có thể có trên mọi trạng thái quan hệ của r(R) của R. Khi ngữ nghiã của hai tập thuộc tính trong R chỉ ra rằng có thể có một phụ thuộc hàm, chúng ta sẽ đặc tả phụ thuộc hàm như một ràng buộc. Các trạng thái quan hệ r(R) thoả mãn các ràng buộc phụ thuộc hàm được gọi là các trạng thái hợp pháp của R, bởi vì chúng tuân theo các ràng buộc phụ thuộc hàm. Như vậy, việc sử dụng chủ yếu của các phụ thuộc hàm là dùng để mô tả một lược đồ quan hệ R bằng việc chỉ ra các ràng buộc trên các thuộc tính phải thoả mãn ở mọi thời điểm. Một phụ thuộc hàm là một tính chất của lược đồ quan hệ R chứ không phải là tính chất của một trạng thái hợp pháp r của R. Vì vậy, một phụ thuộc hàm không thể được phát hiện một cách tự động từ một trạng thái r mà phải do một người hiểu biết ngữ nghĩa của các thuộc tính xác định một cách rõ ràng. Ví dụ, ta có quan hệ sau
Dạy Giáoviên AA AA BB CC Mônhọc Mônhọc 1 Môn học 2 Môn học 3 Môn học 4 Tàiliệu XX YY ZZ TT

Mới nhìn qua, chúng ta có thể nói có một phụ thuộc hàm Tàiliệu→ Mônhọc, tuy nhiên chúng ta không thể khẳng định được vì điều đó chỉ đúng với trạng thái quan hệ này, biết đâu trong trạng thái quan hệ khác có thể có hai môn học khác nhau sử dụng cùng một tài liệu tham khảo. Với một trạng thái cụ thể, chúng ta chỉ có thể khẳng định là không có một phụ thuộc hàm giữa nhóm thuộc tính này và nhóm thuộc tính khác. Để làm điều đó chúng ta chỉ cần đưa ra một phản ví dụ. Chẳng hạn, ở trong quan hệ trên chúng ta có thể khẳng định rằng không có phụ thuộc hàm giữa Giáoviên và Mônhọc bằng cách chỉ ra ví dụ là AA dạy hai môn học “Môn học 1”và “Môn học 2”vậy
Trang 63

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

Giáo viên không thể xác định duy nhất Môn học. Để biểu diễn các phụ thuộc hàm trong một lược đồ quan hệ, chúng ta sử dụng khái niệm sơ đồ phụ thuộc hàm. Mỗi FD được biểu diễn bằng một đường nằm ngang. Các thuộc tính ở vế trái của FD được nối với đường biểu diễn FD bằng các đường thẳng đứng, các thuộc tính ở vế phải được nối với đường biểu diễn FD bằng mũi tên chỉ đến các thuộc tính Ví dụ: Ta có lược đồ quan hệ Mượn(Sốthẻ, Mãsốsách, Tênngườimượn, Tênsách, Ngàymượn) Với các phụ thuộc hàm: Sốthẻ →Tênngườimượn Mãsốsách → Tênsách Sốthẻ, Mãsốsách → Ngàymượn có sơ đồ phụ thuộc hàm như sau: Mượn
Sốthẻ Mãsốsách Tênngườimượn Tênsách Ngàymượn

FD1 FD2 FD3 • Các quy tắc suy diễn đối với các phụ thuộc hàm Chúng ta ký hiệu F là tập các phụ thuộc hàm được xác định trên một lược đồ quan hệ R. Một phụ thuộc hàm X→ Y được gọi là suy diễn được từ một tập các phụ thuộc hàm F được xác định trên R nếu X→ Y đúng trong mỗi trạng thái quan hệ r là mở rộng hợp pháp của R; nghĩa là mỗi khi r làm thoả mãn mọi phụ thuộc hàm trong F, X→ Y cũng đúng trong r. Tập hợp tất cảc các phụ thuộc hàm suy diễn được từ F được gọi là bao đóng của F và được ký hiệu là F+. Để xác định một cách suy diễn các phụ thuộc hàm có hệ thống, chúng ta phải phát hiện một tập hợp các quy tắc suy diễn. Tập quy tắc này sẽ được sử dụng để suy diễn các phụ thuộc hàm mới từ một tập các phụ thuộc hàm cho trước. Ta sử dụng ký hiệu F |= X→ Y để ký hiệu phụ thuộc hàm X→ Y được suy diễn từ tập các phụ thuộc hàm F. Để cho tiện, ta viết tắt phụ thuộc hàm có dạng {X,Y} → Z thành XY → Z (nghĩa là ta nối các biến và bỏ dấu
Trang 64

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

ngoặc nhọn đi). Có 6 quy tắc suy diễn đối với các phụ thuộc hàm: QT1 (quy tắc phản xạ) : Nếu X ⊇ Y thì X→ Y QT2 (quy tắc tăng) : { X→ Y } |= XZ → YZ QT3 (quy tắc bắc cầu) : { X→ Y, Y→ Z } |= X→ Y QT4 (quy tắc chiếu) : { X→ YZ } |= X→ Y QT5 (quy tắc hợp) : { X→ Y, X→ Z } |= X→ YZ QT6 (quy tắc tựa bắc cầu): { X→ Y, WY→ Z } |= WX→ Z Quy tắc phản xạ phát biểu rằng một tập hợp các thuộc tính luôn luôn xác định chính nó hoặc một tập con bất kỳ của nó. Vì QT1 tạo ra các phụ thuộc luôn luôn đúng, những phụ thuộc như vậy được gọi là tầm thường. Một cách hình thức, một phụ thuộc hàm X→ Y là tầm thường nếu X ⊇ Y; ngược lại, noá được gọi là không tầm thường. Quy tắc tăng nói rằng việc thêm cùng một tập thuộc tính vào cả hai vế của một phụ thuộc hàm sẽ tạo ra một phụ thuộc hàm có giá trị. Theo quy tắc 3, các phụ thuộc hàm là bắc cầu. Quy tắc chiếu (QT4) nói rằng chúng ta có thể bỏ bớt các thuộc tính ra khỏi vế phải của phụ thuộc hàm. Việc áp dụng nhiều lần quy tắc này có thể tách phụ thuộc hàm X→ {A1, A2, …., An} thành một tập hợp phụ thuộc hàm { X→ A1, X→ A2, …., X→ An}. Quy tắc hợp cho phép chúng ta làm ngược lại; ta có thể gộp các phụ thuộc hàm { X→ A1, X→ A2, …., X→ An}thành một phụ thuộc hàm đơn X→ {A1, A2, …., An}. Có thể chứng minh các quy tắc suy diễn ở trên một cách trực tiếp hoặc bằng phản chứng dựa trên định nghĩa của phụ thuộc hàm. Để chúng minh phản chứng, ta giả thiết một quy tắc là không đúng và chỉ ra rằng điều đó là hkông thể. Sau đây là chứng minh các quy tắc.
Quy tắc 1:

Giả sử rằng X ⊇ Y và hai bộ t1 và t2 trong một thể hiện quan hệ r của R sao cho t 1 [X] = t 2 [X]. Khi đó t 1 [Y] = t 2 [Y] bởi vì X ⊇ Y; như vậy X→ Y phải xẩy ra trong r. Quy tắc 2 (chứng minh phản chứng): Giả sử rằng X→ Y đúng trong một thể hiện quan hệ r của R nhưng XZ→ YZ không đúng. Khi đó phải có hai bộ t 1 và t 2 trong r sao cho (1) t 1 [X] = t 2 [X], (2) t 1 [Y] = t 2 [Y], (3) t 1 [XZ] = t 2 [XZ] và (4) t 1 [YZ] ≠ t 2 [YZ]. Điều đó là không thể bởi vì từ (1) và (3) chúng ta suy ra (5) t 1 [Z] = t 2 [Z], và từ (2) và (5) ta suy ra t 1 [YZ] = t 2 [YZ], mâu thuẫn vói (4).
Quy tắc 3:
Trang 65

Như vậy chúng ta cũng phải có (4) t 1 [Z] = t 2 [Z] theo (3) và giả thiết (2). và 4. và 2. YZ → Y (sử dụng QT1 và YZ ⊇ Y) 3. bằng cách thêm vào cả hai vế W) WX→ Y (sử dụng QT3 trên 3. bằng cách thêm vào cả hai vế Y) X→ YZ (sử dụng QT3 trên 3. Quy tắc 4: 1. bằng cách thêm vào cả hai vế X.) Amstrong đã chứng minh rằng các quy tắc suy diễn từ QT1 đến QT3 là đúng và đầy đủ. bất kỳ một phụ thuộc hàm nào suy diễn được bằng cách áp dụng các quy tắc từ QT1 đến QT3 cũng đúng trong mỗi trạng thái quan hệ r của R thoả mãn các các phụ thuộc trong F. Đúng có nghĩa là cho trược một tập các phụ thuộc hàm F trên một lược đồ quan hệ R. và XX=X) X→ YZ (sử dụng QT2 trên 2. tập hợp các phụ thuộc hàm F+ (bao đóng của F) có thể xác định được từ F bằng cách áp dụng các quy tắc suy diễn từ QT1 đến QT3. Đầy đủ có nghĩa là việc sử dụng các quy tắc từ QT1 đến QT3 lặp lại nhiều lần để suy diễn các phụ thuộc hàm cho đến khi không còn suy diễn được nữa sẽ cho kết quả là một tập hợp đầy đủ các phụ thuộc hàm có thể được suy diễn từ F. Chúng ta có thể chứng minh các quy tắc từ QT4 đên QT6 thao phương pháp trên. Khi đó với mọi bộ t 1 và t 2 trong r sao cho t 1 [X] = t 2 [X] ta phải có (3) t 1 [Y] = t 2 [Y] theo giả thiết (1). Các quy tắc từ QT1 đến Trang 66 . xây dựng và quản trị CSDL Giả sử rằng (1) X→ Y và (2) Y→ Z đúng trong một quan hệ r. X→ Y (sử dụng QT3 trên 1. Tuy nhiên ta có thể lợi dụng các quy tắc đã được chứng minh là đúng để chứng minh chúng. và 2. X→ YZ (cho trước) 2. Sau đây ta chứng minh theo cách đấy.) Quy tắc 6: X→ Y (cho trước) WY→ Z (cho trước) WX→ WY (sử dụng QT2 trên 1.) Quy tắc 5: X→ Y (cho trước) X→ Z (cho trước) X→ XY (sử dụng QT2 trên 1. Nói cách khác.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Vậy X→ Z phải đúng trong r.

ĐịađiểmDA. xây dựng và quản trị CSDL QT3 được gọi là các quy tắc suy diễn Amstrong. chúng ta xác định tập X+ các thuộc tính phụ thuộc hàm vào X dựa trên F. với mỗi phụ thuộc hàm Y → Z trong F thực hiện M nếu X+ ⊇ Y thì X+= X+ ∪ Z. Thuật toán xác định X+ như sau: Thuật toán 4. Ví dụ : Xét lược đồ quan hệ R = {MãsốNV. ĐịađiểmDA } {MãsốNV. MãsốDA → TênDA. ĐịađiểmDA.1 ta có: { MãsốNV}+ = { MãsốNV. HọtênNV. những người thiết kế cơ sở dữ liệu đầu tiên chỉ ra một tập các phụ thuộc hàm đễ xác định được nhờ ngũa nghĩa của các thuộc tính của R. Một tập hợp các phụ thuộc hàm E được phủ bởi một tập các phụ thuộc hàm F – hoặc F phủ E-nếu mỗi một phụ thuộc hàm trong E đều ở trong F+. MãsốDA. until (X+ = Old X+). X+ được gọi là bao đóng của X dưới F. Thông thường. Sốgiờ }. Như vậy tương Trang 67 . Hai tập phụ thuộc hàm E và F là tương đương nếu E+ = F+.1 (xác định X+. sử dụng các quy tắc Amstrong để suy diễn các phụ thuộc hàm bổ sung. Sốgiờ } và tập phụ thuộc hàm F = { MãsốNV → HọtênNV. HọtênNV } { MãsốDA }+ = { MãsốDA. MãsốDA. {MãsốNV. Repeat Old X+ = X+ . ĐịađiểmDA. TênDA. Sau đó. Như vậy. điều đó có nghĩa là mỗi phụ thuộc hàm trong E có thể suy diễn được từ F. TênDA.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. MãsốDA}+ = {MãsốNV. MãsốDA} → Số giờ } áp dụng thuật toán 4. • Sự tương đương của các tập phụ thuộc hàm Trong phần này chúng ta thảo luận về sự tương đương của hai tập phụ thuộc hàm. Một cách có hệ thống để xác định tất cả các phụ thuộc hàm bổ sung là đầu tiên hãy xác định mỗi tập thuộc tính X xuất hiện ở vế trái của một phụ thuộc hàm nào đấy trong F và sau đó xác định tập hợp tất cả các thuộc tính phụ thuộc vào X. HọtênNV. TênDA. bao đóng của X dưới F) X+ = X. với mỗi tập thuộc tính X.

thì F phủ E. Điều kiện 1 đảm bảo rằng mỗi phụ thuộc hàm là ở dạng chính tắc với một thuộc tính ở vế phải. áp dụng thuật toán 4. H}. E→ AD. Nếu điều đó xẩy ra với mỗi phụ thuộc hàm trong E. hoặc do có một phụ thuộc có thể được suy diễn từ các phụ thuộc khác ở trong F. Ta có {A}+ ={A. E → H } E = { A → CD. C.H}.1 ở trên. AC → D. Từ đó suy ra F phủ E. Chúng ta xác định xen E và F có tương đương hay không bằng cách kiểm tra E phủ F và F phủ E. Ta chứng minh E phủ F : Tìm bao đóng của các vế trái của các phụ thuộc hàm trong F theo E. Chúng ta không thể bỏ đi bất kỳ phụ thuộc hàm nào ra khỏi F mà vẫn có một tập phụ thuộc hàm tương đương với F Chúng ta có thể nghĩ về tập tối thiểu các phụ thuộc hàm như là một tập hợp ở dạng chuẩn không có sự dư thừa. {AC}+ = { A. {E}+ = {E. ta có {A}+ = { A. Từ đó suy ra E phủ F. {E}+ = { E. D }. ta thấy các bao đóng này chứa các vế phải tương ứng . xây dựng và quản trị CSDL đương có nghĩa là mỗi phụ thuộc hàm trong E có thể suy diễn được từ F và mỗi phụ thuộc hàm trong F có thể suy diễn được từ E. Chúng ta có thể xác định xem F có phủ E hay không bằng cách tính X+ đối với F đối với mỗi thuộc hàm X→ Y trong E và sau đó kiểm tr xem X+ này có các thuộc tính trong Y hay không.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.C.D.D}. Điều kiện 2 và 3 đảm bảo rằng không có sự dư thừa trong các phụ thuộc hoặc do có các thuộc tính dư thừa ở vế trái của phụ thuộc.C. Ví dụ : Xét hai tập phụ thuộc hàm F = {A → C. ta thấy các bao đóng này chứa các vế phải tương ứng . Một phủ tối thiểu của một tập phụ thuộc hàm F là một tập tối thiểu các Trang 68 . Tóm lại E tương đương với F. A.A. • Các tập tối thiểu các phụ thuộc hàm Một tập phụ thuộc hàm là tối thiểu nếu nó thoả mãn các điều kiện sau đây: Vế phải của các phụ thuộc hàm trong F chỉ có một thuộc tính Chúng ta không thể thay thế bất kỳ một phụ thuộc hàm X → A trong F bằng phụ thuộc hàm Y→ A. trong đó Y là tập con đúng của X mà vẫn còn là một tập phụ thuộc hàm tương đương với S. E → AH } Ta chứng minh F phủ E : Tìm bao đóng của các vế trái của các phụ thuộc hàm trong E theo F.D }.

Chuẩn hoá dữ liệu có thể được xem như một quá trính phân tích các Trang 69 .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Ta giả sử rằng mỗi một quan hệ được cho trước một tập các phụ thuộc hàm và mỗi quan hệ có một khoá chính. Nhập môn về chuẩn hoá Quá trình chuẩn hoá (do Codd đề nghị 1972) lấy một lược đồ quan hệ và thực hiện một loạt các kiểm tra để xác nhận nó có thoả mãn một dạng chuẩn nào đó hay không. Trong phần này chúng ta sẽ nghiên cứu các dạng chuẩn và quá trình chuẩn hoá các lược đồ quan hệ 1.2 sau đây: Thuật toán 4. Đặt G := F.2 (Tìm phủ tối thiểu G cho F). A 2 . Sau đó. bây giờ chúng ta sẽ sử dụng chúng như thông tin về ngữ nghĩa của các lược đồ quan hệ. X → An Với mỗi phụ thuộc hàm X → A trong G. …. Quá trình này có thể xem như là việc thiết kế quan hệ bằng phân tích. Chúng ta luôn luôn có thể tìm được ít nhất là một phủ tối thiểu G cho một tập các phụ thuộc hàm F bất kỳ theo thuật toán 4. Thường có rất nhiều các phủ tối thiểu cho một tập các phụ thuộc hàm. Tất cả các dạng chuẩn này dựa trên các phụ thuộc hàm giữa các thuộc tính của một quan hệ. CÁC DẠNG CHUẨN DỰA TRÊN KHOÁ CHÍNH Sau khi đã nghiên cứu các phụ thuộc hàm và một số tính chất của chúng.. xây dựng và quản trị CSDL phụ thuộc hàm Fmin tương đương với F. dạng chuẩn 2 và dạng chuẩn 3. An} trong G bằng n phụ thuộc hàm X → A 1 . Codd đề nghị ba dạng chuẩn gọi là dạng chuẩn 1. Quá trình này được thuạc hiện theo phương pháp trên xuống bằng việc đánh giá mỗi quan hệ với tiêu chuấn của các dạng chuẩn và tách các quan hệ nếu cần. X → A 2 . với mỗi thuộc tính B là một phần tử của X nếu ((G-(X → A) ∪ ((X – {B}) → A) là tương đương với G thì thay thế X→ A bằng (X-{B})→ A ở trong G Với mỗi phụ thuộc hàm X→ A còn lại trong G nếu (G – { X→ A }) là tương đương với G thì loại bỏ X → A ra khỏi G III. Một định nghĩa mạnh hơn cho dạng chuẩn 3 gọi là dạng chuẩn Boyce-Codd do Boyce và Codd đề nghị muộn hơn. Thay thế mỗi phụ thuộc hàm X → {A 1 . …. dạng chuẩn 4 (4NF) và dạng chuẩn 5 (5NF) được đề nghị dựa trên các phụ thuộc hàm đa trị và các phụ thuộc hàm nối. Lúc đầu.

a. một bộ giá trị hoặc một tổ hợp của cả hai như là một giả trị thuộc tính cho một bộ. Một loạt các kiểm tra dạng chuẩn có thể thực hiện trên các lược đồ quan hệ riêng rẽ sao cho cơ sở dữ liêu quan hệ có thể được chuẩn hoá đến một mức cần thiết. Các dạng chuẩn khi được xem xét độc lập với các sự kiện khác không đảm bảo một thiết kế cơ sở dữ liệu tốt. thủ tục chuẩn hoá cung cấp cho những người thiết kế cơ sở dữ liệu . . nó đảm bảo rằng từng phụ thuộc hàm sẽ được biểu hiện trong các quan hệ riêng rẽ nhận được sau khi tách. các quan hệ sau đây không thoả mãn điều kiện 1NF. Các lược đồ quan hệ không thoả mãn các kiểm tra dạng chuẩn sẽ được tách ra thành các lược đồ quan hệ nhỏ hơn thoả mãn các kiểm tra và có các tính chất mong muốn. nó đảm bảo rằng vánn đề tạo ra các bộ giả không xuất hiện đối với các lược đồ quan hệ được tạo ra sau khi tách. việc xác minh riêng biệt từng lược đồ quan hệ ở dạng chuẩn này dạng chuẩn nọ là chưa đủ. Ví dụ. Tính chất bảo toàn sự phụ thuộc. Một cơ cấu hình thức để phân tích các lược đồ quan hệ dựa trên các khoá của nó và các phụ thuộc hàm giữa các thuộc tính của nó. Chúng gồm hai tính chất sau: . Tính chất nối không mất mát (hoặc nối không phụ thêm). Dạng chuẩn của một quan hệ liên quan đến điều kiện dạng chuẩn cao nhất mà nó thoả mãn. . không phân chia được) và giá trị của mỗi thuộc tính trong một bộ phải là một giá trị đơn lấy từ miền giá trị của thuộc tính đó. 1NF không cho phép “các quan hệ bên trong quan hệ “hoặc “các quan hệ như là các thuộc tính của một bộ “. Trang 70 . Như vậy. 1NF không cho phép có một tập giá trị. Nói cách khác. xây dựng và quản trị CSDL lược đồ quan hệ cho trước dựa trên các phụ thuộc hàm và các khoá chính của chúng để đạt đến các tính chất mong muốn : (1) Cực tiểu sự dư thừa và (2) cực tiểu các phép cập nhật bất thường. Tính chất nối không mất mát là rất quan trọng. Tốt hơn là quá trình chuẩn hoá thông qua phép tách phải khằng định một vài tính chất hỗ trợ mà tất cả các lược đồ quan hệ phải có. còn tính chất bảo toàn phụ thuộc thì cũng rất mong muốn nhưng đôi khi có thể hy sinh. Nói chung. Dạng chuẩn 1 Một quan hệ được gọi là ở dạng chuẩn 1 (1NF) nếu miền giá trị của một thuộc tính chỉ chứa các giá trị nguyên tử (đơn. Nó chỉ cho phép các giá trị của các thuộc tính là nguyên tử.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Như vậy. phải đạt được bằng mọi giá.

bảng thứ hai gồm các thuộc tính MãsốDV và Địađiểm. TênDV. Trang 71 .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. TênNHÂNVIÊN. bảng thứ nhất gồm các thuộc tính MãsốDA. * Với bảng NHÂNVIÊN_dựán ta chia làm hai bảng. Bắc ninh Hải phòng Nghệ an. Để đạt đến dạng chuẩn 1 đối với các quan hệ ở trên chúng ta dùng phương pháp sau : Loại bỏ các thuộc tính vi phạm dạng chuẩn 1 và đặt chúng vào một bảng riêng cùng với khoá chính của thuộc quan hệ ban đầu. “quan hệ trong quan hệ “. Ví dụ:* Với bảng ĐƠNVỊ. Bảng NHÂNVIÊN_dựán chứa các quan hệ lồng nhau. ta chia làm hai bảng: Bảng thứ nhất gồm các thuộc tính MãsốDV. Hà tĩnh 2) NHÂNVIÊN_dựán (a) MãsốDA DA1 TênDA Dự án 1 Dự án 2 TênNHÂNVIÊN Sốgiờ AA BB DA2 BB CC DD DA3 Dự án 3 AA 15 20 10 12 28 20 Bảng ĐƠNVỊ chứa một thuộc tính đa trị. Ngườiquản lý . Khoá chính của bảng này là một tổ hợp của Khoá chính của quan hệ ban đầu và thuộc tính đa trị hoặc khoá bộ phận của nhóm lặp. TênDA . Bảng thứ hai gồm các thuộc tính MãsốDA. Số giờ. xây dựng và quản trị CSDL 1) ĐƠNVỊ (1) MãsốDV DV1 DV2 DV3 Tên DV Đơn vị 1 Đơn vị 2 Đơn vị 3 Ngườiquảnlý AA BB CC Địa điểm Hà nội.

HọtênNV. Một lược đồ quan hệ R là ở dạng chuẩn 2 nếu mỗi thuộc tính không khoá A trong R là phụ thuộc hàm đầy đủ vào khoá chính của R. khoá chính của bảng là bộ phận khoá mà chúng phụ thuộc vào. MãsốDA. với thuộc tính A bất kỳ. Một phụ thuộc hàm X → Y là phụ thuộc bộ phận nếu có thể bỏ một thuộc tính A∈ X. A∈ X. Nếu khoá chính chứa một thuộc tính đơn thì không cần phải kiểm tra. xét lược đồ quan hệ NHÂNVIÊN_Dựán (MãsốNV. điều đó có nghĩa là. HọtênNV) N_D3(MãsốNV. xét lược đồ quan hệ NHÂNVIÊN_Dựán (MãsốNV. Dạng chuẩn 2 Dạng chuẩn 2 (2NF) dựa trên khái niệm phụ thuộc hàm đầy đủ. bởi vì có phụ thuộc hàm MãsốNV → HọtênNV Việc kiểm trađối với 2NF bao gồm việc kiểm tra đối với các phụ thuộc hàm có các thuộc tính ở vế trái của nó là một bộ phận của khoá chính. (X-{A}) không xác định Y. HọtênNV. áp dụng phương pháp chuẩn hoá trên. MãsốDA. TênDA. Một phụ thuộc hàm X → Y là một phụ thuộc hàm đầy đủ nếu loại bỏ bất kỳ thuộc tính A nào ra khỏi X thì phụ thuộc hàm không còn đúng nữa .ĐịađiểmDA) với các phụ thuộc hàm MãsốNV. xây dựng và quản trị CSDL b. MãsốDA. TênDA. MãsốDA → HọtênNV là phụ thuộc hàm bộ phận. Ví dụ.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. MãsốDA → Sốgiờ MãsốNV →HọtênNV MãsốDA→TênDA. như vậy nó không thoả mãn điều kiên 2NF. Ví dụ. Sốgiờ.ĐịađiểmDA Ta thấy ở đây có những thuộc tính không khoá phụ thuộc vào một bộ phận của khoá chính. Sốgiờ) Trang 72 . Nếu một quan hệ không thoả mãn điều kiện 2NF ta có thể chuẩn hoá nó để có các quan hệ 2NF như sau : Loại bỏ các thuộc tính không khoá phụ thuộc vào một bộ phận khoá chính và tách thành ra một bảng riêng. điều đó có nghĩa là với A∈ X. TênDA. MãsốDA → Sốgiờ là phụ thuộc hàm đầy đủ Phụ thuộc hàm MãsốNV.ĐịađiểmDA) Phụ thuộc hàm MãsốNV. Sốgiờ.ĐịađiểmDA) N_D2(MãsốNV. lược đồ được tách thành các lược đồ như sau: N_D1(MãsốDA. ra khỏi X phụ thuộc hàm vẫn đúng . (X-{A}) → Y.

Dạng chuẩn 3 Dạng chuẩn 3 (3NF) dựa trên khái niệm phụ thuộcbắc cầu. Trang 73 .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. xây dựng và quản trị CSDL c.Một phụ thuộc hàm X → Y trong một lược đồ quan hệ R là một phụ thuộc hàm bắc cầu nếu có một tập hợp thuộc tính Z không phải là một khoá dự tuyển cũng không phải là một tập con của một khoá nào và cả hai X → Z và Z → Y đều đúng. Theo định nghĩa nguyên thuỷ của Codd. một lược đồ quan hệ R là ở 3NF nếu nó thoả mãn 2NF và không có thuộc tính không khoá nào của R là phụ thuộc bắc cầu vào khoá chính. Nếu một lược đồ quan hệ không thoả mãn điều kiện 3NF. ta có thể chuẩn hoá nó để có được các lược đồ 3NF như sau : Loại bỏ các thuộc tính phụ thuộc bắc cầu ra khỏi quan hệ và tách chúng thành một quan hệ riêng có khoá chính là thuộc tính bắc cầu.

được gọi là ngôn ngữ vấn tin có cấu trúc SQL (Structured Query Langague). Đa số các phần mềm quan hệ hỗ trợ SQL. các menu đổ xuống hoặc bất cứ một tiện ích cũng như các công cụ màn hình nào khác thường được mong muốn bởi người dùng đầu cuối. SQL không tạo ra các menu. SQL là ngôn ngữ phi thủ tục: người dùng chỉ mô tả cái phải làm. người dùng và các lập trình viên không cần phải biết khuôn dạng lưu trữ vật lý cũng như hoạt động phức tạp được tổ chức khi lệnh SQL thực hiện. các khuôn dạng báo cáo cụ thể. và sửa dữ liệu). không phải mô tả cách thực hiện. ngôn ngữ CSDL phải cho phép chúng ta tạo ra các cấu trúc CSDL và bảng. I. GIỚI THIỆU SQL Về mặt lý thuyết. cho dù SQL hữu dụng và đầy năng lực. Sử dụng lệnh SQL. các tiện ích bổ sung sẽ cho phép bạn tạo ra các giao diện thân thiện và trình bày các kết quả lấy từ dữ liệu hấp dẫn hơn. điều đó không có nghĩa là nó hoạt động độc lập trong lĩnh vực ứng dụng. đồng thời nó phải cho phép chúng ta thực hiện các câu vấn tin phức tạp được thiết kế để biến đổi dữ liệu Trang 74 . Nhập liệu có thể được nhưng không tiện lợi. Ngược lại. các giao diện đó được tạo ra bởi các lập trình viên ngôn ngữ thế hệ ba. Do từ khoá SQL tương đối ít nên SQL tương đối dễ học. hoặc bởi hàng loạt các tiện ích bổ sung đặc biệt cho phép khai thác triệt để năng lực của SQL. Tính đơn giản của nó được hoàn thiện là do các hoạt động xuất hiện trong quá trình sử dụng được tổ chức ở hậu trường CSDL. một lệnh SQL tạo ra một tập phức tạp các cấu trúc CSDL.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. nó phải cho phép chúng ta thực hiện các công việc quản lý dữ liệu cơ bản (bổ sung. Chẳng hạn. đồng thời nhiều nhà cung cấp phần mềm đã phát triển thêm cho tập lệnh SQL cơ bản. Một lệnh đơn giản khác lại tạo ra các cấu trúc bảng phức tạp cần cho lưu trữ và xử lý thành công dữ liệu. xây dựng và quản trị CSDL CHƯƠNG 5: GIỚI THIỆU NGÔN NGỮ VẤN TIN CÓ CẤU TRÚC SQL Trong chương này bạn sẽ tìm hiểu các khái niệm cơ bản về ngôn ngữ chuẩn của mô hình quan hệ. Tuy nhiên. sửa và bổ sung dữ liệu cũng vậy. Bạn sẽ thấy rằng SQL làm cho các ứng dụng CSDL của bạn mạnh lên. Ngôn ngữ này gồm khoảng ba mươi lệnh và được thiết kế để làm việc với bất cứ ứng dụng nào cần xử lý dữ liệu được lưu trong CSDL quan hệ. xoá.

nghĩa là. Hơn nữa. ∗ Đừng vội thất vọng vì sự tồn tại của một số phiên bản SQL đặc thù. Addison-Wesley. Codd đã có một lịch sử lâu dài và hiệu quả trong việc phát triển mô hình của Codd thành chuẩn CSDL hiện nay. Tuy nhiên. dBASE IV. DB2. nó phải dễ chuyển đổi. năng lực của SQL đáp ứng được cả ba loại: Định nghĩa dữ liệu tạo ra cấu trúc CSDL và cấu trúc bảng của nó. Thứ hai. Cuối cùng. xây dựng và quản trị CSDL thoo thành thông tin hữu dụng. Không hẩn là chuẩn ANSI đã chặt chẽ đến mức tất cả các sản phẩm SQL thương mại không thể tuân theo nó. một số nhà cung cấp đã tiếp nhận ngay chuẩn ANSI SQL 2. được cài đặt năm 1993. F. Hướng dẫn chuẩn SQL. từ đó cho phép chúng ta kết luận rằng có một chuẩn khả dùng. ∗ Trang 75 . hiếm khi chuyển một ứng dụng từ một RDBMS này sang một RDBMS khác mà không phải tạo ra một vài thay đổi. Vấn tin dữ liệu dùng một tập các lệnh khảo sát nội dung CSDL và cho phép người dùng chuyển dữ liệu thô thành thông tin hữu ích. Tuy nhiên chúng ta cũng sẽ trình bày một số cải tiến SQL. Chúng ta sẽ dùng chuẩn này như một nền tảng cho trình bày của chúng ta . đặc biệt là khi các cải tiến đó cùng được sử dụng rộng rãi giữa nhiều nhà cung cấp RDBMS. Hơn nữa. nó phải tuân theo một chuẩn nào đó để chúng ta không phải học lại quá nhiều khi chúng ta chuyển từ một RDBMS này sang RDBMS khác. SQL tương đối dễ học: nó thực các chức năng CSDL cần thiết bởi một tập khoảng ba mươi lệnh cơ bản. OS/2 DataBase Các mô tả SQL chuẩn được mô tả chi tiết trong C. bạn không phải bận tâm về cách nó làm như thế nào. Trước hết. Cho dù bạn sử dụng XDB. Một chuẩn SQL chính thức và đầy đủ hơn đang được tiếp tục hoàn thiện khi chúng tôi viết quyển sách này: các chuẩn SQL ANSI hoàn chỉnh hơn nhiều sẽ được công bố vào năm 1995. bạn chỉ phải thay đổi một chút để điều chỉnh các yêu cầu phần mềm của bạn. Do đó. J. J. R:BASE trên DOS. Trên thực tế. các phiên bản SQL khác nhau dùng chung cùng một tập lệnh và cấu trúc cơ bản. Date hoàn toàn đủ tư cách để viết về các chuẩn. ORACLE. đồng thời cấu trúc lệnh và cú pháp của nó phải dễ học. Ông và E. Do sự khác biệt giữa các phiên bản SQL đặc thù không lớn lắm. xoá và cập nhật dữ liệu trong bảng CSDL. Quản lý dữ liệu dùng một tập các lệnh nhập. C. Date.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. nó phải thực hiện các chức năng cơ bản như vậy với một nỗ lực tối thiểu của người dùng. Cuối cùng. 1987. Viện Tiêu chuẩn Quốc gia Mỹ ANSI (American National Standards Institute) quy định chặt chẽ một chuẩn SQL. sửa. SQL là ngôn ngữ phi thủ tục: Bạn chỉ phải cần yêu cầu cái phải làm. SQL đáp ứng tốt các yêu cầu ngôn ngữ CSDL lý tưởng này.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

Manager của IBM, hoặc bất cứ một phần mềm RDBMS được thiết lập đúng đắn nào khác, kinh nghiệm của chúng tôi là chỉ cần vài giờ với một quyến sổ tay phần mềm là đủ để bạn tăng tốc độ SQL nếu bạn biết các nội dung được trình bày trong chương này. Tóm lại, kiến thức bạn nhận được trong chương này là khả dùng. Có một số lý do chính đáng để nghiên cứu những vấn đề cơ bản của SQL: Nỗ lực chuẩn hoá ANSI đã đưa đến một chuẩn vấn tin thực tế cho CSDL quan hệ. Trên thực tế, nhiều chuyên gia CSDL quan hệ đã thiên về khẳng định rằng “Không có SQL không phải là quan hệ”. SQL đã trở thành cơ sở cho những nỗ lực hợp nhất DBMS hiện nay và trong tương lai gần, cho phép chúng ta liên kết các CSDL quan hệ, mạng và phân cấp. SQL đã trở thành chất xúc tác trong quá trình phát triển CSDL phân tán và các kiến trúc CSDL khách/chủ. Chúng ta sẽ khảo sát quá trình phát triển này trong chương 10. II. CÁC LỆNH ĐỊNH NGHĨA DỮ LIỆU Các lệnh định nghĩa dữ liệu được dùng để tạo cấu trúc CSDL và các bảng trong CSDL. Trước hết là một tin không vui: Tạo cấu trúc CSDL chính là một đặc điểm giúp phân biệt rõ các RDBMS với nhau. Tin vui là tương đối dễ dàng tạo ra các cấu trúc CSDL rất phức tạp với bất kì RDBMS nào bạn dùng. 1. Tạo cấu trúc CSDL Nếu RDBMS của bạn sử dụng cài đặt SQL chuẩn ANSI, tạo cấu trúc CSDL lôgic (lược đồ) được hoàn thành bởi dòng lệnh
CREATE SCHEMA AUTHORIZATION <người tạo>

Do đó nếu người tạo là JONES, dùng lệnh
CREATE SCHEMA AUTHORIZATION JONES

Đa số các RDBMS, bao gồm DB2, XDB, và dBASE IV, sử dụng phiên bản
CREATE DATABASE <tên CSDL>

hơi khác so với phiên bản CREATE SCHEMA được thừa nhận trong SQL chuẩn ANSI nguyên gốc. Bạn không phải bận tâm khi thấy rằng, trừ quá trình tạo CSDL, phần lớn các thủ tục và lệnh SQL có xu hướng khác một chút so với trong SQL chuẩn. Tuy nhiên, đôi khi bạn có thể gặp một số sai khác cú pháp nhỏ, và chúng tôi
Trang 76

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

sẽ chỉ cho bạn khuôn dạng của chúng bằng cách sử dụng các hộp chú giải như dưới đây: 2. Tạo cấu trúc bảng Sau khi đã tạo ra cấu trúc CSDL, chúng ta có thể tạo cấu trúc bảng cho các bảng thuộc CSDL. Để trình bày cách thực hiện chúng ta tạo cấu trúc cho hai bảng với tên INVENTRY và VENDOR tương ứng.
(1) Bảng 3.1 Nội dung của bảng INVENTRY P_CODE 13-Q2/P2 ZW-23116 2QQ23DRT 54778-2T 23114-AA 89-WRE-Q 2232/QWE 1546-QQ2 WWE/D324 2232/QTY P_DESCRIPT 7.25in, power saw blade 2.5in, wood screw, 100 PVC pipe, 3.5in, 8ft Rat-tail file, 1/8in fine Sledge hammer, 12lb Houselite chain saw, 16in B&D jigsaw, 8in, blade Hardware cloth,1/4in,50ft Claw hammer B&D jigsaw, 12in, blade STOCK_DATE ON_HAND MIN_QUANT PRICE 08/12/91 06/25/91 07/02/91 12/03/90 02/15/91 08/11/91 11/26/90 08/14/91 08/12/91 11/26/90 32 237 188 43 8 11 6 15 23 8 15 100 75 20 5 5 3 5 10 3 14.99 8.45 5.87 4.99 14.40 256.99 99.87 39.95 5.95 109.92 V_CODE 21344 21231 21344 21344 21231 24288 24288 23119 21225 24288

Bảng INVENTRY, chỉ ra trên bảng 3.1, sẽ được cấu trúc để chứa bảy thuộc tính, với tên tương ứng là P_CODE, P_DESCRIPT, STOCK_DATE, ON_HAND, MIN_QUANT, PRICE, và V_CODE. Lưu ý các đặc điểm thuộc tính của bảng INVENTRY. Chẳng hạn, P_CODE là một xâu hỗn hợp các kí tự chữ và số, đồng thời chiếm tối đa tám vị trí. Vì P_CODE chứa các kí tự nên nó phải thuộc kiểu trường kí tự. Tương tự, thuộc tính P_DESCRIPT là trường kí tự có thể gồm tới hai nhăm kí tự. Mặt khác, thuộc tính STOCK_DATE chứa dữ liệu ngày, trong khi các thuộc tính ON_HAND, MIN_QUANT và PRICE chứa dữ liệu số. Cuối cùng, chúng ta phải xem xét V_CODE: Nếu chúng ta định cho phép máy tính tạo ra các mã nhà cung cấp mới bằng cách cộng 1 vào mã nhà cung cấp đã ghi lớn nhất, chúng ta phải xem V_CODE là thuộc tính số. (Bạn không thể thực hiện các thủ tục toán trên dữ liệu kí tự!)
Trang 77

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

Nếu chúng ta không dự định thực hiện các thủ tục toán trên V_CODE, chúng ta có thể gán cho nó thuộc kiểu kí tự ngay cả khi chúng gồm toàn các kí tự số. Bạn sẽ thấy rằng dữ liệu kí tự cho phép vấn tin nhanh hơn. Do đó, nếu không cần thực hiện các thủ tục toán (cộng, trừ, nhân, chia...) trên thuộc tính, nên lưu nó theo kiểu kí tự. Chúng ta sẽ sử dụng lựa chọn (1) để trình bày các thủ tục SQL trong chương này. Phần lớn các cài đặt SQL hiện nay cho phép phân loại các đặc điểm thuộc tính như bảng 3.2; một số còn gồm các kiểu dữ liệu bổ sung như kiểu tiền, kiểu kí tự với độ dài thay đổi, kiểu kí tự với độ dài cố định và một số kiểu khác. Bảng 3.2 Phân loại thuộc tính Kiểu smallint Mô tả Giá trị nguyên nhỏ. Giá trị smallint không chứa dấu chấm thập phân và chứa sáu (hoặc ít hơn) chữ số. Số smallint âm dành một vị trí cho dấu. Do đó, giá trị smallint thay đổi từ –99999 đến 999999. Giá trị nguyên. Giá trị integer chứa tới mười một chữ số. Như vậy giá trị integer thay đổi từ –9999999999 đến 99999999999. Giá trị thập phân. Giá trị decimal có thể chứa các vị trí thập phân. Thuộc tính thuộc kiểu decimal cần mô tả tổng số chữ số (gồm cả dấu chấm thập phân) và số dành cho các vị trí thập phân. Chẳng hạn, mô tả decimal(6, 2) đưa ra khoảng giá trị có thể có –99.99 tới 999.99 Số thập phân có thể chứa tới hai mưới chữ số, gồm dấu chấm thập phân và các vị trí thập phân. Như vậy, các giá trị như 34256450967.85453567 là phù hợp. Số thập phân dấu chấm động có thể chứa tới mười chín chữ số. Dạng ngày Julian cho phép dùng các phép toán số học ngày. Kiểu (xâu) kí tự cho phép dùng dữ liệu xâu trong khoảng từ 1 đến 254 kí tự. Có thể nhận các mục dữ liệu true (T) hoặc false (F)

integer decimal

numeric

float date char logical

Trang 78

Chẳng hạn. ngày sáu mươi kể từ ngày 06/15/92 có thể được tính toán bằng cách 06/15/92 + 60 hoặc ngày 90 kể từ ngày hiện hành trong hệ thống máy tính SYSDATE + 90 Số học ngày hoàn toàn tiện lợi trong môi trường kinh doanh. Tuy nhiên. Đúng như tên của nó. bây giờ chúng ta có thể tạo ra cấu trúc bảng.3. DATE. DECIMAL(7. và tất cả RDBMS hiện nay đều hỗ trợ kiểu ngày dựa vào biến đổi toán học. phép trừ 12/01/92 – 08/12/90 hoàn toàn hợp lệ trong môi trường ngày Julian và đưa ra số ngày giữa 12/01/92 và 08/12/90. chúng ta đặt mỗi thuộc tính trên một hàng riêng biệt: CREATE TABLE INVENTRY ( P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE CHAR(8) NOT NULL. SMALLINT NOT NULL. tự động chuyển dạng ngày chuẩn như 11/24/92 thành dạng ngày Julian để cho phép chúng ta thực hiện tính toán số học Julian. xây dựng và quản trị CSDL SQL chuẩn không hỗ trợ kiểu dữ liệu lôgic (logical) và ngày (date). đặc biệt khi chúng ta muốn tính lãi trên tất cả các hoá đơn còn nợ cũ trong khoảng thời gian nhiều hơn ba mươi ngày kể từ ngày ghi trong hoá đơn.1. nhiều RDBMS hỗ trợ dữ liệu lôgic. số học ngày là quá trình cho phép chúng ta cộng hoặc trừ ngày.3.2 cho nội dung bảng INVENTRY trong bảng 3.3 Các đặc điểm thuộc tính bảng INVENTRY Cột (thuộc tính) Đặc điểm P_CODE P_DESCRIPT char(8) char(25) Yêu cầu đặc biệt Chú thích Not null Not null Tối đa 8 kí tự Tối đa 25 kí tự Ngày Julian Trang 79 STOCK_DATE date . chúng ta có thể định kiểu các thuộc tính như trong bảng 3. áp dụng các kiểu trong bảng 3. hoặc khi chúng ta muốn tính số ngày trung bình một sản phẩm nằm trong kho. Tương tự. Bảng 3. Dùng kiểu thuộc tính trong bảng 3.2). SMALLINT. Để có một định nghĩa bảng dễ đọc.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. SMALLINT). CHAR(25) NOT NULL.

và bạn sẽ phải chấp nhận thiếu tính toàn vẹn thực thể hoặc phải viết chương trình để duy trì toàn vẹn thực thể. Supplies. xây dựng và quản trị CSDL Giá trị nguyên nằm trong khoảng 0 – 1000 Giá trị nguyên nằm trong khoảng 0 – 1000 Đơn vị USD. (Nhưng nhớ rằng. Inc Fielding Harding Super Smith Wholesale Cavazos Q&D Building Smithson Supplies Smith Charlie’s Wholesale Rather’s Building.) Bảng 3. RDBMS của bạn có thể yêu cầu bạn bỏ đi dấu chấm phảy. Inc.2) smallint Nhớ rằng chúng ta đã dùng mô tả NOT NULL để khẳng định rằng khóa chính của bảng không thể nhận “giá trị” null. C_FNAME C_I V_PHONE Anne Stanley Maria Ronald Sally K. G. Dãy lệnh chấm dứt với dấu chấm phảy trong ví dụ này. theo đó đảm bảo tính toàn vẹn thực thể.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Nếu mô tả NOT NULL không được dùng. D. 666-2331281 800-2139999 800-3339011 212-6670090 800-2341200 Trang 80 . W. bạn lưu ý các đặc điểm sau đây: Các mô tả thuộc tính được đặt trong cặp dấu ngoặc tròn. giá trị nằm trong khoảng 1-1000 ON_HAND smallint Not null MIN_QUANT smallint PRICE V_CODE decimal(7. giá trị trong khoảng 0.00 9999. về sau bảng sẽ chấp nhận mục dữ liệu null. Các mô tả thuộc tính tách nhau bởi dấu phảy.I.4 Nội dung của bảng VENDOR V_CODE V_COMPANY C_LNAME 21231 24288 21344 23119 21225 J.99 Mã nhà cung cấp. Khi khảo sát lệnh bảng được dùng để tạo cấu trúc bảng INVENTRY. K.

toàn vẹn thực thể được thực thi tự động nếu khóa chính được mô tả trong dãy lệnh CREATE TABLE. May mắn là phần lớn các cài đặt SQL đều hỗ trợ cả hai quy tắc toàn vẹn này. V_ADDRESS CHAR(30). Trang 81 . V_CITY CHAR(20). 3. Các ràng buộc toàn vẹn SQL Trong chương 2 bạn đã thấy rằng sự tôn trọng các quy tắc toàn vẹn tham chiếu và toàn vẹn thực thể là quan trọng trong môi trường CSDL quan hệ. V_ZIP CHAR(5)). C_FNAME CHAR(10). Suite 23B 125-C contract Circle 1117 Industrial Plaza V_CITY Indianapolis Rockford Dallas Murfreesboro Champaign V_STATE V_ZIP IN IL TX TN IL 21456 27122 31126 37129 22134 Bảng thứ hai của CSDL. C_FNAME CHAR(10). C_LNAME CHAR(12). Cấu trúc bảng VENDOR được tạo ra bởi lệnh sau: CREATE TABLE VENDOR ( V_CODE SMALLINT NOT NULL. chúng ta có thể tạo cấu trúc bảng VENDOR và chuẩn bị thực thi quy tắc toàn vẹn thực thể bởi CREATE TABLE VENDOR ( V_CODE SMALLINT NOT NULL. W 855 Temco Plaza 1452 West End. Do đó. V_PHONE CHAR(12). V_COMPANY CHAR(25). V_PHONE CHAR(12).4. Chẳng hạn. V_COMPANY CHAR(25). V_ADDRESS CHAR(30). VENDOR. V_CITY CHAR(20). C_I CHAR(2). chứa dữ liệu như trong bảng 3.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. C_I CHAR(2). C_LNAME CHAR(12). V_STATE CHAR(2). xây dựng và quản trị CSDL V_ADDRESS 1233 Industrial Blvd.

V_CODE SMALLINT PRIMARY KEY(P_CODE).2). III. Chuẩn bị thực thi quy tắc toàn vẹn tham chiếu được thiết lập bởi mô tả khoá ngoại trong lệnh CREATE TABLE. Thường dùng để tạo mục dữ liệu đầu tiên cho cấu trúc bảng mới hoặc bổ sung dữ liệu cho bảng đang chứa dữ liệu. ON_HAND SMALLINT. Chúng ta sẽ thấy trong chương 4 mệnh đề khoá ngoại và khóa chính này quan trọng như thế nào trong việc cài đặt mô hình E-R. Khôi phục lại nội dung CSDL về trạng thái ban đầu (từ sau COMMIT cuối cùng được dùng). Tuy nhiên. V_ZIP CHAR(5) PRIMARY KEY(V_CODE)). xây dựng và quản trị CSDL V_STATE CHAR(2). STOCK_DATE DATE. P_DESCRIPT CHAR(25). chúng ta có thực hiện nhiệm vụ này bằng cách tạo cấu trúc bảng INVENTRY như sau: CREATE TABLE INVENTRY ( P_CODE CHAR(8) NOT NULL. Cho phép bạn xoá một hoặc nhiều hàng dữ liệu. Thực tế. Chẳng hạn. PRICE DECIMAL(7.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. SELECT COMMIT UPDATE DELETE ROLLBACK Trang 82 . SELECT được giới thiệu trong phần này vì nó cho phép bạn kiểm tra kết quả của nỗ lực quản lý dữ liệu. SELECT là lệnh vấn tin chứ không phải lệnh quản lý dữ liệu. MIN_QUANT SMALLINT. QUẢN LÝ DỮ LIỆU CƠ BẢN Trong phần này bạn sẽ học sử dụng các lệnh SQL sau đây: (b) Giải thích INSERT Cho phép bạn chèn dữ liệu vào bảng. Liệt kê nội dung bảng. FOREIGN KEY(V_CODE) REFERENCES VENDOR). mỗi hàng một lần. Cho phép bạn lưu kết quả làm việc lên đĩa Cho phép bạn tạo sự thay đổi dữ liệu.

Giá trị số không cần bao bởi dấu nháy. ‘06/25/91’. Trang 83 STOCK_DATE. Hoặc nếu bạn muốn kiểm tra theo tất cả thuộc tính.99. ON_HAND. (Lưu ý rằng kí tự đầu tiên sau VALUES là dấu mở ngoặc và kí tự cuối cùng trong dãy lệnh là dấu đóng ngoặc) Giá trị kiểu ngày và kiểu kí tự phải được đưa vào giữa cặp dấu nháy (‘).BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. nhập dữ liệu hơi rắc rối trong môi trường SQL. Kiểm tra nội dung bảng Để kiểm tra nội dung bảng tại mỗi thời điểm. và nhấn lại phím ENTER lần nữa. power saw blade 08/12/91 ZW-23116 2. xây dựng và quản trị CSDL 2. Các mục dữ liệu tách nhau bởi dấu phảy.25in. 15.32. sau đó gõ INSERT INTO INVENTRY VALUES(‘ZW-23116’. một trong hai dãy lệnh SELECT * FROM INVENTRY hoặc SELECT P_CODE. power saw blade’.45 21231 Để nhập dữ liệu này. kèm theo sau là danh sách các thuộc tính cần kiểm tra. 100. Rõ ràng. 21231). wood screw. Nhớ rằng các ứng dụng người dùng đầu cuối được tạo ra tốt nhất với các tiện ích có màn hình nhập liệu hấp dẫn (và dễ dùng!).5in. P_DESSCRIPT.’ 7. bạn gõ INSERT INTO INVENTRY VALUES(‘13-Q2/P2’. 21344).1: 13-Q2/P2 25in. Chẳng hạn. 8. dùng lệnh SELECT.’ 2. dùng * để chỉ ra “tất cả thuộc tính”.45. (Kí hiệu thay thế cho các kí tự khác hoặc các lạnh được gọi là kí tự thay thế). MIN_QUANT. wood screw. 14. 100’. ‘08/12/91’.99 21344 100 8. và nhấn phím ENTER. 3. Chúng ta sẽ trình bày INSERT với hai hàng dữ liệu đầu tiên từ bảng INVENTRY được chỉ ra trên bảng 3. Nhận xét rằng Nội dung hàng được đưa vào giữa cặp dấu ngoặc.5in.237. Nhập dữ liệu SQL yêu cầu dùng lệnh INSERT để nhập dữ liệu vào bảng. 100 06/25/91 32 237 15 14. .

V_CODE FROM INVENTRY.45 21344 21231 Mặc dù các lệnh SQL có thể được đưa vào trên một dòng duy nhất. Vì vậy. sẽ là hữu dụng nếu lưu cất hai bản ghi vừa được nhập vào bảng INVENTRY bằng lệnh COMMIT INVENTRY. Vì vậy. Lưu nội dung bảng Mọi thay đổi được tạo ra cho nội dung bảng (như các giá trị được chèn vào) không được lưu vật lý lên đĩa cho đến khi lệnh COMMIT <tên bảng> được dùng. 100 32 237 15 100 14. PRICE.25in. bạn đóng CSDL hoặc bạn thoát khỏi SQL. nội dung bảng cũ sẽ được giữ lại. Do đó. xây dựng và quản trị CSDL PRICE. Lệnh COMMIT thường dùng để lưu các kết quả bổ sung.99 8. wood 23116 screw. power 08/12/91 saw blade 06/25/91 ZW2. Khi bạn đã lưu cấu trúc CSDL và bảng với COMMIT. dãy lệnh được xem là rõ ràng dễ đọc nhất (cấu trúc tốt nhất) khi các thành phần của lệnh SQL được viết trên các dòng tách biệt. STOCK_DATE. bạn có thể thoát khỏi phần mềm. nếu mất điện hoặc một ngắt khác nào đó đột ngột xuất hiện trước khi bạn thực hiện lệnh COMMIT với bảng.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. SELECT ON_HAND. 4. thay đổi và xoá được tạo ra cho nội dung bảng. chúng ta sẽ viết lại các lệnh nêu trên như sau: SELECT * FROM INVENTRY. MIN_QUANT. V_CODE FROM INVENTRY đều tạo ra kết quả sau đây: P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE Lưu ý: Một số cài đặt SQL (chẳng hạn ắ ể 13-Q2/P2 7. Trang 84 . P_DESSCRIPT.5in. hoặc P_CODE.

. bạn sẽ học cách sửa lỗi trong phần sau. chỉ có hai hàng đầu tiên được lưu vào trong bảng INVENTRY....BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.. 75.. . 5. dùng lệnh Chúng tôi không muốn để lại một ấn tượng là vai trò chính của lệnh COMMIT là để lưu các thay đổi. sau đó thoat khỏi dBASE.. (Đừng bận tâm về việc gây ra lỗi. mục đích cơ bản của lệnh COMMIT và ROLLBACK (xem phần 3. .3.87. 3.. 5. 8ft’. (Chúng ta sẽ khảo sát quản lý giao dịch trong chương 9). mỗi lần một hàng.7) là bảo đảm toàn vẹn cập nhật CSDL trong quản lý giao dịch. 188. ‘07/02/91’. Trên thực tế.. lệnh SELECT FROM INVENTRY sẽ chỉ ra nội dung bảng kết quả: * Trang 85 . hàng thứ ba sẽ được bổ sung như sau INSERT INTO INVENTRY VALUES(‘2QQ23DRT’.1: Vì SQL không được tích hợp vào phần mềm dBASE. 21344). bạn phải thoát khỏi SQL trước. Chẳng hạn.. Cứ tiếp tục như vậy để đưa vào từng hàng còn lại. nếu bạn dùng SQL của dBASE IV.) mà chúng ta đã dùng để đưa vào hai hàng trên.5in. . Bổ sung dữ liệu cho bảng Cho đến giờ. Chẳng hạn. xây dựng và quản trị CSDL Lưu ý người dùng dBASE IV 1. Khi bạn đã hoàn thành.’ PVC pipe.. Tám hàng còn lại có thể được bổ sung bằng cùng một dãy lệnh INSERT INTO INVENTRY VALUES(.) Hãy đảm bảo là lưu nội dung bảng bằng lệnh COMMIT khi tất cả các hàng đã được đưa vào.

45 5. blade 32 237 188 43 8 11 6 15 23 8 MIN_QUANT PRICE V_CODE 15 100 75 20 5 5 3 5 10 3 14. PRICE = 8. 12in. blade 24 2232/QT Hardware cloth.1/4in. Kiểm tra lại kết quả sửa chữa bằng cách liệt kê bảng với lệnh SELECT FROM INVENTRY. tách các phép sửa chữa bởi dấu phảy: UPDATE INVENTRY SET STOCK_DATE = ‘05/26/91’. WWE/D3 B&D jigsaw. Sửa chữa Dùng lệnh UPDATE để sửa các mục dữ liệu.5in. MIN_QUANT = 75 WHERE P_CODE = ‘ZW-23116’.50ft Y Claw hammer B&D jigsaw. Nếu nhiều hơn một thuộc tính cần được sửa trên một hàng.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Chẳng hạn. 8in.5in.99 99.1/8in fine 08/14/91 Sledge Q 08/12/91 2232/QW hammer. 11/26/90 23114-AA Rat-tail 89-WRE.87 4.95 109.95 5.54. 12lb 11/26/90 Houselite chain E 16in 1546-QQ2 saw. UPDATE INVENTRY SET STOCK_DATE = ‘05/26/91’ WHERE P_CODE = ‘ZW-23116’.40 256.92 21344 21231 21344 21344 21231 24288 24288 23119 21225 24288 6.87 39. file.99 14.99 8. dùng khóa chính (ZW-23116) để định vị đúng hàng thứ hai.25in. * Trang 86 . xây dựng và quản trị CSDL P_CODE P_DESCRIPT STOCK_DATE ON_HAND 13-Q2/P2 7. PVC pipe. power 08/12/91 saw blade 06/25/91 ZW2. wood 07/02/91 23116 100 12/03/90 2QQ23D screw. 02/15/91 RT 8ft 08/11/91 54778-2T 3. nếu bạn muốn thay đổi giá trị trường STOCK_DATE của hàng hai thành 05/26/91.

sẽ xoá ba hàng. Chẳng hạn. dùng lệnh DELETE FROM INVENTRY WHERE P_CODE = ‘1546-QQ2’. * để liệt kê tất cả các hàng gồm tất cả các cột trong bảng đã mô tả. kết hợp với các hạn chế tìm kiếm thích hợp. Khôi phục nội dung bảng Nếu bạn chưa dùng lệnh COMMIT để làm cho các thay đổi trong nội dung bảng cố định lại. Lệnh ROLLBACK không yêu cầu bạn mô tả tên bảng. Trong phần này bạn sẽ biết cách điều chỉnh phù hợp lệnh SELECT bằng cách bổ sung các hạn chế cho yêu cầu tìm kiếm. Vì vậy. nếu bạn muốn xoá hàng tám (giá trị khoá chính P_CODE = ‘1546-QQ2’ khỏi bảng INVENTRY. VẤN TIN Mọi câu vấn tin đều dựa trên lệnh SELECT. xây dựng và quản trị CSDL Lưu ý: Dùng ROLLBACK để phục hồi tình 7. Lưu ý rằng giá trị khóa chính cho phép SQL định vị chính xác bản ghi cần xoá. Thao tác xoá không phụ thuộc vào khóa chính: thuộc tính bất kỳ có thể được dùng.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. 8. DELETE FROM INVENTRY WHERE MIN_QUANT = 5. SQL xem như CSDL hiện thời trong bộ phải được phục hồi. Chúng ta sẽ khảo sát chi tiết hơn cách dùng cả hai lệnh COMMIT và ROLLBACK khi thảo luận về quản lý giao dịch trong chương 9. Xoá hàng Dễ dàng xoá một hàng. SELECT FROM INVENTRY. bạn chỉ cần gõ ROLLBACK và nhấn phím ENTER. Trang 87 . bạn có thể khôi phục lại CSDL về trạng thái trước đó của nó với lệnh ROLLBACK. IV. Chẳng hạn. Với cách đó SELECT. là một công cụ đầy năng lực sẽ cho phép bạn chuyển đổi dữ liệu thành thông tin. để kiểm tra công việc của mình ở phần trước bạn đã dùng câu vấn tin dạng đơn giản nhất. Trên thực tế.

99 V_CODE 21344 21344 21344 7.40 256.50ft 08/14/91 Claw hammer 08/12/91 B&D jigsaw.99 99. wood screw. 12lb 02/15/91 Houselite chain saw. câu vấn tin SELECT P_DESCRIPT. V_CODE FROM INVENTRY WHERE V_CODE <> 21344.1/4in.99 5.5in. 8in.87 39. PRICE.5in. Cú pháp dưới đây sẽ cho phép bạn mô tả các giá trị bảng cần đưa ra: SELECT <danh sách cột> FROM <tên bảng> WHERE <các điều kiện>. blade 11/26/90 Trang 88 .25in. 8ft 07/02/91 Rat-tail file. Chẳng hạn. 100 06/25/91 Sledge hammer. STOCK_DATE. Liệt kê từng phần nội dung bảng Bạn có thể chọn một phần nội dung bảng với SELECT bằng cách liệt kê tên của các trường mong muốn và đặt điều kiện cho các hàng cần đưa ra.5 có thể được dùng để hạn chế kết quả đưa ra.45 14. Ví dụ dưới đây dùng phép toán khác (không bằng): SELECT P_DESCRIPT. sẽ tạo ra kết quả P_DESCRIPT STOCK_DATE PRICE 14. 12in. 3. power saw blade 08/12/91 PVC pipe. PRICE.95 5. 1/8in fine 12/03/90 Nhiều điều kiện lôgic có thể được đặt lên nội dung bảng được chọn.92 V_CODE 21231 21231 24288 24288 23119 21225 24288 2.87 4. blade 11/26/90 Hardware cloth. xây dựng và quản trị CSDL 1.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Kết quả đưa ra liệt kê tất cả các hàng ứng với mã nhà cung cấp không phải là 21344: P_DESCRIPT STOCK_DATE PRICE 8.95 109. các kí hiệu toán học nêu trong bảng 3. STOCK_DATE. V_CODE FROM INVENTRY WHERE V_CODE = 21344. Chẩng hạn. 16in 08/11/91 B&D jigsaw. Theo đó cấu trúc lệnh SQL đảm bảo khả năng vấn tin vô cùng linh hoạt.

(Vì giá trị mã ASCII ứng với chữ cái B lớn hơn giá trị mã của chữ cái A.45 5. Vì vậy.) Vì vậy. Sử dụng các toán tử toán học trên các thuộc tính kí tự. 1/8in fine 43 Claw hammer 23 Bảng 3.95 2.5in.5in.5 Các toán tử toán học Kí hiệu = < <= > >= <> Bằng Nhỏ hơn Nhỏ hơn hoặc bằng Lớn hơn Lớn hơn hoặc bằng Không bằng* Ý nghĩa * Một số phiên bản SQL dùng != thay cho <>. Vì máy tính nhận biết mọi kí tự bằng số là mã chuẩn ASCII của nó. sẽ đưa ra kết quả P_DESCRIPT ON_HAND MIN_QUANT PRICE 100 75 20 10 8.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. kết quả đưa ra sẽ là Trang 89 . suy ra rằng A nhỏ hơn B. PRICE FROM INVENTRY WHERE P_CODE < ‘16-AAAAA’. ON_HAND. xây dựng và quản trị CSDL và dãy lệnh SELECT P_DESCRIPT. lệnh SELECT P_DESCRIPT. MIN_QUANT. nên các toán tử toán học có thể được dùng để đặt các hạn chế cho các thuộc tính dựa trên kí tự. MIN_QUANT. wood screw.87 4.99 5. 100 237 PVC pipe. ON_HAND. PRICE FROM INVENTRY WHERE PRICE <= 10. 8ft 188 Rat-tail file. 3. sẽ là đúng và có thể đưa ra một danh sách tất cả các hàng trong đó P_CODE “nhỏ hơn” ‘16-2222AAAAA’ theo thứ tự bảng chữ cái.

Các thủ tục ngày thường có đặc điểm riêng theo từng phần mềm mà không phải là thủ tục SQL.99 39. phép so sánh kí tự ASCII từ trái qua phải có thể kết luận rằng ngày ‘01/01/91’ xuất hiện trước ngày ‘12/31/90’ do ‘01/01/91’ nhỏ hơn ‘12/31/90’ vì kí tự bên trái nhất ‘0’ trong xâu ‘01/01/91’ nhỏ hơn kí tự trái nhất ‘1’ trong xâu ‘12/31/90’. power saw blade 32 Hardware cloth. câu vấn tin dựa trên kiểu ngày Liệt kê tất cả các hàng sản phẩm có ngày nhập kho la trong hoặc trước ngày 1 tháng 7.1/4in. các kết quả như vậy có thể được dùng để tạo ra các danh sách xếp theo thứ tự bảng chữ cái như kiểu danh mục điện thoại. đồng thời cũng giải thích vì sao bạn nên dùng chúng! (Hơn nữa. lớn hơn mã ASCII ứng với kí tự ‘4’. Chẳng hạn. có dạng như sau: SELECT * FROM INVENTRY WHERE STOCK_DATE >= 07/01/91. Nếu các kí tự 0-9 được lưu như các xâu.50ft 15 So sánh xâu kí tự được thực hiện từ trái qua phải. nếu xâu dữ liệu được lưu dưới dạng yy/mm/dd. mã ASCII ứng với kí tự ‘5’ là. bạn tận dụng được các ưu điểm của số học ngày nếu bạn dùng kiểu ngày. Điều này giải thích vì ssao tất cả các RDBMS hiện nay đều hỗ trợ kiểu ngày.95 7. Chẳng hạn.25in. nhưng ít người muốn sử dụng cách biểu diễn ngày không chuẩn đó. Trang 90 . Một cách tự nhiên. Chẳng hạn. các phép so sánh sẽ đưa ra kết quả thích hợp.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. cùng một so sánh xâu từ trái qua phải có thể làm xuất hiện các dị thường. Chẳng hạn. nếu bạn dùng XDB. xây dựng và quản trị CSDL P_DESCRIPT ON_HA MIN_QU PRICE ND ANT 15 5 14. Kiểu so sánh từ trái qua phải này đặc biệt hữu dụng khi các thuộc tính kiểu như các tên được so sánh. như mong muốn. nhưng cũng chính ‘5’ lại được đánh giá lớn hơn xâu ‘44’ do kí tự đầu tiên trong xâu ‘44’ nhỏ hơn ‘5’.) Dùng các toán tử toán học trên kiểu ngày. OS/2 EE Database Manager hoặc DB2 cho máy lớn mainframe của IBM. Vì lý do này bạn có thể nhận được kết quả không như mong muốn khi so sánh giá trị ngày nếu chúng được lưu theo kiểu kí tự. xâu ‘Ardmore’ có thể được đánh giá lớn hơn xâu ‘Aarenson’ nhưng nhỏ hơn xâu ‘Brown’.

xây dựng và quản trị CSDL Kết quả sẽ là P_CODE 13-Q2/P2 2QQ23DRT 89-WRE-Q 1546-QQ2 WWE/D324 P_DESCRIPT STOCK_ ON_H MIN_QU DATE AND ANT 32 188 11 15 23 15 75 5 5 10 7. bạn có thể dùng dãy lệnh sau đây: SELECT * FROM INVENTRY WHERE V_CODE = 21344 OR V_CODE = 24288. Lệnh này tạo ra sáu hàng phù hợp với các hạn chế lôgic: Trang 91 . OR và NOT SQL cho phép dùng các hạn chế lôgic trong các câu vấn tin của nó. Nhớ dùng cặp dấu nháy để bao quanh xâu ngày. Để ý là ORACLE yêu cầu dùng cặp dấu nháy đơn và khuôn dạng ngày mặc định khác. 8ft 07/02/91 Houselite chain saw. Chẳng hạn.1/4in.25in. Khuôn dạng ngày dBASE IV yêu cầu dùng hàm đặc biệt có tên là CTOD để chuyển tập kí tự xâu ngày thành ngày Julian: SELECT * FROM INVENTRY WHERE STOCK_DATE >= CTOD(‘07/01/91’). 16in 08/11/91 Hardware cloth. câu vấn tin trên được viết như sau SELECT * 2 FROM INVENTRY 3 WHERE STOCK_DATE >= ‘07-JUL-91’. nếu bạn muốn nhận được một danh sách gồm các mục ứng với giá trị của V_CODE hoặc là 21344 hoặc 24288. 3. power saw blade 08/12/91 PVC pipe.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Nếu bạn dùng ORACLE. 2.5in. Các toán tử lôgic: AND.50ft 08/14/91 Claw hammer 08/12/91 Để ý là lệnh trên không bao ngày vào trong cặp dấu nháy đơn hoặc kép.

1/8in fine Houselite chain saw.99 5. Lưu ý việc dùng các dấu đóng mở ngoặc tròn để kết hợp các hạn chế lôgic. 3.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Hoặc V_CODE là 24288. Lệnh này sẽ đưa ra kết quả dưới đây: P_CODE ZW-23116 2QQ23DRT 54778-2T 23114-AA P_DESCRIPT 2. Danh sách yêu cầu có thể được tạo ra với dãy lệnh SELECT * FROM INVENTRY WHERE (PRICE < 50 AND STOCK_DATE < ‘07/15/91’) OR V_CODE = 24288.5in. 1/8in Sledge hammer. Chẳng hạn.92 21344 21344 21344 24288 24288 24288 AND lôgic có yêu cầu cú pháp SQL tương tự.87 109. Trang 92 .5in.99 256. 12in.99 14. 8in. Bạn đã học về quy tắc ưu tiên này trong đại số sơ cấp và số học: 2 + (3 × 5) = 17 vì 3 × 5 = 15 và 2 + 15 = 17.5in. 12lb STOCK_DATE 100 06/25/91 8ft 07/02/91 fine 12/03/90 02/15/91 ON_HAND MIN_QUANT PRICE 237 188 43 8 100 75 20 5 8. 3. PVC pipe. giả sử bạn muốn có một bảng với các điều kiện sau: Giá trị STOCK_DATE trước ngày 15 tháng 7 năm 1991 và giá PRICE nhỏ hơn 50.99 99. xây dựng và quản trị CSDL P_CODE 13-Q2/P2 2QQ23DRT 54778-2T 89-WRE-Q 2232/QWE 2232/QTY P_DESCRIPT 7.87 4. 8ft Rat-tail file.87 4.40 V_CODE 21231 21344 21344 21231 Bạn có thể kết hợp OR và AND để đặt thêm các hạn chế cho kết quả đưa ra.000USD. blade B&D jigsaw.25in. Rat-tail file. Nơi đặt cặp dấu ngoặc tròn phụ thuộc vào thứ tự ưu tiên bạn muốn các hạn chế được thực hiện.000USD và STOCK_DATE là ngày xuất hiện trước 15 tháng bảy năm 1991: SELECT * FROM INVENTRY WHERE PRICE < 50 AND STOCK_DATE < ‘07/15/91’. Lệnh dưới đây tạo ra một danh sách tất cả các hàng thoả mãn đồng thời hai điều kiện PRICE nhỏ hơn 50.45 5. Các điều kiện được liệt kê trong cặp dấu ngoặc tròn thường được thực hiện trước. wood screw. power saw blade PVC pipe. 16in B&D jigsaw. blade STOCK_DATE ON_HAND 08/12/91 07/02/91 12/03/90 08/11/91 11/26/90 11/26/90 32 188 43 11 6 8 MIN_QUANT PRICE V_CODE 15 75 20 5 3 3 14.

1/8in fine Sledge hammer. IN. Nếu phiên bản SQL của bạn hỗ trợ toán tử lôgic NOT. Chẳng hạn. 100 PVC pipe. EXIST. 8in.87 4. Các toán tử đặc biệt này bao gồm BETWEEN. được dùng để kiểm tra một thuộc tính có giá trị hay không. Trên thực tế. Các toán tử đặc biệt SQL chuẩn ANSI cho phép dùng các toán tử đặc biệt chung với mệnh đề WHERE. NOT lôgic có thể kết hợp với AND và OR. Câu vấn tin trên đây đưa ra kết quả dưới đây: P_CODE P_DESCRIPT STOCK_DATE ON_HAN MIN_QUANT PRICE V_CODE D 06/25/91 07/02/91 12/03/90 02/15/91 08/11/91 11/26/90 11/26/90 237 188 43 8 11 6 8 100 75 20 5 5 3 3 8. 12lb Houselite chain saw. 16in B&D jigsaw.87 109. được dùng để kiểm tra đối với các xâu kí tự giống nhau.5in. Thực tế là EXIST là ngược của IS NULL.40 256. 12in.92 21231 21344 21344 21231 24288 24288 24288 ZW-23116 2QQ23DRT 54778-2T 23114-AA 89-WRE-Q 2232/QWE 2232/QTY 2. LIKE. 3.45 5.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. một lĩnh vực đặc biệt trong toán học là Đại số Bool đã đóng góp nhiều cho việc sử dụng các công cụ lôgic. Trang 93 .99 14. bạn phải dùng cú pháp tương tự như OR hoặc AND. blade Lưu ý rằng ba hàng với V_CODE là 24288 luôn có trong kết quả đưa ra ứng với giá trị bất kỳ của STOCK_DATE và PRICE trong hàng đó. dùng dãy lệnh SELECT * FROM INVENTRY WHERE V_CODE NOT 21344. nếu bạn muốn xem một danh sách tất cả các hàng tương ứng với mã nhà cung cấp không phải là 21344. được dùng để kiểm tra xem giá trị thuộc tính có phù hợp một giá trị trong một tập các giá trị được liệt kê hay không. 8ft Rat-tail file. được dùng để định nghĩa các giới hạn thay đổi IS NULL. được dùng để kiểm tra xem một giá trị thuộc tính có là null hay không.5in. 3.99 99. xây dựng và quản trị CSDL Việc dùng OR và AND lôgic có thể trở nên khá phức tạp khi nhiều hạn chế được đặt trong câu vấn tin. wood screw. blade B&D jigsaw.

dãy lệnh SELECT P_CODE. nếu bạn muốn biết một danh sách tất cả các sản phẩm mà giá của nó nằm giữa 50. Nếu bạn dùng phần mềm cài đặt SQL chuẩn. P_DESCRIPT FROM INVENTRY WHERE STOCK_DATE IS NULL.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.00 AND 100. % muốn nói rằng mọi kí tự bất kì theo sau đều hợp lệ _ muốn nói một kí tự bất kì có thể được thay thế cho dấu gạch dưới.00USD và 100. điều kiện BETWEEN có thể được dùng để định nghĩa các giới hạn thuộc tính. SQL cho phép bạn dùng các kí tự thay thế % và _ để tạo ra xâu tương xứng khi toàn bộ xâu không được biết. giả sử rằng giá trị MIN_QUANT chưa được mô tả cho một hoặc nhiều sản phẩm trong bảng INVENTRY. SQL chuẩn cho phép sử dụng IS NULL để kiểm tra đối với giá trị thuộc tính rồng (hay null). Cài đặt SQL dBASE IV không hỗ trợ BETWEEN. câu vấn tin dưới dây có thể tìm tất cả các hàng VENDOR ứng với các hợp đồng có tên cuối bắt đầu bằng ‘Smith’.00. Chẳng hạn. LIKE phải được dùng kết hợp với kí tự thay thế. sẽ làm việc trong môi trường SQL chuẩn. Tương tự. Tức là.00. xây dựng và quản trị CSDL Chúng ta hãy khảo sát cách sử dụng các toán tử này. nhưng bạn có thể nhận được cùng một kết quả với SELECT * FROM INVENTRY WHERE PRICE > 50. Các kí tự thay thế % và _ được dùng như các kí tự thay thế * và ? trong DOS. dãy lệnh dưới đây sẽ làm việc đó: SELECT * FROM INVENTRY WHERE PRICE BETWEEN 50. Trang 94 . nếu mục ngày null được kiểm tra. Chẳng hạn. P_DESCRIPT FROM INVENTRY WHERE MIN_QUANT IS NULL.00 PRICE < 100. Chẳng hạn. Mục null như vậy có thể được tìm thấy bởi dãy lệnh SELECT P_CODE.00USD.

Số khác. Smith Nhưng giả sử bạn đã gõ vào câu vấn tin dưới đây: SELECT V_COMPANY. Tức là. Kết quả đưa ra là: V_COMPANY C_LNAME V_PHONE 800-213-9999 212-667-0090 800-234-1200 Harding Super Wholesale Smith Charlie’s Wholesale Smithson Rather’s Building. ‘SMith’. ‘SMITH’. Các xâu tương xứng chỉ có thể được tạo ra nếu xâu vấn tin được viết chính xác như xâu trong bảng.. Inc. Một số RDBMS. nó không làm ảnh hưởng tới giá trị thực tế lưu trong bảng. Trang 95 . bạn có thể tạo ra các kết quả giống nhau với câu vấn tin SELECT V_COMPANY. Vì trong bảng không có ai với tên cuối bắt đầu bằng ‘SMITH’ nên ‘SMITH%’ (các kí tự in hoa) được dùng trong vấn tin không thể tạo ra xâu tương xứng. cung cấp một hàm UPPER đặc biệt để chuyển cả hai xâu kí tự bảng và vấn tin về dạng chữ in hoa. do đó làm cho ‘SMITH’. chẳng hạn XDB. V_PHONE FROM VENDOR WHERE UPPER(C_LNAME) LIKE ‘SMITH%’. cho dù đó là xâu kí tự hoa hay thường như ‘Smith’. ‘Smith’ và ‘smith’ được đánh giá là các xâu khác nhau (không bằng). Không có hàng nào được in ra. nếu bạn muốn tránh kết quả không tương xứng dựa trên tính nhạy cảm dạng chữ.) Chính vì vậy. C_LNAME.. Điều gì đã xảy ra? Điều xảy ra là câu vấn tin dựa trên kí tự có thể nhạy cảm với dạng chữ. Câu vấn tin trên có thể đưa ra một danh sách gồm tất cả các hàng có tên cuối bắt đầu với ‘Smith’.. tự động tạo ra các quy ước cần thiết để loại bỏ tính nhạy cảm dạng chữ. như ORACLE và dBASE IV.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. C_LNAME. C_LNAME. ‘smith’. xây dựng và quản trị CSDL SELECT V_COMPANY. kí tự hoa có mã ASCII khác kí tự thường. và nếu bạn RDBMS của bạn cho phép sử dụng hàm UPPER. (Quy ước được hoàn thành chỉ trong bộ nhớ máy tính. V_PHONE FROM VENDOR WHERE C_LNAME LIKE ‘Smith%’. V_PHONE FROM VENDOR WHERE C_LNAME LIKE ‘SMITH%’.

Inc Fielding Q&D Building Supplies Cavazos Giả sử bạn không biết tên của một người nào đó được đánh vần là ‘Johnson’ hay ‘Johnsen’. 24288). ‘24288’). Nhiều câu vấn tin dùng với OR lôgic có thể xử lý dễ dàng hơn với sự giúp đowx của toán tử đặc biệt N. Kí tự thay thế _ sẽ cho phép bạn tìm xâu tương ứng cho cả hai cách đánh vần. Tìm kiếm thích hợp được lập lên bởi câu vấn tin SELECT * FROM VENDOR WHERE C_LNAME LIKE ‘Johns_n’. V_PHONE FROM VENDOR WHERE C_LNAME NOT LIKE ‘Smith%’. Chẳng hạn. sẽ cho kết quả V_COMPANY C_LNAME V_PHONE 666-233-1281 800-333-9011 J. các toán tử lôgic có thể dùng kết hợp với các kí tự thay thế. có thể được xử lý hiệu quả hơn với SELECT * FROM INVENTRY WHERE V_CODE IN (21344. C_LNAME. câu vấn tin SELECT V_COMPANY. xây dựng và quản trị CSDL Một cách tự nhiên. Chẳng hạn. Nếu thuộc tính định tập kí tự. Supplies. Như vậy các kí tự thay thế cho phép chúng ta tạo ra xâu tương xứng khi chỉ biết gần đúng về xâu đó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. câu vấn tin SELECT * FROM INVENTRY WHERE V_CODE = 21344 ORV_CODE = 24288.I. câu vấn tin trên đây có thể viết lại SELECT * FROM INVENTRY WHERE V_CODE IN (‘21344’. các dấu nháy phải được sử để định nghĩa tập con. nếu V_CODE đã được định nghĩa là CHAR(5) trong bước tạo bảng. Chẳng hạn. EXIST có thể được sử dụng bất cứ khi nào có yêu cầu thực hiện lệnh Trang 96 .

do đó các dãy lệnh viết lại tương ứng là ALTER TABLE <tên bảng> MODIFY <tên cột> <các đặc điểm cột mới>.2 bạn đã học cách tạo cấu trúc bảng và nhập. Lưu ý: XDB không dùng cặp cặp dấu ngoặc tròn như trên. Phần lớn các RDBMS sẽ không cho phép bạn xoá cột vì thao tác này có thể xoá dữ liệu quan trọng được dùng trong bảng khác. sửa. V. cũng như cách xoá bảng. nếu bạn muốn liệt kê tất cả các hàng ứng với các mã nhà cung cấp hiện có (khác null). Chẳng hạn. Trang 97 . xoá và liệt kê dữ liệu.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. bạn sẽ học cách thay đổi cấu trúc bảng bằng cách thay đổi các đặc điểm thuộc tính và bổ sung cột. hoặc ALTER TABLE <tên bảng> ADD (<tên cột mới> <các đặc điểm cột mới>). Lệnh MODIFY sẽ cho phép bạn thay đổi các đặc điểm cột. Sau đó bạn sẽ học cách nhập dữ liệu vào các cột mới vừa sửa. kèm theo sau là lệnh tạo ra sự thay đổi bạn mong muốn. các hàng INVENTRY có thể được xoá với DELETE FROM INVENTRY WHERE P_CODE EXIST. Trong phần này. Cuối cùng. bạn sẽ học cách sao chép bảng hoặc một phần bảng. CÁC LỆNH QUẢN LÝ DỮ LIỆU NÂNG CAO Trong phần 3. Có hai lệnh thường dùng là MODIFY và ADD. xây dựng và quản trị CSDL trên các giá trị thuộc tính không phải là null. Cú pháp cơ bản của lệnh ALTER do đó có hai dạng: ALTER TABLE <tên bảng> MODIFY (<tên cột> <các đặc điểm cột mới>). hoặc. bạn có thể dùng SELECT * FROM INVENTRY WHERE V_CODE EXIST. còn lệnh ADD sẽ cho phép bạn bổ sung một cột. Mọi sự thay đổi trong cấu trúc bảng đều sẽ dựa trên lệnh ALTER.

Hoặc. bạn sẽ thấy rằng độ rộng cột PRICE đã tăng lên một chữ số. (Chúng ta sẽ dùng cột này về sau để xác định xem có hay không một sản phẩm có sẵn trong kho ứng với một khoảng thời gian nào đó đã được bán trong một thương vụ cụ thể. Bổ sung cột cho bảng Bạn có thể thay đổi bảng hiện tại với việc bổ sung một hoặc nhiều cột. 2. bạn có thể tạo ra bất cứ sự thay đổi nào trên các đặc điểm cột nếu các thay đổi đó không làm thay đổi kiểu dữ liệu. sẽ đưa ra thông báo lỗi vì cột V_CODE hiện đang chứa dữ liệu.) Trang 98 . lệnh ALTER TABLE INVENTRY MODIFY (V_CODE CHAR(5)).2). nếu bạn đang dùng SQL XDB. Thay đổi kiểu dữ liệu của cột Dùng cú pháp MODIFY vừa trình bày. phiên bản SQL của bạn có thể không dùng cặp dấu ngoặc tròn: ALTER TABLE INVENTRY MODIFY PRICE DECIMAL(8. nếu bạn muốn tăng độ rộng của cột PRICE thành tám chữ số. Thay đổi đặc điểm thuộc tính Nếu cột cần thay đổi đang chứa dữ liệu. Chẳng hạn. Chẳng hạn.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. dãy lệnh trên có thể tạo ra thay đổi cho cấu trúc bảng mong muốn. dùng lệnh ALTER TABLE INVENTRY MODIFY (PRICE DECIMAL(8. 3. chúng ta sẽ bổ sung cột có tên SALE_CODE cho bảng INVENTRY. thuộc tính V_CODE của bảng INVENTRY có thể được thay đổi từ kiểu nguyên thành kiểu kí tự với lệnh ALTER TABLE INVENTRY MODIFY (V_CODE CHAR(5)). Nếu cột V_CODE không chứa dữ liệu.2)). nếu bạn muốn thay đổi trường V_CODE từ kiểu nguyên thành kiểu kí tự. Nhớ rằng. xây dựng và quản trị CSDL 1. Nếu bây giờ bạn liệt kê lại nội dung. Một số phiên bản SQL (như ORACLE) sẽ không cho phép bạn thay đổi kiểu dữ liệu trừ khi cột được thay đổi rỗng. gõ ALTER TABLE INVENTRY MODIFY V_CODE CHAR(5). Trong ví dụ dưới đây.

xác định từng vị trí mục dữ liệu với khóa chính P_CODE và ví trí cột của nó SALE_CODE. SQL dùng lệnh UPDATE. Nhập dữ liệu cho cột mới Để đưa dữ liệu vào trong một phần của hàng. Lưu ý sự bao gồm tất cả thông tin yêu cầu trong lệnh ALTER dưới đây: ALTER TABLE INVENTRY ADD (SALE_CODE CHAR(1)). Chẳng hạn.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Lệnh INSERT chúng ta dùng trước đây không đưa ra cách xác định ví trí các mục dữ liệu cột cụ thể. hoặc 3. (Kiểm tra nội dung bảng gốc và lưu ý rằng P_CODE = ‘54778-2T’ định danh hàng bốn!) Nhập giá trị với dãy lệnh UPDATE INVENTRY SET SALE_CODE = ‘2’ WHERE P_CODE = ‘54778-2T’. Lệnh dưới đây với bảng đã thay đổi kiểm tra ảnh hưởng của lệnh nêu trên: SELECT P_DESCRIPT. SALE_CODE FROM INVENTRY WHERE P_CODE = ‘54778-2T’. nếu chúng ta muốn nhập giá trị SALE_CODE ‘1’ ứng với các giá trị P_CODE là ‘2232/QWE’ và ‘2232/QTY’. STOCK_DATE. Vì chúng ta sẽ không thực hiện các phép toán số học với SALE_CODE nên SALE_CODE sẽ được định kiểu là thuộc tính kí tự đơn. đưa giá trị ‘2’ của thuộc tính SALE_CODE vào hàng bốn. 2. Một số phiến bản SQL (chẳng hạn của XDB) có thể bỏ qua cặp dấu ngoặc tròn: ALTER TABLE INVENTRY ADD SALE_CODE CHAR(1). chúng ta dùng UPDATE INVENTRY Trang 99 . Chẳng hạn. dùng lệnh UPDATE kết hợp với khóa chính P_CODE ‘54778-2T’ để hoàn thành công việc. hoặc một hàng đầy đủ hoặc không có hàng nào được đưa vào. đưa ra kết quả P_DESCRIPT Rat-tail file. 4. xây dựng và quản trị CSDL Giả sử chúng ta muốn các mục SALE_CODE là 1. 1/8in fine STOCK_DATE 12/03/90 SALE_CODE 2 Dãy dữ liệu có thể được nhập vào bởi cùng một cách.

quá trình rất phức tạp. UPDATE INVENTRY SET SALE_CODE = ‘1’ WHERE P_CODE = ‘2232/QTY’. blade STOCK_DATE 08/12/91 06/25/91 07/02/91 12/03/90 02/15/91 08/11/91 11/26/90 08/14/91 08/12/91 11/26/90 SALE_CODE 2 1 1 Mặc dù dãy UPDATE vừa chỉ ra cho phép chúng ta bổ sung dữ liệu vào các ô bảng đã chỉ rõ.50ft Claw hammer B&D jigsaw. wood screw. (Lưu ý: Một số phiên bản SQL yêu cầu không dùng các ngoặc nhọn hoặc dấu nháy cho giá trị ngày!) Trang 100 . Chẳng hạn. ‘2232/QTY’). giả sử rằng chúng ta muốn đặt mã bán hàng dựa trên STOCK_DATE vào bảng. STOCK_DATE. blade Hardware cloth. Kết quả có thể được kiểm tra với lệnh SELECT P_DESCRIPT.5in. dùng lịch sau: STOCK_DATE trước 01/01/91 2 1 trong khoảng 01/01/91 đến 07/01/91 SALE_CODE Hai dãy lệnh dưới đây sẽ tạo ra các phép gán thích hợp. Hoặc nếu RDBMS của bạn không hỗ trợ IN.5in. nếu mối quan hệ có thể được thiết lập giữa các mục dữ liệu và các cột hiện có.25in. dùng hai lệnh dưới đây: UPDATE INVENTRY SET SALE_CODE = ‘1’ WHERE P_CODE = ‘2232/QWE’. 16in B&D jigsaw. mối quan hệ đó có thể được dùng để gán các giá trị vào các ô thích hợp của chúng. SALE_CODE FROM INVENTRY. 3. May mắn là. 12in.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. power saw blade 2. 12lb Houselite chain saw. 8in. 8ft Rat-tail file. 1/8in fine Sledge hammer. để đưa ra kết quả P_DESCRIPT 7. 100 PVC pipe.1/4in. xây dựng và quản trị CSDL SET SALE_CODE = ‘1’ WHERE P_CODE IN (‘2232/QWE’.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

UPDATE INVENTRY SET SALE_CODE = ‘2’ WHERE STOCK_DATE < ‘01/01/91’; UPDATE INVENTRY SET SALE_CODE = ‘1’ WHERE STOCK_DATE >= ‘01/01/91’ STOCK_DATE < ‘07/01/91’; Kiểm tra kết quả gán như dưới đây: SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE FROM INVENTRY; Kết quả đưa ra là P_DESCRIPT 7.25in, power saw blade 2.5in, wood screw, 100 PVC pipe, 3.5in, 8ft Rat-tail file, 1/8in fine Sledge hammer, 12lb Houselite chain saw, 16in B&D jigsaw, 8in, blade Hardware cloth,1/4in,50ft Claw hammer B&D jigsaw, 12in, blade STOCK_DATE PRICE SALE_CODE 08/12/91 06/25/91 07/02/91 12/03/90 02/15/91 08/11/91 11/26/90 08/14/91 08/12/91 11/26/90 14.99 8.45 5.87 4.99 14.40 256.99 99.87 39.95 5.95 109.92 1 2 1 2

2

(Lưu các thay đổi bởi lệnh COMMIT.) 5. Sao chép một phần bảng Về sau bạn sẽ thấy rằng có thể cần phải tách cấu trúc bảng thành một số phần nào đó khi nó không thỏa mãn một kiểm tra thiết kế nào đó. May mắn là, SQL cho phép chúng ta sao chép nội dung của các cột đã chọn sang các bảng mới vừa được tạo ra để tránh phải nhập lại dữ liệu một cách thủ công. Để sao chép các cột đã chọn từ một bảng, trước hết cần tạo cấu trúc bảng mới để nhận dữ liệu. Chẳng hạn, nếu bạn muốn sao chép P_CODE và PRICE từ bảng INVENTRY sang bảng mới có tên là TEMP_1, trước hết cần tạo ra cấu trúc bảng TEMP_1 như dưới đây. CREATE TABLE TEMP_1 ( PART_CODE CHAR(8) NOT NULL, PRICE DECIMAL(8,2));
Trang 101

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

Nhớ rằng các tên cột của bảng TEMP_1 không trùng với các tên cột của bảng gốc và bảng mới không nhất thiết phải có số cột bằng số cột của bảng gốc. Khi đó, cột đầu tiên trong bảng TEMP_1 được đặt tên là PART_CODE, mà không phải là P_CODE có trong bảng INVENTRY; đồng thời bảng TEMP_1 chỉ chứa hai cột, không phải bảy cột như trong bảng INVENTRY. Tuy nhiên, các đặc điểm cột phải tương xứng; bạn không thể sao chép thuộc tính kiểu kí tự vào cấu trúc số, và ngược lại. Sau khi đã tạo được bảng nhận, sao chép các giá trị cột tương ứng vào bảng TEMP_1 mới tạo ra bởi dãy lệnh INSERT INTO <Bảng nhận> (Danh sách tên cột của bảng nhận) SELECT <Danh sách tên cột của các cột cần sao chép> FROM <Tên bảng gốc> Do đó, chúng ta dùng INSERT INTO TEMP_1 (PART_CODE, PRICE) SELECT P_CODE, PRICE SELECT * FROM INVENTRY; Nội dung của bảng TEMP_1 bây giờ có thể được kiểm tra bởi câu vấn tin FROM TEMP_1; để liệt kê nội dung của mới TEMP_1:
PART_CODE 13-Q2/P2 ZW-23116 2QQ23DRT 54778-2T 23114-AA 89-WRE-Q 2232/QWE 1546-QQ2 WWE/D324 2232/QTY PRICE 14.99 8.45 5.87 4.99 14.40 256.99 99.87 39.95 5.95 109.92

Trong chương 5 bạn sẽ thấy tầm quan trọng của sao chép một phần bảng trong cái gọi là quá trình chuẩn hoá. 6. Xoá bảng khỏi CSDL Một bảng có thể bị xoá khỏi CSDL bởi lệnh DROP. Chẳng hạn, chúng ta có thể xoá bảng TEMP_1 vừa tạo với DROP TABLE TEMP_1;
Trang 102

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG

Thiết kế, xây dựng và quản trị CSDL

VI. VẤN TIN PHỨC TẠP VÀ CÁC HÀM SQL Một trong những ưu điểm quan trọng nhất của SQL là khả năng cho phép người dùng tạo ra các câu vấn tin phức tạp với nhiều dạng khác nhau. Các toán tử lôgic được giới thiệu ở phần trước để cập nhật nội dung bảng cũng sẽ chỉ làm việc trong môi trường vấn tin. Ngoài ra, SQL còn cung cấp các hàm hữu ích để đếm, tìm giá trị nhỏ nhất và lớn nhất, tính giá trị trung bình... Hơn thế nữa, SQL cũng cho phép người dùng hạn chế các câu vấn tin đối với các mục dữ liệu không trùng lặp hoặc các mục trùng lặp của nó có thể được nhóm lại. 1. Sắp xếp danh sách Mệnh đề ORDER BY của SQL đặc biệt hữu dụng nếu thứ tự liệt kê quan trọng đối với bạn. Cú pháp ORDER BY <thuộc tính> tạo ra một danh sách theo thứ tự tăng dần. Nếu danh sách cần chỉ ra theo thứ tự giảm dần, dùng ORDER BY <thuộc tính> DESC Chẳng hạn, nếu bạn muốn nội dung của bảng INVENTRY được liệt kê bởi PRICE theo thứ tự tăng dần, dùng SELECT * FROM INVENTRY ORDER BY PRICE; để đưa ra kết quả như dưới đây.
P_CODE 54778-2T P_DESCRIPT Rat-tail file, 1/8in fine STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE 12/03/1990 07/02/1991 08/12/1991 06/25/1991 02/15/1991 08/12/1991 43 188 23 237 8 32 15 6 8 11 20 75 10 100 5 15 5 3 3 5 4.99 5.87 5.95 8.45 14.4 14.99 39.95 99.87 21344 21344 21225 21231 21231 21344 23119 24288

2QQ23DRT PVC pipe, 3.5in, 8ft WWE/D324 Claw hammer ZW-23116 23114-AA 13-Q2/P2 1546-QQ2 2232/QWE 2232/QTY 2.5in, wood screw, 100 Sledge hammer, 12lb 7.25in, power saw blade

Hardware cloth,1/4in,50ft 08/14/1991 B&D jigsaw, 8in, blade 11/26/1990

B&D jigsaw, 12in, blade 11/26/1990

109.92 24288 256.99 24288

89-WRE-Q Houselite chain saw, 16in 08/11/1991

Trang 103

Trong các tên được sắp theo bước 2. kí tự đầu của tên đệm) theo ba bước: Sắp xếp theo tên cuối..1/4in. gõ dòng lệnh SELECT * FROM INVENTRY ORDER BY PRICE DESC.99 24288 23119 21344 21231 21231 21225 21344 21344 89-WRE-Q Houselite chain saw. 12in..5in.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. thuộc tính 2. lệnh SELECT C_LNAME. 16in 08/11/1991 2232/QTY B&D jigsaw. và khảo sát kết quả đưa ra: P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE V_CODE 11 8 6 15 32 8 237 23 188 43 5 3 3 5 15 5 100 10 75 20 256.1 và lưu ý sự thay đổi theo thứ tự được liệt kê: sản phẩm giá thấp nhất bây giờ được đứng đầu tiên. C_FNAME. sau mệnh đề ORDER BY: ORDER BY <thuộc tính 1. C_I. 100 08/12/1991 02/15/1991 06/25/1991 08/12/1991 07/02/1991 12/03/1990 WWE/D324 Claw hammer 2QQ23DRT PVC pipe.95 14.4 8. power saw blade Sledge hammer. sắp xếp theo kí tự đầu của tên đệm.87 4. Bạn nên biết rằng ORDER đưa ra quá trình sắp xếp lôgic.87 39. 12lb 2. blade 11/26/1990 11/26/1990 2232/QWE B&D jigsaw.45 5.25in. 8ft 54778-2T Rat-tail file.5in. V_PHONE Trang 104 . sắp xếp theo tên đầu. .95 5.92 24288 99. tiếp theo là các sản phẩm giá thấp nhất tiếp theo. cách nhau bởi dấu phảy.99 24288 109.) Chẳng hạn. xây dựng và quản trị CSDL So sánh danh sách này với nội dung bảng thực tế trong bảng 3. 1/8in fine Nếu bạn muốn tạo ra một danh mục điện thoại. Trong các tên cuối. Tiếp theo.99 14.> (Khái niệm tầng được dùng để mô tả điều kiện theo đó phép sắp xếp lôgic được thực hiện theo bước. 8in. nó được tạo ra một cách dễ dàng bởi việc liệt kê danh sách thuộc tính. có lẽ là hữu dụng nếu bạn đưa ra dãy được sắp thứ tự (tên cuối. 3. wood screw.50ft 08/14/1991 7.. nội dung bảng thực tế không bị ảnh hưởng bởi lệnh ORDER.. blade 1546-QQ2 13-Q2/P2 23114-AA ZW-23116 Hardware cloth. tên đầu. Dãy được sắp đa mức như vậy được gọi là dãy được sắp theo tầng.

kiểm tra các hạng mục ngân sách các cơ quan chính phủ theo số lượng.40 8. 12lb 2. 800-333-9011 666-233-1281 800-234-1200 800-213-9999 W. 3. theo ngay sau bởi V_CODE thứ hai. Chẳng hạn. K. để ý cách dùng các hạn chế trong dãy lệnh dưới đây: SELECT P_DESCRIPT. PRICE DESC. đặc biệt khi điều kiện DESC được sử dụng.99 Nhận xét rằng bên trong V_CODE đầu tiên các giá được liệt kê theo thứ tự giảm dần. V_CODE. Hãy xem xét khả năng khi kiểm tra ngày đến hạn hoá đơn theo thứ tự giảm dần.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. hoặc khảo sát một số bất kỳ các giao dịch tài chính. G.5in. 212-667-0090 Mệnh đề ORDER BY hữu dụng trong nhiều ứng dụng. sẽ đưa ra kết quả dưới đây: C_LNAME Cavazos Fielding Smith Smith Smithson C_FNAME C_I V_PHONE Maria Anne Sally Stanley Ronald D. STOCK_DATE. C_FNAME.45 5. cũng với các giá được liệt kê theo thứ tự giảm dần. C_I. 1/8in fine V_CODE STOCK_DATE 21231 21231 21344 21344 02/15/1991 06/25/1991 07/02/1991 12/03/1990 PRICE 14.87 4. PRICE FROM INVENTRY WHERE STOCK_DATE < ‘07/15/91’ AND PRICE <= 50.00 ORDER BY V_CODE.5in. 8ft Rat-tail file. wood screw. Chúng ta cũng có thể dùng mệnh đề ORDER BY kết hợp với các lệnh SQL khác. Trang 105 . 100 PVC pipe. Kết quả đưa ra sẽ là danh sách dưới đây: P_DESCRIPT Sledge hammer. xây dựng và quản trị CSDL FROM VENDOR ORDER BY C_LNAME. K.

Các hàm được chỉ ra trong bảng 3. tính trung bình các giá trị trong một cột đã cho. cộng các giá trị trong một cột đã cho.6. Các hàm số học SQL SQL sẽ thực hiện các tóm tắt toán học khác nhau cho bạn. Bảng 3. như đếm số hàng thỏa mãn một điều kiện đã cho nào đó.. lệnh SELECT DISTINCT V_CODE FROM INVENTRY. sẽ chỉ đưa ra các mã (V_CODE) nhà cung cấp khác nhau được tìm thấy trong bảng INVENTRY: V_CODE 21344 21231 24288 23119 21225 3. xây dựng và quản trị CSDL 2..6 Các hàm số học SQL Hàm COUNT MIN MAX AVG SUM Kết quả thực hiện Số hàng bao hàm thuộc tính đã mô tả Giá trị thuộc tính nhỏ nhất Giá trị thuộc tính lớn nhất Trung bình số học ứng với thuộc tính đã mô tả Tổng tất cả các giá trị của thuộc tính đã chọn Trang 106 . tìm các giá trị lớn nhất và nhỏ nhất của một thuộc tính đã cho nào đó.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. mệnh đề DISTINCT của SQL được thiết kế để đưa ra một danh sách các giá trị khác nhau. Máy mắn là. Chẳng hạn. Loại bỏ trùng lặp Có bao nhiêu nhà cung cấp khác nhau hiện được thể hiện trong bảng INVENTRY? Một phép liệt kê đơn giản (SELECT) sẽ không hiệu quả lắm nếu bảng chứa vài ngàn hàng và chúng ta phải chọn lọc ra một cách thủ công các mã của nhà cung cấp.

Chẳng hạn. sẽ đưa ra kết quả COUNT(DISTINCT V_CODE) 5 Nói cách khác.) Dấu hoa thị (*) vẫn được dùng như một kí tự thay thế để tất cả các bản ghi thỏa mãn điều kiện đã mô tả.00USD. Trả lời câu hỏi Có bao nhiêu hàng trong bảng INVENTRY chứa sản phẩm ứng với PRICE nhỏ hơn hoặc bằng 10.00.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.00USD. bảng chứa năm mã nhà cung cấp khác nhau. 23119 và 21225 – trong đó có ba số ứng với các sản phẩm mà giá của chúng nhỏ hơn hoặc bằng 10. Tất cả các hàm số học đều có thể được dùng kết hợp với các điều kiện được chỉ ra. nó thường được dùng kết hợp với mệnh đề DISTINCT. xây dựng và quản trị CSDL COUNT. Câu trả lời được cho bởi dòng lệnh SELECT COUNT(DISTINCT V_CODE) FROM INVENTRY WHERE PRICE <= 10. Vì COUNT được thiết kế để đếm số “gí trị” cụ thể của thuộc tính. 24288. Dãy lệnh này sẽ đưa ra kết quả COUNT(DISTINCT V_CODE) 3 (Khảo sát bảng INVENTRY ta thấy rằng bảng chứa năm số V_CODE khác nhau – 21344. Giả sử bạn được yêu cầu đưa ra câu trả lời cho bài toán sau: Tìm số mặt hàng trong bảng INVENTRY mà giá của chúng nhỏ hơn hoặc bằng 10. 21231.00USD? dùng dãy lệnh SELECT COUNT(*) FROM INVENTRY Trang 107 . trả lời cho câu hỏi Có bao nhiêu nhà cung cấp khác nhau hiện được tìm thấy trong bảng INVENTRY? chúng ta có thể dùng lệnh SELECT COUNT (DISTINCT V_CODE) FROM INVENTRY.

Dãy lệnh này sẽ đưa ra kết quả MIN(PRICE) 4. P_DESCRIPT.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. dãy lệnh SQL SELECT P_CODE. Thường dễ quên các cảnh báo đơn giản này. tổng đếm duy nhất hoặc giá trị trung bình duy nhất.00. PRICE FROM INVENTRY Trang 108 . Câu trả lời đúng cho bài toán thứ nhất được tạo ra bởi SELECT MAX(PRICE) FROM INVENTRY. chúng ta cùng khảo sát câu hỏi Sản phẩm nào có giá cao nhất? Mặc dù câu hỏi này khác đơn giản.) MAX và MIN. Các hàm MAX và MIN sẽ giúp chúng ta tìm câu trả lời cho các ài toán như Tìm giá lớn nhất trong bảng INVENTRY.99 Câu trả lời đúng cho bài toán thứ hai được tạo ra bởi SELECT MIN(PRICE) FROM INVENTRY. để đưa ra câu trả lời đúng COUNT(*) 4 (Khảo sát nội dung bảng INVENTRY ta thấy rằng có bốn hàng thoả mãn điều kiện đã chỉ ra. Dãy lệnh này sẽ đưa ra kết quả MAX(PRICE) 256. bạn phải nhớ rằng các hàm số học chỉ đưa ra một giá trị duy nhất trên tất cả các giá trị được tìm thấy trong bảng: giá trị lớn nhất duy nhất.99 Các hàm số học cũng có thể được dùng với các hạn chế lôgic phức tạp hơn. Tìm giá nhỏ nhất trong bảng INVENTRY. xây dựng và quản trị CSDL WHERE PRICE <= 10. Chẳng hạn. Tuy nhiên. giá trị nhỏ nhất duy nhất.

có cùng các hạn chế tính toán. được thực hiện trước. được lưu trong bộ nhớ. SELECT P_CODE. 16in 256. Trong trường hợp này. xây dựng và quản trị CSDL WHERE PRICE = MAX(PRICE). Vì bây giờ vòng ngoài có một giá trị để so sánh từng giá trị PRICE với nó nên câu vấn tin được thực hiện đúng đắn. Phép so sánh với MAX(PRICE) xảy ra quá muộn trong dãy lệnh. vấn tin lồng nhau là vấn tin trong vấn tin. Một giá trị PRICE trung bình duy nhất có thể được tạo ra bằng cách dùng lệnh SELECT AVG(PRICE) FROM INVENTRY.14 Trang 109 . Hàm AVG tương tự như các hàm MIN và MAX. sẽ không đưa ra các kết quả mong muốn vì SELECT đưa ra một danh sách nhiều giá trị giá. bạn phải duyệt các mục với một hạn chế giá trị duy nhất bằng cách sử dụng một thủ tục được gọi là vấn tin lồng nhau. P_DESCRIPT. vấn tin lồng nhau gồm hai phần: vòng trong. được thực hiện sau. Do đó. Như mong muốn.) Dùng dãy lệnh dưới đây như một ví dụ. các giá trị PRICE đã được lấy ra từ bảng trước khi hàm MAX(PRICE) có thể được khớp vào phép so sánh. dãy lệnh trên đưa ra kết quả P_CODE 89-WRE-Q P_DESCRIPT PRICE Houselite chain saw.99 AVG. PRICE FROM INVENTRY WHERE PRICE = (SELECT MAX(PRICE) FROM INVENTRY). để trả lời câu hỏi. vòng ngoài. (Vòng ngoài thường là SELECT đầu tiên được gặp trong dãy lệnh. để đưa ra kết quả AVG(PRICE) 56. Như tên của nó đã chỉ rõ. lưu ý rằng vòng trong trước hết tìm giá trị giá lớn nhất.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.

vì giá trị tổng cộng là tích của số sản phẩm hiện có và giá của nó. blade 11/26/1990 11/26/1990 SUM.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. blade B&D jigsaw. bạn có thể dùng SELECT SUM(ON_HAND*PRICE) FROM INVENTRY.87 V_CODE 24288 24288 24288 89-WRE-Q Houselite chain saw.99 109. để tạo ra kết quả dưới đây: SALE_CODE 1 2 MIN(PRICE) 5. 4.87 8. theo bất cứ điều kiện nào bạn áp đặt.45 4. Hàm SUM tính tổng cho một thuộc tính đã chỉ ra nào đó. Kết quả đưa ra như sau: P_CODE P_DESCRIPT STOCK_DATE ON_HAND MIN_QUANT PRICE 11 8 6 5 3 3 256. xây dựng và quản trị CSDL Một danh sách theo thứ tự giá giảm dần của tất cả các sản phẩm có giá lớn hơn giá trị trung bình có thể được tạo ra bởi SELECT * FROM INVENTRY WHERE PRICE > (SELECT AVG(PRICE) FROM INVENTRY) ORDER BY PRICE DESC.92 99. Nhóm dữ liệu Phân loại tần số xuất hiện có thể được tạo ra một cách nhanh chóng và dễ dàng với mệnh đề GROUP BY của SQL. 12in. nếu bạn muốn tìm giá trị tổng cộng của tất cả các sản phẩm theo thống kê. 16in 08/11/1991 2232/QTY 2232/QWE B&D jigsaw. để tìm ra giá trị nhỏ nhất ứng với từng mã bán hàng. MIN(PRICE) FROM INVENTRY GROUP BY SALE_CODE. Chẳng hạn. Chẳng hạn. Mệnh đề GROUP BY có thể được kết hợp với mọi hàm số học.99 Trang 110 . sử dụng SELECT SALE_CODE. 8in.

BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. PRICE FROM INVENTRY WHERE PRICE > 50. Trang 111 . đồng thời bạn đang ra lệnh so sánh một biến duy nhất này với tất cả các biến trong bảng.75 11. AVG(PRICE) FROM INVENTRY GROUP BY SALE_CODE. Lệnh VIEW đặc biệt hữu dụng do nó được dùng để hạn chế người dùng truy cập vào phần đã chọn của dữ liệu trong bảng. sẽ đưa ra thông báo lỗi not a GROUP BY expression (không phải biểu thức GROUP BY) vì biến nhóm được chỉ rõ duy nhất là SALE_CODE. Để ý cú pháp trong dãy lệnh dưới đây. xây dựng và quản trị CSDL Tương tự bạn có thể tìm được giá trung bình trong mỗi mã bán hàng bởi SELECT SALE_CODE.00USD. Do đó.00. Bảng lôgic này chỉ tồn tại trong bộ nhớ. Bảng lôgic INVENT_2 chỉ chứa hai thuộc tính được ấn định (P_CODE và PRICE) và kèm theo đó là chỉ ứng với các giá lớn hơn 50. đồng thời vẫn được xử lý như một bảng thực. để đưa ra kết quả SALE_CODE 1 2 AVG(PRICE) 64.43 71. không thể nhóm PRICE bởi SALE_CODE!) 5. có thể tạo ra bảng ảo sẵn dùng để tránh các nguy cơ người dùng ngẫu nhiên hoặc (chủ ý) xoá dữ liệu hoặc bổ sung dữ liệu sai vào bảng thực.59 Nhớ rằng mệnh đề GROUP BY không thể theo dõi các thuộc tính không được mô tả trong lệnh SELECT. CREATE VIEW INVENT_2 AS SELECT P_CODE. Bảng ảo: việc tạo các khung nhìn Bạn có thể tạo ra một bảng lôgic (ảo) với lệnh VIEW. Chẳng hạn. nó tạo ra bảng được đặt tên là INVENT_2. câu vấn tin SELECT * FROM INVENTRY GROUP BY SALE_CODE. (Chẳng hạn.

khả năng tạo ra nhanh chóng và hiệu quả các chỉ mục tại thời điểm bất kỳ là quan trọng. 6. Trang 112 . CREATE UNIQUE INDEX P_CODEX ON INVENTRY(P_CODE). Vì vậy. Đồng thời khả năng hạn chế người dùng vào các phần dữ liệu được chỉ rõ của chúng ta là yếu tố cơ bản đảm bảo tính bí mật cũng như an toàn dữ liệu. Chẳng hạn. Chỉ mục SQL Bạn đã biết trong chương 2 chỉ mục là gì và cách mà nó được dùng để nâng cao hiệu quả tìm kiếm dữ liệu. Tuy nhiên. Và về sau bạn cũng sẽ thấy nhu cầu cần có các chỉ mục bổ sung trong quá trình sử dụng bảng. dãy lệnh dưới đây tạo ra chỉ mục với tên P_CODEX. Các chỉ mục SQL có thể được tạo ra trên cơ sở các thuộc tính đã chọn. theo đó bảo toàn cấu trúc chỉ mục trong từ điển dữ liệu.87 109. Kết quả đạt được là: P_CODE 89-WRE-Q 2232/QWE 2232/QTY PRICE 256. xây dựng và quản trị CSDL Sau khi đã tạo ra bảng lôgic.92 * Với các khung nhìn chúng ta có thể làm cho mọi dữ liệu sẵn dùng với người dùng đồng thời không phải bận tâm đến các hành vi làm sai dữ liệu trong bảng thực. Đặc điểm như vậy đặc biệt hữu dụng khi thuộc tính chỉ mục là khoá chính với các giá trị không trùng nhau. Các chỉ mục thường được tạo ra để đáp ứng một loại tìm kiếm đặc biệt sau khi các bảng đã được sử dụng một thời gian nào đó. SQL sẽ không cho bạn ghi đè lên một chỉ mục đang tồn tại trước khi cảnh báo bạn.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. dựa vào thuộc tính P_CODE được lưu trong bảng INVENTRY: CREATE INDEX P_CODEX ON INVENTRY(P_CODE).99 99. theo đó nâng cao tính an toàn dữ liệu của hệ thống. nhiều RDBMS chứa các tiện ích sẽ cho phép bạn mô tả các chỉ mục theo các thuộc tính được chọn khi các bảng được tạo ra. Bạn cũng có thể tạo một chỉ mục kèm với việc ngăn chặn bạn dùng giá trị đã được dùng trước đó. SELECT sẽ chỉ trình bày các thuộc tính được giới hạn ở trên: SELECT FROM INVENT_2.

45 5.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Nhớ rằng SQL dựa trên đại số quan hệ. liên kết được thành lập theo V_CODE: Bảng INVENTRY VENDOR Các thuộc tính cần chỉ ra P_DESCRIPT. power saw blade 2. V_PHONE Thuộc tính liên kết V_CODE Vậy lệnh có thể là SELECT INVENTRY.1/4in. INVENTRY.) Để thực hiện lệnh JOIN thành công. Liên kết các bảng CSDL Khả năng kết hợp (JOIN) các bảng theo các thuộc tính chung có lẽ là sự phân biệt quan trọng nhất giữa CSDL quan hệ và các CSDL khác. 1/8in fine Sledge hammer.40 256.99 99. danh sách các thuộc tính được liệt kê trong SELECT phải được xác định rõ.I.I.87 4. JOIN bằng và các ví dụ trong chương 2. 100 PVC pipe. 8ft Rat-tail file. Vì V_CODE là khoá ngoại trong bảng INVENTRY và khóa chính trong bảng VENDOR. 12lb Houselite chain saw. Dãy lệnh trên đưa ra kết quả: P_DESCRIPT 7. Inc Q&D Building Supplies Q&D Building Supplies J.V_CODE = VENDOR. VENDOR WHERE INVENTRY.P_DESCRIPT. Inc. 8in. 12in. PRICE V_COMPANY. SQL sẽ đưa ra thông báo lỗi duplicate value in index (giá trị đã có trong chỉ mục) 7.99 14.PRICE.95 109.25in.V_PHONE FROM INVENTRY. 16in B&D jigsaw.5in. Lệnh JOIN được thực hiện khi dữ liệu cần lấy ra từ nhiều hơn một bảng tại một thời điểm. blade Hardware cloth. (Nếu cần thiết.87 39. blade PRICE 14.V_CODE. giả sử bạn muốn liệt kê thông tin được dẫn ra từ hai bảng CSDL ROBCOR. xây dựng và quản trị CSDL Nếu bạn cố gắng đưa vào giá trị P_CODE đã có. wood screw. VENDOR. 3.95 5. VENDOR.99 8.92 V_COMPANY Q&D Building Supplies J. xem lại các định nghĩa JOIN tự nhiên.V_COMPANY.50ft Claw hammer B&D jigsaw. Inc Harding Super Wholesale Harding Super Wholesale Charlie’s Wholesale Rather’s Building. Supplies. Supplies. Chẳng hạn. Harding Super Wholesale V_PHONE 800-333-9011 666-233-1281 800-333-9011 800-333-9011 666-233-1281 800-213-9999 800-213-9999 212-667-0090 800-234-1200 800-213-9999 Trang 113 .5in.

Inc Q&D Building Supplies Charlie’s Wholesale Harding Super Wholesale Harding Super Wholesale Harding Super Wholesale V_PHONE 800-333-9011 800-333-9011 800-234-1200 666-233-1281 666-233-1281 800-333-9011 212-667-0090 800-213-9999 800-213-9999 800-213-9999 Lưu ý rằng dãy lệnh SQL trên kết nối một hàng trong bảng INVENTRY với một hàng phù hợp theo cột V_CODE của bảng VENDOR. bạn có thể tạo ra một danh sách với thứ tự biết trước với điều kiện ORDER: SELECT INVENTRY. Vì nhà cung cấp bất kỳ có thể chuyển một số bất kỳ các sản phẩm được đặt mua vào CSDL ROBCOR.99 V_COMPANY Q&D Building Supplies Q&D Building Supplies Rather’s Building.V_CODE ORDER BY PRICE. Trên thực tế.I. bạn có thể nhận được một danh sách với thứ tự khác nhau tại các thời điểm khác nhau.87 5.99 39. chúng ta sẽ nhận được một kết quả là tích tương ứng với kết nối tự nhiên.5in. wood screw. blade B&D jigsaw. danh sách của bạn sẽ luôn được sắp xếp từ giá thấp nhất tới giá cao nhất: P_DESCRIPT Rat-tail file. 8ft Claw hammer 2. J. Supplies. mỗi V_CODE trong VENDOR có thể tương ứng với nhiều hàng V_CODE trong INVENTRY. 3.I.50ft B&D jigsaw.92 256. Inc J. power saw blade Hardware cloth.25in. nếu cần thiết.87 109. INVENTRY. Nói cách khác. (Xem chương 2 để ôn lại các khái niệm này. bảng INVENTRY có thể nhiều mục V_CODE ứng với mỗi mục V_CODE trong bảng VENDOR. Inc.V_COMPANY. VENDOR. Trong trường hợp này.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.PRICE.P_DESCRIPT. blade Houselite chain saw.4 14.V_CODE = VENDOR. 1/8in fine PVC pipe.95 8. 12lb 7.99 5. 12in. VENDOR. Nếu chúng ta quên không mô tả mệnh đề WHERE.V_PHONE FROM INVENTRY. xây dựng và quản trị CSDL Kết quả đưa ra có thể được trình bày theo một thứ tự khác do lệnh SQL đưa ra một danh sách dựa trên vị trí con trỏ hiện thời. Tuy nhiên. 8in. Supplies.1/4in.45 14.) Vì bảng INVENTRY chứa mười Trang 114 .95 99.5in. VENDOR WHERE INVENTRY. 16in PRICE 4. 100 Sledge hammer.

Tất cả các lệnh SQL đều có thể được dùng để kết nối bảng. PRICE. Một bí danh đặc biệt hữu dụng khi một bảng phải được kết nối với chính nó theo các nhóm.V_CODE = VENDOR. SQL chuẩn sử dụng định nghĩa lược đồ: CREATE SCHEMA AUTHORIZATION <Người tạo> Nhiều cài đặt SQL sử dụng CREATE DATABASE <Tên CSDL> hoặc một số dạng gần gũi với lệnh này. INVENTRY. (Chúng ta cũng đã chỉ liệt kê các tên bảng . VENDOR B WHERE A. quản lý dữ liệu.V_CODE AND INVENTRY. Lưu ý rằng chúng ta đã dùng bí danh “A” và “B” để gắn cho các bảng INVENTRY và VENDOR trong dãy lệnh dưới đây. dãy lệnh dưới đây hoàn toàn có thể chấp nhận được trong SQL: SELECT INVENTRY. Chẳng hạn.V_COMPANY. VII. Chuẩn SQL sử dụng cấu trúc lệnh CREATE TABLE <Tên bảng> Trang 115 . Tạo CSDL. Tạo các bảng CSDL.P_DESCRIPT. tích Đề-các có thể đưa ra một danh sách (10 × 5) = 50 hàng do mỗi hàng trong INVENTRY có thể kết nối với từng hàng của bảng VENDOR.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. VENDOR WHERE INVENTRY. V_COMPANY.) SELECT P_DESCRIPT. V_PHONE FROM INVENTRY A. và thao tác (vấn tin) dữ liệu.không đi kèm thuộc tính – như một nguồn dữ liệu do các bảng không chứa các tên trùng lặp xuất hiện trong lệnh SELECT. VENDOR.PRICE. Bất cứ một tên bảng hợp pháp nào đều có thể được dùng như một bí danh. VENDOR. 2.V_CODE ORDER BY PRICE. Một bí danh (tên gọi khác) có thể được dùng để định danh các bảng được dùng để lấy ra dữ liệu.V_CODE = B.STOCK_DATE > 07/01/91.V_PHONE FROM INVENTRY. xây dựng và quản trị CSDL hàng và bảng VENDOR chứa năm hàng. Định nghĩa dữ liệu 1. TÓM TẮT Cấu trúc lệnh SQL có thể được chia thành ba tập thủ tục: định nghĩa dữ liệu.

SELECT S_NAME. .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. SELECT S_NAME. S_GPA FROM STUDENT Trang 116 CHAR(8) NOT NULL. chứa các thuộc tính S_NUM. chẳng hạn dBASE IV và ORACLE. bao gồm OS/2 Database Manager của IBM và XDB. DECIMAL(4. CHAR(25). Batmman. Đọc tài liệu tra cứu của phần mềm tương ứng để định rõ các cú pháp thích hợp. INSERT INTO STUDENT VALUES(‘23122456’.67). • Tạo bảng STUDENT. S_STATE và S_GPA. CREATE TABLE STUDENT (S_NUM S_NAME S_DOB S_STATE S_GPA • Nhập dữ liệu vào bảng STUDENT.”) SELECT * FROM STUDENT. Nhiều cài đặt SQL. ‘Jane P. S_NUM là khoá chính của bảng STUDENT. Genaldo’. UPDATE được dùng để thay đổi (cập nhật) dữ liệu trong bảng. • Liệt kê tất cả các thuộc tính cho tất cả các hàng. xây dựng và quản trị CSDL Quản lý dữ liệu và vấn tin INSERT được dùng để nhập dữ liệu vào trong bảng. DELETE được dùng để xoá các hàng bảng. yêu cầu một lệnh SQL phải được kết thúc với một dấu chấm phảy. Một số khác. S_DOB. S_NAME.2)). Dùng NOT NULL kết hợp với khoá chính để khẳng định toàn vẹn thực thể. • Liệt kê các thuộc tính đã chọn ứng với sinh viên có tên là George W. S_GPA FROM STUDENT. Tóm tắt lệnh SQL dưới đây trình bày cách sử dụng các câu vấn tin SQL. (Kí hiệu * là kí tự thay thế chỉ ra “tất cả các hàng. ‘02/12/46’. 3. CHAR(2). SELECT là cơ sở cho mọi câu vấn tin SQL. DATE. với bảng ví dụ là STUDENT. ‘TN’. • Liệt kê các thuộc tính đã chọn ứng với mọi hàng. không chấp nhận cách sử dụng với dấu chấm phảy như vậy.

• Sửa chữa. • Xoá hàng. DELETE FROM STUDENT WHERE S_NUM = ‘24112324’. SELECT * FROM STUDENT WHERE S_GPA = 3. một số khác dùng dạng ngày mặc định ’01-JAN-40’. • Lưu bảng. S_GPA = 3. ROLLBACK. riêng dBASE IV yêu cầu dùng hàm STOD đẻ chuyển xâu ngày thành ngày Julian: Trang 117 . COMMIT STUDENT.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. (Một số cài đặt SQL không yêu cầu dùng các dấu đóng mở ngoặc để chặn các giá trị ngày. Batmman’. UPDATE STUDENT SET S_NAME = ‘Jane G. Các toán tử toán học bao gồm: = < > <= >= <> Bằng Nhỏ hơn Lớn hơn Nhỏ hơn hoặc bằng Lớn hơn hoặc bằng Không bằng Các toán tử toán học có thể được dùng trên các xâu cũng như trên các số.76 WHERE S_NUM = ‘231234536’. xây dựng và quản trị CSDL WHERE S_NAME = ‘George W. • Sử dụng thuộc tính dữ liệu để hạn chế kết quả vấn tin. Bronner’.00. So sánh xâu được thực hiện từ trái qua phải theo các giá trị mã ASCII. SELECT * FROM STUDENT WHERE S_DOB < ‘01/01/40’. Do đó ‘AB’ < ‘BB’. • Khôi phục nội dung bảng. • Sử dụng các toán tử toán học để hạn chế kết quả vấn tin.

00 AND S_GPA <= 3. SELECT * FROM STUDENT WHERE S_GPA BETWEEN 3. S_GPA FROM STUDENT WHERE S_DOB < ‘01/01/40’ AND S_GPA >= 3. Các toán tử lôgic bao gồm AND. SELECT S_NAME. xây dựng và quản trị CSDL SELECT * FROM STUDENT WHERE S_DOB < CTOD(‘01/01/40’).50. SELECT * FROM STUDENT WHERE S_DOB IS NULL. Một số cài đặt SQL không hỗ trợ BETWEEN. ‘2543667’). Để kiểm tra ngày null.) • Sử dụng các toán tử lôgic để hạn chế các kết quả đưa ra. • Kiểm tra điều kiện null.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.00. SELECT * FROM STUDENT WHERE S_NUM IN (‘22122454’.50. và NOT. dùng SELECT * FROM STUDENT WHERE DTOC(S_DOB = ‘ / / ‘). SELECT * FROM STUDENT WHERE S_STATE NOT ‘IN’. liệt kê các hàng tương ứng với các số sinh viên 22122454 hoặc Trang 118 . dBASE IV không hỗ trợ toán tử null. Một câu vấn tin tương tự có thể được tạo ra với các toán tử toán học: SELECT * FROM STUDENT WHERE S_GPA >= 3. • Xác định khoảng giá trị cho các thuộc tính trong vấn tin: BETWEEN. OR. • Kiểm tra các giá trị trong một tập.00 AND 3. ‘21222456’.

ALTER TABLE STUDENT ADD (S_PHONE CHAR(8)).Sao chép các giá trị cột tương ứng vào bảng mới. ALTER TABLE STUDENT ADD (S_PHONE CHAR(8) S_HONOR CHAR(12)). .Thêm cột. .Cập nhật phức tạp.79 WHERE S_NUM = ‘21332433’. . SELECT * FROM STUDENT WHERE S_NUM EXIST.3)). CHAR(8) . . . • Cập nhật dữ liệu. • Sao chép một phần bảng.Mục dữ liệu đơn.Tạo cấu trúc bảng.Thay đổi đặc điểm thuộc tính. ALTER TABLE STUDENT MODIFY (S_GPA DEC(5. • Thay đổi cấu trúc bảng.Cập nhật nhiều cột. ST_NAME ST_NUMBER CHAR(25)). CREATE TABLE TEMP ( NOT NULL. • Kiểm tra sự tồn tại của các giá trị trong thuộc tính. xây dựng và quản trị CSDL 21222456 hoặc 2543667. Lưu ý: Kiểu dữ liệu không thể bị thay đổi trừ khi cột không có giá trị (rỗng). INSERT INTO TEMP(ST_NUMBER. .BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. UPDATE STUDENT SET S_HONOR = ‘President list’ WHERE S_GPA > 3.75. UPDATE STUDENT SET S_GPA = 2. ST_NAME) Trang 119 .

SELECT * FROM STUDENT WHERE S_NAME NOT LIKE ‘Smith%’. SELECT * FROM STUDENT WHERE UPPER(S_NAME) = ‘JOHN D. • Tạo sự phù hợp cho các xâu bộ phận Sử dụng các kí tự thay thế % và _. DROP TABLE <Tên bảng>. S_NAME FROM STUDENT. . S_GPA DESC. SELECT DíTINCT S_GPA FROM STUDENT. • Các hàm sô học SQL: COUNT. SELECT * FROM STUDENT WHERE S_NAME LIKE ‘Smith%’. MIN. SMITH’.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. Trang 120 . SELECT * FROM STUDENT ORDER BY S_NAME.Nhạy cảm dạng chữ. SQL xem kí tự in hoa và in thườn là khác nhau.Xoá bảng khỏi CSDL. MAX. SUM. Do đó. SELECT * FROM STUDENT ORDER BY S_NAME. SELECT * FROM STUDENT WHERE S_NAME LIKE ‘J__n_s’. • Loại bỏ trùng lặp trong danh sách. Một số cài đặt SQL (dBASE IV. S_GPA. . xây dựng và quản trị CSDL SELECT S_NUM. • Liệt kê theo thứ tự Sử dụng ORDER BY <danh sách thuộc tính> DESC. ORACLE) hỗ trợ hàm UPPER cho phép chuyển chữ in thường thành chữ in hoa. ‘Smith’ và ‘SMITH’ sẽ được xem là các tên khác nhau. qua đó cho phép tạo sự tương ứng trong mọi trường hợp.

• Tạo chỉ mục SQL.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. • • Tạo bảng ảo: VIEW CREATE VIEW TEMP_2 SELECT S_NAME. CREATE INDEX NUMDEX ON STUDENT(S_NUM). Nếu chỉ mục được dùng để giúp bạn tránh sử dụng giá trị trùng lặp. S_STATE FROM STUDENT GROUP BY S_GPA. • Nhóm dữ liệu SELECT S_GPA. đưa ra số các điểm trung bình GPA của các sinh viên khác nhau. • Kết nối các bảng Trang 121 . dùng câu vấn tin lặp.. SELECT MAX(S_GPA) FROM STUDENT. Tìm ra các thuộc tính kết hợp với các kết quả của các hàm số học này. CREATE UNIQUE INDEX NUMDEX ON STUDENT(S_NUM). S_GPA FROM STUDENT WHERE S_STATE = ‘TN’. SELECT AVG(S_GPA) FROM STUDENT. xây dựng và quản trị CSDL SELECT COUNT(DISTINCT S_GPA) FROM STUDENT. đưa ra điểm GPA cao nhất. đưa ra điểm GPA trung bình. đưa ra tổng số điểm GPA của tất cả các sinh viên.. SELECT SUM(S_GPA) FROM STUDENT. sử dụng điều kiện UNIQUE. SELECT * FROM STUDENT WHERE S_GPA = (SELECT MAX(S_GPA) FROM STUDENT).

4. W. VENDOR. Bảng dữ liệu nguồn phải được xác định. trả lời các câu hỏi dưới đây: 1. P_DESCRIPT và V_CODE. Viết mã lệnh SQL thay đổi mã công việc thành 5 cho tất cả những người có số nhân sự PER_NUM là 778. Giả sử dữ liệu còn lại đã được đưa vào.VENDOR WHERE PROD. 3. Trang 122 .V_CODE = VENDOR. CÂU HỎI ÔN TẬP Tất cả các câu hỏi ôn tập đều dựa vào bảng có tên EMP_1 dưới đây.V_CODE. Các thuộc tính của bảng PROD là P_NUM (khoá chính). 2. Tất cả các lệnh SQL và các hàm nêu trên đều có thể được dùng kết hợp với các bảng kết nối. Danh sách chứa các thuộc tính P_DESCRIPT và V_NAME có thể nhận được bởi SELECT PROD. viết mã lệnh SQL để nhập hai hàng dữ liệu vào trong bảng EMP_1. VIII. Các thuộc tính của bảng VENDOR là V_CODE (khoá chính) và V_NAME. xây dựng và quản trị CSDL Thao tác được thực hiện khi dữ liệu cần được lấy ra từ hai hay nhiều bảng khác nhau. PER_NUM 287 853 778 855 750 LASTNAME FIRSTNAME Johnson Smithfied Alonzo Washington Smith Alice William Maria Brandon Larry MI K. Viết mã lệnh SQL lưu bảng EMP_1. Giả sử tồn tại hai bảng PROD và VENDOR. B.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.V_NAME FROM PROD. D. viết mã lệnh SQL liệt kê tất cả các thuộc tính ứng với mã công việc 5. Viết mã lệnh SQL tạo cấu trúc bảng.P_DESCRIPT. HIRED 09/29/83 03/20/88 07/01/87 12/12/85 11/09/89 JOB_CODE 5 2 4 2 3 Cấu trúc bảng EMP_1 được chỉ ra dưới đây: PER_NUM LASTNAME FIRSTNAME MI HIRED JOB_CODE CHAR(3) CHAR(12) CHAR(10) CHAR(2) DATE CHAR(1) Với các thông tin này. P. 5. Sau khi tạo được cấu trúc bảng ở câu 1.

W. W. bảng EMP_1 sẽ chứa dữ liệu như dưới đây: PER_NUM LASTNAME 287 853 778 855 750 Johnson Smithfied Alonzo Washington Smith FIRSTNAME MI Alice William Maria Brandon Larry K. 7. Lưu ý: Sử dụng toán tử lôgic gộp mọi thông tin được cho trong câu hỏi này. Khi bạn hoàn thành các câu hỏi 10 và 11. 9.85 2. B. Viết mã lệnh SQL để nhập giá trị thuộc tính BONú_PCT 3.00 4. P. Smithfield.85 ứng với người có số nhân sự PER_NUM tương ứng là 287. D. tức là. Giả sử rằng tất cả các mục BONUS_PCT đã được tạo ra tại thời điểm này và bảng EMP_1 hiện chứa dữ liệu như dưới đây: PER_NUM LASTNAME FIRSTNAME MI 287 853 778 855 750 Johnson Smithfied Alonzo Washington Smith Alice William Maria Brandon Larry K. Sử dụng dãy lệnh đơn. (Bạn có thể giả thiết rằng bảng được khôi phục về trạng thái chỉ ra trong bài tập 11.00 4.75 0. 11. viết mã lệnh SQL đưa vào số dự án PROJ_NUM là 18 ứng với các nhân viên có loại mã công việc (JOB_CODE) là 2. HIRED 09/29/83 03/20/88 07/01/87 12/12/85 11/09/89 JOB_CODE BONUS_PCT PROJ_NUM 5 2 4 2 3 3. được thuê vào ngày 03/20/88 và mã công việc của họ là 2.85 2.52 10. Sử dụng dãy lệnh đơn. 8. B. Viết mã lệnh SQL nhập PROJ_NUM là 14 ứng với các nhân viên được thue trước ngày 1 tháng 1 năm 1987 và có mã công việc ít nhất là 3.52 25 18 25 18 25 (Bạn có thể giả thiết rằng bảng đã được lưu lại tại thời điểm này!) 12. Viết mã lệnh SQL để bổ sung hai cột. BONUS_PCT và PROJ_NUM. HIRED 09/29/83 03/20/88 07/01/87 12/12/85 11/09/89 JOB_CODE 5 2 4 2 3 BONUS_PCT PROJ_NUM 3. cho bảng EMP_1. Thuộc tính BONUS_PCT là DECIMAL có hai vị trí thập phân.75 0. P. thuộc tính PROJ_NUM là xâu gồm tối đa hai kí tự. Viết mã lệnh SQL xoá hàng ứng với người có tên là Wiliam P.00 3. D.) Trang 123 . bảng sẽ chứa dữ liệu tồn tại trước khi bạn tạo ra sự thay đổi ở câu 5 và 6. viết mã lệnh SQL đưa vào số dự án (PROJ_NUM) là 25 ứng với các nhân viên có loại mã công việc (JOB_CODE) là 3 hoặc cao hơn.00 3.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. xây dựng và quản trị CSDL 6. Viết mã lệnh SQL khôi phục dữ liệu về trạng thái trước đó.

Viết mã lệnh SQL tìm giá trị trung bình tỉ lệ phần trăm phần thưởng trong bảng EMP_1. 17. P. B. BÀI TẬP 1. Tạo bảng tạm thời có tên là TEMP_1. viết mã lệnh SQL đưa ra kết quả dưới đây: PROJ_NAME LASTNAME FIRSTNAME MI Rolling Run Starflight Rolling Run Starflight Rolling Run Johnson Smithfied Alonzo Washington Smith Alice William Maria Brandon Larry K. JOB_CODE 5 2 4 2 3 PROJ_MGR George W. 16. Sao chép các giá trị EMP_1 tương ứng sang bảng TEMP_1. CHAR_CUS và AIRCRAFT. b. các hàng ứng với cả Smith và Smithfield đều sẽ được gộp vào danh sách kết quả. Carson Jane M. Gợi ý: Dùng kí tự thay thế. Carson Jane M. Gosinger George W. D.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. bài tập 12. Viết mã lệnh SQL chỉ liệt kê số dự án khác nhau có trong bảng EMP_1. (Nội dung bảng đã chỉ ra trong 2. Carson Gợi ý: Bạn phải kết nối các bảng EMP_1 và PROJECT. IX. Giả sử rằng CSDL của bạn cũng chứa bảng PROJECT dưới đây: PROJ_NUM PROJ_NAME PROJ_MGR 18 25 Starflight Rolling Run Jane M. với cấu trúc gồm các thuộc tính PER_NUM và BONUS_PCT của bảng EMP_1. 19. Gosinger George W. Nói cách khác. chứa thông tin giống trong câu 16.) Trang 124 . Viết mã lệnh SQL để liệt kê tất cả các nhân viên có tên cuối bắt đầu bằng ‘Smith’. Viết dãy lệnh SQL để a. PILóT. Viết lệnh SQL xoá bảng TEMP_1 vừa tạo ra khỏi CSDL. Gosinger George W. 14. xây dựng và quản trị CSDL 13. Viết mã lệnh SQL tạo ra một bảng ảo với tên REP_1. Viết mã lệnh SQL tạo một danh sách cho dữ liệu trong bảng EMP_1 theo thứ tự tăng dần của phần trăm phần thưởng. Carson Với thông tin đã cho. 15. Tạo CSDL với tên ROBAIR chứa các bảng CHARTER. 20. 18. W.

1 9.9 78.4 345.6531792 4. viết mã lệnh SQL để a.4 345.0816327 4. Với nội dung của bốn bảng được tạo ra trong bài tập 1.4 184. FUEL. c.2 138.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế. sử dụng số giờ tổng cộng đã bay được lấy từ bảng CHARTER.2 DIST/HR_FL DIST/FUEL 178. khuôn dạng kết quả đưa ra được xác định bởi phần mềm bạn dùng. Tạo danh sách dưới đây cho máy bay 2778V: C_DATE AC_NO 05/26/91 05/30/91 06/01/91 01/03/91 2778V 2778V 2778V 2778V DEST AC_TYPE TYS MOB BNA GNV PA-31-350 Navajo PA-31-350 Navajo PA-31-350 Navajo PA-31-350 Navajo DIST 644 884 320 1574 HR_FL 3. FUEL/HR_FL FROM CHARTER WHERE AC_NO = ‘2778V’.9 2.2 FUEL 138. Cập nhật bảng AIRCRAFT cho máy bay 2778V.1 9. có thể dùng dãy lệnh SQL SELECT HR_FL. Tạo danh sách dưới đây cho máy bay 2778V: C_DATE 05/26/91 05/30/91 06/01/91 01/03/91 AC_NO 2778V 2778V 2778V 2778V DIST 644 884 320 1574 HR_FL FUEL 3.88889 180.2 138.521739 Tallahoga Browing Lamont Lamont Gợi ý: Hai cột kết quả cuối cùng được tính toán thay vì được lấy ra từ bảng.9 78.38095 171.7809627 4. Tạo bảng ảo (đặt tên là AC2778V) chứa kết quả đưa ra trình bày ở 2a. xây dựng và quản trị CSDL 2.333333 37. 3.4 184.5596756 FUEL/HR_FL P_LNAME 38.4 345. Bạn nên học cách điều chỉnh khuôn dạng với sự giúp đỡ của các tiện ích riêng DBMS của bạn.444444 37.9 2.40816 152.08696 4.6 4. Chẳng hạn.6 4.6 4.734694 37. Lưu ý: Vì số giờ bay tổng cộng đã bay trong một giai đoạn có trong bảng Trang 125 .2 b.9 2.1 9. Lưu ý: Mặc dù các giá trị đưa ra không phù hợp với danh sách được chỉ ra. Tạo danh sách dưới đây ứng với máy bay 2778V: C_DATE 05/26/91 05/30/91 06/01/91 01/03/91 AC_NO 2778V 2778V 2778V 2778V DEST DIST HR_F FUEL L TYS 644 MOB 884 BNA 320 GNV 1574 3.9 78.2 P_LNAME Tallahoga Browing Lamont Lamont d.4 184.

tìm dư nợ tổng cộng.725 203.0 4. Tạo một danh sách khách hàng chưa thanh toán. 180 25. xây dựng và quản trị CSDL CHARTER là 19. J. Trang 126 .5 947 2. 6.075 186.8. CSDL CH3SQL được tạo ra để giúp tự động các thủ tục bán hàng. gồm những ngày nằm trong khoảng từ 30 tháng 5 năm 1991 đến 1 tháng 6 năm 1991. kể các ngày đó.95 3.0 08/05/91 429. J.8 180 SAU CẬP NHẬT AC_NO AC_TYPE 2778V FB LAST_100 TTA 08/05/91 9231. Nhóm dữ liệu máy bay theo số máy bay để tạo ra kết quả sau đây: AC_NO 1484P 2289L 2778V 4278Y COUNT(*) 2 4 4 2 AVG(DIST) AVG(HR_FL) AVG(FUEL) 478 664 855.7 TTLE 1144. Đặc biệt. Cho dữ lưu trong bảng CHAR_CUS.45 80.45 8. C_DATE 05/26/91 05/30/91 05/30/91 06/01/91 DEST AC_TYPE STL MY MOB BNA PA-23-250 Aztec C-90A King Air PA-31-350 Navajo PA-31-350 Navajo C_NAME C. 7. tìm dư nợ trung bình. Pary Smithson Industries C.825 4.95 5.2 TTRE TAS P_PAY 25.BAN CHỈ ĐẠO CNTT CỦA CƠ QUAN ĐẢNG Thiết kế.9 TTLE 1124.00 36. bán hàng đưa ra một hoá đơn có dạng tương tự dạng đơn giản mô tả như hình dưới đây. Cho dữ lưu trong bảng CHAR_CUS.15 222. Tạo ra một báo cáo tương tự như mô tả trong bài tập 7.00 PA-31-350 Navajo 36. BAN ĐẦU AC_NO AC_TYPE 2778V PA-31-350 Navajo FB LAST_100 TTA 9211. nhưng hạn chế kết quả đưa ra theo ngày. 9.0 TTRE TAS P_PAY 449.8 nên số giờ trên hàng cập nhật ứng với máy bay 2778V phải lớn hơn số giờ ban đầu 19. Pary Smithson Industries 5.

Sign up to vote on this title
UsefulNot useful