Download as pdf or txt
Download as pdf or txt
You are on page 1of 404

CƠ SỞ DỮ LIỆU

(DATABASE)

BỘ MÔN HỆ THỐNG THÔNG TIN


BỘ MÔN HỆ THỐNG THÔNG TIN
TỔNG QUAN VỀ MÔN HỌC

 Môn học cung cấp những kiến thức về:


 Kiến trúc hệ thống cơ sở dữ liệu.

 Mô hình quan hệ-thực thể, và các nguyên tắc thiết kế cơ sở dữ liệu.

 Mô hình quan hệ, đại số quan hệ, SQL và khung nhìn.

 Phụ thuộc hàm và khóa, các ràng buộc toàn vẹn, các dạng chuẩn, và

chuẩn hóa.
 Tối ưu hóa câu hỏi truy vấn

2
TỔNG QUAN VỀ MÔN HỌC…

 Phân bổ thời gian: Tổng số: 3TC 45 tiết


 Lý thuyết: 30 tiết;

 Bài tập, thảo luận: 15 tiết.

 Yêu cầu: Đối với sinh viên:


 Dự lớp đầy đủ, Nộp bài tập lớn

 Tham gia thảo luận, Dự kiểm tra và thi

3
TÀI LIỆU THAM KHẢO

1. Đặng Thị Thu Hiền, Cơ sở dữ liệu, NXB Giao Thông Vận Tải, 2013.

2. Phạm Thị Hoàng Nhung, Cơ sở dữ liệu I, Trường Đại học Thuỷ Lợi.

3. Phạm Thị Hoàng Nhung, Cơ sở dữ liệu II, Trường Đại học Thuỷ Lợi.

4. Gillenson, Mark L. : Fundamentals of database management

systems //Mark L. Gillenson. - Hoboken, NJ ::Wiley,,2005

4
ĐỀ CƯƠNG TỔNG QUAN MÔN HỌC

Số tiết
Thảo Tiểu
TT Tên chương Tổng Lý
luận, BT, luận,
số thuyết
TH KTra
TỔNG QUAN HỆ THỐNG CƠ SỞ DỮ
1 2 2
LIỆU
2 GIỚI THIỆU THIẾT KẾ CƠ SỞ DỮ LIỆU 5 3 2
3 MÔ HÌNH QUAN HỆ 8 6 2
4 SQL 14 8 6
5 PHỤC THUỘC HÀM VÀ KHÓA 7 5 2
6 DẠNG CHUẨN VÀ CHUẨN HÓA 9 6 3
Cộng: 45 30 15

5
BÀI TẬP LỚN

 Mỗi sinh viên tự chọn một đề tài thực tế để làm

 Yêu cầu trình bày báo cáo:

 Nội dung từ 15-25 trang

 Font: Time New Roman, size 13, dãn dòng 1.3 cm

 Định dạng trang: Đầu cuối trang 2cm, lề trái 3.5, lề phải 2.

6
BÀI TẬP LỚN …
Nội dung báo cáo:
Lời nói đầu
Mục lục: yêu cầu đánh mục lục tự động
I. Xác định các quy tắc/ràng buộc, xây dựng mô hình thực thể liên kết ER
II. Chuyển từ mô hình thực thể liên kết sang mô hình quan hệ
III. Xác định khóa
IV. Chuẩn hóa lược đồ quan hệ thành dạng chuẩn 3NF hoặc BCNF
V. Câu lệnh truy vấn dữ liệu SQL
Kết luận
Tài liệu tham khảo

7
ĐÁNH GIÁ MÔN HỌC

TT Các hình thức đánh giá Trọng số


1 QT= Bài tập, Chuyên cần, xây dựng 0.5
bài, Kiểm tra, BTL
(BT ở nhà 20%, KT trên lớp 30%,
Chuyên cần+ Thường xuyên 20%, BTL
30%)
2 Thi hết môn (THM): Thi viết 0.5
Điểm môn học = QT x 0.4 + THM x 0.6

8
Chương 1

TỔNG QUAN HỆ THỐNG CƠ SỞ

DỮ LIỆU

9
TỔNG QUAN VỀ HỆ CSDL

 Sự cần thiết của một CSDL

 Khái niệm CSDL, Hệ CSDL

 Hệ quản trị CSDL (DBMS – DataBase Management

System)
 Mô hình dữ liệu (Data model)

10
1. SỰ CẦN THIẾT CỦA CSDL

 CSDL đến từ đâu? Nó có vai trò ntn?

11
1. SỰ CẦN THIẾT CỦA CSDL…
 Hệ thống các file cổ điển: Được tổ chức riêng rẽ, phục vụ cho

mục đích của đơn vị

12
1. SỰ CẦN THIẾT CỦA CSDL…

 Hệ thống file là sự cải tiến của hệ thống thủ công (manual system)
 Ưu điểm: Đơn giản, nhanh chóng
 Nhược điểm:
 Thông tin được tổ chức riêng rẽ nhiều nơi làm mất tính nhất quán, dư thừa dữ
liệu.
 Thiếu sự chia sẻ thông tin giữa các vị trí.
 Không thực hiện được truy vấn phức tạp
 Quản trị hệ thống khó và phức tạp
 Khó mở rộng khi lập trình
 Khó thay đổi cấu trúc.
 Tính năng bảo mật thấp.
13
2. CƠ SỞ DỮ LIỆU (DATABASE), HỆ CSDL

 CSDL: là một hệ thống


các thông tin có cấu trúc
được lưu trữ trên các thiết
bị lưu trữ thông tin thứ cấp
(như băng từ, đĩa từ,....),
để thỏa mãn yêu cầu khai
thác thông tin đồng thời
của nhiều người sử
dụng/nhiều chương trình
ứng dụng với những mục
đích khác nhau.

14
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…

 Hệ cơ sở dữ liệu (Database System)


gồm:
 Phần cứng (Hardware)
 Phần mềm (Software)
 Người sử dụng (People)
 Những thủ tục (Procedures)
 Cơ sở dữ liệu (Database)

15
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…

16
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …

17
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …

 Phần cứng: Gồm các thiết bị vật lý của hệ thống


 Phần mềm:
 Hệ điều hành; Hệ quản trị CSDL; Chương trình ứng dụng và phần mềm tiện
ích

 Người dùng: Tất cả những người dùng hệ thống CSDL


 Quản trị hệ thống; Thiết kế dữ liệu; Phân tích hệ thống, lập trình viên và Ngườ
sử dụng

 Thủ tục: Những quy tắc chung trong việc thiết kế và sử dụng hệ thống
 Dữ liệu: Những dữ liệu thực tế thu thập và lưu trữ trong CSDL
18
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …

 Chú ý:

 CSDL phải là một tập hợp các thông tin mang tính hệ thống
chứ không phải là các thông tin rời rạc, không có mối quan hệ
với nhau.

 Các thông tin này phải có cấu trúc và tập hợp các thông tin này
phải có khả năng đáp ứng các nhu cầu khai thác của nhiều

người sử dụng một cách đồng thời.

19
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…

 Ưu điểm nổi bật của CSDL.


 Giảm sự trùng lặp thông tin xuống mức thấp nhất và do đó
bảo đảm được tính nhất quán và toàn vẹn dữ liệu.
 Đảm bảo dữ liệu có thể được truy xuất theo nhiều cách
khác nhau.
 Khả năng chia sẻ thông tin cho nhiều người sử dụng và
nhiều ứng dụng khác nhau.…

20
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…

 CSDL đặt ra những vấn đề cần giải quyết


1- Tính chủ quyền của dữ liệu.
 Do tính chia sẻ của CSDL nên chủ quyền của CSDL dễ bị xâm phạm.
2- Tính bảo mật và quyền khai thác thông tin.
 Cần phải có một cơ chế bảo mật và phân quyền hạn khai thác CSDL.
3- Tranh chấp dữ liệu.
 Cần phải có một cơ chế ưu tiên truy nhập dl, cơ chế giải quyết tình trạng
khóa chết (DeadLock) trong quá trình khai thác cạnh tranh.
4- Đảm bảo dữ liệu khi có sự cố.
 Khi có sự cố như mất điện đột xuất, đĩa hỏng…

21
2. CÁC ĐỐI TƯỢNG SỬ DỤNG CSDL

 Những người sử dụng CSDL không chuyên về lĩnh vực


tin học và CSDL.
 Các chuyên viên tin học biết khai thác CSDL.
 Những người quản trị CSDL. Họ là người tổ chức CSDL
(khai báo cấu trúc CSDL, ghi nhận các yêu cầu bảo mật
cho các dl cần bảo vệ ...).

22
3. HỆ QUẢN TRỊ CSDL - DBMS (DATABASE
MANAGEMENT SYSTEM)

 Hệ phần mềm quản trị CSDL

 Hệ quản trị CSDL là hệ thống các phần mềm hỗ trợ CSDL

giải quyết các vấn đề như tính chủ quyền, cơ chế bảo
mật/phân quyền khai thác CSDL, giải quyết tranh chấp, và
phục hồi dl khi có sự cố ...
 Một số DBMS: Visual FoxPro, MicroSoft Access, SQL-

Server, MySQL, DB2, Sybase, Paradox, Informix, Oracle...

23
3. HỆ QUẢN TRỊ CSDL - DBMS …

 Quá trình phát triển các hệ quản trị CSDL:


 DBMS ra đời năm 60s dựa trên mô hình DL phân cấp và mạng,
có IMS của IBM dựa trên mô phân cấp.
 1976, System-R ra đời mô hình đầu tiên dựa trên mô hình quan
hệ của IBM.
 Từ năm 1980, IBM cho ra đời DBMS trên các máy Main Frame
mang tên DB2, tiếp theo là Dbase, Sybase, Oracle, Informix,
SQL-Server ...

24
3. HỆ QUẢN TRỊ CSDL - DBMS …

 1990 bắt đầu xây dựng các DBMS hướng đối tượng (Oriented

Object DataBase Management System) như Orion, Illustra, Itasca,


Objectstore, Versant, Oracle, Informix, ...
 Hầu hết các hệ này đều vẫn là quan hệ - hướng đối tượng, DBMS

hướng đối tượng thuần nhất là ODMG ra đời vào năm 1996.

25
3. HỆ QUẢN TRỊ CSDL - DBMS …

 Một số DBMS hỗ trợ DL lớn

26
3. HỆ QUẢN TRỊ CSDL - DBMS …

 Một DBMS phải có:

1) Ngôn ngữ giao tiếp giữa người sử dụng (NSD) và CSDL, gồm:
 Ngôn ngữ mô tả dữ liệu (Data Definition Language - DDL).

 Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML)

 Ngôn ngữ truy vấn dữ liệu, hay ngôn ngữ hỏi đáp có cấu trúc

(Structured Query Language - SQL)


 Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL)

2) Từ điển dữ liệu (Data Dictionary) dùng để mô tả các ánh xạ liên kết, ghi
nhận các thành phần cấu trúc của CSDL, các chương trình ứng dụng,
mật mã, quyền hạn sử dụng v.v....
27
3. HỆ QUẢN TRỊ CSDL - DBMS …

3) Có biện pháp bảo mật.

4) Cơ chế giải quyết vấn đề tranh chấp dữ liệu.

5) Phải có cơ chế sao lưu (Backup) và phục hồi (Restore) dữ

liệu khi có sự cố xảy ra.


6) DBMS phải cung cấp một giao diện (Interface) tốt, dễ sử

dụng, dễ hiểu cho những người sử dụng không chuyên.


7) Bảo đảm tính độc lập giữa dữ liệu và chương trình.

28
3. SƠ ĐỒ TỔNG QUÁT CỦA DBMS

3 mức:

 Mức chương trình

khai báo cấu trúc và


ứng dụng;
 Mức mô tả CSDL,

thao tác CSDL và các


từ điển dl;
 Mức CSDL.

29
4. MÔ HÌNH DỮ LIỆU

 Mô hình dữ liệu (Data Model): những khái niệm dùng để biểu diễn cấu

trúc của CSDL (data types, relationships, constraints).

 Mô hình mạng (Network Data Model)

 Mô hình phân cấp (Hierachical Data Model)

 Mô hình quan hệ (Relational Data Model)

 Mô hình thực thể - liên kết (Entity - Relationship Model)

 Mô hình hướng đối tượng (Object Oriented Data Model)

 => Mỗi DBMS đều phải xây dựng dựa trên một mô hình DL nhất định.

30
4. MÔ HÌNH MẠNG (NETWORK DATA MODEL)

 Do nhóm DBGT của CODASYL đề xuất 1971


 Là mô hình được biểu diễn bởi một đồ thị có hướng
 Các khái niệm: mẫu tin (Record), loại mẫu tin (Record Type) và loại
liên kết (Set Type):
 Loại mẫu tin (Recorde Type) là mẫu đặc trưng cho 1 loại đối tượng riêng biệt
 Loại liên kết (Set Type) là sự liên kết giữa một loại mẫu tin chủ với mẫu tin
thành viên
 1 - 1 (One-to-One
 1 - n (One-to-Many).
 n -1 (Many-to-One)
 Đệ quy (Recursive) 31
4. MÔ HÌNH MẠNG(NETWORK DATA MODEL)…

32
4. MÔ HÌNH PHÂN CẤP (HIERACHICAL DATA
MODEL)

 Có cấu trúc cây (Tree), trong đó mỗi nút của cây biểu diễn một thực thể, giữa nút
con và nút cha được liên kết với nhau theo một mối quan hệ xác định.
 Mô hình dữ liệu phân cấp sử dụng các khái niệm sau:
 Loại mẫu tin: giống khái niệm mẫu tin trong mô hình dữ liệu mạng.
 Loại mối liên kết: Kiểu liên kết là phân cấp, theo cách:
 Mẫu tin thành viên chỉ đóng vai trò thành viên của một mối liên kết duy nhất, tức
là nó thuộc một chủ duy nhất. Như vậy, mối liên kết từ mẫu tin chủ tới các mẫu
tin thành viên là 1 - n, và từ mẫu tin (hay bản ghi - record) thành viên với mẫu
tin chủ là 1 –1.
 Giữa 2 loại mẫu tin chỉ tồn tại 1 mối liên kết duy nhất.

33
4. MÔ HÌNH PHÂN CẤP(HIERACHICAL
DATA MODEL)…

34
4. MÔ HÌNH DL QUAN HỆ (RELATIONAL
DATA MODEL)
Do E.F.Codd [2] đề xuất năm 1970. Nền tảng cơ bản là lý thuyết tập hợp

trên các quan hệ, tức là tập của các bộ giá trị (Value Tuples).
Các khái niệm:

 Thuộc tính (Attribute)

 Quan hệ (Relation)

 Lược đồ quan hệ (Relation Schema)

 Bộ/bản ghi (Tuple)

 Khóa (Key).

35
4. MÔ HÌNH DL THỰC THỂ LIÊN KẾT ER
(ENTITY - RELATIONSHIP MODEL)

 Do P.P.Chen đề xuất 1976. Các khái niệm chủ yếu được sử


dụng trong mô hình này là:
 Thực thể (Entity): Là khái niệm mô tả một lớp các đối tượng
có đặc trưng chung mà chúng ta cần quan tâm.
Sinhvien Khachhang

 Liên kết: X là thực thể yếu nếu sự tồn tại của X phụ
thuộc vào sự tồn tại của thực thể Y. Được ký hiệu bằng
hình chữ nhật kép

36
4. MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
(OBJECT ORIENTED DATA MODEL)

 Ra đời khoảng cuối những năm 80.

 Là loại mô hình tiên tiến nhất hiện nay dựa trên cách tiếp cận hướng đối

tượng.
 Sử dụng các khái niệm như lớp (class), sự kế thừa (inheritance), kế thừa

bội (tức là kết thừa từ nhiều lớp cơ sở multi-inheritance).


 Đặc trưng cơ bản: tính đóng gói (encapsulation), tính đa hình

(polymorphism) và tính tái sử dụng (Reusability).


 Lớp: là một kiểu dl có cấu trúc bao gồm các thành phần dl và các

phương thức xử lý thao tác trên cấu trúc dl đó.


37
4. MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
(OBJECT ORIENTED DATA MODEL)…
 Các thuộc tính dữ liệu và các thao tác trên các dữ liệu này được

bao gói trong một cấu trúc gọi là đối tượng.


 Đối tượng có thể chứa các dữ liệu phức hợp như văn bản, hình

ảnh, tiếng nói và hình ảnh động.


 Một đối tượng có thể yêu cầu hoặc xử lý dữ liệu từ một đối tượng

khác bằng việc gửi đi một thông báo đến đối tượng đó.
 Mô hình hướng đối tượng biểu diễn một sơ đồ mới để lưu trữ và

thao tác dữ liệu. Từ một đối tượng có thể sinh ra một đối tượng
khác. 38
4. MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
(OBJECT ORIENTED DATA MODEL)…
 Theo [7]

39
BÀI TẬP CHƯƠNG 1

1.1. Định nghĩa các thuật ngữ sau:


- Cơ sở dữ liệu
- Hệ cơ sở dữ liệu
- Hệ quản trị cơ sở dữ liệu
1.2. Nêu sơ đồ kiến trúc của một hệ cơ sở dữ liệu
1.3. Hiểu và lấy ví dụ của các mô hình cơ sở dữ liệu.

40
BÀI TẬP CHƯƠNG 1…

1.4. Dựa vào những khái niệm đã học hãy biểu diễn CSDL có các loại bản ghi
PHONG, NHANVIEN, CONGVIEC, LYLICH đã trình bày trong mô hình mạng
theo cách tiếp cận phân cấp.
Loại liên kết là phân cấp:
Phòng có nhiều nhân viên; mỗi nhân viên chỉ thuộc 1 phòng duy nhất.
Công việc có nhiều nhân viên cùng làm, mỗi nhân viên chỉ làm một công việc
duy nhất.
Mỗi nhân viên có một lý lịch; mỗi lý lịch chỉ thuộc 1 nhân viên duy nhất.
1.5. Dựa vào những khái niệm đã học, hãy biểu diễn CSDL về quản lý Sinh
viên đã trình bày trong mô hình phân cấp theo cách tiếp cận mạng.
Loại liên kết phân mạng là loại "thuộc về" 41
THIẾT KẾ
CƠ SỞ DỮ LIỆU

BỘ MÔN HỆ THỐNG THÔNG TIN 1


2.1 Quy trình thiết kế
2.2 Mô hình thực thể-liên kết
2.3 Kiểu thực thể, thuộc tính, khóa
2.4 Liên kết, kiểu liên kết, các ràng buộc liên kết
2.5 Xây dựng mô hình ER
2.6 Ví dụ

2
2.1. QUY TRÌNH THIẾT KẾ

3
3
 Bước 1: Tập hợp và phân tích yêu cầu hệ thống.
 Bước 2: XD lược đồ khái niệm (conceptual schema), thường dùng mô
hình ER mô hình dữ liệu mức cao (High level data model).
 Bước 3: Thiết kế logic (Logical design)/(Data model mapping), kết quả
là lược đồ CSDL.
 Bước 4: Thiết kế vật lý (physical design), thiết kế những cấu trúc lưu
trữ dữ liệu bên trong, đường dẫn truy cập, tổ chức file DL.

=>Sử dụng mô hình ER thiết kế lược đồ khái niệm (Conceptual


Schema).
5
2.2. MÔ HÌNH THỰC THỂ
LIÊN KẾT ER (Entity -
Relationship Model)

6
 Mô hình thực thể - liên kết được Chen giới thiệu năm
1976.
 Mô hình ER được sử dụng nhiều trong thiết kế dữ liệu ở
mức quan niệm
 Sử dụng để biểu diễn trừu tượng cấu trúc của CSDL

7
 Mục đích của mô hình ER?
 Mô hình ER mô tả logic chi tiết dữ liệu, giúp người thiết kế CSDL mô tả thế
giới thực gần gũi với quan niệm và cách nhìn nhận. Nó là công cụ để phân
tích thông tin nghiệp vụ.
 Thống nhất quan điểm về dữ liệu của những người tham gia hệ thống:
Người quản lý, người dùng cuối, người thiết kế hệ thống.
 Xác định các xử lý về dữ liệu cũng như các ràng buộc trên các dữ liệu.
 Giúp đỡ việc thể hiện CSDL về mặt cấu trúc: Sử dụng thực thể và các mối
liên kết giữa các thực thể. Biểu diễn mô hình quan hệ thực thể bằng một sơ
đồ.
8
2.3. THỰC THỂ - THUỘC
TÍNH – KHÓA

9
 Thực thể: đối tượng (thực thể yếu?)

 Thuộc tính: Loại của thuộc tính (đặc trưng của từng đối tượng-thực

thể)
 Liên kết:
 Bậc của liên kết: 1; 2; 3

 Ràng buộc: 1-1, 1-n, m-n

 Lực lượng tham gia vào liên kết

 Thuộc tính riêng của liên kết


 Thực thể (Entity): Là khái niệm mô tả một lớp các đối tượng có
đặc trưng chung mà chúng ta cần quan tâm.
 Các thực thể là đối tượng cụ thể hoặc trừu tượng: Sinh viên, Khách hàng, …
 Ký hiệu: hình chữ nhật

SINHVIEN KHACHHANG

 Bản ghi: là một đối tượng cụ thể của lớp các đối tượng đó:
Ví dụ: Sinh viên Đinh Gia Linh là đối tượng cụ thể của thực thể Sinh viên
Khách hàng Nguyễn Văn An là đối tượng cụ thể của thực thể Khách hàng,….

1
1
 Thuộc tính(Attribute): Là các tính chất, đặc điểm chung của lớp đối
tượng. Nó là một giá trị dùng để mô tả một đặc trưng nào đó của một thực
thể.
Ví dụ: Thực thể SINHVIEN có các thuộc tính: MaSV, Hoten, Gioitinh,
Ngaysinh, Noisinh
 Ký hiệu

7
 Các loại thuộc tính:
 Thuộc tính đơn (simple)/đơn trị (single-value)/ nguyên tử (Atomic):
chỉ có một giá trị trong một thuộc tính của một thực thể.
VD: Thuộc tính “Giới tính” của thực thể SINHVIEN.
 Thuộc tính tổ hợp (Composite): được kết hợp của một số thành phần.
VD: Diachi(sonha, duongpho, quan, TP) hoặc HoTen (Ho, Dem, Ten).

 Thuộc tính đa trị (multi-valued): có thể có nhiều giá trị tại một thời điểm.

VD: thuộc tính Bằngcũ của SINHVIEN. Ký hiệu: {Bằngcũ (Trường, Năm,
Bằng, ngành)}.
13
SINHVIEN
maM
H

tenS gioitinh Tenmo


MaS
V monhoc n
V namsi
nh
diac
SoTC
hi

giaovie
n
Sonh Phuo
Quan
a ng
 Thuộc tính lưu trữ (stored attribute) là giá trị của nó phải được lưu trữ.

 Thuộc tính suy diễn (derived attribute) là giá trị của nó có thể suy ra từ
giá trị của những thuộc tính khác.
 Ví dụ: Tuổi(derived attribute) được suy diễn từ Ngaysinh (stored

attribute).

 Giá trị rỗng của thuộc tính (Null Values): Trong một vài trường hợp, một
thực thể có thể không có giá trị tương ứng cho một thuộc tính

 Ví dụ thuộc tính Tên của người phụ thuộc, Số điện thoại.

15
SINHVIEN

gioitinh
tenSV
tuoi MaSV
namsin
h
diach
i

SN Quan TP
 Khoá (key): là một hoặc một tập các thuộc tính xác định duy nhất một bản
ghi trong một thực thể. Thuộc tính khoá hay còn gọi là thuộc tính định danh
luôn được gạch chân để phân biệt.
VD: Mỗi SV có một mã số duy nhất  Khóa của thực thể SINHVIEN là MaSV

Masv
NS

SINHVIEN

QUE HT

17
 Định nghĩa:
 Là thực thể không có thuộc tính khóa

 Phải tham gia trong một loại mối kết hợp xác định trong đó có

thực thể chủ


 VD: Thực thể LANTHI với thuộc tính Lần tham gia trọng mối kết

hợp Thi với thực thể SINHVIEN và MONHOC là loại thực thể yếu
Thực thể yếu

MONHOC

(1,n)

Thi

(1,n) (1,n)

SINHVIEN LANTHI
2.4 MỐI LIÊN
KẾT(Entity
Relationship)

21
 Liên kết (Relationship) dùng để chỉ mối quan hệ giữa hai hay nhiều
thực thể khác nhau, được biểu diễn bằng hình thoi (hoặc oval).
 Bậc của kiểu liên kết: Là số lượng các thực thể tham gia vào liên
kết.
 Kiểu liên kết bậc 1 (đệ quy) là mối quan hệ giữa cùng 1 kiểu thực thể.

 Kiểu liên kết bậc 2 là mối liên kết giữa hai kiểu thực thể
 Kiểu liên kết bậc 3 là mối liên kết giữa 3 kiểu thực thể

22
MaS
V
maM
tenS H
V
Tenmo
namsi SINHVIE
thi monhoc n
nh N

diac SoTC
hi
ketqu
gioitin a
h
Kiểu liên kết bậc 1 (đệ quy)

24
 Kiểu liên kết bậc 2

25
Kiểu liên kết bậc 3

26
 Ràng buộc liên kết gồm:
 Liên kết/quan hệ 1-1:

 Liên kết/quan hệ 1-N:

 Liên kết/quan hệ N-M:

 Lực lượng của mối liên kết:

 Thuộc tính của Liên kết/quanhệ:

27
 Liên kết/quan hệ 1-1: là mối quan hệ mà mỗi bản ghi trong thực
thể E1 chỉ có nhiều nhất một bản ghi được liên kết trong thực thể
E2.
 Ví dụ: có
NHANVIEN LYLICH

1 chu 1 Giao_vie
Lop_hoc
nhiem n

28
 Liên kết/Quan hệ 1-N: là mối quan hệ mà một bản ghi trong thực thể
E1 có thể không liên kết hoặc liên kết với một hay nhiều bản ghi trong
thực thể E2.
 Ví dụ:
PHONGBAN có NHANVIEN

 Hoặc có thể ký hiệu

1 N
PHONGBAN NHANVIEN

29
 Liên kết/Quan hệ M-N: là mối quan hệ mà một bản ghi trong thực
thể có thể liên kết với nhiều bản thể trong thực thể khác và ngược
lại.
 Ví dụ
Tha NHANVIE
DUAN
mgia N

Hoặc có thể ký hiệu

M Tha N
DUAN NHANVIEN
mgia

30
 Lực lượng của mối liên kết: Là số bản ghi lớn nhất và nhỏ
nhất của thực thể tham gia vào liên kết đó.
 Ký hiệu: ta thêm (min,max) vào mối liên kết.

 min là số bản ghi nhỏ nhất tham gia vào liên kết

 max là số bản ghi lớn nhất tham gia vào liên kết

 Mặc định, min=0, max=n

 => Xác định lực lượng này từ khảo sát thực tế bài toán
31
 Thuộc tính của mối liên kết (Relationship Attribute): Mỗi mối liên
kêt cũng có thể có những thuộc tính riêng của chúng.
 Ví dụ: Trong mối quan hệ giữa DUAN và NHANVIEN có thuộc tính thời
gian bắt đầu và thời gian kết thúc của mỗi nhân viên khi tham gia vào
từng dự án, đây là hai thuộc tính của mối liên kết Tham gia
n n
Tham gia
DUAN NHANVIEN

TG bắt đầu TG kết thúc

 Chú ý: Để đơn giản, đôi khi trình bày các thuộc tính nằm luôn trong
các thực thể 32
2.5 XÂY DỰNG MÔ HÌNH
E-R

33
 Mục tiêu của mô hình E-R trong quá trình thiết kế CSDL:
 Phân tích dữ liệu
 Xác định các đơn vị thông tin cơ bản cần thiết của tổ chức
 Mô tả cấu trúc và mối liên hệ giữa các đơn vị thông tin
 Là mô hình trung gian để chuyển những yêu cầu quản lý dữ liệu
trong thế giới thực thành mô hình cơ sở dữ liệu quan hệ
 Thuộc tính hay thực thể?
Với một phần tử dữ liệu, để khẳng định nó là thuộc tính hay thực thể
cần trả lời các câu hỏi sau:
 Có thuộc tính riêng hay không?
 Có liên kết với các thực thể khác hay không, dạng liên kết như thể
nào?
 Khi đó:
 Nếu không có thuộc tính riêng và liên kết là 1-1 thì nên xem nó là thuộc
tính.
 Nếu có thuộc tính riêng và liên kết là 1-nhiều hoặc nhiều-nhiều thì xem nó
là thực thể.

35
 Tổng quát hóa: là xem một thực thể nào đó là con của một
thực thể khác tổng quát hơn.
 VD: SACH là một loại con của loại tổng quát hơn là TAILIEU
nói chung.
 Chuyên biệt hóa: là khái niệm ngược lại với tổng quát hóa.
 Ví dụ: Ôtô, xeca, taxi gộp lại thành một thực thể tổng quát
hơn là Phuongtienvantai.

36
 Thực thể con và thực thể chính
 VD: Trong Đơn vị có 3 loại nhân viên: SECRETARY, TECHNICIAN,
ENGINEER. Các thực thể này có một số thuộc tính chung, riêng. Có thể có
3 hướng giải quyết sau:
 Gộp tất cả vào thực thể EMPLOYEE -> dư thừa thông tin, vì có thuộc tính
rỗng.
 Để riêng từng thực thể: SECRETARY, TECHNICIAN, ENGINEER. -> không
khai thác được những thuộc tính chung của nhân viên.
 Thực thể chính EMPLOYEE, 3 thực thể con là: SECRETARY,
TECHNICIAN, ENGINEER.
37
˜ Thực thể chính
EMPLOYEE, 3 thực
thể con:
SECRETARY,
TECHNICIAN,
ENGINEER.

˜ Thuộc tính chung nằm


trong thực thể chính,
thuộc tính riêng nằm
trong thực thể con.

24
 Thực thể con loại trừ: gồm 2 loại
 Thực thể con đầy đủ: Là tất cả các thực thể con xác định một thực thể
chính.
 VD trên, tất cả các thực thể con là đầy đủ vì không thể bổ sung
thực thể nào vào thực thể chính EMPLOYEE.
 Thực thể con không đầy đủ: Tập các thực thể con không đầy đủ xác
định thực thể chính.
 VD: Tập thực thể ÔTÔ, XEMAY chưa xác định được thực thể chính
là PHUONGTIEN

25
26
 Bước 1: Liệt kê, chính xác hóa và lựa chọn thông tin cơ sở
 Xác định một từ điển bao gồm tất cả các thuộc tính (không bỏ sót bất cứ thông
tin nào).
 Chính xác hóa các thuộc tính đó. Thêm các từ cần thiết để thuộc tính đó mang
đầy đủ ý nghĩa, không gây lầm lẫn, hiểu nhầm.
 Chú ý: Để lựa chọn các đặc trưng cần thiết, duyệt từ trên xuống và chỉ giữ lại
những thuộc tính đảm bảo yêu cầu sau:
 Thuộc tính cần phải đặc trưng cho một lớp các đối tượng được xét.
 Chọn một thuộc tính một lần, nếu lặp lại thì bỏ qua.
 Một thuộc tính phải là sơ cấp (Nếu giá trị của nó có thể suy ra từ các thuộc tính khác
thì bỏ qua).
41
 Bước 2: Xác định các thực thể, thuộc tính.
 Duyệt danh sách các thuộc tính từ trên xuống để tìm ra thuộc tính
tên gọi. Mỗi thuộc tính tên gọi sẽ tương ứng với một thực thể.

 Gán các thuộc tính cho từng thực thể.

 Xác định thuộc tính định danh cho từng thực thể.

42
 Bước 3: Xác định các mối quan hệ và các thuộc tính riêng
 Xét các thuộc tính còn lại, tìm tất cả các động từ (ứng với thuộc tính
đó).

 Với mỗi động từ, trả lời các câu hỏi: Ai? Cái gì? Ở đâu? Khi nào?
Bằng cách nào?

43
 Bước 4: Vẽ sơ đồ mô hình thực thể- liên kết, xác định lực lượng
tham gia liên kết cho các thực thể.
 Bước 5: Chuẩn hóa sơ đồ và thu gọn sơ đồ
 Chuẩn hóa: Loại bỏ các thuộc tính lặp, nhóm lặp và các thuộc tính phụ
thuộc thời gian -> sơ đồ chỉ còn các thực thể đơn, thuộc tính đơn.

 Thu gọn sơ đồ: Nếu một thực thể có tất cả các đặc trưng:
 Là thực thể treo: chỉ tham gia vào một mối quan hệ và chứa 1 TT duy nhất
(có thể có thuộc tính thứ 2 thêm vào làm định danh).

 Mối quan hệ là bậc hai và không có thuộc tính riêng.

 Mối quan hệ là 1: N hay 1:1


44
Ví dụ

31
2.6. VÍ DỤ

46
 Quy tắc nghiệp vụ của hệ thống CSDL COMPANY như sau:
 1. Công ty (COMPANY) có nhiều phòng/ban (DEPARTMENTs). Mỗi
phòng/ban có tên (name), mã số (number) duy nhất và có một nhân viên
(employee) làm quản lý (manages) phòng/ban. Chúng ta lưu lại ngày bắt
đầu (start date) làm quản lý phòng/ban của nhân viên đó.
 2. Mỗi phòng/ban có thể có nhiều địa điểm khác nhau (locations).
 3. Mỗi phòng/ban điều hành một số dự án (PROJECTs). Mỗi dự án có tên
(name), mã số (number) duy nhất và chỉ có một địa điểm (location).

47
 4. Với mỗi nhân viên (employee), chúng ta lưu lại những thông tin sau: tên (name), số bảo
hiểm xã hội (social security number), địa chỉ (address), lương (salary), giới tính (sex),
ngày sinh (birth date).
 5. Mỗi nhân viên làm việc ở một phòng/ban, nhưng có thể làm việc cho nhiều dự án. Chúng
ta lưu lại số giờ làm việc (the number of hours per week) của từng nhân viên trong từng
dự án.
 6. Chúng ta lưu lại thông tin về người quản lý trực tiếp (direct supervisor), của mỗi nhân
viên. Người quản lý trực tiếp cũng là một nhân viên.
 7. Mỗi nhân viên có những người phụ thuộc vào họ (DEPENDENTs). Mỗi người phụ thuộc
ta lưu lại thông tin về tên (name), giới tính (sex), ngày sinh (birth date) và quan hệ
(relationship)
48
 Bước 3: Xác định các mối quan hệ và các thuộc tính riêng

 1. MANAGES: là kiểu liên kết 1:1 giữaEMPLOYEE và DEPARTMENT.


 Lực lượng tham gia liên kết của EMPLOYEE là bộ phận, vì không phải nhân viên nào cũng
tham gia quản lý.

 Lực lượng tham gia của DEPARTMENT là toàn bộ, vì tại bất kỳ thời điểm nào một phòng
cũng có một nhân viên làm quản lý.

 Thuộc tính StartDate được gắn vào kiểu liên kết để ghi lại thời điểm bắt đầu làm quản lý
của nhân viên cho phòng đó.

50
 2. WORKS_FOR: là kiểu liên kết 1:N giữa DEPARTMENT
và EMPLOYEE.
 Cả hai kiểu thực thể này đều có lực lượng tham gia toàn bộ vào liên kết.

 3. CONTROLS: là kiểu liên kết 1:N giữa DEPARTMENT


và PROJECT.
 Lực lượng tham gia của PROJECT là toàn bộ, của DEPARTMENT là bộ
phận.

51
 4. SUPERVISOR: là kiểu liên kết 1:N giữa EMPLOYEE và
EMPLOYEE
 Mỗi nhân viên có người quản lý cấp trên của mình, người
đó cũng là một nhân viên.

 Không phải nhân viên nào cũng làm quản lý nhân viên
khác, và không phải nhân viên nào cũng có người quản lý
trực tiếp mình. Vì vậy, cả hai kiểu thực thể này có lực
lượng tham gia bộ phận.
52
 5. WORK_ON: là kiểu liên kết M:N giữa EMPLOYEE và
PROJECT
 Một dự án có nhiều nhân viên làm việc và một nhân viên có thể
làm việc cho nhiều dự án.

 Thuộc tính Hours là thuộc tính của kiểu liên kết được dùng để
ghi lại số giờ mỗi nhân viên làm việc cho một dự án nào đó.

 Cả hai kiểu thực thể này có lực lượng tham gia toàn bộ.

53
 6. DEPENDENTS_OF: là kiểu liên kết 1:N giữa hai kiểu
thực thể EMPLOYEE và DEPENDENT.
 Kiểu thực thể DEPENDENT là kiểu thực thể yếu, vì nó không tồn
tại nếu không có sự tồn tại của EMPLOYEE.

 Lực lượng tham gia của EMPLOYEE là bộ phận, vì không phải


nhân viên nào cũng có người phụ thuộc.

 Lực lượng tham gia của DEPENDENT là toàn bộ vì nó là kiểu


thực thể yếu.
54
2.1. Hệ thống thông tin quản lý kho lưu trữ các văn bản pháp quy tại một cơ quan
quản lý Nhà nước có CSDL gồm các thực thể và các mối liên kết sau:
phát hành; Số công văn; nội dung; người ký; số trang; Số tờ trình ký; CÔNG-VĂN-
ĐẾN (ngày phát hành; Số công văn; nội dung; ngày nhận; số trang; ghi chú).
CÔNG-VĂN-ĐI (ngày Ngày trình ký; ghi chú).
CÔNG-VĂN-ĐẾN và CÔNG-VĂN-ĐI đều là CÔNG-VĂN, là hai loại thực thể
yếu/chuyên biệt hóa của loại thực thể CÔNG-VĂN
CHUYÊN-VIÊN (mã CViên; Tên CViên; Phòng ban; Ghichú).
GIẢI QUYẾT(mã CViên, số-CViệc, ngày nhận, thời hạn trả lời, KQ giải quyết).
Mỗi công văn đến (từ một đơn vị hay một tác nhân nào đó) có yêu cầu giải quyết
thì công văn đó sẽ được chuyển cho một chuyên viên nghiên cứu và đề xuất
hướng giải quyết trong một thời hạn nhất định.
=>Hãy xây dựng mô hình ER.

56
2.2. Quản lý hoạt động của một trung tâm đại học.
Một số quy tắc/ràng buộc quản lý như sau:
1. Trung tâm được chia làm nhiều trường và mỗi trường có 1
hiệu trưởng để quản lý nhà trường.
2. Một trường chia làm nhiều khoa, mỗi khoa thuộc về một
trường.
3. Mỗi khoa cung cấp nhiều môn học. Mỗi môn học thuộc về 1
khoa (thuộc quyền quản lý của 1 khoa).
4. Mỗi khoa thuê nhiều giáo viên làm việc. Nhưng mỗi giáo viên
chỉ làm việc cho 1 khoa. Mỗi khoa có 1 chủ nhiệm khoa, đó
là một giáo viên.
57
5. Mỗi giáo viên có thể dạy nhiều nhất 4 môn học và có thể
không dạy môn học nào.
6. Mỗi sinh viên có thể học nhiều môn học, nhưng ít nhất là
môn.
7. Mỗi môn học có thể có nhiều sinh viên học, có thể không có
sinh viên nào.
8. Một khoa quản lý nhiều sinh viên chỉ thuộc về một khoa.
9. Mỗi giáo viên có thể được cử làm chủ nhiệm của lớp, lớp đó có
thể có nhiều nhất 100 sinh viên.
=> Xây dựng mô hình ER

58
2.3. Cho các thuộc tính, quy tắc quản lý của một đơn vị.

 Thuộc tính:
 Mã đơn vị, Tên đơn vị, Số điện thoại đơn vị, Địa chỉ đơn vị.
 Mã nhân viên, Tên nhân viên, Giới tính nhân viên, Địa chỉ nhân viên,
Số điện thoại.
 Mã dự án, Tên dự án
 Mã khách hàng, tên khách hàng, Địa chỉ khách hàng, Số điện thoại.
 Mã hàng, Tên hàng, Số lượng trong kho.
 Lượng đặt hàng, Ngày đặt hàng

59
 Các quy tắc/ràng buộc

1. Một đơn vị thuê 1 hoặc nhiều nhân viên


2. Một đơn vị được quản lý bởi 1 người quản lý. Đó là một
nhân viên.
3. Một nhân viên chỉ làm việc cho 1 đơn vị
4. Một nhân viên có thể làm việc cho 1 dự án
5. Mỗi dự án có thể thuê 1 hoặc nhiều nhân viên
6. Một nhân viên có thể phục vụ cho 1 hoặc nhiều khách hàng.

60
 Các quy tắc/ràng buộc…

7. Một khách hàng có thể được 1 hoặc nhiều nhân viên phục vụ.
8. Một khách hàng có thể đặt 1 hoặc 1 vài hàng hóa (Khách
hàng nào cũng đặt hàng: 1 hoặc nhiều mặt hàng).
9. Mọi mặt hàng đều có ít nhất một khách hàng đặt mua.
10. Một đơn đặt hàng chỉ có 1 mặt hàng.

=> Xây dựng mô hình ER

61
Chương 3

BỘ MÔN HỆ THỐNG THÔNG TIN 1


3.1. Khái niệm trong mô hình quan hệ

3.2. Ràng buộc toàn vẹn

3.3. Các phép toán cập nhật

3.4. Các phép toán đại số quan hệ

3.5. Cách chuyển từ mô hình ER sang mô hình quan hệ

2
CHƯƠNG 3

3.1 Khái niệm trong mô


MÔ HÌNH hình quan hệ

QUAN HỆ

3
 Mô hình quan hệ (Relational Data Model)

 Thuộc tính (Attribute)

 Quan hệ (Relation)

 Bộ giá trị (Tuple)

 Lược đồ quan hệ (Relation schema)

 Thể hiện của quan hệ (Occurrence of a Relation)

 Khóa - Siêu khóa - Khóa dự tuyển - Khóa chính - Khóa ngoại

 Phụ thuộc hàm (Functional Dependency) 4


 Do E.F.Codd và tiếp sau đó IBM giới thiệu năm 1970. Được ứng

dụng rộng rãi.

 Mô hình CSDL quan hệ là cách thức biểu diễn dữ liệu dưới dạng

bảng hay còn gọi là quan hệ

 Mô hình được xây dựng dựa trên cơ sở lý thuyết đại số quan hệ.

 Cấu trúc dữ liệu được tổ chức dưới dạng quan hệ/bảng.

 Thao tác dữ liệu: sử dụng những phép toán bằng ngôn ngữ SQL.

5
 Thuộc tính: là một tính chất riêng biệt của một đối tượng cần

được lưu trữ trong CSDL để phục vụ cho việc khai thác dữ
liệu về đối tượng.

Ví dụ: Đối tượng KHOA (tương ứng với loại thực thể KHOA
trong mô hình thực thể liên kết) có các thuộc tính Mã-khoa,
Tên-khoa.

 Đặc trưng bởi một tên gọi, kiểu giá trị và miền giá trị của

chúng.
6
 Mỗi thuộc tính đều phải thuộc một kiểu kiểu dữ liệu (Data
Type).

 Kiểu dữ liệu có thể là vô hướng,hoặc có cấu trúc.

 Một số kiểu dữ liệu vô hướng thường dùng:


 Text (hoặc Character, String, hoặc Char) – kiểu văn bản.

 Number (hoặc Numeric, hoặc float) – kiểu số

 Logical (hoặc Boolean) – kiểu luận lý

 Date/Time – kiểu thời gian : ngày tháng năm + giờ phút

 Memo (hoặc VarChar) – kiểu văn bản có độ dài thay đổi.


7
 Một quan hệ R có n ngôi được định nghĩa trên tập các thuộc tính U =

{A1...An} (thứ tự của các thuộc tính là không quan trọng) và kèm theo nó
là một vị từ, tức là một quy tắc để xác định mối quan hệ giữa các thuộc
tính Ai và được ký hiệu là R(A1...An).

 Tập thuộc tính của quan hệ R có thể ký hiệu là R+.

 Với Ai là một thuộc tính có miền giá trị là MGT(Ai), như vậy R(A1, A2, ... An)

là tập con của tích Đề-các: MGT(A1) x MGT(A2) x ... x MGT(An).

 Quan hệ còn được gọi là Bảng (Table)

8
 Ví dụ 2.2: Quan hệ SINHVIEN (Masv, Tensv, Que) là một quan

hệ 3 ngôi (3 thuộc tính); Masv, Tensv Que.

 Quy tắc: "Mỗi sinh viên có một mã số sinh viên duy nhất để phân

biệt với các sinh viên khác trong trường ».

9
 Một bộ giá trị là các thông tin của một đối tượng thuộc quan
hệ.

 Bộ giá trị cũng thường được gọi là mẫu tin hay bản ghi
(record) hoặc dòng của bảng (Row).

 Về mặt hình thức, một bộ q là một vectơ gồm n thành phần


thuộc tập hợp con của tích Đề-các miền giá trị của các thuộc
tính và thỏa mãn tân từ đã cho của quan hệ:

 q =(a1,a2,...,an) ( MGT(A1)x(MGT(A2)x...x MGT(An)

10
 Ví dụ 2.4: Trong quan hệ SINHVIEN có các bộ giá trị sau :

q1 = (SV1, Nguyễn Văn Anh, Hà Nội)

q2 = (SV2, Phạm Ngọc Bình, Hải phòng)

q3 = (SV3, Nguyễn Hoa Cúc, Quảng Ninh)

q4 = (SV4, Đinh Gia Linh, Hà Nội)

 Để lấy thành phần Ai (tức là giá trị thuộc tính Ai) của bộ giá trị q,
ta viết q.Ai. Phép trích rút này được gọi là phép chiếu một bộ lên
thuộc tính Ai.
11
 Lược đồ quan hệ là sự trừu tượng hóa của quan hệ ở mức độ cấu

trúc của một bảng hai chiều.

 Là cấu trúc tổng quát của một quan hệ;

 Quan hệ/bảng là một bảng có cấu trúc cụ thể hoặc một định nghĩa

cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó.

 Lược đồ cơ sở dữ liệu C là tập hợp các lược đồ quan hệ con {Ri}.

 Đôi khi người ta có thể dùng lược đồ quan hệ và quan hệ thay thế

cho nhau trong một số trường hợp


12
Theo [2]

13
 Thể hiện (tình trạng) của quan hệ R, ký hiệu bởi TR, là tập hợp các bộ
giá trị của quan hệ R vào một thời điểm. Tại những thời điểm khác
nhau thì quan hệ sẽ có những thể hiện khác nhau.
 Thể hiện của các lược đồ quan hệ con TRi gọi là tình trạng của lược
đồ cơ sở dữ liệu C.

14
 Theo [2]

TS. Đặng Thị Thu Hiền https://sites.google.com/site/tlucse484/ 15


 Định nghĩa 2.1

Khóa của một quan hệ R là một hoặc một số thuộc tính của quan hệ
có thể dùng để phân biệt hai bộ bất kỳ trong quan hệ.

 Định nghĩa 2.2

Khóa (Key) của quan hệ R định nghĩa trên tập các thuộc tính U =
A1... An là một tập con K  U thỏa mãn các tính chất sau:
 Với mọi bộ giá trị q1, q2  R thì q1.K  q2.K. // K xác định duy nhất 1 bản ghi

 Với mọi K’  K thì tồn tại q1.K’ = q2.K’. // Con của K không thể là Khóa

16
=>Quan hệ có thể có rất nhiều khóa.Việc xác định tất cả các khóa là bài toán khó.
 Khoá dự tuyển(Candidate): Khóa của quan hệ theo định nghĩa 2.2 được gọi là
khóa dự tuyển và là khóa nội của quan hệ.

 Siêu khoá (Supper key): K là siêu khóa của quan hệ R nếu K'  K là một khóa
của quan hệ.
 Một quan hệ R luôn có ít nhất một siêu khóa và có thể có nhiều siêu khóa.

 Ví dụ 2.6: Quan hệ LOPHOC (Malop, Tenlop, Nienkhoa, Sohocvien, Makhoa)

Quan hệ LOPHOC có khóa là Malop và một số siêu khóa sau:

K1 = { Malop, Tenlop}

K2 = { Malop, Tenlop, Sohocvien }

K3 = { Malop, Sohocvien }

K4 = { Malop, Nienkhoa } 17
 Khoá chính (Primary key): Trong trường hợp lược đồ quan hệ có nhiều
khóa dự tuyển, khi cài đặt trên một DBMS có thể chọn một trong số các
khóa dự tuyển để tạo chỉ mục (Index) chi phối việc truy cập đến các bộ.

 Khi đó khóa dự tuyển này được gọi là khóa chính. Các khóa còn lại gọi là
các khóa tương đương.

 Khóa chính chỉ thật sự có ý nghĩa trong quá trình khai thác CSDL. Trên
phương diện lý thuyết, khóa chính hoàn toàn không có vai trò gì khác so
với các khóa dự tuyển còn lại.

 Khóa ngoại (Foreign key): Là khóa chính của một quan hệ khác.

18
 Quan hệ R được định nghĩa trên tập thuộc tính U = { A1, A2, ...,
An}. X, Y  U là 2 tập con của tập thuộc tính U. Nếu tồn tại
một ánh xạ f: X  Y thì ta nói rằng X xác định hàm Y, hay Y
phụ thuộc hàm vào X và ký hiệu là X  Y.
 Ví dụ 2.8: Trong các quan hệ ở ví dụ trên ta thấy có những phụ thuộc hàm
sau:
Quan hệ KHOA, có phụ thuộc hàm Makhoa  Tenkhoa
Quan hệ LOPHOC, có phụ thuộc hàm Malop{Tenlop, Nienkhoa, Sohocvien}.
Quan hệ MONHOC, có phụ thuộc hàm Mamon {Tenmon, Sodvhoctrinh}
Quan hệ HOCVIEN có phụ thuộc hàm Mahocvien{Tenhocvien, Ngaysinh,
Quequan} 19
CHƯƠNG 3
3.2 Ràng buộc toàn vẹn
MÔ HÌNH
(Integrity Constraint, Rule)
QUAN HỆ

20
 Ràng buộc toàn vẹn (RBTV) là một quy tắc định nghĩa trên một
(hay nhiều) quan hệ do môi trường ứng dụng quy định. Đó chính là
quy tắc để đảm bảo tính nhất quán của dữ liệu trong CSDL.

 Mỗi RBTV được định nghĩa bằng một thuật toán trong CSDL.

 Ví dụ 2.9:
 Quan hệ CBVC (MaCBVC, HotenCBVC, Hesoluong)

 Quy tắc: Hệ số lương của cán bộ viên chức (CBVC) phải lớn hơn hay bằng
1.00 và nhỏ hơn hay bằng 10.00.
 Thuật toán: "cb  CBVC thì cc.Hesoluong >= 1 & cc.Hesoluong <= 10.

21
 Định nghĩa: Ràng buộc toàn vẹn là một điều kiện bất biến không được

vi phạm trong một CSDL.

 Trong CSDL, luôn tồn tại rất nhiều mối liên kết ảnh hưởng qua lại lẫn

nhau giữa các thuộc tính, giữa các bộ giá trị trong một quan hệ và nhiều
quan hệ.

 Là những điều kiện bất biến mà tất cả các bộ của những quan hệ có liên

quan trong CSDL đều phải thỏa mãn.

 Ràng buộc toàn vẹn còn được gọi là các quy tắc quản lý (Rules) được

áp đặt lên trên các đối tượng của thế giới thực.
22
VD CSDL về quản lý học viên của một trường học
 R1 : Mỗi lớp học phải có một mã số duy nhất để phân biệt với mọi lớp học
khác trong trường.
 R2 : Mỗi lớp học phải thuộc một KHOA của trường.

 R3 : Mỗi học viên có một mã số riêng biệt, không trùng với bất cứ học viên
nào khác.
 R4 : Mỗi học viên phải đăng ký vào một lớp của trường.

 R5 : Mỗi học viên được thi tối đa 3 lần cho mỗi môn học

 R6 : Tổng số học viên của một lớp phải lớn hơn hoặc bằng số lượng đếm
được của lớp tại một thời điểm.

=>Khóa nội, Khóa ngoại, giá trị NOT NULL ... là những RBTV về
miền giá trị của các thuộc tính. 23
 RBTV được xem như một công cụ để diễn đạt ngữ nghĩa của CSDL.

 Các DBMS thường có các cơ chế tự động kiểm tra các RBTV.

 Kiểm tra RBTV có thể được tiến hành vào một trong các thời điểm sau:

 Kiểm tra ngay khi thực hiện một thao tác cập nhật CSDL (thêm, sửa, xóa).

 Kiểm tra định kỳ hay đột xuất, nghĩa là việc kiểm tra RBTV được tiến hành
một cách độc lập đối với thao tác cập nhật dữ liệu.

 Khi xác định một RBTV cần chỉ rõ:

 Điều kiện của RBTV, từ đó xác định cách biểu diễn.

 Bối cảnh xảy ra RBTV: trên một hay nhiều quan hệ.

 Tầm ảnh hưởng của RBTV. Khả năng tính toàn vẹn dl bị vi phạm.
24
 Hành động cần phải có khi RBTV bị vi phạm.
 Điều kiện của ràng buộc toàn vẹn:

 Là sự mô tả, biểu diễn hình thức nội dung của nó.

 Được biểu diễn bằng:

 Ngôn ngữ tự nhiên,

 Thuật giải (bằng mã giả - Pseudo Code, ngôn ngữ tựa


Pascal),
 Ngôn ngữ đại số tập hợp, đại số quan hệ v.v

 Hoặc bằng các phụ thuộc hàm.

25
 Ví dụ 4.2:

Giả sử có một CSDL quản lý hóa đơn bán hàng gồm các bảng sau:
 HOADON (Sohoadon, Soloaihang, Tongtrigia).

 DMHANG (Mahang, Tenhang, Donvitinh).

 CHITIETHD (Sohoadon, Mahang, Soluongdat, Dongia, Trigia).

26
 Điều kiện của ràng buộc toàn vẹn có thể biểu diễn như sau:
 R1 : “Mỗi hóa đơn có một Số hóa đơn riêng biệt, không trùng với hóa đơn khác”:

hđ1, hđ2  HOADON, hđ1  hđ2  hđ1.Sohoadon  hđ2. Sohoadon.


 R2:“Soloaihang = số bộ của CHITIETHD có cùng Sohoadon”:

hđ  HOADON thì: hđ.Soloaihang = COUNT (cthđ  CHITIETHD,


cthđ.Sohoadon = hđ.Sohoadon)
 R3 : “Tổng các trị giá của các mặt hàng trong CHITIETHD có cùng Sohoadon phải
bằng Tongtrigia ghi trong HOADON”:
hđ  HOADON thì: hđ.Tongtrigia = SUM (cthđ.Trigia) đối với các cthđ 
CHITIETHD sao cho : cthđ. Sohoadon= hđ. Sohoadon.
 R4 : “Mỗi bộ của CHITIETHD phải có mã hàng thuộc về danh mục hàng”:

CHITIETHD [Mahang]  DMHANG[Mahang]


hoặc :
27
 cthđ  CHITIETHD,  hh  DMHANG sao cho: cthđ.Mahang=hh.Mahang.
 Bối cảnh của Ràng buộc toàn vẹn

 Có thể định nghĩa trên một quan hệ cơ sở hay nhiều quan hệ cơ sở.

 Đó là những quan hệ mà RBTV được áp dụng trên đó.

 VD:

 Bối cảnh của RBTV R1 là một quan hệ HOADON;

 Bối cảnh của RBTV R2 và R3 là hai quan hệ HOADON và


CHITIETHD;
 Bối cảnh của RBTV R4 là hai quan hệ CHITIETHD và DMHANG

28
 Hành động khi RBTV bị vi phạm: có 2 giải pháp:

(1) Đưa ra thông báo và yêu cầu sửa chữa dữ liệu của các
thuộc tính cho phù hợp với quy tắc đảm bảo tính nhất quán dữ
liệu.
 Thông báo phải đầy đủ và tạo được sự thân thiện với người sử dụng.

Giải pháp này là phù hợp cho việc xử lý thời gian thực.

(2) Từ chối thao tác cập nhật.


 Giải pháp này là phù hợp đối với việc xử lý theo lô (Batch processing).

 Việc từ chối cũng phải được lưu lại bằng những thông báo đầy đủ, rõ

ràng vì sao thao tác bị từ chối và cần phải sửa lại những dữ liệu nào.
29
 Ràng buộc toàn vẹn về miền giá trị của thuộc tính:
 Loại RBTV này rất phổ biến.

 Thuộc tính được đặc trưng bởi kiểu giá trị và bị giới hạn bởi miền giá trị
trong kiểu dữ liệu đó.
 Khi thực hiện các thao tác cập nhật đều phải kiểm tra RBTV này.

 Ví dụ: Trong quan hệ KQUATHI, do quy định mỗi học viên chỉ được
thi một môn học tối đa là 3 lần, điểm thi không âm và không vượt quá
10.
 Có 2 RBTV về miền giá trị trong quan hệ này:

 R1: kq KQUATHI thì 0  kq.Lanthi  3

 R2: kq KQUATHI thì 0  kq.Diemthi  10 30


 Ràng buộc toàn vẹn liên thuộc tính

 Là loại RBTV có liên quan tới nhiều thuộc tính của một quan hệ.

 Đó là các phụ thuộc tính toán, hoặc một suy diễn từ giá trị của

một hay nhiều thuộc tính trong cùng một bộ giá trị.

 Ví dụ: Quan hệ CHITIETHD

cthđ  CHITIETHD | cthđ.Trigia = cthđ.Sldat * cthđ.Dongia.

31
 Ví dụ: Quan hệ danh sách cán bộ - công chức Nhà nước CBCC với
tập các thuộc tính:
 CBCC{Madonvi, MaCBCC, Hoten, Gioitinh, Ngaysinh, Ngaytuyendung,
NgachCBCC, Bậc, Hesoluong, Ngayxepluong}.
 Với quy định nam từ 18 đến 60 và nữ từ 18 đến 55 tuổi và phải từ 18
tuổi trở lên mới được tuyển vào làm công chức Nhà nước. Chúng ta có
các RBTV về miền giá trị liên thuộc tính như sau:
 R1: cc  CBCC | nếu cc.Gioitinh = Nam thì (Now() -
cc.Ngay_sinh) / 365 trong khoảng 18 và 60. Nếu cc.Gioitinh = Nữ
thì (Now() - cc.Ngay-sinh) / 365 trong khoảng 18 và 55.
 R2: cc  CBCC | (cc.Ngaytuyendung - cc.Ngaysinh) / 365  18
và cc.Ngaytuyendung  Now()
32
 Ràng buộc toàn vẹn liên bộ, liên thuộc tính
 Đây là loại RBTV có liên quan tới nhiều bộ và có thể tới nhiều thuộc
tính của (các) bộ giá trị trong một quan hệ.

 Ví dụ: Điểm thi không chỉ liên quan đến thuộc tính Lần-thi mà còn
liên quan tới điểm thi của lần thi trước đó nếu đã thi 1 hay 2 lần rồi.
RBTV đầy đủ phải được diễn đạt bằng thuật toán như sau:
R3: kq KQUATHI| Nếu kq.Lanthi = 1 thì 0  kq.Diemthi  10.0

hoặc: Nếu kq.Lần thi > 1 thì kq’KQUATHI sao cho kq’.Lanthi = kq.Lanthi - 1 và
kq.Diemthi  kq’.Diemthi.

33
 Ràng buộc toàn vẹn về phụ thuộc tồn tại (Existential
Dependency hay Referential Dependency)
 Còn được gọi là phụ thuộc về khóa ngoại.

 Đây là loại RBTV khá phổ biến trong các CSDL.

 Phụ thuộc tồn tại xảy ra nếu có một trong hai trường hợp
sau:
(i) Có sự hiện diện của khóa ngoại.
(ii) Có sự lồng khóa giữa các quan hệ.

34
 Ví dụ: Trong thể hiện của quan hệ CHITIETHD, sự tồn tại của mỗi bộ giá trị cthđ
đều phụ thuộc vào sự tồn tại của một bộ giá trị hđ trong thể hiện của quan hệ
HÓAĐƠN sao cho hđ.SoHD = cthđ.SoHD, và phụ thuộc cả vào sự tồn tại của một
bộ giá trị mh trong thể hiện của quan hệ DMHÀNG sao cho mh.Mahang =
cthđ.Mahang.
 Biểu diễn các RBTV này như sau:
RBTV1: “Mỗi bộ của CHITIETHD phải có một hóa đơn với Sohoadon tương
ứng”: cthđ  CHITIETHD, hđ  HOADON sao cho cthđ.Sohoadon =
hđ.Sohoadon.
hoặc: CHITIETHD[ Sohoadon ]  HOADON[ Sohoadon ]
RBTV2: “Mỗi bộ của CHITIETHD phải có mã hàng thuộc về danh mục
hàng”: cthđ  CHITIETHD, hh  DMHANG sao cho cthđ.Mahang=hh.Mahang
Hoặc :CHITIETHD[Mahang]  DMHANG[Mahang ]
35
 Ràng buộc toàn vẹn tổng hợp (liên bộ - liên quan hệ):

 Khi có sự hiện diện của 1 thuộc tính mang tính chất tổng hợp (tức là giá trị của

thuộc tính có thể được tính toán từ giá trị của các thuộc tính khác trên một hay
nhiều bộ giá trị của các quan hệ trong CSDL)

 Hay phụ thuộc tồn tại lồng khóa thì có RBTV liên quan hệ - liên bộ.

 Ví dụ: Xét CSDL về quản lý học viên, RBTV liên quan hệ - liên bộ có thể được xác định: “Với

mọi bộ giá trị của LOPHOC, nếu Số lượng học viên lớn hơn 0 thì số lượng này phải lớn hơn
hay bằng tổng số bộ giá trị đếm được của các học viên có cùng Mã lớp”.

 Biểu diễn RBTV như sau:

 lh  LOPHOC thì: nếu lh.Sohocvien > 0 thì: h.Sohocvien = COUNT (hv  HOCVIEN,
hv.Malop = lh.Malop)
36
CHƯƠNG 3
3.3 Các phép toán cập nhật
MÔ HÌNH
QUAN HỆ

37
 Phép thêm một bộ mới vào quan hệ

 Việc thêm một bộ giá trị mới t vào quan hệ R (A1, A2, ... An) làm

cho thể hiện TR của nó tăng thêm một phần tử mới: TR = TR.t.
Dạng hình thức của phép thêm bộ mới là:

 INSERT (R; Ai1=v1, Ai2 =v2, ... Aim= vm)

trong đó, Ai1, Ai2, ... Aim là các thuộc tính, và v1, v2, ... vm là các giá
trị thuộc MGT(Ai1), MGT(Ai2) , ..., MGT(Aim) tương ứng.

38
 Phép loại bỏ bộ khỏi quan hệ

 Phép loại bỏ bộ t của quan hệ sẽ lấy đi (những) bộ t khỏi thể


hiện của quan hệ. TR = TR \ t. Phép loại bỏ được viết một cách
hình thức như sau:

DELETE (R; Ai1=v1, Ai2 =v2, ... Aim= vm).


Trong đó Aij=vj (j = 1, 2, ..., m) được coi như những điều kiện thỏa một số
thuộc tính của bộ t để loại bỏ một bộ ra khỏi quan hệ.
.

39
 Phép sửa đổi giá trị của các thuộc tính

 Một số hệ quản trị CSDL đưa ra nhiều câu lệnh khác nhau để sửa

đổi dữ liệu: EDIT, CHANGE, BROW, UPDATE (như DBase, FoxPro


v.v...).
 UPDATE (R; Ai1=c1, Ai2 =c2, ... Aim= cm; Ai1=v1, Ai2 =v2, ... Aim= vm).

 Trong đó R là quan hệ cần thực hiện sửa đổi; Aij= cj (j = 1, 2, ..., m) là điều

kiện tìm kiếm bộ giá trị để sửa và Aij= vj (j = 1, 2, ..., m) là giá trị mới của bộ.

40
CHƯƠNG 3

3.4 Các phép toán


MÔ HÌNH
đại số quan hệ
QUAN HỆ

41
 Hợp (Union)

 Hiệu (Trừ - Minus)

 Giao (Intersection)

 Tích Đề-các (Cartesian)

 Chia (Division).

 Phép chiếu (Projection)

 Phép chọn (Selection)

 Kết nối (Join)


42
 Hợp của hai quan hệ R và S - ký hiệu là RS - là một quan hệ
Q xác định trên tập thuộc tính U, có cùng thứ tự thuộc tính như
trong quan hệ R và S, được định nghĩa như sau:

Q = R  S = { t / t  R hoặc t  S }

VD:

43
 Giao của hai quan hệ R và S, được ký hiệu là R ∩ S, là một
quan hệ Q xác định trên tập thuộc tính U, có cùng thứ tự
thuộc tính như trong quan hệ R và S, được định nghĩa như
sau:
Q = R ∩ S = { t | t  R và t  S }

44
 Hiệu của hai quan hệ R và S, được ký hiệu là R - S, là một

quan hệ Q xác định trên tập thuộc tính U, có cùng thứ tự thuộc
tính như trong quan hệ R và S, được định nghĩa như sau:

Q = R - S = { t / t  R và t  S }

 Hiệu của 2 quan hệ R và S là một quan hệ có cùng ngôi với

quan hệ R và S với các bộ giá trị là các bộ giá trị của R sau khi
đã loại bỏ đi các bộ có mặt trong quan hệ S.
45
R (A B C) S (A B C) R – S= (A B C)
a1 b1 c1 a2 b1 c2 a1 b1 c1
a1 b2 c1 a2 b2 c2 a2 b2 c2
a2 b2 c2

R (A B C) S (A B C) R – S= (A B C)
a b c b g a a b c
d a f d a f a b d
a b d
46
 R (A1, A2, ..., An) và S (B1, B2, ..., Bm) là hai quan hệ có số bộ giá trị hữu hạn.
Tích Đề-các của hai quan hệ R và S, được ký hiệu là R x S, là một quan hệ
Q xác định trên tập thuộc tính của R và S (với n + m thuộc tính) và được
định nghĩa như sau:
Q = R x S = { t | t có dạng (a1, a2, ..., an, b1, b2, ..., bm) trong đó (a1, a2,
..., an)  R và (b1, b2, ..., bm)  S }

 Tích Đề-các của 2 quan hệ R và S là một quan hệ Q có số ngôi bằng tổng số


ngôi của R và S, với các bộ giá trị gồm 2 phần: phần bên trái là một bộ giá trị
của R và phần bên phải là một bộ giá trị của S. Như vậy, nếu R có n1 bộ giá
trị và S có n2 bộ giá trị, thì Q sẽ có n1 x n2 bộ giá trị.

47
48
 Kết nối giữa từng bộ của quan hệ thứ nhất với mỗi bộ của quan hệ thứ hai

49
 R là quan hệ n ngôi và S là quan hệ m ngôi (n > m và S   ),
có m thuộc tính chung (giống nhau về mặt ngữ nghĩa, hoặc
các thuộc tính có thể so sánh được) giữa R và S.
 Phép chia 2 quan hệ R và S, ký hiệu là R  S, là một quan hệ
Q có n - m ngôi được định nghĩa như sau:
Q = RS = { t |u S, (t,u)R }
 Sử dụng phép tích Đề-các, có thể định nghĩa phép chia hình
thức như sau: R S = Q sao cho Q x S R
50
51
 Ví dụ: Đưa ra môn học được dạy ở tất cả các khoá học?
PHANCONG KHOAHOC Khoahoc
MonHoc Khoahoc k60
Tiếng Anh k60 K61
Kỹ thuật lập trình K61
Tiếng Anh K61
CSDL K60
HQTCSDL K61

52
 Kết quả là
quan hệ
PHICONG
(Sohieuphicon
g) có 1 bộ giá
trị (30)

53
 Giả sử R là một quan hệ xác định trên tập thuộc tính U = { A1, A2, ..., An },
X  U. Phép chiếu quan hệ R trên tập con các thuộc tính X là một quan hệ
Q xác định trên tập thuộc tính X, ký hiệu là R [X], được định nghĩa như sau:
Q = R [X] = { q |  t  R: q = t.X }, Có thể ký hiệu X(R).

 Ngữ nghĩa: Trích từ R một số thuộc tính nào đó để tạo thành một quan hệ
mới. Số ngôi của quan hệ mới này bằng số thuộc tính của tập con X. Các
bộ giá trị của các cột được trích nếu giống nhau sẽ được loại bỏ để chỉ giữ
lại một bộ duy nhất (trong thể hiện của quan hệ mới không có 2 bộ nào
giống nhau)

54
 Lựa chọn một số thuộc tính từ một quan hệ

55
56
 Là phép tính để xây dựng một tập con các bộ của quan hệ đã cho, thỏa mãn
một biểu thức F xác định.
 Biểu thức F: diễn tả bởi một tổ hợp Boolean của các toán hạng trả về giá trị
True, False, mỗi toán hạng là một phép so sánh
 Các phép so sánh trong biểu thức F: <, =, >, <=, >= và các phép logic "và"
( - conjunction), phép "hoặc" ( - disjunction) và phủ định ( - not).
 Giả sử quan hệ R(A1, A2, ... An), Đ là một điều kiện. Đánh giá điều kiện Đ
trên bộ giá trị t  R được ký hiệu là E(tĐ) hoặc có thể viết Đ(t).
 Định nghĩa: Phép chọn các bản ghi của R thỏa mãn điều kiện F là một quan
hệ Q có cùng ngôi với R, ký hiệu là R:Đ, được định nghĩa:
 Q = { t  R | F (t) = đúng }, có thể được ký hiệu Đ(R).

57
 Ví dụ: cho quan hệ R (A, B, C

A B C  Phép chọn A>8(R) cho kết quả là:

6 4 12 A B C
8 7 32 10 19 8
10 19 8 25 23 19
25 23 19
 Phép chọn (A>8)  (B<7) (R) cho kết quả là:
4 56 24

58
 Lựa chọn các bộ trong một quan hệ thoả mãn điều kiện cho trước

59

Điều kiện chọn còn gọi là biểu thức chọn

 Biểu thức chọn F: một tổ hợp logic của các toán hạng. Mỗi toán
hạng là một phép so sánh đơn giản giữa 2 biến là hai thuộc
tính hoặc giữa 1 biến là 1 thuộc tính và 1 giá trị hằng
 Các phép so sánh: <, =, >, , ,

 Các phép logic: , , 

60
Đưa ra tên của các sinh viên sống ở Bundoora

61
 Giả sử có 2 quan hệ R (A1, A2, ..., An), S (B1, B2, ..., Bm).
t = (a1, a2, ..., an)  R, u = (b1, b2, ..., bm) S. Gọi v là bộ ghép
nối u vào t: v = (t, u) = (a1, a2, ..., an, b1, b2, ..., bm).
 A  R+, B  S+ là hai thuộc tính có thể so sánh được.
 Gọi Teta là một trong các phép toán so sánh { <, <=, >, >=, =,  }.
 Phép kết nối hai quan hệ R với S trên các thuộc tính A và B với phép
so sánh Teta, với giả thiết là giá trị cột R[A] có thể so sánh được với
mỗi giá trị của cột S[B], được định nghĩa qua:
R S = { v = (t, u) | t R , u S va t.A  u.B }
 Hoặc: R S = (R x S) : (A  B).
62
 Ví dụ: Đưa ra danh sách các sinh viên và mã khoá học mà
sinh viên đó tham gia

63
 Nếu Teta là so sánh bằng nhau (=) thì gọi là phép kết nối bằng (Equi
Join). Nếu các thuộc tính so sánh là giống tên nhau thì trong kết quả
của phép kết nối sẽ loại bỏ đi một trong 2 thuộc tính, khi đó gọi là kết
nối tự nhiên (Natural Join) và ký hiệu" * ".

64
 Nếu phép so sánh trong điều kiện kết nối là phép so sánh bằng thì kết nối

gọi là kết nối bằng


• Định nghĩa: Phép kết nối bằng trên các thuộc tính cùng tên của 2 quan
hệ và sau khi kết nối 1 thuộc tính trong 1 cặp thuộc tính trùng tên đó sẽ bị
loại khỏi quan hệ kết quả thì phép kết nối gọi là kết nối tự nhiên
• Cú pháp phép kết nối tự nhiên: R1 *R2

65
 Thực chất là phép kết nối bằng nhưng trong trường hợp hai
thuộc tính so sánh có cùng tên thì kết quả vẫn giữ lại 2 tên thuộc
tính.

66
 Đưa ra tên của các sinh viên sống ở Bundoora và mã khoá
học mà sinh viên đó đăng ký

67
 Quan hệ R (A1, A2, ..., An) và S (B1, B2, ..., Bm).
 t = (a1, a2, ..., an)R, u = (b1, b2, ..., bm)S,
 v = (t, u) = (a1, a2, ..., an, b1, b2, ..., bm).
 Bộ tNULL = (NULL, NULL, ..., NULL) là một bộ đặc biệt của R
 uNULL = (NULL, NULL, ..., NULL) là một bộ đặc biệt của S.
 A  R+ và B  S+ là hai thuộc tính có thể so sánh được.

 Phép kết nối trái hai quan hệ R với S trên các thuộc tính A và B với phép
so sánh bằng ( = ), được định nghĩa là:

R S = { v = (t, u) | (t  R , u  S và t.A  u.B) hoặc (t  R, u = uNULL với


t.A  S[B])}
68
69
 Với quan hệ R, S; thuộc tính A, B; và các bộ giá trị v, t, u, tNULL,
uNULL được xác định như kết nối trái.
 Phép kết nối phải hai quan hệ R với S trên các thuộc tính A và B với
phép so sánh =, được định nghĩa là:
R S = {v=(t,u) | (tR, uS và t.A  u.B) hoặc (t = tNULL, uS,
với t.AS[B])}

70
CHƯƠNG 3 3.5 Chuyển đổi từ mô

MÔ HÌNH hình ER sang mô hình


QUAN HỆ quan hệ

71
 Cách chuyển một mô hình thực thể kiên kết sang mô hình quan hệ
Quy tắc 1: Các thực thể (trừ thực thể yếu)  các bảng/quan hệ
Quy tắc 2: Thực thể yếu  bảng (Khóa của chủ sẽ thành khóa ngoại)
Quy tắc 3 : Liên kết 1-1  khoá của 1 bên sang làm khoá ngoại ở bên
kia.
Quy tắc 4: Liên kết 1-N  khoá của bảng bên 1 trở thành khoá ngoại
của bên nhiều.
Quy tắc 5: Liên kết M-N  Thêm 1 bảng mới.
Quy tắc 6: Thuộc tính đa trị  Thêm 1 bảng mới
Quy tắc 7: Liên kết bậc >2  Thêm 1 bảng mới
Quy tắc 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
72
Quy tắc 1: Các thực thể (trừ thực thể yếu)  các bảng/quan hệ

VD: Kiểu thực thể: EMPLOYEE, DEPARTMENT, PROJECT


==> quan hệ: EMPLOYEE, DEPARTMENT, PROJECT

73
74
Quy tắc 2: Thực thể yếu  bảng/quan hệ (Khóa của thực thể chủ
sẽ thành khóa ngoại)

75
Quy tắc 3 : Liên kết 1-1  Xác định một quan hệ S_T. Kiểu thực
thể có sự tham gia toàn bộ vào là S, thực thể còn lại là T.
- Đưa khóa chính của T sang làm khóa ngoại của S.
- Thuộc tính của mối quan hệ S_T trở thành thuộc tính của S

76
Quy tắc 4: Liên kết 1-N  khoá của bảng bên 1 trở thành khoá
ngoại ở bảng bên nhiều.

77
Quy tắc 5: Liên kết M-N  Thêm 1 bảng/quan hệ mới R, chuyển
khóa
chính của hai quan hệ phía M và N thành khóa ngoại của quan hệ
R. Khóa chính của R là sự kết hợp của hai khóa ngoại.

78
Quy tắc 6: Thuộc tính đa trị  Thành 1 bảng/quan hệ mới
- Thuộc tính khóa (hoặc 1 phần) của thực thể chính chuyển thành khóa
ngoại của quan hệ mới.
- Khóa chính của quan hệ mới là khóa chính của bản thân quan hệ +
khóa ngoại do thực thể chính chuyển sang.

79
Quy tắc 7: Liên kết bậc >2  Thêm 1 bảng/quan hệ mới R

- Khóa chính của các quan hệ tham gia liên kết được đưa làm khóa ngoại của
quan hệ R và các khóa ngoại này đồng thời đóng vai trò là khóa chính của R

80
Quy tắc 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
- Attr(R) là thuộc tính của R, PK(R) là khoá của R.
Chuyển đổi mỗi chuyên biệt hoá có: m lớp con { S1, S2 , … ,
Sm} và lớp cha C, thuộc tính của C là { k, a1, a2 , …, an} và k là
khoá chính.
Có 4 lựa chọn sau:
Lựa chọn 1:
- Tạo quan hệ L cho lớp cha C với các thuộc tính Attrs(L)={k, a1,
…, an} và khoá của L là: PK(L)=k.
- Tạo quan hệ Li cho mỗi lớp con tương ứng Si với các thuộc tính
Attrs(Li)={k} U {thuộc tính của Si} và PK(Li)=k

81
-> Chuyển chuyên biệt hoá trên thành các quan hệ sau:
EMPLOYEE(SSN, FName, Minit, LName, BirthDate, Address, Salary)
SECRETARY(SSN, TypingSpeed)
TECHNICIAN(SSN, TGrade)
ENGINEER(SSN, EngType)

82
Lựa chọn 2: Tạo một quan hệ Li cho mỗi lớp con Si , với các
thuộc tính Attr(Li) = {k, a1, a2,..., am} U {thuộc tính của Si} và
PK(Li) = k.

83
Lựa chọn 3: Tạo một quan hệ L với các thuộc tính Attr(L) = {k, a1, a2,
…, an } U {thuộc tính của S1}U… U {thuộc tính của Sm} U {t} và PK(L) =
k. Trong đó, t là thuộc tính phân biệt chỉ ra bản ghi thuộc về lớp con nào,
vì thế miền giá trị của t ={1,2,…,m}.
Ví dụ: Đối với chuyên biệt hoá của EMPLOYEE, ta chỉ tạo ra một quan
hệ L như sau: (JobType là thuộc tính phân biệt)
EMPLOYEE(SSN, FName, Minit, LName, BirthDate, Address, Salary,
TypingSpeed, Tgrad, EngType, JobType)

84
Lựa chọn 4: Tạo một quan hệ L với các thuộc tính Attr(L) = {k, a1 , a2 , …, an } U {thuộc tính của S1} U… U
{thuộc tính của Sm} U {t1 , t2 , …, tmj} và PK(L) = k. Lựa chọn này cho chuyên biệt hoá của các lớp con được
nạp chồng (nhưng cũng áp dụng cho một chuyên biệt tách rời), và với mỗi ti, 1≤ i ≤ m, là thuộc tính BOOLEAN chỉ
ra bộ theo lớp con Si. (Mflag, Pflag thuộc tính phân biệt)

->PART (ParNo, Description, Mflag, DrawingNo, ManufactureDate, BatchNo, PFlag,


SupplierName, ListPrice)

85
86
3.1 Cho các quan hệ R1, R2, R3. Thực hiện các phép toán sau

87
Cho CSDL sau:
Các hãng cung ứng: S (S#, Sname, Status, City)
Các mặt hàng P(P#, Pname, Color, Weight, City)
Sự cung ứng SP (S#, P#, Qty)
Cung cấp: SP

1. Đưa ra danh sách các mặt hàng S# P# Qty


Hãng: S
S1 P1 300
màu đỏ (P) S# Sname Status City
S1 P2 200
2. Đưa ra mã của các hãng cung S1 Smith 20 London
S1 P3 400
ứng mặt hàng P1 hoặc P2. S2 Jones 10 Paris
S2 P1 300
S3 Black 30 Paris
3. Đưa ra mã của các hãng cung S2 P2 300
S3 P2 200
ứng mặt hàng P1 và P2. Hàng: P

4. Đưa ra mã của các hãng cung P# Pname Color Weight City


ứng ít nhất một mặt hàng màu P1 Nut Red 12 London
đỏ P2 Bolt Green 17 Paris
P3 Screw Blue 17 Rome
5. Đưa ra mã của các hãng cung
P4 Screw Red 14 London
ứng tất cả các mặt hàng
88
3.2 Cho CSDL quản lý hàng hóa gồm các quan hệ sau:

 HANG(MaH, TenH, SLTon); SLTon: là số lượng hàng tồn trong kho


 KHACH(MaK, TenK, Diachi); địa chỉ của khách giả sử chỉ là tên tỉnh.
 HOADON(SoHD, ngayHD, MaK)
 CHITIETHD(SoHD, MaH, SLBan, DGia); DGia là đơn giá bán của sản
phẩm.
 Hãy dùng đại số quan hệ viết biểu thức trả lời các câu hỏi sau:
1. Đưa ra danh sách địa chỉ của các khách hàng.
2. Đưa ra tên hàng và số lượng tồn của những mặt hàng
3. Đưa ra thông tin của các mặt hàng có số lượng tồn >5.
4. Đưa ra các thông tin khách hàng có địa chỉ ở Hà Nội
5. Đưa ra tên khách hàng mua hàng ngày 1/1/2013

89
1.Đưa ra Mã hàng, Tên hàng có đơn giá bán >200,000
2.Đưa ra tên khách hàng ở Hải Phòng mua hàng ngày 2/2/2013
3.Đưa ra tên hàng được bán trong ngày 2/2/2013
4.Đưa ra các mã hàng chưa từng được bán.
5.Đưa ra các mã khách chưa từng mua hàng từ ngày 12/12/2012.

3.3 Chuyển đổi tất cả các mô hình ER trong bài tập cuối
chương 2 sang mô hình quan hệ

TS. Đặng Thị Thu Hiền 90


https://sites.google.com/site/tlucse484/
3.4.
Chuyển
sang mô
hình quan
hệ

TS. Đặng Thị Thu Hiền 91


https://sites.google.com/site/tlucse484/
3.5. Chuyển
sang mô
hình quan hệ

TS. Đặng Thị Thu Hiền 92


https://sites.google.com/site/tlucse484/
3.6. Chuyển
sang mô
hình quan hệ

93
1
 4.1. Câu lệnh mô tả dữ liệu DDL (Data Definition Language)

 4.2. Câu lệnh thao tác dữ liệu DML (Data Manipulation


Language)

 4.3 Câu lệnh truy vấn dữ liệu SQL (Structured Query


Language)

 4.4. Câu lệnh quản lý dữ liệu DCL (Data Control Language)

2
 Một DBMS phải có ngôn ngữ giao tiếp giữa người sử dụng với
CSDL. Ngôn ngữ giao tiếp CSDL gồm các thành phần:
 Ngôn ngữ mô tả dữ liệu (Data Definition Languege - DDL): cho phép
khai báo cấu trúc bảng, mối quan hệ, các quy tắc.
 Ngôn ngữ thao tác dữ liệu (Data manipulation Language - DML): cho
phép thêm, xoá, sửa.
 Ngôn ngữ truy vấn dữ liệu hay ngôn ngữ hỏi đáp có cấu trúc (Structured
Query Language - SQL): cho phép truy vấn các thông tin.
 Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL): cho phép
thay đổi cấu trúc, khai báo bảo, cấp quyền.
3
 1975-1976: SEQUEL (Structured English Query language) _IBM.
 Quan hệ SYSTEM-R

 1976: SEQUEL2. 1978-1979 SEQUEL2

 1978-1979: Ngôn ngữ truy vấn có cấu trúc


 Hệ quản trị CSDL: SYSTEM-R.

 1986: Chuẩn SQL- 86

 1989: Chuẩn SQL- 89

 1992: Chuẩn SQL- 92

 1996: Chuẩn SQL- 96

  Tất cả các hệ quản trị CSDL lớn trên thế giới cho phép truy cập bằng SQL và hầu
hết theo chuẩn ANSI

4
 Ngôn ngữ gần với ngôn ngữ tự nhiên (tiếng Anh)

 SQL là ngôn ngữ phi cấu trúc, tức là trong các lệnh của SQL người sử dụng

CHỈ CẦN đưa ra yêu cầu hệ thống CÁI GÌ chứ không cần chỉ ra phải làm

THẾ NÀO.

 Ví dụ: Cho cấu trúc dữ liệu để quản lý học sinh như sau

HOCSINH(MaHS, TenHS, ĐTB, Xeploai). Đưa ra TenHS, ĐTB của các

học sinh có ĐTB>=8.0.

Select TenHS, ĐTB From HOCSINH Where ĐTB>=8.0;

 SQL được chia 2 loại: SQL (ngôn ngữ hỏi) và PL/SQL (ngôn ngữ lập trình).

5
 Một số quy ước
 Các biến cú pháp người sử dụng phải điền cụ thể vào khi viết lệnh (<
>)
 Các thành phần tuỳ chọn ([ ]).

 Lựa chọn một trong các khả năng (|).

 Thành phần bắt buộc phải chọn trong danh sách: ({ }).

 Lệnh SQL có thể được viết trên nhiều dòng và kết thúc lệnh bởi dấu
chấm phẩy ( ; ),
 Từ khoá, tên, hàm, tên thuộc tính, tên bảng, tên đối tượng thì không
được phép viết tách xuống hàng. SQL không phân biệt chữ hoa và chữ
thường.
6
 Ví dụ CSDL QLHanghoa

 Khach(Mak, tenk, diachi, dienthoai)

 Loaihang(Maloai, tenloai)

 Hang(mah, tenh, slton, maloai )

 HoaDon(SoHD, ngayHD, Mak)

 ChitietHD(SoHD, mah, slb, dgia)

7
 SQL chuẩn (86, 89, 92, 96) quy định cách đặt tên tên bảng, cột, View,
ràng buộc toàn vẹn,… như sau:
 Gồm tối đa 32 ký tự chữ cái, chữ số và dấu (_), bắt đầu bằng chữ cái hoặc (_).

 Tên bảng phải là duy nhất trong CSDL và tên bảng trung gian, và không trùng
với từ khoá.
 Tên cột của một bảng là khác nhau, có thể giống nhau nếu chúng nằm trong
các bảng khác nhau.
 Một số HQTCSDL cho phép tên có dấu cách, khi thao tác phải bao bởi cặp []

 Không phân biệt hoa, thường

 Câu lệnh SQL kết thúc bằng dấu ;

 -- là chú thích

9
 SQL Server cung cấp 6 loại kiểu dữ liệu
 1. Kiểu dữ liệu Exact Numeric (số chính xác, không sai số) trong SQL

Kiểu dữ liệu Từ Tới


bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807
Int -2,147,483,648 2,147,483,647
smallint -32,768 32,767
tinyint 0 255
Bit 0 1
decimal -10^38 +1 10^38 -1
numeric -10^38 +1 10^38 -1
money -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

 2. Kiểu dữ liệu Approximate Numeric trong SQL


Kiểu dữ liệu Từ Tới
float -1.79E + 308 1.79E + 308
Real -3.40E + 38 3.40E + 38
10
 3. Kiểu dữ liệu Date và Time trong SQL
Kiểu dữ liệu Từ Tới
datetime Jan 1, 1753 Dec 31, 9999
smalldatetime Jan 1, 1900 Jun 6, 2079
date Lưu giữ date dạng June 30,2016
time Lưu giữ time dạng 12:30 P.M.
 4. Kiểu dữ liệu Character String (kiểu chuỗi) trong SQL

Kiểu dữ liệu Miêu tả


Không chứa Unicode, độ dài tối đa là 8.000 ký tự (các ký tự không phải Unicode có độ dài cố
char
định)
Không chứa Unicode, độ dài tối đa là 8.000 ký tự (dữ liệu không phải Unicode có độ dài có thể
varchar
thay đổi)
Không chứa Unicode, độ dài tối đa là 231 ký tự, dữ liệu không phải Unicode có độ dài có thể
varchar(max)
thay đổi (chỉ với SQL Server 2005)
Không chứa Unicode, độ dài tối đa là 2.147.483.647 ký tự, dữ liệu không phải Unicode có độ
text
dài có thể thay đổi
 5. Kiểu dữ liệu Unicode Character String trong SQL

Kiểu dữ liệu Miêu tả


nchar Độ dài tối đa là 4.000 ký tự (Unicode có độ dài cố định)
nvarchar Độ dài tối đa là 4.000 ký tự (Unicode có độ dài có thể thay đổi)
nvarchar(max) Độ dài tối đa là 231 ký tự, Unicode có độ dài có thể thay đổi (chỉ với SQL Server 2005) 11
ntext Độ dài tối đa là 1.073.741.823 ký tự (Unicode có độ dài có thể thay đổi)
 6. Kiểu dữ liệu Binary

Kiểu dữ liệu Miêu tả


binary Độ dài tối đa là 8.000 byte (dữ liệu binary có độ dài cố định )
varbinary Độ dài tối đa là 8.000 byte (dữ liệu binary có độ dài có thể thay đổi)
Độ dài tối đa là 231 byte, dữ liệu binary có độ dài có thể thay đổi (chỉ với SQL Server
varbinary(max)
2005)
image Độ dài tối đa là 2.147.483.647 byte (dữ liệu binary có độ dài có thể thay đổi)

Kiểu dữ liệu Miêu tả


 7. Các kiểuLưu
dữgiữliệu
các khác trong
giá trị của SQL
các kiểu dữ liệu đa dạng được hỗ trợ bởi SQL Serverv, ngoại
sql_variant
trừ text, ntext, và timestamp
timestamp Lưu giữ một số duy nhất mà được cập nhật mỗi khi một hàng được cập nhật
uniqueidentifier Lưu giữ một định danh chung (Globally Unique Identifier - GUID)
Lưu giữ dữ liệu XML. Bạn có thể lưu giữ xml trong một column hoặc một biến (chỉ với
xml
SQL Server 2005)
cursor Tham chiếu tới một đối tượng con trỏ (Cursor)
table Lưu giữ một tập hợp kết quả để xử lý vào lần sau

12
 Tạo CSDL
 CREATE DATABASE <tên CSDL>
VD: Tạo CSDL QLHANGHOA
Create Database QLHANGHOA;
 Tạo bảng CSDL
 CREATE TABLE <tên bảng>
 ( <tên cột 1> <kiểu dữ liệu 1> (<kích thước 1>),
 …,
 <tên cột n> <kiểu dữ liệu n> (<kích thước n>),
 [[CONSTRAINT <tên RB1>] <Ràng buộc 1>,
 …,
 [CONSTRAINT <tên RBn>] <Ràng buộc n>] )

13
 Các dạng ràng buộc gồm:

 NOT NULL: Không rỗng

 UNIQUE: Duy nhất

 PRIMARY KEY: Khóa chính

 FOREIGN KEY ( Referential ) REFERENCES : Khóa ngoại

 CHECK: kiểm tra giá trị - DEFAULT: mặc định

14
 Ví dụ CSDL

 Khach(Mak, tenk, diachi, dienthoai)

 Loaihang(Maloai, tenloai)

 Hang(mah, tenh, slton, maloai )

 HoaDon(SoHD, ngayHD, Mak)

 ChitietHD(SoHD, mah, slb, dgia)

15
 Ví dụ: Tạo bảng HANG

Create table HANG(


Mah char(5) not Null,
Tenh varchar(30),
Slton int);

Hang(mah, tenh, slton, maloai )

16
 Ví dụ: Tạo bảng HANG
Create table HANG(
Mah char(5) not Null Primary Key,
Tenh char(30),
Slton int); Hoặc
Hoặc Create table HANG(
Create table HANG( Mah char(5) not Null,
Mah char(5) not Null, Tenh char(30),
Tenh char(30), Slton int,
Slton int, Primary Key(mah));
Constraint H_PK Primary Key
(Mah));

17
 Tạo bảng KHACH với tên và địa chỉ là duy nhất. Mặc định điện

thoại là ‘0’,

Create Table KHACH(


Mak char(10) not null primary key,
Tenk varchar(30),
Diachi varchar(50),
Dienthoai varchar(12) default ‘0’,
constraint UN_Ten_DC unique(Tenk,Diachi));

18
tạo bảng HoaDon
Create table HOADON
(Sohd char(5) not null primary key,
ngayhd date,
mak char(10),
foreign Key (mak) References khach(mak));

19
 Ví dụ : Tạo bảng ChitietHD
Create table ChitietHD
(Sohd char(5) not null,
mah char(5) not null,
slban int,
Primary key (sohd,mah),
foreign Key (sohd) References hoadon(sohd),
check (slban>=0));
Hoặc
Create table ChitietHD
(Sohd char(5) not null,
mah char(5) not null,
slban int,
Constraint CT_PK Primary key (sohd,mah),
Constraint HD_FK foreign Key(sohd) References
hoadon(sohd),
Constraint CK_SLB check (slban>=0));

20
 NHANVIEN (MaNV, Ho, Hodem, Ten, NgaySinh, DiaChi, Gioitinh,
Luong, MaNguoitheodoi, MaPhong)
 Phongban (MaPhong, TenPhong, MaNQL, NgayBDQL)
 Phong_Diachi(MaPhong, Diachi)
 DuAn( MaDA, TenDA, DiachiDA, MaPhong)
 NV_DA(MaNV, MaDA, SoGio)
21
 NguoiPT(MaNV, TenNPT, GioitinhNPT, Nsinh, Moiquanhe)
 Xoá một bảng
 DROP TABLE <tên bảng>;

 Ví dụ: xoá bảng khách hàng

Drop table khach;

22
 Sửa đổi cấu trúc của bảng
 Thêm một ràng buộc
 ALTER TABLE <tên bảng>
ADD CONSTRAINT <Tên RB>;
 Thêm một cột
 ALTER TABLE <tên bảng>
ADD <tên cột><kiểu dữ liệu>;
 Xoá một cột
 ALTER TABLE <tên bảng>
DROP COLUMN <tên cột> [ràng buộc];
 Thay đổi kiểu dữ liệu của cột
 ALTER TABLE <tên bảng>
ALTER COLUMN <tên cột> <kiểu dl mới>;

23
 Ví dụ:

 Thêm một ràng buộc CHECK


Alter table hang
Add constraint check_SL check (Slton>0)

 Thêm cột Giới tính vào bảng Khach

Alter table khach


Add GT char(3);

 Thay đổi độ rộng của cột địa chỉ trong bảng Khach

Alter table khach


Alter column diachi char(40);

 Xoá bỏ cột GT trong bảng Khach

Alter table khach


24
Drop column GT ;
4.2 Câu lệnh thao tác dữ
liệu DML

25
 Bổ sung giá trị mới

 Có thể thêm vào bảng mỗi lần một bản ghi hoặc nhiều bản ghi lấy kết

quả từ một truy vấn nào đó.

 Bổ sung trực tiếp một bộ giá trị (them 1 bản ghi)

INSERT INTO <tên bảng> [(tên cột 1>, <tên cột 2>,…)]

VALUES (<biểu thức 1>, <biểu thức 2>,…);

 Số lượng biểu thức và kiểu giá trị của các biểu thức phải tương ứng

với số lượng và kiểu giá trị của các tên cột trong danh sách tên cột
của bảng.

26
 Các giá trị phải phù hợp với các ràng buộc toàn vẹn định nghĩa trên quan

hệ, trong đó có ràng buộc toàn vẹn về khoá chính (Primary key), khoá
ngoại (Foreign key) và miền giá trị.

 Ví dụ : Thêm một khách hàng mới có nội dung

 Mak : K2000, Tenk : Đinh Gia Linh, Diachi : Hà Nội, Dienthoai :

048570581 vào bảng KHACH

Insert Into KHACH

Values (‘K2000’ , N‘Đinh Gia Linh’, N‘Hà Nội’, ‘048570581’) ;

27
 Thêm một hay nhiều bộ giá trị từ truy vấn.

INSERT INTO <tên bảng> [(<tên cột 1>, <tên cột 2>,…)]

SELECT <biểu thức 1>, <biểu thức 2>,…

FROM <danh sách các bảng nguồn>

[WHERE <điểu kiện>]…

  Nếu giá trị của các biểu thức sau từ khoá SELECT hoàn toàn phù hợp
về số lượng, miền giá trị và thứ tự của các cột trong bảng thì danh sách
tên các cột của bảng sau khi từ khoá INTO có thể được bỏ qua.

28
 Tạo mới một bảng với các bộ giá trị lấy từ CSDL

SELECT <biểu thức 1>, <biểu thức 2>,…

INTO <tên bảng>

FROM <danh sách các bảng nguồn>

[WHERE <điều kiện>]

GROUP BY <danh sách cột phân nhóm>]

[HAVING <điều kiện>]

[ORDER BY <cột 1>[ASC | DESC], <cột 2> [ASC | DESC],…]


29
 Ví dụ : Tạo bảng mới có tên là KHHANOI gồm các khách hàng ở Hà Nội

Select mak, tenk, diachi, dienthoai

Into KHHANOI

From KHACH

Where DIACHI like N’Hà Nội’;

30
 Sửa nội dung của bộ

UPDATE <tên bảng>

SET <tên cột 1> = <biểu thức 1>,

<tên cột 2> = <biểu thức 2,…

<tên cột n> = <biểu thức n>

[WHERE <điều kiện>];

 Ví dụ: Sửa số lượng hàng tồn kho của tất cả các mặt hàng còn lại một nửa.

Update HANG

Set SLTon=SLTon/2;
31
 Xoá bộ

DELETE FROM <tên bảng>

[FROM <ds bang>]

[WHERE <điều kiện>];

  Các bản ghi thoả mãn điều kiện sau WHERE sẽ bị xoá khỏi bảng, nếu

không có mệnh đề WHERE thì tất cả các bản ghi của bảng sẽ bị xoá khỏi
bảng.

 Ví dụ: Xoá các khách hàng tại HaiPhong

Delete from KHACH

Where dc like ‘HaiPhong’;


32
4.3 Câu lệnh truy vấn dữ liệu
SQL

33
 Cú pháp tổng quát của câu lệnh như sau:

SELECT [ DISTINCT][TOP n] <biểu thức 1>, <biểu thức 2>,…

[INTO tenbangmoi]

FROM <tên bảng 1>, <tên bảng 2>,…

[WHERE] <điều kiện chọn>

[ GROUP BY <tên cột 1>,<tên cột 2>,…]

[HAVING<điều kiện in kết quả>]

[ ORDER BY <tên cột 1> | <biểu thức số 1> [ASC| DESC],…];


34
 SELECT [DISTINCT] [TOP n]{*| <biểu thức 1> [AS<tên mới 1>], <biểu thức 2>
[AS <tên mới 2>],…}

FROM <tên bảng>;

 VD: Cho biết tên các khách hàng của cửa hàng

Select TENK
From KHACH;

 Nếu không muốn lấy tên các khách hàng trùng nhau thì dùng từ khoá DISTINCT.

Select Distinct TENK


From KHACH;

 Muốn hiển thị hết tất cả các cột của bảng dùng ký tự đại diện “*”

Select *
From KHACH; 35
 Có thể dùng các phép toán số học +,-,*,/, ^,%, các hàm tính toán

đối với các cột kiểu số.


Select MAH, SLTON*10 AS SL_TON_NEW

From HANG;

 Có thể thay đổi tên của các cột trong bảng kết quả ta dùng từ

khoá AS
Select MAK AS ma_so_khach_hang

From KHACH;

36
 Nhận xét: Sau từ khoá SELECT ta còn có thể có từ khoá TOP n.
Điều này cho phép chúng ta chỉ hiển thị n hàng trong bảng kết
quả. Thông thường khi dùng TOP thì thường kết hợp với mệnh
đề sắp xếp ORDER BY.

 Đưa ra 3 MAHANG đầu tiên trong danh sách.

Select TOP 3 MAH


From HANG;
Đưa ra 10 bạn có điểm CSDL cao nhất

37
 WHERE <điều kiện chọn>

 Các bản ghi thoả mãn <điều kiện chọn > mới được thể hiện trong bảng kết
quả.

 Điều kiện chọn có thể chứa các phép toán And, Or, Between, Not Between,
like (so sánh xâu), In, is [not] Null, =,!=, <, <=, >, >=.

 Các ký tự thay thế: % thay thế cho một chuỗi ký tự

_ thay thế cho một ký tự bắt buộc

 Chú ý: Trong SQL hằng ký tự được bao bởi cặp ‘ ’. Trong Access dấu * thay
thế cho một nhóm ký tự, dấu ? thay thế cho một ký tự, hằng ký tự là cặp dấu
nháy kép “”, hằng ngày tháng là cặp dấu # #.

38
 Ví dụ:

 Hiển thị các mặt hàng có số lượng tồn lớn hơn 100
Select *
From HANG
Where SLTON>100;

 Cho hiển thị các khách hàng ở địa chỉ bắt đầu bằng chữ H
Select *
From KHACH
Where diachi like ‘H%’; ‘H_a%’

39
Toán tử so sánh Diễn tả
= So sánh bằng
<> hoặc != Khác
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
So sánh nằm trong khoảng value1
BETWEEN value1 AND value2
và value2
LIKE So sánh chuỗi tương đối

40
 Cho phép so sánh một chuỗi với chuỗi khác (có chứa các ký tự
đại diện) sử dụng toán tử LIKE
 1 kí tự (_): ‘H_A’
 Nhiều kí tự: ‘%OA%’

Ký tự Mô tả
_ Thay cho một ký tự đơn
% Thay cho một chuỗi
Thay cho một ký tự đơn trong khoảng được bao bởi
[]
cặp dấu ngoặc vuông

Thay cho một ký tự đơn bất kỳ không nằm trong


[^]
khoảng được bao bởi cặp dấu ngoặc vuông

41
 FROM <bảng1, bảng2,…>

 Dùng xác định các bảng cần có trong câu lệnh

 Cho biết các thông tin về khách hàng của các hoá đơn trong tháng
5/2010
Select KHACH.MaK,KHACH.TenK
From KHACH, HOADON
Where (month(NgayHD)= 5) and (year(NgayHD)=2010) and
(HOADON.MaK = KHACH.MaK);

SELECT *
FROM KHACH
 Khach(Mak, tenk, diachi, dienthoai)

 HoaDon(SoHD, ngayHD, Mak)


42
 Dùng tên bảng và dấu chấm (.) để phân biệt 2 cột giống

nhau.

 Có thể gán bí danh cho các bảng

Select KH.*

From KHACH KH,HOADON HD

Where (month(NgayHD)= 5) and (year(NgayHD)= 2010)


and (HD.MaK = KH.MaK);

43
Cho CSDL sau
NHANVIEN(MaNV, Hoten, Luong, GioiTinh,MaDV, MaNQL, CongViec)
DONVI (MaDV,TenDV, DiaChi)
1. Cho biết lương trung bình của các nhân viên nữ
2. Cho biết lương cao nhất, lương thấp nhất, lương trung bình trong công ty.
3. Cho biết trong công ty có bao nhiêu nhân viên nữ.
4. Cho biết công ty có bao nhiêu nhân viên nam là “Kỹ sư”
5. Cho biết Họ tên, Tên đơn vị, địa chỉ của các nhân viên nam
6. Cho biết các nhân viên có lương 200, 300, 500
7. Cho biết các nhân viên là người quản lý

44
 ORDER BY <tên cột> | <biểu thức> [ASC | DESC], <tên

cột> | <biểu thức> [ASC | DESC],…

 Biểu thức phải có giá trị số: nó thể hiện số thứ tự của cột trong bảng kết quả.

 Sắp xếp theo thứ tự tăng dần (ASC - mặc định là ASC), giảm dần (DESC) theo

giá trị cột.

 Cho biết 3 mặt hàng đầu tiên có số lượng tồn kho cao nhất (sắp xếp giảm theo

số lượng tồn kho)

Select TOP 3 MAH, TENH, SLTON

From HANG

Order By SLTON desc; 45


 Cho biết danh sách Top 10 sinh viên có điểm môn CSDL >=8;
nếu trùng điểm thì sx theo tên sv tăng dần; nếu trùng tên thì
sắp xếp theo họ đệm tăng dần

 Cho biết các khách hàng được sắp xếp theo địa chỉ, nếu cùng
địa chỉ thì giảm theo tên
Select *

From KHACH
Order By DIACHI Asc, TENK Desc;

46
 GROUP BY <tên cột 1>,<tên cột 2>,…

[HAVING <điều kiện>]

 Nhóm các bản ghi có giá trị giống nhau trên các cột chỉ định.

 HAVING theo sau GROUP BY dùng để kiểm tra điều kiện nhóm. Nhóm

nào thoả mãn điều kiện sau HAVING thì mới được hiển thị.

 VD: Đưa ra số lượng khách của mỗi địa chỉ

Select diachi as Tinh, count(*) as SL_Khach

From KHACH

Group by diachi;
47
 Cho biết các khách hàng có nhiều hơn 2 lần mua hàng
Select MAK, count(MAK) AS so_lan_mua
From HOADON
Group By MAK
Having count(MAK)>2;

 Chú ý: nếu vừa có điều kiện Where và Having thì điều kiện sau
Where được xử lý trước. Chỉ có những bộ nào thoả mãn điều kiện
Where mới được nhóm và sau khi nhóm xong mới kiểm tra điều
kiện sau Having.
48
 Cho biết các khách hàng có nhiều hơn 10 lần mua hàng trong

tháng 2 năm 2010


Select Mak, count(Mak) as So_Lan_mua_hang

From HOADON

Where (month(NgayHd)=2) and (year(NgayHd)=2010)

Group By Mak

Having count(Mak)>10;

 Chú ý: Chỉ có các cột phân nhóm mới được thể hiện trên mệnh

đề Select.
49
 Tính tổng số lượng hàng của mỗi hoá đơn bán

Select SOHD, sum(SLBAN) as So_luong_hang_ban

From chitietHD

Group By SOHD;

 Khi phân nhóm dữ liệu ta có thể sử dụng các hàm phân nhóm

để tính toán trên mỗi nhóm như count, sum, avg, max, min,…

50
 Các hàm tính toán trên nhóm các bảng ghi
 COUNT (*| <tên cột> - đếm số bản ghi có giá trị xác định tại cột được
cho bởi <tên cột>
 SUM (<biểu thức>) – tìm tổng giá trị các biểu thức

 MIN (<biểu thức>) – tìm giá trị nhỏ nhất

 MAX (<biểu thức>) – tìm giá trị lớn nhất

 AVG (<biểu thức>) – tính giá trị trung bình của biêu thức dựa trên các
bản ghi của các nhóm.

 Các hàm này còn thường được đi kèm với mệnh đề GROUP BY

51
 Cho biết số lượng tồn lớn nhất và nhỏ nhất của các mặt hàng

Select Max(SLTON), Min(SLTON)

From HANG;

 Đưa ra số lượng lớn nhất của một mặt hàng trong mỗi đơn hàng.

Select SOHD, Max(SLBAN) as So_luong_Max

From ChitietHD

Group By SOHD;

 Chú ý: các hàm SUM, MAX, MIN, AVG chỉ áp dụng với biểu thức kiểu số.

52
 Các hàm tính toán trên bản ghi

 Các hàm toán học.

 ASB (x) Trị tuyệt đối của x.

 SQRT (x) Căn bậc hai của x (Access, SQL–Server :SQR (x) )

 LOG (x) Logarit tự nhiên của x

 EXP (x) Hàm mũ cơ số e của x

 ROUND(x,n) Làm tròn tới n số lẻ (Access, SQL–Server, RND(x))

 Các hàm lượng giác: SIN, COS, TAN, ASIN, ACOS, ATAN…

53
 ROUND(n[,m]): Cho giá trị làm tròn của n (đến cấp m, mặc

nhiên m=0).

 TRUNC(n[,m]): Cho giá trị n lấy m chữ số tính từ chấm thập

phân.

 CEIL(n): Cho số nguyên nhỏ nhất lớn hơn hoặc bằng n.

 FLOOR(n): Cho số nguyên lớn nhất bằng hoặc nhỏ hơn n.

 POWER(m,n): Cho lũy thừa bậc n của m.

54
 SQRT(n): Cho căn bậc 2 của n, n>=0

 SIGN(n): Cho dấu của n.

n<0 có SIGN(n)= -1
n=0 có SIGN(n)= 0
n>0 có SIGN(n)= 1

 ABS(n): Cho giá trị tuyệt đối

 MOD(m,n): Cho phần dư của phép chia m cho n

55
 Các hàm xử lý chuỗi ký tự.

 LEN (str) Cho chiều dài dãy ký tự

 LEFT (str, n) Lấy n ký tự về phía trái của dãy str

 RIGHT (str, n) Lấy n ký tự về phía phải của dãy str

 MID (str, p, n) Lấy n ký tự của dãy str kể từ vị trí p trong dãy

 CONCAT(char1, char2): Cho kết hợp của 2 chuỗi ký tự, tương tự như

sử dụng toán tử.

56
 Các hàm xử lý chuỗi ký tự.

 INITCAP(char): Cho chuỗi với ký tự đầu các từ là ký tự

hoa

 LOWER(char): Cho chuỗi ký tự viết thường (không viết

hoa)

 LPAD(char1, n [,char2]): Chochuỗi ký tự có chiều dài

bằng n. Nếu chuỗi char1 ngắn hơn n thì thêm vào bên trái
chuỗi char2 cho đủ n ký tự. Nếu chuỗi char1 dài hơn n thì
giữ lại n ký từ tính từ trái sang 57
 LTRIM(char1, n [,char2]): Bỏ các ký tự trống bên trái

 NLS_INITCAP(char): Cho chuỗi với ký tự đầu các từ là chữ hoa, các chữ

còn lại là chữ thường

 REPLACE(char,search_string[,replacement_string]): Thay tất cả các

chuỗi search_string có trong chuỗi char bằng chuỗi replacement_string.

 RPAD(char1, n [,char2]):Giống LPAD(char1, n [,char2]) nhưng căn phải.

 RTRIM(char1, n [,char2]): Bỏ các ký tự trống bên phải

 SOUNDEX(char): Cho chuỗi đồng âm của char.

 SUBSTR(char, m [,n]): Cho chuỗi con của chuỗi char lấy từ vị trí m vế

phải n ký tự, nếu không chỉ n thì lấy cho đến cuối chuỗi

58
 TRANSLATE(char, from, to): Cho chuỗi trong đó mỗi ký tự trong

chuỗi from thay bằng ký tự tương ứng trong chuỗi to, những ký tự
trong chuỗi from không có tương ứng trong chuỗi to sẽ bị loại bỏ.

 UPPER(char): Cho chuỗi chữ hoa của chuỗi char

 ASCII(char): Cho ký tự ASCII của byte đầu tiên của chuỗi char

 INSTR(char1, char2 [,n[,m]]): Tìm vị trí chuỗi char2 trong chuỗi

char1 bắt đầu từ vị trí n, lần xuất hiện thứ m.

59
 Các hàm xử lý ngày tháng và thời gian.
 MONTH_BETWEEN(d1, d2): Cho biết số tháng giữa ngày d1
và d2.
 ADD_MONTHS(d,n): Cho ngày d thêm n tháng.

 NEXT_DAY(d, char ): Cho ngày tiếp theo ngày d có thứ chỉ


bởi char.
 LAST_DAY(d): Cho ngày cuối cùng trong tháng chỉ bởi d.

 DATE ( ): Cho ngày tháng năm hiện tại (oracle: SYSDATE)

 DAY (dd): Cho số thứ tự ngày trong tháng của biểu thức ngày
dd
60
 Các hàm xử lý ngày tháng và thời gian.
 MONTH (dd) Cho số thứ tự tháng trong năm của biểu thức ngày dd

 YEAR (dd) Cho năm của biểu thức ngày dd

 HOUR (tt) Cho giờ trong ngày (0- 23)


 MINUTE (tt) Cho số phút của thời gian tt

 SECONDS (tt) Cho số giây của biểu thức giờ tt.

61
 Các hàm chuyển đổi kiểu giá trị.

 FORMAT (biểu thức, mẫu): Đổi biểu thức có kiểu bất kỳ thành

chuỗi theo mẫu đã cho trong tham số thứ 2. Có thể sử dụng


hàm STR để thay thế.

 Họ các hàm chuyển đổi biểu thức có kiểu bất kỳ thành một giá

trị thuộc kiểu xác định: CSTR, CINT,CLNG, CSIN, CDBL,…

62
 Các phép toán trên tập hợp gồm: Hợp (UNION) hoặc UNION ALL, Giao
(INTERSECT), Trừ (MINUS)
 Điều kiện Các bảng có cùng số cột như nhau.
 Phép UNION
 VD: GS có KHACH1 lưu các khách ở miền bắc, KHACH2 là khách miền
nam. Đưa ra Tên khách có Diachi ở ‘Hanoi’ hoặc ‘BinhDuong’
SELECT tenk
FROM KHACH1
WHERE diachi=‘Hanoi'
UNION
SELECT tenk
FROM KHACH2
WHERE diachi=‘BinhDuong' 63
 Các câu truy vấn trên nhiều bảng, về bản chất là giống như trên một

bảng, tức là chỉ cần chỉ ra thông tin gì cần tìm và lấy từ các nguồn dữ
liệu nào. Các bảng nguồn cần chỉ ra trong FROM.

 Nếu các bảng nguồn có các tên thuộc tính giống nhau thì tên thuộc

tính này phải được viết tường minh trong biểu thức tìm kiếm với tên
bảng đi kèm phía trước.

 Các bảng được liên kết với nhau qua phép kết nối của mệnh đề FROM

hoặc thông qua điều kiện của mệnh đề WHERE. Nếu không thể hiện
mối quan hệ này, kết quả sẽ là bảng tích Đề các của bảng 2.

64
Select …

From …

Where <điều kiện kết nối>…

 Cho biết tên các khách hàng mua hàng trong năm 2011
Select KH.Tenk
From KHACH KH, HOADON HD
Where (KH.Mak = HD.Mak) and (year(NgayHD)= 2011);

 Ta có thể sử dụng phép kết nối nội Inner join để viết lại câu lệnh trên
Select KHACH.Tenk
From KHACH Inner Join HOADON on KHACH.Mak=HOADON.Mak
Where year(NgayHD)= 2011;
65
 Kết nối ngoại gồm 2 loại, kết nối trái (Left Outer Join),

kết nối phải (Right Outer Join)

 Cho biết các thông tin về khách hàng và các đơn mua

hàng của họ nếu có.


Select KHACH.*, HOADON.*

From KHACH Left Outer Join HOADON On


KHACH.Mak=HOADON.Mak

66
 Kết nối ngoại gồm 2 loại, kết nối trái (Left Outer Join), kết nối phải
(Right Outer Join)

 LEFT JOIN trả về tất cả các dòng có ở bảng trái, mặc dù bảng
phải không thỏa mãn. Nếu dữ liệu có ở bảng trái mà không có ở
bảng phải thì dữ liệu vẫn hiển thị.

 RIGHT JOIN trả về tất cả các dòng có ở bảng phải, mặc dù bảng
trái không thỏa mãn. Nếu dữ liệu có ở bảng phải mà không có ở
bảng trái thì vẫn được hiển thị.

67
 Cho biết các thông tin về khách hàng và các

đơn mua hàng của họ nếu có.

Select KHACH.*, HOADON.*


From KHACH Left Outer Join HOADON On
KHACH.Mak = HOADON.Mak

68
 Một truy vấn lồng vào một truy vấn khác gọi là Subquery, Subquery
cũng bao gồm các mệnh đề cơ bản như Query và có thể lồng nhau
nhiều mức.

 Subquery được bao bởi hai dấu ngoặc và lồng vào truy vấn tại mệnh
đề Where hoặc Having.

 Có hai loại truy vấn lồng nhau:


 Truy vấn lồng nhau phân cấp: Mức cao hơn chỉ nhận kết quả của mức
thấp. Khi thực hiện, các truy vấn cấp thấp hơn sẽ định trị trước một lần
rồi cung cấp kết quả cho truy vấn cấp cao hơn.
 Truy vấn lồng nhau tương quan: Mỗi một tính toán của truy vấn mức
cao hơn có tham chiếu đến các truy vấn mức thấp hơn, mỗi lần tham
chiếu như vậy các truy vấn mức thấp hơn phải định trị lại.
69
 Truy vấn lồng nhau phân cấp:

 Cho biết đầy đủ thông tin về những mặt hàng có tồn kho lớn

nhất
Select *

From HANG

Where SLTON=(Select Max(SLTON) From HANG);

  Truy vấn con thực hiện trước và tìm ra số lượng hàng tồn

lớn nhất, sau đó làm điều kiện cho truy vấn ngoài để liệt kê
những mặt hàng có số lượng tồn bằng với số lượng tồn lớn
70
 Truy vấn lồng nhau tương quan:

 Cho biết n mặt hàng có tồn kho lớn nhất (VD n=5)
Select *
From HANG H
Where (Select count(*) From HANG Where
SLTON>H.SLTON)<5;

  Với mỗi mặt hàng của truy vấn ngoài, truy vấn con bên trong sẽ đếm các
mặt hàng có số lượng tồn lớn hơn mặt hàng đó, nếu có ít hơn n mặt hàng
có số lượng tồn lớn hơn chúng thì có nghĩa là nó nằm trong n mặt hàng lớn
nhất.
71
 Phép toán tập hợp In, Not in

 Để xem một bản ghi có thuộc một bảng hay không ta dùng
Subquery với toán tử In hoặc Not In.

 VD: Cho biết các khách hàng ở Hanoi mua hàng trong
tháng 1/2011
Select *
From KHACH
Where DIACHI like ‘Hanoi’ and
Khach.MAK in (Select Hoadon.MAK From HOADON
Where (month(NGAYHD)=1) and
(year(NGAYHD)=2011)); 72
 Cho biết các mặt hàng chưa từng được bán

Select *

From HANG

Where Hang.MAH Not in (Select ChitietHD.MAH From


ChitietHD);

73
 Phép so sánh tập hợp

 <some, <=some, >some, >=some, =some, <>some Tương đương với:

 <any, <=any, >any, >=any, =any, <>any

 <all, <=all, >all, >=all, =all, <>all

 Chú ý: =some tương đương với In nhưng <>some không tương đương với
Not In, <>all tương đương với Not In

 Liệt kê các mặt hàng không phải là mặt hàng có tồn kho lớn nhất

Select *
From HANG
Where SLTON<some (Select SLTON From HANG);
74
 Cho biết số lượng trung bình một lần đặt hàng của một mặt hàng
Select MAH, Avg(SLB)
From ChitietHD
Group By MAH;

 Muốn biết mặt hàng có số lượng đặt hàng trung bình lớn nhất. Thường nghĩ
đến dùng Max(Avg(SLB)), nhưng SQL không cho phép các hàm thống kê lồng
nhau. Cách giải quyết là:
Select MAH, Avg(SLB)
From ChitietHD
Group By MAH
Having Avg(SLB)>=All (Select Avg(SLB)
From ChitietHD
Group By MAH);
75
 Phép toán kiểm tra bảng rỗng
 Exists(Q)= True nếu có ít nhất một bản ghi trong Q
= false nếu ngược lại
 Not Exists(Q)= True Q không có bộ nào
= false nếu ngược lại
 Cho biết thông tin về các mặt hàng được bán trong tháng 7/2012
Select H.*
From HANG H
Where Exists (Select *
From HOADON D, ChitietHD C
Where (year(NGAYHD)=2012) And
(month(NGAYHD)=7) and (D.SOHD=C.SOHD)
and (C.MAH=H.MAH));
76
 Kiểm tra các bản ghi trùng nhau

 Unique(Q) = True nếu Q không có các bộ trùng nhau

= False nếu ngược lại

 Not Unique(Q) = True nếu Q có các bộ trùng nhau

= False nếu ngược lại

77
 Tìm các khách hàng chỉ mua hàng một lần

Select *

From KHACH K

Where Unique (Select MAK From HOADON H Where


K.MAK=H.MAK);

 Tìm các khách hàng có ít nhất hai lần mua hàng

Select *

From KHACH K

Where Not Unique (Select MAK From HOADON H Where


K.MAK=H.MAK); 78
79
 GRANT dùng để cấp quyền cho người sử dụng trên đối tượng Cơ
sở dữ liệu hoặc quyền thực thi các câu lệnh SQL SERVER.

 Cú pháp có 2 dạng như sau:

 Dạng 1: Cấp quyền đối với câu lệnh SQL

GRANT ALL | statement [,...,statementN ]


TO account [, ...,accountN] [WITH GRANT OPTION]

 Dạng 2: Cấp quyền đối với các đối tượng trong CSDL
GRANT ALL | permission [,...,permissionN]
ON table_name |view_name [(column1 [,..., columnN])]
|ON stored_procedure
TO account [, ...,accountN] [WITH GRANT OPTION]
80
 Permission:
 Quyền trên bảng/view: Select,Insert, Delete, Update

 Quyền trên cột của bảng/view: Select, Update

 Quyền trên các thủ tục: EXCUTE(thực thi)

 Statement: quyền cho các câu lệnh


 CREATE DATABASE

 CREATE TABLE

 CREATE VIEW

 CREATE PROCEDURE

 CREATE RULE

 CREATE DEFAULT

 BACKUP DATABASE

 BACKUP LOG
81
Được giao quyền cho người khác [WITH GRANT OPTION]
 REVOKE được dùng để huỷ bỏ quyền đã được cấp phát cho người sử
dụng. Câu lệnh này cũng có 2 dạng như GRANT
 Cú pháp có 2 dạng như sau:

 Dạng 1: Hủy quyền đối với câu lệnh SQL

REVOKE ALL | statement [,...,statementN]


FROM account [, ...,accountN]
 Dạng 2: Hủy quyền đối với các đối tượng trong CSDL

REVOKE ALL | permission [,.. .,permissionN]}


ON table_name | view_name [(column [,...,columnN])]
| stored_procedure
FROM account [, ...,accountN ]
82
 Giao quyền SELECT, INSERT, DELETE cho GiaLinh với các
bảng KHACH

GRANT SELECT, INSERT, DELETE


ON KHACH
TO GiaLinh WITH GRANT OPTION;

 Thu hồi lại quyền DELETE của GiaLinh đối với bảng HANG

REVOKE DELETE ON HANG FROM GiaLinh;

83
4.1: Cho cơ sở dữ liệu dùng để quản lý các chuyến đi của một công ty du lịch
1. DIADIEM(MADD, TENDD)
Mỗi một địa điểm có một mã số( MADD) dùng để phân biệt với các địa điểm
khác và có một tên (TENDD)
2. XE(BIENSO, KHTD)
Mỗi một xe có một biển số duy nhất(BIENSO) để phân biệt với các xe khác và
có số lượng khách tối đa mà xe đó có thể chở(KHTD)
3. HUONGDV(MAHDV, HTHDV, DCHDV)
Mỗi một hướng dẫn viên của công ty có một mã số duy nhất để phân
biệt(MAHDV), có họ tên(HTHDV) và địa chỉ của hướng dẫn viên(DCHDV)
4. CHUYENDI(MACD, TENCD, NGKH, NGKT, KHDK)
Mỗi một chuyến đi có một mã số để phân biệt(MACD), thông tin về chuyến đi
bao gồm: tên chuyến đi(TENCD), ngày khởi hành(NGKH), ngày kết thúc(NGKT)
và số khách dự kiến(KHDK).
5. CTIETCD(MACD, MADD, SNLUU)
Chi tiết của chuyến đi (MACD) là các địa điểm mà chuyến đi đó đi qua
(MADD), (SNLUU) là số ngày lưu lại tại điểm du lịch đó.
6.HUONGDAN(MACD, MAHDV)
Ghi nhận các hướng dẫn viên(MAHDV) tham gia hướng dẫn cho chuyến
đi (MACD)
7. KHACH(MACD, HTKH, TUOI, DCKH, DTKH)
Ghi nhận thông tin về khách hàng đăng ký vào chuyến đi(MACD), bao
gồm: họ tên(HTKH), tuổi (TUOIKH), địa chỉ(DCKH) và điện thoại liên lạc
của khách(DTKH)
8. XEPV(MACD, BIENSO)
Ghi nhận các xe (BIENSO) phục vụ cho chuyến đi (MACD)
Dùng câu lệnh SQL để thực hiện các yêu cầu sau:
1. Tạo tất cả các bảng trên.
2. Cho biết danh sách các hướng dẫn viên của công ty.
3. Liệt kê đầy đủ thông tin về các điểm du lịch liên kết với công ty.
4. Cho biết đầy đủ thông tin về các địa điểm mà chuyến đi mã số
CD2000 đi qua.
5. Liệt kê các lữ khách của chuyến đi CD2000.
6. Cho biết số lượng khách của chuyến đi CD1999.
7. Chuyến đi nào có số lượng khách lớn hơn số lượng dự kiến.
8. Cho biết tổng số lượng khách của tất cả các chuyến đi có ngày khởi
hành trong tháng 12/2001.
9. Cho biết số ngày lưu lại trung bình, số ngày lưu lại lớn nhất, nhỏ nhất
qua các điểm du lịch của chuyến đi CD2000.
10. Cho biết số lượng xe phục vụ cho chuyến đi CD2000.
11. Điểm du lịch nào(Mã số, tên) có số ngày lưu lại lớn nhất của chuyến đi CD2000
12. Điểm du lịch nào(Mã số, tên) có số ngày lưu lại lớn hơn số ngày lưu lại trung
bình qua các điểm của chuyến đi CD2000.
13. Điểm du lịch SaPa(mã số SP) có bao nhiêu chuyến đi ghé qua và khai thác
được bao nhiêu ngày(tổng số ngày phục vụ).
14. Liệt kê 3 điểm du lịch đầu tiên của chuyến đi CD2000 có số ngày lưu lại lớn
nhất.
15. Liệt kê 3 điểm du lịch đầu tiên của chuyến đi CD2000 có số ngày lưu lại ít nhất.
16. Liệt kê các điểm du lịch của chuyến đi CD2000 ngoại trừ điểm có số ngày lưu
ít nhất
17.Cho biết số lượng các điểm du lịch, tổng số ngày lưu lại tại các địa điểm, số
lượng các hướng dẫn viên, số lượng xe phụ vụ cho từng chuyến đi có ngày khởi
hành trong tháng 12/2000.
4.2: Xét CSDL quản lý công chức viên chức CCVC, gồm các bảng DONVI,
LOAIDV, NGACHCBVC, NGACHBACLUONG và CBVC.
1. DONVI(Madv, Tendv, loai) là quan hệ đơn vị gồm mã đơn vị, tên đơn vị, loại đơn vị.
2. LOAIDVI(Loai, Tenloaihinh), là quan hệ về loại hình tổ chức của đơn vị gồm loại hình
và tên loại hình.

3. NGACHCBVC(Ngach, Tenngach): quan hệ ngạch cán bộ viên chức gồm có ngạch và


tên ngạch.
4. NGACHBACLUONG(Ngach, Bac, Hesoluong): quan hệ ngạch bậc và hệ số lương
của cán bọ viên chức gồm có ngạch, bậc lương, hệ số lương.

5. CBVC(MaDV, MaCC, HT, GT, NS, Ngach, Bac, Ngayxep) là quan hệ về cán bộ viên
chức gồm có Mã đơn vị, mã công chức, họ tên, giới tính, ngày tháng năm sinh, ngạch
lương, bậc lương, ngày xếp lương
Hãy viết các câu lệnh truy vấn thông tin cho các câu hỏi sau đây:
1. Cho danh sách CBVC theo thứ tự Alphabet của tên của các CBVC.
2. Cho danh sách CBVC có hệ số lương từ 3.0 trở lên.
3. Cho biết tổng hệ số lương của từng đơn vị.
4. Cho danh sách CBVC thuộc các đơn vị mà tên có chữ "phòng".
5. Cho danh sách CBVC thuộc các đơn vị có tên loại hình tổ chức là "hành
chinh"
6. Cho danh sách CBVC thuộc ngạch "cán sự" có bậc 7 trở lên, hoặc những
người có hệ số lương lơn hơn 3.06
7. Cho danh sách CBVC (mà) có thời hạn xếp lương tính đến cuối năm 1998 là
3 năm trở lên đối với các ngạch chuyên viên và chuyên viên chính; hoặc 2 năm
trở lên đối với các ngạch còn lại. (Đây là danh sách CBVC đến hạn nâng lương
trong năm 1998).
8. Cho danh sách các CBVC có hệ số lương cao hơn hệ số lương của những
người thuộc ngạch "cán sự".
4.3: Cho lược đồ CSDL QLSV
1. KHOA(Makh, Vpkh)

Mỗi khoa có 1 mã số phân biệt (Makh), ta biết được vị trí của văn phòng
khoa.

2. LOP(Malop, Makh)
Mỗi lớp có 1 mã số để phân biệt (Malop) thuộc duy nhất một khoa nào đó
(Makh).

3. SINHVIEN(Masv, Hosv, Tensv, Nssv, Dcsv, Loptr, Malop)

Mỗi sinh viên có một mã số để phân biệt với các sinh viên khác (Masv),
thông tin của từng sinh viên là họ và đệm (Hosv), tên (Tensv), năm
sinh(Nssv), địa chỉ (Dcsv), có phải là lớp trưởng không (Loptr) và thuộc một
lớp duy nhất nào đó (Malop)
4. MONHOC(Mamh, Tenmh, LT, TH)

Mỗi môn học có một mã số duy nhất (Mamh), có một tên (Tenmh), số tiết lý
thuyết (LT), số tiết thực hành (TH)

5. CTHOC(Malop, HK, Mamh)

Mỗi lớp học (Malop) trong từng học kỳ (HK) sẽ có một số môn học (Mamh)
được giảng dạy cho lớp đó.
6. DIEMSV(Masv, Mamh, Lan, Diem)

Ghi nhận điểm của các môn học (Mamh) ở lần thi nào (Lan), của sinh
viên(Masv).
Viết câu lệnh SQL để thực hiện yêu cầu sau:
1. Cho biết danh sách lớp
2. Cho biết danh sách sinh viên lớp TH1.
3. Cho biết danh sách SV khoa CNTT
4. Cho biết chương trình học của lớp TH1
5. Điểm lần 1 môn CSDL của SV lớp TH1.
6. Điểm trung bình lần 1 môn CTDL của lớp TH1.
7. Số lượng SV của lớp TH2.
8. Lớp TH1 phải học bao nhiêu môn trong HK1 và HK2.
9. Cho biết 3 SV đầu tiên có điểm thi lần 1 cao nhất môn CSDL.
10. Cho biết sĩ số từng lớp.
11. Khoa nào đông SV nhất.
12. Lớp nào đông nhất khoa CNTT.
13. Môn học nào mà ở lần thi 1 có số SV không đạt nhiều nhất.
14. Tìm điểm thi lớn nhất của mỗi SV cho mỗi môn học (vì SV được thi
nhiều lần).
15. Điểm trung bình của từng lớp khoa CNTT ở lần thi thứ nhất môn
CSDL.
16. Sinh viên nào của lớp TH1 đã thi đạt tất cả các môn học ở lần 1
của HK2.
17. Danh sách SV nhận học bổng học kỳ 2 của lớp TH2, nghĩa là đạt
tất cả các môn học của học kỳ này ở lần thi thứ nhất.
18. Biết rằng lớp TH1 đã học đủ 6 học kỳ, cho biết SV nào đủ điều kiện
thi tốt nghiệp, nghĩa là đã đạt đủ tất cả các môn.
BỘ MÔN HỆ THỐNG THÔNG TIN 1
 Vấn đề của một sơ đồ quan hệ được thiết kế chưa tốt:
Giả sử ta cần một cơ sở dữ liệu lưu trữ thông tin về các
hãng cung ứng. Sơ đồ quan hệ được thiết kế trong đó tất cả các
thuộc tính cần thiết được lưu trong đúng 1 quan hệ:
Suppliers(sid, sname, city, num_of_emps, product, quantity)

2
 Dư thừa dữ liệu: Hãng nào cung ứng nhiều hơn 1 mặt hàng thì thông tin của
hãng đó sẽ bị lặp lại trong bảng (VD S1), mặt hàng được cung ứng bởi nhiều
hãng cũng bị lặp lại (VD Screw)
 Dị thường dữ liệu khi thêm: Nếu có một hãng chưa cung cấp mặt hàng nào,
vậy giá trị cho thuộc tính product và quantity trong bộ dữ liệu mới được thêm
vào sẽ không được xác định.
 Dị thường dữ liệu khi xóa: Nếu một hãng chỉ cung cấp 1 mặt hàng, nếu ta
muốn xóa thông tin về sự cung cấp này thì ta sẽ mất thông tin về hãng
cung cấp.
 Dị thường dữ liệu khi sửa đổi: Do thông tin bị lặp lại nên việc sửa đổi 1 bộ dữ
liệu có thể dẫn đến việc không nhất quán trong dữ liệu về một hang nếu sơ sót
không sửa đổi trên toàn bộ các bộ giá trị liên quan đến hãng đó.

3
 Nếu sơ đồ trên được thay thế bằng 2 sơ đồ quan hệ
–Supp(sid, sname, city, numofemps)
–Supply(sid, product,quantity)
Thì tất cả các vấn đề nêu ở trên sẽ được loại bỏ.
Tuy nhiên khi tìm kiếm dữ liệu thì chúng ta phải thực
hiện kết nối 2 bảng chứ không chỉ là chọn và chiếu
trên 1 bảng như ở cách thiết kế trước

4
 Xác định được 1 tập các lược đồ quan hệ cho phép tìm kiếm
thông tin một cách dễ dàng, đồng thời tránh được dư thừa dữ
liệu

 Hướng tiếp cận: Một trong những kỹ thuật được sử dụng là Tách
các lược đồ quan hệ có vấn đề thành những lược đồ quan hệ
chuẩn hơn. Phụ thuộc hàm có thể được sử dụng để nhân biết
các lược đồ chưa chuẩn và đề xuất hướng cải tiến.

5
5.1. Phụ thuộc hàm

5.2. Khóa và các tính chất

5.3. Thuật toán tìm khóa

6
5.1 PHỤ THUỘC HÀM

7
 Định nghĩa và biểu diễn phụ thuộc hàm.

 Bao đóng của tập phụ thuộc hàm và hệ luật

dẫn Armstrong.

 Bao đóng của tập thuộc tính.

 Phủ và tương đương (Equivalence).

8
 Khái niệm: Quan hệ R được định nghĩa trên tập thuộc tính U=A1A2...An.

X,Y U là 2 tập con của tập thuộc tính U. Nếu tồn tại một ánh xạ f: X 
Y thì ta nói rằng X xác định hàm Y, hay Y phụ thuộc hàm vào X, và ký
hiệu là X  Y.

 Định nghĩa hình thức của phụ thuộc hàm như sau: Quan hệ Q (ABC)

có phụ thuộc hàm A xác định B (ký hiệu là A  B) nếu: q, q’  Q, sao
cho q.A = q’.A thì q.B = q’.B

9
 A  B được gọi là phụ thuộc hàm hiển nhiên nếu B  A.

 A  B được gọi là phụ thuộc hàm nguyên tố, hoặc nói cách khác,
B được gọi là phụ thuộc hàm đầy đủ (fully functional dependence)
vào A nếu A’  A đều không có A’  B.

 Ví dụ 4.15: Trong CSDL quản lý hàng hóa, quan hệ HANG(MaH,


TenH, SLTon) có các phụ thuộc hàm sau:

f1:MaH  tenH; f2: MaH  SLTon; f3: MaH tenH, SLTon

 Các phụ thuộc hàm trên đều là nguyên tố.

10
 Quan hệ CHITIETHD (Sohoadon, Mahang, Soluongdat,
Dongia, Trigia) có các phụ thuộc hàm sau:
 f1: Sohoadon, Mahang  Soluongdat.

 f2: Sohoadon, Mahang  Dongia.

 f3: Sohoadon, Mahang  Trigia.

 f4: Soluongdat, Dongia  Trigia.

 f5: Mahang  Dongia

 Thuộc tính Dongia phụ thuộc hàm không đầy đủ vào khóa
(Sohoadon, Mahang), bởi vì nó chỉ phụ thuộc vào mặt hàng
(thông qua Mahang). 11
Bao đóng của tập phụ thuộc hàm
 Gọi F là tập các phụ thuộc hàm của R(U), XY là một phụ thuộc hàm; X,YU.
XY được suy diễn lôgic từ F nếu R thỏa các phụ thuộc hàm của F thì cũng
thỏa XY, ký hiệu: F |= XY.
 Gọi F+ là bao đóng (Closure) của F, tức là tập các phụ thuộc hàm được suy diễn
lôgic từ F.
 Nếu F = F+ thì F là họ đầy đủ (full family) của các phụ thuộc hàm.

 Bài toán thành viên (MemberShip) nêu vấn đề phụ thuộc hàm XY có phải là
được suy diễn lôgíc từ F hay không (tức là XY F+ ?) là một bài toán khó giải.
Nó đòi hỏi chúng ta phải có một hệ luật dẫn để suy diễn lôgic các phụ thuộc
hàm.

12
 Năm 1974, Armstrong đã đưa ra hệ tiên đề như sau:
 X, Y, Z, W  U. Phụ thuộc hàm có các tính chất sau đây:
(1) Tính phản xạ: Nếu Y  X thì X  Y.
(2) Tính gia tăng: Nếu X  Y thì X Z  YZ.
(3) Tính bắc cầu: Nếu X  Y và Y  Z thì X  Z.
 Đã chứng minh hệ tiên đề Armstrong là đúng đắn và đầy đủ.

 Bổ đề 1: Hệ tiên đề Armstrong là đúng, nghĩa là, với F là tập phụ thuộc


hàm đúng trên quan hệ R, nếu X  Y là một phụ thuộc hàm.
 Bổ đề 2: Từ hệ tiên đề Armstrong suy ra một số luật bổ sung:
(4) Tính phân rã (hoặc luật tách): Nếu X  YZ thì X  Y và X  Z.
(5) Tính hợp (hoặc luật hợp): Nếu X  Y và X  Z thì X  YZ.
(6) Tính tựa bắc cầu: Nếu X  Y và YZ  W thì XZ  W.

13
 Ví dụ: Cho lược đồ quan hệ R (A,B,C,D,E,G,H) và tập các phụ thuộc

hàm F = {ABC, BD, CDE, CEGH, GA }.

Áp dụng hệ tiên đề Amstrong, tìm một chuỗi suy diễn ABE.

 Giải: 1. ABC (cho trước - phụ thuộc hàm f1)

2. ABAB (tính chất phản xạ)

3. ABB (luật tách)

4. BD (cho trước - phụ thuộc hàm f2)

5. ABD (bắc cầu 3 & 4)

6. ABCD (hợp 1 & 5)

7. CDE (cho trước - phụ thuộc hàm f3)

8. ABE (bắc cầu 6 & 7). Kết thúc. 14


 Ví dụ: Cho lược đồ quan hệ R (A,B,C,D,E,G,H,I,J) và tập

các phụ thuộc hàm F = {ABE, AGJ, BEI, EG,


GIH }. Tìm chuỗi suy diễn ABGH

15
 Ví dụ: Cho lược đồ quan hệ R (A,B,C,D,E,G,H,I,J) và tập các phụ thuộc hàm
F = {ABE, AGJ, BEI, EG, GIH }. Tìm chuỗi suy diễn ABGH
1. ABE (cho trước - phụ thuộc hàm f1)
2. ABAB (phản xạ)
3. ABB (luật tách)
4. ABBE (hợp của 1 & 3)
5. BEI (cho trước - phụ thuộc hàm f3)
6. ABI (bắc cầu 4 & 5)
7. EG (cho trước - phụ thuộc hàm f4)
8. ABG (bắc cầu 1 & 7)
9. ABGI (hợp 6 & 8)
10. GIH (cho trước - phụ thuộc hàm f5)
11. ABH (bắc cầu 9 & 10)
12. ABGH (hợp 8 & 11)
16
 Bổ đề 3: X  Y được suy diễn lôgic từ F nhờ hệ

tiên đề Amstrong khi và chỉ khi Y Xf+.

 Xf+ là bao đóng của tập thuộc tính X đối với tập

phụ thuộc hàm F

17
 Định nghĩa: Bao đóng (Closure) của tập các thuộc tính X

đối với tập các phụ thuộc hàm F (ký hiệu là XF+ hoặc X+) là
tập tất cả các thuộc tính A có thể suy dẫn từ X nhờ tập bao
đóng của các phụ thuộc hàm F+:

18
 Thuật toán tìm bao đóng: XF+ = { A | X  A  F+}
Void Closure (X, F)
{
ketqua=X;
While (có sự thay đổi trên tập ketqua)
For (mỗi pth WZ trong F)
If W  ketqua
ketqua = ketqua  Z
Return ketqua;
};
Tập ketqua là bao đóng của tập thuộc tinh X
19
 Ví dụ 4.19: cho tập phụ thuộc hàm F={ABC, IK, GBH, CGI,
BH} của quan hệ R(ABCDEFGHIK). Hãy tính bao đóng của tập
thuộc tính AG, (AG)+
Áp dụng thuật toán trên như sau:
• Ban đầu: ketqua=AG
• Ta lần lượt xét tất cả các phụ thuộc hàm trong F:
• ABC có A  ketqua nên ketqua=ketqua  BC = AGBC
• IK có I ketqua nên ketqua vẫn giữ nguyên
• GBH có GB  ketqua nên ketqua=ketqua  H = AGBCH
• CGI có CG  ketqua nên ketqua=ketqua  I = AGBCHI
• BH có B  ketqua nhưng đã có H trong ketqua nên ketqua giữ
nguyên.
20
• Quay lại từ đầu tập F lần 2:

• ABC có A ketqua nhưng đã có BC trong ketqua nên ketqua giữ

nguyên

• IK có I ketqua nên ketqua=ketqua  K = AGBCHIK

• Tiếp tục các phụ thuộc hàm sau không làm thay đổi kết quả.

• Lần này tập ketqua có thay đổi nên lại quay lại từ đầu tập F lần 3:

• Lần này ketqua không thay đổi nên dừng.

• Cuối cùng ta được (AG)+ = ketqua= AGBCHIK.


21
 Để xác định một phụ thuộc hàm có thuộc F+

Để xác định phụ thuộc hàm XY có thuộc F+ ta tính X+


 Nếu Y X+ thì XY F+, trái lại thì không thuộc.

 Ví dụ: F={CDA, EB, DBC, CD}

Phụ thuộc hàm nào sau đây thuộc F+: DEBC, ACBE

Vì (DE)+= DEBCA chứa BC nên DEBC thuộc F+

Vì (AC)+=ACD không chứa BE nên ACBE không thuộc F+

22
 Định nghĩa: Hai tập phụ thuộc hàm F và G dựa trên Q được
gọi tương đương. Ký hiệu là FG nếu F+=G+
 F  G thì F được gọi là 1 phủ của G, hay G là một phủ của F.
 Để chứng minh F  G ta đi chứng minh:
(i) XY  F  XY  G+
Để chứng minh điều này ta tính (X)G+, nếu Y(X)G+ thì
XY  G+
(ii) WZ G  W  Z  F+
Tương tự ta tính WF+, nếu Z  WF+ thì WZ  F+
23
 Cho F là tập các phụ thuộc hàm dựa trên Q và một tập các
RBTV dạng phụ thuộc hàm.
 Ta biết từ F ban đầu ta có tìm ra nhiều tập Fi tương đương
với F bằng cách suy từ các phụ thuộc hàm của F. Quan hệ
thoả các Fi thì cũng thoả F và ngược lại.
 Ví dụ: F={AB, BC}, ta có : F1={AB,BC,AC}, F2=
{AB,BC,AC, ABBC}, …và F1  F , F2  F
Vấn đề được đặt ngược lại là nếu cho F thì ta có thể tìm ra
được tập phụ thuộc hàm đơn giản hơn F và tương đương
với F?.
24
 Định nghĩa thuộc tính dư thừa (Extraneous):

Một thuộc tính được gọi là dư thừa trong tập phụ thuộc hàm F nếu
như ta bỏ nó ra khỏi các phụ thuộc hàm mà bao đóng của F vẫn
không đổi.
 Cho XY  F

 A là thuộc tính dư thừa trong X nếu A X và F  (F- {XY}) 


{(X-A)Y}
 B là thuộc tính dư thừa trong Y nếu B Y và F  (F- {XY}) 
{X(Y-B)}

25
 Phủ tối tiểu của F ký hiệu là Fc là tập phụ thuộc hàm tương đương

với F và thoả các tính chất sau:


 Không có phụ thuộc hàm nào trong Fc chứa các thuộc tính dư thừa.

 Không có phụ thuộc hàm nào là dư thừa.

26
 Thuật toán 1 tìm phủ tối tiểu từ F

Sử dụng công thức hợp để thay thế các phụ thuộc


hàm có cùng vế trái:

X1Y1 và X1  Y2  X1Y1Y2

Nếu có một phụ thuộc hàm XY có các thuộc tính dư


thừa bên vế trái hay vế phải thì xoá nó khỏi XY

while (F không thay đổi)


27
 Ví dụ 4.21: Cho F là tập phụ thuộc hàm trên lược đồ quan hệ (ABC) như sau:
F={ABC, BC, AB, ABC}
Tìm phủ tối thiểu Fc của F?

• Có hai phụ thuộc hàm cùng vế trái: ABC, A B


• Ta thay thế hai phụ thuộc hàm trên bằng phụ thuộc hàm ABC
• Tập phụ thuộc hàm mới: F={ABC, BC, ABC}
• A là thuộc tính dư thừa trong ABC vì F (F- {ABC})  {BC}
• Do đó ABC được thay bằng BC
• Tập phụ thuộc hàm mới là: F={ABC, BC}
• C là thuộc tính dư thừa trong ABC vì F (F –{ABC})  {AB}
• Do đó ABC được thay thế bằng AB
• Tập phụ thuộc hàm mới là: F={AB, BC}
• Vậy phủ tối tiểu của F là: Fc={AB, BC}

28
 Thuật toán 2 tìm phủ tối tiểu từ F
 B1: Dùng luật tách, tách các PTH để vế phải chỉ còn 1
thuộc tính.
 ( X→YZ thành X→Y và X→Z )

 B2: Loại bỏ các thuộc tính dư thừa ở vế trái của các


PTH.
 Lần lượt tính bao đóng của từng thuộc tính trong vế trái, nếu nó
chứa các thuộc tính còn lại thì loại bỏ các thuộc tính còn lại đó:
XY → Z, Y là dư thừa nếu X+  Y.
 B3: Loại bỏ các phụ thuộc hàm dư thừa
 Tính ( X+F-(X->Y)) nếu (X+F-(X->Y))  Y thì X→Y là dư thừa.

29
 Ví dụ: Cho F là tập phụ thuộc hàm trên lược đồ quan hệ
R(ABC) như sau: F={ABC, BC, AB, ABC}. Tìm phủ tối
thiểu Fc của F
B1: Có ABC nên ta tách thành AB, AC
F1={AC, BC, AB, ABC}
B2: Loại bỏ thuộc tính dư thừa ở vế trái
Xét AB C, tính B+=BC không chứa A nên A không dư
thừa
tính A+=ABC  B nên B là dư thừa
F2={AC, BC, AB}
30
B3: Loại bỏ các PTH dư thừa

Xét BC: Tính ( B+F-(B->C)) = B không chứa C nên BC không dư thừa.

Xét AB: Tính ( A+F-(A->B)) = AC không chứa B nên AB không dư thừa.

Xét AC: Tính ( A+F-(A->C)) = ABC  C nên AC dư thừa.

F3={ BC, AB}

Đến đây không thể loại thêm được nữa.

Vậy phủ tối tiểu của F là: Fc={AB, BC}

31
5.2. KHÓA VÀ CÁC
TÍNH CHẤT

32
 Định nghĩa khóa của quan hệ theo phụ thuộc hàm:

R (U), U = { A1, A2, ... , An }, F = { f1, f2, ..., fm } xác định


trên R. K  U là khóa của R nếu thỏa hai điều kiện sau:
 (i) K  U.

 (ii) ! K’  K mà K’  U.

33
 Cho lược đồ quan hệ R(U,F) với U là tập thuộc tính, F là
tập phụ thuộc hàm
 - Giao của các khóa ký hiệu là X được xác định như sau:
X=U–  ( R  L)
L  RF

 X được tính bằng tập thuộc tính U trừ đi hợp của các vế
phải trừ vế trái của phụ thuộc hàm.
 Lược đồ quan hệ có một khóa duy nhất khi X+ = U.

34
5.3. THUẬT TOÁN TÌM
KHÓA

35
 Thuật toán tìm 1 khóa
 Thuật toán 1:
 Ý tưởng: Xuất phát từ một siêu khóa K (có thể là U), lần lượt xem xét và loại bỏ thuộc
tính A nếu (K - Ai)+ = U
 Input: R(U,F), U = A1A2... An
 Output: Tập thuộc tính khóa K

Bước 1: K=U;
Bước 2: While (Ai K)
If ((K - Ai)+ = U) K= K – Ai
K còn lại chính là một khóa cần tìm.
Nếu muốn tìm các khóa khác nhau (nếu có) của lược đồ quan hệ, ta
có thể thay đổi thứ tự loại bỏ các phần tử của K.
36
Ví dụ 4.22: Cho lược đồ quan hệ R(U), U=ABC, F={A->B, A->C, B->A}. Hãy tìm
một khóa của R.

Giải: K= ABC

Loại thuộc tính A do (K-A)+= ABC = U nên K = BC

Thuộc tính B không loại được do (K-B)+ = C ≠ U nên K = BC

Loại thuộc tính C do (K-C)+= BCA = U nên K = B

Vậy một khóa của R là B.

37
 Thuật toán 2: Biểu diễn lược đồ quan hệ R (U) bằng đồ thị có
hướng như sau:
 Mỗi nút của đồ thị là tên một thuộc tính của R.

 Cung nối 2 thuộc tính A và B thể hiện phụ thuộc hàm A B

 Thuộc tính mà chỉ có các mũi tên đi ra gọi là nút gốc.

 Thuộc tính mà tới nó chỉ có các cung đi tới gọi là nút lá.

Như vậy khóa phải bao phủ tập các nút gốc, đồng thời không
chứa bất kỳ nút lá nào của đồ thị.
38
 Các bước thực hiện

Bước 1: Xuất phát từ tập các nút gốc (X).


Bước 2: Tính bao đóng của tập thuộc tính X, X+
Bước 3: Nếu X+ = U thì X là khoá, ngược lại thì bổ
sung một thuộc tính không thuộc nút lá vào X rồi tìm
bao đóng. Quay lại bước 2.
Cuối cùng X chính là khoá.

39
 Ví dụ: Cho R (A, B, C, D, E, H) với F = { ABC, CDE, ECA, CDH,
HB }. Tìm khóa của R.
 Nút D là nút gốc, các nút còn lại
đều không phải nút lá. Khóa của R
phải chứa thuộc tính D.
 D+ = D, bởi vì không tìm thấy phụ
thuộc hàm nào có vế trái chỉ có một
mình D.
 Vì CD có mặt trong vế trái của 2
phụ thuộc hàm do đó ghép thêm C
vào tập các nút gốc để xét khóa.

 Như vậy CD{C,D,E,H,B,A }


do đó CD là khóa của R.
40
 Ví dụ: Cho quan hệ GIANGDAY(MS_CBGD, MS_MH, T_CBGD,
HH_CBGD, ML, TSSV) với tập phụ thuộc hàm:
F = { MS_CBGD  T_CBGD;
MS_MH  HH_CBGD, ML;
HH_CBGD  ML;
MS_CBGD  HH_CBGD;
MS_CBGD, MS_MH  TSSV}
 Yêu cầu: Xác định khóa của quan hệ GIẢNG-DẠY.
 Lời giải: ký hiệu tên các thuộc tính của quan hệ trên lần lượt là A, B, C, D, E,
G tương ứng. Khi đó quan hệ GIẢNG-DẠY và tập phụ thuộc hàm F được
viết ngắn gọn lại là:
 R (A, B, C, D, E, G),F = { AC; BD,E; DE; AED; ABG }

41
R (A, B, C, D, E, G),
F = { AC; BD,E; DE; AED; ABG }

 Đồ thị biểu diễn các phụ thuộc hàm


như sau:
 Thuộc tính A và B là các nút gốc. E,
C và G là các nút lá. Khóa của quan
hệ phải chứa các thuộc tính ở các
nút gốc.

 Xet X = { A,B }+ =ABCDEG

 Vậy AB là khóa của R. Tức là, khóa


của quan hệ giảng-dạy là {
MS_CBGD, MS_MH } 42
 Cho lược đồ quan hệ R(U,F) với tập thuộc tính U=A1A2…Ai,…, F là tập phụ thuộc
hàm.

 Thuật toán tìm tất cả các khóa của lược đồ quan hệ:

Input: R(U,F)

Output: Tất cả các tập thuộc tính khóa K của R.

 Bước 1: Tìm tập X là giao của các khóa theo công thức X  U   ( R  L)
L  RF

 Bước 2: Tính X+
 Nếu X+ = U thì quan hệ R chỉ có một khóa duy nhất K=X

 Ngược lại thì R có nhiều hơn một khóa và chuyển sang bước 3.

 Bước 3: Tính (XAi)+ = U thì K = XAi là các khóa của R.

43
 Ví dụ 4.25: Cho lược đồ quan hệ R(U), U=ABC và tập phụ thuộc hàm
F={A->B, A->C, B->A}. Hãy tìm tất cả các khóa của R.

 Giải:

Ta có giao của các khóa là X = {ABC} - {BCA} = 

Ta thấy X+ =  ≠ U nên quan hệ có nhiều hơn một khóa.

Ta có A+=ABC=U

Ta có B+=ABC=U

Vậy quan hệ R có 2 khóa A hoặc B.

44
 Ví dụ 4.26: Cho lược đồ quan hệ R(U), U=ABCDG và tập phụ thuộc

hàm F={B->C, C->B, A->GD}. Hãy tìm tất cả các khóa của R.
Ta có giao của các khóa là X = {ABCDG} - {CBGD} = {A}
Vì A+ = AGD ≠ U nên quan hệ có nhiều hơn một khóa.
Bổ xung thêm các thuộc tính khác vào cùng với giao của các khóa ta
sẽ có các khóa khác nhau của lược đồ quan hệ.
Bổ xung thêm B, ta có (AB)+ =AGDBC = U
Bổ xung thêm C, ta có (AC)+ =AGDCB = U
Vậy quan hệ R có 2 khóa AB hoặc AC.

45
5.1: Cho lược đồ CSDL về hệ thống kế toán của một
doanh nghiệp với các quan hệ sau:
1. DM-TK (Mã-TK, Tên-TK)

Qui tắc: Danh mục các tài khoản hạch toán kế toán theo chế độ kế toán
hiện hành của Nước CHXHCN Việt nam bao gồm các tài khoản. Mỗi tài
khoản có một tên gọi cụ thể và một mã số duy nhất để phân biệt với mọi tài
khoản khác.
2. TK-ĐỐI-ỨNG (Mã-TK, TK-Đối-ứng);

Qui tắc: Mỗi tài khoản, theo chế độ hạch toán hình chữ T, khi được phát sinh
bên NỢ (hạch toán tăng) thì phải có một mã tài khoản đối ứng bên CÓ (hạch
toán giảm) để đảm bảo cân đối tài khoản. Một tài khoản được ghi NỢ có thể
có nhiều tài khoản khác nhau được ghi CÓ. Mã tài khoản NỢ và mã tài
khoản đối ứng đều phải thuộc danh mục các tài khoản
3. SỔ-CT (Loại-CT, Số-CT, NGày-CT, Diễn-Giải, Số- Tiền,
TK-NỢ, TK-CÓ).

Qui tắc: Trong phương pháp kế toán ghi sổ, các chứng từ ban
đầu được ghi vào sổ theo dõi, gọi là sổ chứng từ. Mỗi chứng từ
đều thuộc một loại chứng từ cụ thể (LOẠI- CT); có một số
chứng từ (SỐ-CT) phân biệt với mọi chứng từ khác. Chứng từ
được ghi rõ ngày tháng phát sinh (NGÀY-CT), diễn giải nội
dung phát sinh (DIỄN- GIẢI), số tiền phát sinh (SỐ-TIỀN), mã
tài khoản ghi NỢ (TK-NỢ) và mã tài khoản đối ứng ghi CÓ
(TK-CÓ);
4. SỔ-CÁI (Mã-TK, NỢ-ĐK, CÓ-ĐK, PS-NỢ, PS-CÓ, NỢ-CK, CÓ-CK).
Qui tắc: Từ sổ chứng từ (SỔ-CT), các chứng từ ghi sổ được tổng hợp
theo từng loại tài khoản (Mã-TK) và lập thành sổ cái. Mỗi mã tài khoản
(Mã-TK) trong SỔ-CÁI được phản ảnh duy nhất 1 lần các số dư NỢ, dư
CÓ đầu kỳ (NỢ-ĐK, CÓ-ĐK); số phát sinh NỢ, CÓ trong tháng (PS-NỢ,
PS-CÓ), và số dư NỢ, dư CÓ cuối kỳ (NỢ-CK, CÓ-CK). Mã tài khoản
phải có trong danh mục tài khoản (DM-TK) nêutrên.
Câu 1: Xác định phụ thuộc hàm
Câu 2: Xác định khóa của các quan hệ trong CSDL nêu trên.
5.2: Vận dụng hệ tiên đề Armstrong để tìm chuỗi suy diễn:

Cho R(A,B,C,D,E,G,H) với F = { ABC; B  D; CD  E; CE  GH; G  A }


(a) Tìm chuỗi suy diễn cho AB  E.
(b) Tìm chuỗi suy diễn cho BG  C.
(c) Tìm chuỗi suy diễn cho AB  G.
5.3: Cho R(U), U=ABCDEG với tập phụ thuộc hàm F={A  C, AC  D, D  EG,
G  B, A  D, CG  A}

1. Chứng minh rằng R thỏa F thì R thỏa các phụ thuộc hàm AB  E, AD  BC.
Hay nói cách khác các phụ thuộc hàm AB  E, AD  BC được suy diễn logic từ
F.

2. Tính bao đóng của các tập thuộc tính: A+, (AC)+
3. Tìm tất cả các khóa của quan hệ R
5.4: Xác định khóa của các lược đồ quan hệ sau:
Q1 (ABCDEH) với F = { AB  C; CD  E; AH  B; B  D; A  D }

Q2 (ABCDMNPQ) với F = { AM  NB; BN  CM; A  P; D  M; PC  A; DQ


A }

Q3 (MNPQRSTUW) ˜với F = { M  W; MR  T; T  R; QR  T; M  U; MT 
P; NP  Q; UW  R }

5.5: Cho R(ABCD), F={A  BC, B  C, AB  D}, Q(ABCDEI), G={A  C, AB


 C, C  DI, CD  I, EC  AB, EI  C}

- Tìm tất cả các khóa của R,Q

- Tìm phủ tối tiểu Fc, Gc


BỘ MÔN HỆ THỐNG THÔNG TIN 1
6.1. Sự cần thiết phải chuẩn hóa
6.2. Phân rã lược đồ quan hệ
6.3. Các dạng chuẩn của quan hệ
6.4. Chuẩn hóa quan hệ
6.5. Chuẩn hóa trong thực tế

2
6.1 SỰ CẦN THIẾT PHẢI
CHUẨN HÓA

3
 Do thiết kế kém sẽ gây nguy hiểm cho CSDL.
 Trùng lắp thông tin: không có khả năng trình bày thông tin một cách chắc
chắn.
 VD: Cho một lược đồ quan hệ dùng để ghi nhận giáo viên và lớp giảng dạy
của giáo viên
 GIANGDAY(MONHOC, SOTIET,LOP,GV,HV,DC)
 Các phụ thuộc hàm: MONHOC  SOTIET; MONHOC, LOP  GV;
GVHOCVI,DC. Có tình trạng dl như sau:

4
 Do có phụ thuộc hàm MONHOC  SOTIET nên số tiết
của dòng thứ 2 và dòng thứ 4 gây nên trùng lắp thông tin.

 Do phụ thuộc hàm GV  HOCVI, DC nên học vị và địa


chỉ của dòng thứ 2 và dòng thứ 4 gây nên trùng lắp thông
tin.

 Các dl gây trùng lắp thông tin là các dl có thể suy đoán
được một cách chắc chắn và duy nhất từ phụ thuộc hàm.

5
6.2. PHÂN RÃ LƯỢC
ĐỒ QUAN HỆ

6
 Từ một lược đồ quan hệ kém phân rã thành những lược đồ quan hệ
tốt hơn.
 Ví dụ: Phân rã lược đồ quan hệ GIANGDAY thành hai lược đồ TKB
và GV
 TKB(MONHOC, SOTIET, LOP)
 GV(LOP,GV,HOCVI,DC)
 Tình trạng dữ liệu của hai lược đồ trên như sau:

7
 Những rắc rối xảy ra
 Để trả lời câu hỏi “Cho biết thông tin của giáo viên dạy CSDL của
CNTT1” ta phải kết nối tự nhiên hai quan hệ TKB và GV.

Ta thấy hai giáo viên dạy môn CSDL của lớp CNTT1 trong khi thông tin ban đầu
chỉ có N.V.A
 Vấn đề này gọi là phân rã không bảo toàn thông tin. 8
 Xét phụ thuộc hàm trên lược đồ phân rã:
 TKB(MONHOC, SOTIET, LOP) MONHOC  SOTIET
 GV(LOP, GV, HOCVI, DC) GV  HOCVI, DC

 Từ hai phụ thuộc hàm trên ta không thể suy ra được phụ thuộc hàm
MONHOC, LOP  GV.
 Như vậy, hai phụ thuộc hàm trên không đảm bảo kiểm tra các ràng buộc
toàn vẹn do 3 phụ thuộc hàm ban đầu gây ra.

  Vấn đề này gọi là phân rã không bảo toàn phụ thuộc hàm.
 Phải có quy tắc phân rã để không vi phạm hai vấn đề trên.

9
 Cho lược đồ quan hệ Q. Ta có định nghĩa sau:

 Tập {Q1, Q2,…,Qn} là một phân rã của Q nếu:


 Q = Q1  Q2  …  Qn

 Một cách tổng quát TQ là một quan hệ của Q thì:


 TQ  R1(TQ) R2(TQ) … Rn(TQ)

 Phân rã thông tin trên bảo toàn thông tin nếu:


 TQ = R1(TQ) R2(TQ) … Rn(TQ)

10
 Điều kiện để phân rã bảo toàn thông tin
 Cho Q và F là tập phụ thuộc hàm, Q1 và Q2 là một phân rã
bảo toàn thông tin trên Q nếu thoả một trong hai phụ thuộc
hàm sau:
 Q1  Q2  Q1\Q2 hoặc Q1  Q2  Q2\Q1
 Vì vậy nếu X  Y  F+ thì phân rã sau sẽ bảo toàn thông tin
Q1(XY), Q2(Q-Y)
 Thật vậy, vì Q1 có XY và Q1Q2=X, Q1\Q2=Y do đó
Q1Q2Q1\Q2

11
 VD: Cho R(ABCDE), F={AB  C, C  D, D  AE}
Kiểm tra xem các phép tách có bảo toàn thông tin không?
 R1(ABD), R2(ACE)
 R1(ABC), R2(ABDE)
 R1(ADE), R2(DEBC)

 VD: Lược đồ GIANGDAY nếu phân rã thành hai lược đồ sau thì bảo
toàn thông tin.
 Q1(MONHOC, SOTIET, LOP, GV), Q2(GV, HOCVI, DC)
 vì Q1Q2=GV , Q2-Q1= HOCVI,DC mà GV HOCVI,DC

12
 Phương tiện để kiểm tra phân rã bảo toàn thông tin:

Dùng kỹ thuật Tableau: là một bảng T như sau:

m cột cho m thuộc tính của Q; n dòng cho n quan hệ phân rã


(i,j) =aj nếu Qi có chứa thuộc tính thứ j của Q
=bk nếu ngược lại, k bắt đầu bằng 1 và tăng dần.

13
 Áp dụng luật phụ thuộc hàm để biến đổi bảng T thành T* theo thuật
toán sau:
 While (X  A  F)
{ Chọn dòng W1 và W2 sao cho W1.X = W2.X
If (W1.A != W2.A)
{ Nếu W1.A = aj và W2.A = bk thay W2.A bằng W1.A
Nếu W1.A = bk và W2.A = aj thay W1.A bằng W2.A
Nếu W1.A = bj và W2.A = bk thay W2.A bằng W1.A
}}
 Cuối cùng xem bảng kết quả nếu trong bảng xuất hiện hàng gồm các kí
hiệu a1, a2, a3, …, am thì phân rã bảo toàn thông tin.
14
 Ví dụ: Q1(MONHOC, SOTIET, LOP, GV), Q2(GV, HOCVI, DC)

 F = {MONHOC  SOTIET; MONHOC, LOP  GV; GV  HOCVI, DC}

 Từ GV  HOCVI, DC ta thay thế b1 thành a5 và b2 thành a6

15
 Ví dụ 2: cho R(ABCDE), F={A  BC, B  C, C  D, DE  C,

CE  A}
 Kiểm tra tách có bảo toàn thông tin R1(AD), R2(AB), R3(BD),

R4(CDE)

16
A B C D E

R1 a1 b1 a2 b2 a4 b3

R2 a1 a2 b4 b2 B5 -->a4 b6

R3 b7 a2 b8 b2 A4 b9

R4 b10 b11 a3 a4 a5

Xét: A  BC: Do vế trái trên A bằng nhau (R1,R2)  b1 thành a2


Xét B  C: Vế trái bằng nhau (R1,R2,R3)  b4,b8 thành b2
Xét C  D: Vế trái bằng nhau (R1,R2,R3)  b5 thành a4
DE  C: Vế trái không bằng nhau: không xét
CE  A: Vế trái không bằng nhau: không xét
Xét lần 2 trên F: không thay đổi  Phép tách không bảo toàn thông tin

17
A B C D E

R1 a1 b1 b2 a4 b3

R2 a1 a2 b4 b5 b6

R3 b7 a2 b8 a4 b9

R4 b10 b11 a3 a4 a5

18
19
VD3: R(ABCDE)
F: {AC,BC, CD, DEC, CEA)

A B C D E
R1 a1 b1 b2 a4 b3
R2 a1 a2 b4 b5 b6
R3 b7 a2 b8 b9 a5
R4 b10 B11 a3 a4 a5
R5 a1 b12 b13 b14 a5

20
 AC, Do 2 hàng bằng nhau trên A, nên b2, b4 và b13 thành b2

A B C D E

R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 b5 B6
R3 b7 a2 B8 B9 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 b14 a5

21
 BC; Do 2 hàng (R2,R3) bằng nhau trên B, nên b8 thành b2;

A B C D E

R1 a1 B1 B2 a4 b3
R2 a1 a2 b2 b5 B6
R3 b7 a2 b2 B9 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 b14 a5

22
 CD, Do 2 hàng (R1,R2,R3,R5) bằng nhau trên C, nên các
kí hiệu đối với D là b5,b9,b14 thành a4
A B C D E

R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 a4 B6
R3 b7 a2 b2 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 a4 a5

23
 DEC; Do 2 hàng (R3,R4,R5) bằng nhau trên DE, nên
các kí hiệu đối với C là b2 ở R3,R5 thành a3

A B C D E

R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 a4 B6
R3 b7 a2 a3 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 a3 a4 a5

24
 CEA; Do 2 hàng (R3,R5) bằng nhau trên CE, nên các kí hiệu đối
với A là b7 ở R3 thành a1
A B C D E
R1 a1 B1 B2 a4 B3
R2 a1 a2 b2 a4 B6
R3 a1 a2 a3 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 a3 a4 a5

 Ta có R3 toàn các giá trị a1..a5  bảo toàn tt

25
 Cho LĐQH Q và tập PTH F
 Phân rã Q thành {Q1, Q2…Qn} thì mỗi Q sẽ xác định một tập PTH Fi:
 Fi = {X  Y : XY  Qi và X Y  F+}
 Fi được gọi là tham chiếu của F+ lên Qi

 Phân rã trên bảo toàn phụ thuộc hàm nếu:


 Đặt F’ = F1  F2  …  Fn, thì F’ = F (nghĩa là F’+ = F+)

 Để kiểm tra phân rã bảo toàn PTH ta đi kiểm tra F1  F2  …  Fn  F


 Lưu ý: Khi tính các Fi thường hay thiếu sót các phụ thuộc hàm vì Fi là chiếu của F+
lên Qi chứ không phải F lên Qi. Như vậy để tính đầy đủ Fi của Qi ta tính bao đóng
của tất cả các tập con thực sự của Qi.
 X  Qi. Nếu X+  Qi  X thì (X  (X+  (Qi - X))  Fi.

26
 Ví dụ: Cho Q(ABCD), F = {A  B, B  C, C  D, D  A}

 Phân rã Q thành {Q1(AB), Q2(BC), Q3(CD)} sẽ dễ dàng nhầm lẫn:

 Q1(AB), F1 = {A  B}

 Q2(BC), F2 = {B  C}

 Q3(CD), F3 = {C  D}

 Lúc này F’ = F1  F2  F3 = {A  B, B  C, C  D}

 Rõ ràng là F’ không tương đương với F vì F’+  F+ do DAF’+

=>Nếu vội vã kết luận phân rã trên không bảo toàn phụ thuộc hàm là sai.

27
 Thực ra:

 Q1(AB) Af+ = ABCD  A  B  F1 Bf+ = BCDA  BAF1

 Vậy F1 = {A  B, B  A}

 Q2(BC) Bf+ = BCDA  B  CF2 Cf+ =CDAB  C  B  F2

 Vậy F2 = {B  C, C  B}

 Q3(CD) Cf+ = CDAB  C  D  F3 Df+ =DABC  DC F3

 Vậy F3 = {C  D, D  C}

 Vậy F’ = F1  F2  F3 = { A  B,B  A, B  C, C  B, C  D, D  C}

 Ta tính được F’+ = F+  F’  F

 Kết luận: Phân rã trên bảo toàn phụ thuộc hàm

28
6.3. CÁC DẠNG CHUẨN
CỦA QUAN HỆ

29
 Xét dạng chuẩn dựa trên phụ thuộc hàm
 Thuộc tính khoá: Thuộc tính tham gia vào bất kỳ khoá nào đó của

quan hệ chứa nó. Ngược lại gọi là thuộc tính không khoá.
 Ví dụ: Q(ABCDEF) A, B, D, E là các thuộc tính khoá. C, F là các

thuộc tính không khoá.


 Thuộc tính đơn: Miền giá trị của nó không phải là tích hợp của

các miền giá trị khác.


 X  A là PTH nguyên tố nếu: Không Y là tập con thực sự của X,

YA F+

30
 Ví dụ: Cho F = {AB  C, B  C} thì:
 AB  C: không là phụ thuộc hàm nguyên tố vì có B  C.

 B  C: là phụ thuộc hàm nguyên tố

 A là thuộc tính phụ thuộc đầy đủ vào X nếu X  A là phụ

thuộc hàm nguyên tố

 Ví dụ trên thì C là thuộc tính phụ thuộc đầy đủ vào B chứ

không phụ thuộc đầy đủ vào AB.

31
 ĐN: Lược đồ quan hệ Q ở dạng 1NF nếu tất cả các thuộc tính của Q đều là
thuộc tính đơn/nguyên tố.
 Lược đồ CSDL C ở 1NF nếu tất cả các Qi của C đều ở 1NF.

  Đây là dạng chuẩn đơn giản nhất, nó không chú ý đến các phụ thuộc hàm
do đó có rất nhiều trùng lắp thông tin do các phụ thuộc hàm trên gây ra.

32
 Chuyển quan hệ trên thành dạng chuẩn 1 (bằng cách xác định tập
thuộc tính {DNumber, DLocation} là khoá chính)

  Đây là dạng chuẩn đơn giản nhất, nó không chú ý đến các phụ thuộc
hàm do đó có rất nhiều trùng lắp thông tin do các phụ thuộc hàm trên gây
ra.
33
 ĐN: Lược đồ quan hệ Q ở dạng 2NF nếu ở 1NF và tất cả thuộc tính không khoá

đều phụ thuộc đầy đủ vào khoá.


 Lược đồ CSDL C ở dạng 2NF nếu tất cả các Qi của C đều ở dạng 2NF

 VD: Cho Q(ABCD), F = {A  C, B  D}, không đạt 2NF vì:


 Khoá chính là AB; C,D là hai thuộc tính không khoá.

 AB  C không là phụ thuộc hàm nguyên tố vì có A  C

 AB  D không là phụ thuộc hàm nguyên tố vì có B  D

 C và D không phụ thuộc đầy đủ vào khoá.

 Xét một tình trạng Q có sự trùng lặp thông tin (các giá trị trong ngoặc là trùng lặp)

Q A B C D
(a1) b1 (c1) d1
(a1) b2 (?) d2
a2 (b3) c2 (d3)
a3 (b3) c3 (?)
34
 EMP_DEPT đạt 2NF

35
 VD: Cho Q(ABCD), F = {AB  C, C  D} ở 2NF vì:
 Khoá chính là AB; C,D là hai thuộc tính không khoá. AB  C và ABD đều là các
phụ thuộc hàm nguyên tố.
  C và D đều là phụ thuộc đầy đủ vào khoá.

 Xét một tình trạng Q có sự trùng lặp thông tin:


Q A B C D
a1 b1 (c1) (d1)
a2 b2 (c1) (?)
 Ta thấy rằng ở VD trên, C  D gây ra trùng lắp thông tin vì thuộc tính không
khoá D phụ thuộc bắc cầu vào khoá(nghĩa là phụ thuộc hàm khoá (AB)  D
suy diễn nhờ qui tắc bắc cầu Armstrong).
 Nhận xét dạng chuẩn 2NF
 Vẫn bị trùng lắp thông tin do phụ thuộc hàm bắc cầu.
36
 ĐN1: Lược đồ quan hệ Q ở dạng 3NF nếu ở 2NF và tất cả các
thuộc tính không khoá không phụ thuộc bắc cầu vào khoá.

 ĐN2: Lược đồ quan hệ Q ở dạng 3NF nếu ở 1NF và tất cả phụ


thuộc hàm không hiển nhiên X  Y của F+ thoả một trong hai
điều kiện sau:
 (i) X là một siêu khoá (X chứa một khoá nào đó)
 (ii) Mỗi thuộc tính trong tập (Y - X) nằm trong một khoá nào đó.

 Lược đồ CSDL C ở dạng 3NF nếu tất cả các Qi của C đều ở


dạng 3NF

37
 Tách thành EMPLOYEE, DEPARTMENT đạt 3NF

38
 VD: Cho Q(ABCD), F = {AB  CD} ở dạng 3NF
 Vì AB  CD có vế trái là một siêu khoá.
 VD: Cho Q(ABCDE), F = {AB  CDE, B  D, DE  ABC} ở dạng 3NF vì:
 AB  CDE có vế trái là một siêu khoá.
 B  D có (VP) – (VT) = D chứa trong khoá DE.
 DE  ABC có vế trái là một siêu khoá.
 Xét một tình trạng Q có sự trùng lặp thông tin:
Q A B C D E
a1 (b1) c1 (d1) e1
a2 (b1) c2 (?) e1
  Ở dạng 3NF nếu có nhiều khoá sẽ có khả năng trùng lặp thông tin do các
phụ thuộc hàm loại (ii) trong ĐN2.
39
 ĐN: Lược đồ quan hệ Q ở BCNF nếu ở dạng 1NF và tất cả phụ thuộc hàm

không hiển nhiên X  Y của F+ thì X là một siêu khoá (X chứa một khoá nào
đó).
 Lược đồ CSDL C ở dạng BCNF nếu tất cả các Qi của C đều ở dạng BCNF.

 VD: Cho Q(ABCD), F{AB  CD, D  AB} ở dạng BCNF vì:

 AB  CD có vế trái là một siêu khoá

 D  AB có vế trái là một siêu khoá

 D  C  F+ vế trái là một siêu khoá

  Ở dạng chuẩn BCNF không có sự trùng lắp thông tin do phụ thuộc hàm gây

ra. Tuy nhiên dạng BCNF có điều kiện quá khắt khe, đôi khi người ta chỉ cần
chấp nhận ở dạng 3NF.
40
6.4. CHUẨN HÓA LƯỢC
ĐỒ QUAN HỆ

41
 Thuật toán phân rã

 Thuật toán tổng hợp

 Cách thức chuẩn hoá trong thực tế

42
Dựa vào điều kiện phân rã bảo toàn thông tin: Q thành Q1 và Q2 thoả Q1 
Q2  Q1\Q2 hay Q1  Q2  Q2\Q1.
Thuật toán phân rã thành các lược đồ ở dạng chuẩn BCNF như sau:
Cho Q và tập phụ thuộc hàm F xác định trên Q
Phân_rã = {Q} ;
done = false ;
Tính F+;
while (not done)
if (có một Qi trong Phân_rã không ở dạng BCNF)
{ X Y là phụ thuộc hàm không hiển nhiên trên Qi thoả:
X  Qi  F+ và X  Y =  thì
Phân_rã = (Phân_rã – Qi)  (XY)  (Qi – Y)
}
else done = true;
43
Kết quả ta được tập Phân_rã gồm các lược đồ ở dạng BCNF.
 VD: Cho Q(ABCD), F = {AB  C, C A, B  D}
 Q(ABCD) không ở dạng BCNF, chọn C  A. Phân rã thành Q1 và Q2
 Q1(CA), F1 = {C  A}, BCNF
 Q2(BCD), F2 = {B  D}, không BCNF
 Q2(BCD) không ở BCNF, chọn BD. Phân rã thành Q21, Q22
 Q21(BD), F21 = {B  D}, BCNF
 Q22(BC), F22 = , BCNF

 Cuối cùng ta phân rã thành :


 Q1(AC), F1 = {C  A}, BCNF
 Q2(BD), F2 = {B  D}, BCNF
 Q3(BC), F3 = , BCNF
44
 Nhận xét:
 Cho dạng chuẩn BCNF .
 Bảo toàn thông tin
 Không phải lúc nào cũng bảo toàn PTH (VD trên 3
tập PTH cuối cùng F1, F2, F3 không tương đương
với tập phụ thuộc hàm F ban đầu).

45
Thuật toán sau cho phân rã đạt tối thiểu dạng 3NF.
Cho Q và tập PTH F xác định trên Q.
Tính Fc là một phủ tối thiểu của F;
Xác định các khoá của Q ;
i=0;
for (Mỗi phụ thuộc hàm X  Y trong Fc)
if (không có Qj, j = 1,2,…i chứa XY)
{ i++ ;
Qi = XY ;
}
if (Không có Qj, j=1,2,…i chứa khoá của Q)
{ i++;
Qi = bất kỳ khoá nào của Q ;
}
46
return (Q1,Q2,…,Qi) ;
VD: Phân rã Q(ABCDE), F = {A  CD, C  D, B  E}
Tính được Fc = {A  C, C  D, B  E}; khoá là AB
Suy ra phân rã thành:
Q1 = AC
Q2 = CD
Q3 = BE
Không có Qi nào chứa khoá AB nên ta có: Q4 = AB
Kết quả đạt được:
Q1(AC), F1 = {A  C}, đạt 3NF (đạt luôn BCNF)
Q2(CD), F2 = {C  D}, đạt 3NF (đạt luôn BCNF)
Q3(BE), F3 = {B  E}, đạt 3NF (đạt luôn BCNF)
Q4(AB), F2 = , đạt 3NF (đạt luôn BCNF)
47
 Nhận xét:
 Tối thiểu đạt dạng chuẩn 3NF .
 Bảo toàn PTH vì mỗi PTH trong Fc cho một quan hệ
và quan hệ này xác định luôn PTH đó.
Vậy F’ = Fi, F’  Fc  F.
 Bảo toàn thông tin vì có ít nhất một lược đồ trong
phân rã chứa khoá.

48
Cho lược đồ quan hệ R(C,T,H,R,S,G) với tập phụ thuộc hàm
tối thiểu F: {C->T, HR->C,
HT->R, CS->G, HS-> R}.
Yêu cầu: Phân rã lược đồ quan hệ trên thành các quan hệ
con đều ở dạng 3NF

49
6.5. CÁCH THỨC CHUẨN
HÓA THỰC TẾ

50
 Trong thực tế khi chuẩn hoá lược đồ CSDL thường thực hiện theo các

bước:
 Bước 1: Kiểm tra xem quan hệ đã đạt đạt dạng chuẩn 1NF chưa?. Nếu

chưa ở 1NF có nghĩa là có các thuộc tính chưa nguyên tố/lặp. Tiến hành
tách các thuộc tính đó.
 Bước 2: Kiểm tra xem chúng có ở dạng 2NF không?, nghĩa là kiểm tra

xem các thuộc tính không khoá có phụ thuộc hoàn toàn vào khoá chính
không?. Tiến hành tách những PTH bộ phận đó thành các bảng con để
giảm sự trùng lặp thông tin.

51
 Bước 3: Kiểm tra xem chúng đã đạt dạng chuẩn 3NF chưa?, nghĩa là

các thuộc tính không khoá thì phụ thuộc trực tiếp vào khoá chính. Tiến
hành tách những PTH bắc cầu thành bảng con.

 Bước 4: kiểm tra xem chúng đã đạt dạng chuẩn BCNF chưa?, nghĩa là

tất cả các phụ thuộc hàm đều có vế trái là siêu khoá. Tiến hành tách
PTH có vế trái chưa phải là siêu khoá.

52
 Ta có thể tóm tắt lại quá trình chuẩn hoá như sau:

1NF 2NF 3NF BCNF

Loại bỏ Loại bỏ Loại bỏ Chỉ còn lại


các thuộc các phụ các phụ các phụ
tính chưa thuộc hàm thuộc hàm thuộc X->Y
nguyên tố bộ phận bắc cầu mà X là
hoặc lặp siêu khoá

53
Ví dụ minh hoạ
Giả sử khi khảo sát thực tế về việc mua bán vật tư, ta có được lược đồ quan hệ
sau:
PHIEUNHAP(sophieu, ngaynhap, makhach,tenkh, diachikh, dienthoai, makho,
1 2 3 4 5 6 7
diachikho, hinhthucthanhtoan, loaitien, mavattu*, tenvattu*, soluong*,
8 9 10 11 12 13
donvitinh*, dongia*, tyleVAT*)
14 15 16

Có các phụ thuộc hàm sau:


F={1(2,3,4,5,6,7,8,9,10); 3  4,5,6); 7  8; 11 (12,14,15,16); (1,11)  13}

54
 Bước1: Khoá chính của quan hệ PHIEUNHAP là K=(1,11)=(sophieu, mavattu).

 Chưa ở dạng 1NF vì có các thuộc tính (có dấu *) là thuộc tính lặp. Ta tiến hành

phân rã thành hai quan hệ:


 Quan hệ 1: Các thuộc tính lặp và phần khoá chính xác định chúng.

 Quan hệ 2: các thuộc tính còn lại và phần khoá chính xác định phần này(các

thuộc tính không lặp)


 Quan hệ 1 gồm các thuộc tính lặp (11,12,13,14,15,16) và khoá chính là(1)

Tức là VATTU(Sophieu, mavattu, tenvattu, soluong, donvitinh, dongia , tyleVAT)


1 11 12 13 14 15 16
Phụ thuộc hàm của quan hệ này là F1={ 11 (12,14,15,16); (1,11)  13}
Khoá chính của quan hệ này là {1,11}

55
Quan hệ 2 gồm các thuộc tính (2,3,4,5,6,7,8,9,10) và khoá (1)
PHIEUNHAP(sophieu, ngaynhap, makhach, tenkh, diachikh, dienthoai,
1 2 3 4 5 6
makho, diachikho, hinhthucthanhtoan, loaitien)
7 8 9 10
Phụ thuộc hàm của quan hệ này F2={1(2,3,4,5,6,7,8,9,10);3 (4,5,6); 7  8}
Khoá chính là {1}.

56
Bước 2: Xét xem các quan hệ 1 và 2 ở trên đã đạt dạng chuẩn 2NF chưa?.
Nếu chưa ta tiến hành tách đôi thành quan hệ 1: gồm các thuộc tính phụ
thuộc vào một phần khóa chính và phần khoá chính; Quan hệ 2 : các thuộc
tính còn lại và khoá chính.
Xét quan hệ 1: Ta thấy chưa đạt dạng 2NF vì khoá là {1,11}, mà lại có phụ
thuộc hàm 11->12,14,15,16, nghĩa là các thuộc tính 12,14,15,16 không phụ
thuộc hoàn toàn vào khoá. Để đạt dạng chuẩn 2 ta tách thành 2 quan hệ:
Quan hệ 1_1: VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
11 12 14 15 16
F1_1={11  12,14,15,16}, khoá là {11}
Quan hệ 1_2: DONGVATTU(sophieu, mavattu, soluong)
1 11 13
F1_2={(1,11)  13}
57
- Xét quan hệ 2: đã đạt dạng chuẩn 2NF vì thuộc tính khoá của nó là sophieu và
các thuộc tính đều phụ thuộc hoàn toàn vào khoá.
Bước 3: Xem chúng đã đạt dạng 3NF chưa?. Nếu chưa ta tiến hành tách đôi
thành quan hệ 1: gồm các thuộc tính phụ thuộc bắc cầu và thuộc tính cầu; quan
hệ 2: gồm các thuộc tính còn lại và thuộc tính cầu.
- Xét quan hệ 1_1:
Quan hệ 1_1: VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
11 12 14 15 16
Đã là dạng chuẩn 3NF vì không có phụ thuộc hàm bắc cầu.
- Xét quan hệ 1_2:
Quan hệ 1_2: DONGVATTU(sophieu, mavattu, soluong)
1 11 13
Đã là dạng chuẩn 3NF vì không có phụ thuộc hàm bắc cầu.

58
- Xét quan hệ 2:
PHIEUNHAP(sophieu, ngaynhap, makhach,tenkh, diachikh, dienthoai, makho,
1 2 3 4 5 6 7
diachikho, hinhthucthanhtoan, loaitien
8 9 10
F2={1->(2,3,4,5,6,7,8,9,10);3->(4,5,6); 7->8}, Khoá chính là {1}
Chưa đạt dạng 3NF vì có PTH bắc cầu: Các thuộc tính (4,5,6) PTH bắc cầu vào
khoá chính qua cầu (3), còn thuộc tính (8) phụ thuộc bắc cầu vào khoá chính qua
cầu (7).
Để có dạng chuẩn 3NF tách thành những quan hệ sau:
Quan hệ 2_1: KHACH(makhach,tenkh, diachikh, dienthoai)
3 4 5 6
F2_1={3->4,5,6}, khoá chính là (3)

59
Quan hệ 2_2: KHO(makho, diachikho)
7 8
F2_2={7->8}; khoá chính là (7)
Quan hệ 2_3: PHIEUNHAP(sophieu, ngaynhap, makhach,
1 2 3
makho, hinhthucthanhtoan, loaitien)
7 9 10
F2_3={1-(2,3,7,9,10)} ; khoá chính là (1)
Bước 4: Kiểm tra xem chúng đạt dạng BCNF chưa?.
Ta thấy tất cả các quan hệ trên đều đã đạt ở dạng BCNF vì tất cả các vế
trái của các phụ thuộc hàm đều là siêu khoá.
60
Tóm lại: Ta có các quan hệ sau khi chuẩn hoá đạt dạng chuẩn
BCNF như sau:
1. VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
2. DONGVATTU(sophieu, mavattu, soluong)
3. KHACH(makhach,tenkh, diachikh, dienthoai)
4. KHO(makho, diachikho)
5. PHIEUNHAP(sophieu, ngaynhap, makhach, makho,
hinhthucthanhtoan, loaitien)

61
6.1: Xác định khoá và xét các phân rã sau đây theo hai tiêu chuẩn bảo toàn
thông tin và bảo toàn phụ thuộc hàm.
a. Q(ABCD), F = {A  BC, C  D}
Q1(AB), F1 = {A  B}
Q2(CD), F2={CD}
b. Q(ABCD), F={AB, ACD}
Q1(AB), F1={AB}
Q2(ADC),F2={ACD}
c. Q(ABDCE),F={AC, BC, CD, DEC, CEA}
Q1(AB),F1={AD}
Q2(CD),F2=
Q3(AB),F3=
Q4(CD),F4={CD, DEC, CED}
Q5(AB), F5=
d. Q(ABCD), F={AB, CD}
Q1(AB), F1={AB}
Q2(CD), F2={CD}
62
6.2: Xét dạng chuẩn của các lược đồ quan hệ sau:
 Q(ABCD), F={AB, CD}
 Q(ABCD), F={ABC, CD}
 Q(ABCD), F={ABCD, CDAB, CB}
 Q(ABCDE), F={ABCD, DE, DEABC}
 Q(ABCDEF), F={ABE, ACF, ADB, BC, CD}

6.3: Cho lược đồ quan hệ Q(ABCDEF), F={CF, EA, CED, AB}


 Xác định khoá của Q
 Phân rã thành dạng chuẩn Boyce-Codd bảo toàn thông tin
 Phân rã thành dạng chuẩn 3 bảo toàn thông tin và bảo toàn phụ thuộc hàm.

6.4: Giả sử bài 3 được phân rã thành Q1(CDEF) và Q2(ABE), hãy xác định F1,
F2 và đánh giá phân rã trên.
63
6.5: Nếu bài 3 được phân rã thành Q1(CF), Q2(AE), Q3(CDE), Q4(AB). Hãy xác
định F1, F2, F3, F4 và đánh giá chúng.
6.6: Cho lược đồ quan hệ
 VẬNCHUYỂN(TÀU, LOẠITÀU, CHUYẾN, HÀNG, CẢNG, NGÀY)
 Mỗi tàu (TÀU) thuộc duy nhất một loại tàu nào đó (LOẠITÀU), mỗi chuyến có
một mã số riêng biệt (CHUYẾN) dùng để xác định một chuyến tàu (TÀU) chở
một khối lượng hàng hoá nào đó (HÀNG), mỗi chiếc tàu trong một ngày(NGÀY)
chỉ cập vào một cảng duy nhất (CẢNG) của một chuyến vận chuyển nào đó
(CHUYẾN)
 Xác định tập các phụ thuộc hàm trên.
 Xác định dạng chuẩn của VẬNCHUYỂN
 Nếu VẬNCHUYỂN chưa tốt hãy tìm một phân rã tốt cho nó
64
6.7. Cho quan hệ PHIEUNHAP(số phiếu, ngày, mã NCC, tên NCC, địa
chỉ, Mã vật tư, tên vật tư, số lượng, đơn vị, đơn giá)
Có các phụ thuộc hàm
F={ Số phiếu->ngày, mã NCC;
mã NCC->tên NCC, địa chỉ;
mã vật tư->tên vật tư, đơn vị, đơn giá;
số phiếu, mã vật tư -> số lượng}
Giả sử tách thành hai quan hệ:
PHIEUNHAP(số phiếu, ngày, mã NCC, Mã vật tư, tên vật tư, số lượng,
đơn vị, đơn giá)
NHACUNGCAP(mã NCC, tên NCC, địa chỉ)
Kiểm tra xem chúng đạt dạng chuẩn nào? vì sao? 65
 Giả sử tách thành các quan hệ:
 PHIEUNHAP(số phiếu, ngày, mã NCC)
 DONGPHIEU(số phiếu, Mã vật tư, số lượng)
 NHACUNGCAP(mã NCC, tên NCC, địa chỉ)
 VATTU(Mã vật tư, tên vật tư, đơn vị, đơn giá)
 Kiểm tra xem chúng đạt dạng chuẩn nào? vì sao?

6.8. Giả sử có quan hệ BANHANG(Ngày tháng, mã hàng, tên hàng, đơn giá, số
lượng, tổng tiền theo ngày, thanh toán)
 Có các phụ thuộc hàm sau:
 {mã hàng}->{tên hàng, đơn giá}
 {ngày tháng}->{ tổng tiền theo ngày, thanh toán}
 {ngày tháng, mã hàng}->{số lượng}
 Hãy chuẩn hoá quan hệ BANHANG thành dạng chuẩn BCNF.
66

You might also like