Tải bản đầy đủ (.docx) (85 trang)

Giao Trinh Co So Du Lieu

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

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>Chương I. ĐẠI CƯƠNG VỀ CÁC HỆ CƠ SỞ DỮ LIỆU</b>
<b>1.1 Các hệ thống xử lý tệp truyền thống</b>


<b> Trước đây, khi tin học chưa phát triển, việc tin học hoá quản lý của các tổ</b>
chức được thực hiện từng phần riêng lẻ, độc lập với nhau mà không xem xét tổ
chức này như một tổng thể. Chẳng hạn, ở một trường đại học, để phục vụ cho
công tác đào tạo và quản lý khoa học, phịng Đào tạo đã tổ chức lưu trữ thơng tin
về cán bộ giảng dạy, nghiên cứu,... của trường với các thông tin: Họ tên, ngày
sinh, học hàm, học vị, chuyên môn, khoa,....


Do yêu cầu tổ chức, quản lý giảng dạy và nghiên cứu riêng của từng khoa,
các khoa cũng tổ chức lưu trữ hồ sơ của các cán bộ trong khoa mình. Hồ sơ cán
bộ ở khoa được trích từ phòng Đào tạo một phần và bổ sung thêm một số các
thông tin cần thiết khác.


Việc quản lý riêng rẽ như vậy có ưu điểm là thời gian triển khai ngắn, khơng
địi hỏi đầu tư lớn về vật chất, thiết bị và nhân sự. Tuy nhiên nó có nhược điểm là
sự trùng lặp thơng tin đã gây ra lãng phí. Hơn nữa, sự trùng lặp đó sẽ dễ dẫn đến
việc thiếu nhất quán dữ liệu. Chẳng hạn, tại một thời điểm thơng tin về một cán
bộ có thể khác nhau trên hai hệ thống của phòng đào tạo và của khoa. Một hạn
chế khác của cách quản lý riêng rẽ trên là thiếu sự chia sẻ thông tin giữa các hệ
thống, khó mở rộng hệ thống hoặc kết nối các hệ thống thành một hệ thống
chung.


Để khắc phục những khuyết điểm của cách tổ chức dữ liệu theo hệ thống tập
tin truyền thống, một phương pháp tổ chức dữ liệu mới được đưa ra đó là phương
pháp tổ chức các Cơ sở dữ liệu.


<b>1.2. Các hệ cơ sở dữ liệu (Database System) </b>
<b>1.2.1 Các khái niệm cơ bản</b>



<i>- Dữ liệu (Data): Dữ liệu là tất cả những gì máy tính xử lý, nó có thể là các</i>
số, chữ cái hay các giá trị logic,...


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Một cách khác ta có thể hiểu Cơ sở dữ liệu là một bộ sưu tập các dữ liệu tác
nghiệp được lưu trữ lại và được các hệ ứng dụng của một xí nghiệp cụ thể nào đó
khai thác, sử dụng.


- Hệ quản trị cơ sở dữ liệu là một hệ thống phần mềm cho phép người dùng
định nghĩa, tạo lập, bảo trì các cơ sở dữ liệu và điều khiển mọi truy nhập đối với
cơ sở dữ liệu đó.


- Hệ cơ sở dữ liệu: Hệ cơ sở dữ liệu là một hệ thống gồm 4 thành phần:
+ Cơ sở dữ liệu hợp nhất


+ Những người sử dụng


+ Phần mềm hệ quản trị cơ sở dữ liệu
+ Phần cứng


<b>1.2.2 Kiến trúc ba mức của một hệ cơ sở dữ liệu</b>


Để cho hệ thống có thể sử dụng được, nó phải tra cứu hay tìm kiếm dữ liệu
một cách hiệu quả. Điều này dẫn đến việc thiết kế các cấu trúc dữ liệu phức tạp
để biểu diễn dữ liệu trong cơ sở dữ liệu này. Do nhiều nguời sử dụng truy nhập
vào các hệ CSDL khơng được đào tạo về máy tính, người phát triển phải che dấu
tính phức tạp đối với những người sử dụng thông qua một số mức trừu tượng để
đơn giản hoá các tương tác của người sử dụng đối với hệ thống.


Có ba mức biểu diễn một cơ sở dữ liệu :



<i><b>+ Mức vật lý: Mức thấp nhất của sự trừu tượng mô tả dữ liệu được thực sự</b></i>
lưu trữ như thế nào trong CSDL. Đây là mức thể hiện các cài đặt có tính chất vật
lý của CSDL để đạt được tối ưu trong các lần thực hiện các thao tác tìm kiếm và
lưu trữ, để tận dụng các vùng nhớ còn trống. Mức vật lý cũng là mức phản ánh
các cấu trúc dữ liệu, các tổ chức tệp được dùng cho việc lưu trữ dữ liệu trên các
thiết bị nhớ thứ cấp


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<i><b>+ Khung nhìn (View) : Mức trừu xuất cao nhất này mơ tả chỉ một phần của</b></i>
tồn bộ cơ sở dữ liệu, phần thích hợp với một người sử dụng nhất định. Mức
ngồi gồm một số khung nhìn khác nhau của những người sử dụng đặt vào cơ sở
dữ liệu. Mỗi người dùng có thể khơng quan tâm đến tồn bộ thơng tin của hệ
CSDL mà chỉ cần một phần thơng tin nào đó


<i> Lược đồ (Scheme): Tồn bộ mơ tả CSDL được gọi là lược đồ CSDL.</i>
Tương ứng với ba mức trừu xuất dữ liệu nói trên có ba loại lược đồ


 Lược đồ vật lý là bộ khung của cơ sở dữ liệu mức vật lý.


<i>Lược đồ khái niệm là bộ khung của cơ sở dữ liệu mức khái niệm.</i>
Khung nhìn được gọi là lược đồ con (Subscheme).


<i><b> Thể hiện (Instance): Toàn bộ dữ liệu lưu trữ trong CSDL tại một thời điểm</b></i>
nhất định được gọi là một thể hiện của CSDL.


Sơ đồ sau mô tả các mức của cơ sở dữ liệu:


<i>Mơ</i>


<i>hình dữ liệu: Là một tập các khái niệm và ký pháp dùng để mô tả dữ liệu, các mối</i>
quan hệ của dữ liệu, các ràng buộc trên dữ liệu của một tổ chức.



Như vậy có thể xem một mơ hình dữ liệu có ba thành phần:
- Phần mơ tả cấu trúc của CSDL


- Phần mô tả các thao tác, định nghĩa các phép toán được phép trên dữ liệu
- Phần mơ tả các ràng buộc tồn vẹn để đảm bảo sự chiính xác của dữ liệu
<b>1.2.3 Các khả năng của một hệ quản trị cơ sở dữ liệu</b>


- Khả năng quản lý dữ liệu tồn tại lâu dài


- Khả năng truy nhập các khối lượng dữ liệu lớn một cách hiệu quả
- Hỗ trợ ít nhất một mơ hình dữ liệu


- Đảm bảo tính độc lập dữ liệu


USER 1 Khung nhìn1


USER 2 Khung nhìn 2


CSDL mức
Khái niệm


CSDL mức
vật lý


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

- Hỗ trợ các ngôn ngữ cao cấp nhất định cho phép người sử dụng định nghĩa
cấu trúc của dữ liệu, truy nhập dữ liệu và thao tác dữ liệu


- Quản trị giao dịch
- Điều khiển truy nhập


- Phục hồi dữ liệu


<b>1.2.4 Các ngôn ngữ cơ sở dữ liệu</b>


Một hệ CSDL cung cấp hai kiểu ngôn ngữ khác nhau: Một ngôn ngữ đặc tả
sơ đồ CSDL và một ngôn ngữ biểu diễn các truy vấn và các cập nhật CSDL


a) Ngôn ngữ định nghĩa dữ liệu (Data Definition Language): cho phép
người dùng định nghĩa CSDL, đặc tả các kiểu và các cấu trúc dữ liệu, đặc tả các
ràng buộc trên các dữ liệu lưu trữ trong CSDL. Kết quả của việc dịch các câu của
DDL là một tập các bảng được lưu trữ trong một tệp đặc biệt được gọi là từ điển
dữ liệu hay thư mục dữ liệu.


Một từ điển dữ liệu là một tệp chứa các siêu dữ liệu, là các dữ liệu về
dưữliệu. Tệp này đuợc tham khảo trước khi dữ liệu thực sự được đọc hay được
sửa đổi trong hệ CSDL.


Ngôn ngữ định nghiã dữ liệu được xây dựng dựa trên 1 loại mơ hình dữ liệu
nào đó. Hiện nay, phần lớn các hệ QTCSDL đều dựa trên mơ hình quan hệ.


b) Ngơn ngữ thao tác dữ liệu(Data Manipulation Language -DML):


Cho phép người sử dụng xây dựng các thao tác:Tìm kiếm, thêm, sửa, xóa dữ
liệu; Có hai kiểu DML thủ tục và phi thủ tục


Tự điển dữ liệu (Data Dictionary)<b>:</b> Chứa thông tin về các thành phần cấu


trúc CSDL (Các thuộc tính, các mối liên hệ...), các quan hệ, ràng buộc dữ liệu.
Thông qua từ điển dữ liệu, các Hệ QTCSDL cung cấp thêm các công cụ trợ
giúp khai thác dữ liệu, lập hồ sơ sưu liệu (documentation) về cấu trúc của CSDL,


tạo lập các CSDL mới...


Tự điển dữ liệu được tổ chức như một CSDL gọi là <i>meta-cơ sở.</i>


Để mô tả dữ liệu ở mức quan niệm, người ta đưa ra nhiều loại mơ hình dữ
liệu: Mơ hình thực thể liên kết, Mơ hình dữ liệu quan hệ, mơ hình dữ liệu mạng,
mơ hình dữ liệu phân cấp, mơ hình dữ liệu hướng đối tuợng.


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

1.3.1 Khái niệm hệ quản trị CSDL


- Hệ quản trị cơ sở dữ liệu là một hệ thống phần mềm cho phép người dùng
định nghĩa, tạo lập, bảo trì các cơ sở dữ liệu và điều khiển mọi truy nhập đối với
cơ sở dữ liệu đó.


1.3.2 Kiến trúc của một hệ quản trị CSDL


Các thành phần chính của một hệ cơ sở dữ liệu
- Biểu diễn của bộ nhớ ngoài: CSDL và từ điển dữ liệu
- Bộ quản lý lưu trữ: Lấy thông tin, thay đổi dữ liệu


- Bộ xử lý câu hỏi:điều khiển các câu hỏi, các yêu cầu thay đổi dữ liệu
- Bộ quản lý giao dịch: Đảm bảo tính tồn vẹn của hệ thống


- Các thao tác đối với hệ quản trị CSDL: Các truy vấn, các cập nhật dữ liệu,
các thay đổi sơ đồ


<b>1.4 Sự phân loại các hệ CSDL</b>


+ Hệ CSDL tập trung: Trong hệ CSDL, các dữ liệu được tập trung ở một
trạm: Hệ CSDL cá nhân, Hệ CSDL trung tâm, Hệ CSDL khách/chủ



+ Hệ CSDL phân tán: Trong hệ CSDL phân tán, các dữ liệu được trải trên
tất cả các trạm và các dữ liệu địa phương có quan hệ với nhau.


Cơ sở dữ liệu
và từ điển dữ


liệu


Bộ quản lý lưu trữ
Bộ xử lý câu hỏi


Bộ quản trị giao
dịch


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<b>Chương II. CÁC MƠ HÌNH DỮ LIỆU</b>


Mơ hình dữ liệu là một tập các khái niệm và ký pháp dùng để mô tả dữ
liệu, các mối quan hệ của dữ liệu, các ràng buộc toàn vện trên dữ liệu của một tổ
chức. Như vậy có thể xem một mơ hình dữ liệu có ba thành phần:


- Phần mô tả cấu trúc của CSDL


- Phần mô tả các thao tác, định nghĩa các phép toán được phép trên dữ liệu
- Phần mơ tả các ràng buộc tồn vẹn để đảm bảo sự chiính xác của dữ liệu
Khi dùng mơ hình dữ liệu chúng ta có thể biểu diễn dữ liệu theo một cách đễ
hiểu và vì vậy mơ hình cũng được sử dụng trong việc thiết kế CSDL


<b>2.1. Mơ hình thực thể liên kết (Entity Relationship – ER)</b>



Mơ hình thực thể liên kết dựa trên cơ sở sự nhận thức của thế giới thực
bao gồm một tập các đối tuợng cơ sở được gọi là các thực thể và một tập các liên
kết giữa các đối tuợng này. Nó được thiết kế nhằm cho phepá thiết kế CSDL
bằng cách đắc tả một sơ đồ xiínghiệp, biểu diễn cấu trúc logic tổng thể của CSDL
xí nghiệp.


<b>2.1.1. Các khái niệm cơ sở</b>
<b>2.1.1.1 Tập thực thể</b>


<i>Thực thể: Một thực thể là một một đối tượng cụ thể hay trừu tượng trong thế</i>
giới thực mà nó tồn tại và có thể phân biệt được với các đối tượng khác


<i>Ví dụ. Nhân viên là một thực thể, cácdự án là các thực thể</i>


<i>Thuộc tính: Trong CSDL các thực thể được mơ tả bởi một tập các thuộc</i>
tính. Ví dụ: một thực thể nhân viên được mô tả bởi Manv, hoten, tuoi,
chungminhthu, bacluong, diachi, sodt.


<i>Tập thực thể: Là một tập hợp các thực thể cùng kiểu, nghĩa là cùng được thể</i>
hiện bởi một tập các thuộc tính. Ví dụ: tập tất cả các nhân viên của một công ty,
tập tất cả sinh viên của một trường cao đẳng


<i>Kiểu thực thể: Một tập thực thể thường được tham chiếu đến bằng cách</i>
dùng tên. Ví dụ NHANVIEN. Như vậy tên NHANVIEN vừa là tên của một tập
thực thể đồng thời có thể coi là tên chỉ một kiểu thực thể


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

này. Như vậy một lược đồ kiểu thức thể xác định tên kiểu thực thể, tên và ngữ
nghĩa của mỗi thuộc tính và mọi ràng buộc mà các thực thể thuộc kiểu đó phải
tuân theo. Nếu coi lược đồ của kiểu thực thể là nội hàm của kiểu thực thể thì tập
thực thể tại một thời điểm là một ngoại diên của nó.



<i>Các kiểu thuộc tính</i>


- Thuộc tính đơn và thuộc tính phức hợp: Thuộc tính đơn là thuộc tính
khơng phân chia được thành những thành phần nhỏ hơn (bacluong), thuộc tính
phức hợp là các thuộc tính có thể phân chia thành các phần nhỏ hơn(hoten: Ho,
tendem,Ten)


- Thuộc tính đơn trị và thuộc tính đa tri: Thuộc tính đơn trị là thuộc tính có
một giá trị duy nhất cho một thực thể cụ thể (luong), thuộc tính đa trị là thuộc
tính có thể có một tập hợp các giá trị cho cùng một thực thể (số điện thoại)


- Thuộc tính được lưu trữ (ngaysinh), thuộc tính được suy diễn (tuoi)


- Giá trị Null: được sử dụng khi một thực thể khơng có, hoặc chưa có giá trị
cho một thuộc tính


Khố: Một thuộc tính hay một tập con các thuộc tính mà giá trị của nó xác
định duy nhất mỗi thực thể trong tập thực thể được gọi là một khoá đối với tập
thực thể này


<b>2.1.1.2 Tập liên kết </b>


<i>Liên kết: Một liên kết là một sự kết hợp của một số thực thể. </i>


Ví dụ:liên kết “làm việc cho” kết hợp một thực thể nhân viên với một thực
thể Phòng. Chẳng hạn nhân viên e1,e2 làm việc cho phòng d1, nhân viên e3 làm
việc cho phòng d4,…các liên kết đó có cùng một kiểu.


<i>Một tập liên kết là một tập các liên kết cùng kiểu</i>



Một kiểu liên kết R giữa n kiểu thực thể E1, E2,…, En xác định một tập liên
kết giữa các thực thể thuộc các kiểu thực thể E1, E2,…, En. Một kiểu liên kết và
một tập liên kết tương ứng với nó cũng được dùng chung tên R.


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

của tích Decac E1xE2x….xEn. Chúng ta nói rằng các kiểu thực thể E1, E2,… En
tham gia vào kiểu liên kết R và mỗi riêng biệt e1, e2,…,en tham gia vào liên kết
ri=(e1,e2,…,en). Ví dụ r1=(e1,d1), r2=(e2,d1), r3=(e3,d4),…


Một kiểu liên kết có thể có những thuộc tính mơ tả nó. Ví dụ: Kiểu liên kết
“GỬI TIỀN” giữa kiểu thực thể KHACHHANG và kiểu thực thể TAIKHOAN
cần có thuộc tính NgayTruyCap để ghi nhận lần cuối cùng (ngày gần nhất) khách
hàng truy cập vào tài khoản này.


Cấp của một kiểu liên kết: là số các kiểu thực thể tham gia kiểu liên kết đó.
Hầu hết các kiểu liên kết là cấp 2


<b> Các ràng buộc trên các kiểu liên kết </b>


Trên các kiểu liên kết thường có những ràng buộc nhằm hạn chế số các tổ
hợp có thể của các thực thể tham gia kiểu liên kết. Ràng buộc trên một kiểu liên
kết được xác định theo hiện trạng của thế giới thực mà liên kết này biểu diễn. Có
hai ràng buộc trên kiểu liên kết, đó là ràng buộc về tỷ số lực lượng và ràng buộc
về sự tham gia.


- Ràng buộc về tỷ số lực lượng


Tỷ số lực lượng của một kiểu liên kết cấp hai cho biết số các liên kết ( của
kiểu liên kết này) mà một thực thể có thể tham gia vào. Ví dụ trong kiểu liên kết
cấp hai “ LÀM VIỆC CHO” giữa kiểu thực thể NHÂN VIÊN với kiểu thực thể


PHÒNG là tỷ số N:1. ý nghĩa: Một thực thể phòng có thể liên kết với nhiều thực
thể nhân viên theo kiểu liên kết này( một phịng có thể có nhiều nhân viên làm
việc cho nó), nhưng một thực thể nhân viên chỉ liên kết với một thực thể phòng
(Một nhân viên chỉ làm việc tại một phòng)


Các tỷ số lự lượng trên một kiểu liên kết cấp hai có thể gặp là: 1:1,1:N và
N:M. Ví dụ: Xét kiểu liên kết “LÀM VIỆC VỚI” giữa NHÂN VIÊN và DỰ ÁN,
tỷ số của kiểu liên kết này là N:M (Một nhân viên làm việc với nhiều dự án, và
một dự án do nhiều nhân viên đảm nhận)


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Tỷ số lực lượng và các ràng buộc về sự tham gia còn gọi chung là Các ràng
buộc cấu trúc của một kiểu kiên kết. Có một cách khác nữa để đặc tả các ràng
buộc cấu trúc. Với mỗi kiểu liên kết R, chúng ta có thể đưa ra cặp số nguyên
(min, max) với (0≤min và max ≥ 1, mang ý nghĩa như sau: ở mọi thời điểm , mỗi
thực thể e thuộc kiểu E phải tham gia ít nhất min liên kết trong R và chỉ tham gia
nhiều nhất max liên kết trong R. Như vậy nếu E tham gia bộ phận vào R thì
min=0, tham gia tồn bộ thì min>0, thường lấy min=1


<i>Thực thể yếu</i>


Có những kiểu thực thể mà khơng có bất cứ một tập thuộc tính nào tạo
thành khố cho nó. Điều đó có nghĩa là chúng ta sẽ không biệt được hai thực thể
thuộc kiểu này nếu chỉ dựa vào các tổ hợp giá trị các thuộc tính của chúng. Một
kiểu thực thể như vậy được gọi là kiểu thực thể yếu. Một kiểu thực thể có khoá
được gọi là kiểu thực thể mạnh. Các thực thể thuộc cùng một kiểu thực thể yếu
được phân biệt với nhau nhờ mối liên quan đến một thực thể (xác định ) của một
kiểu thực thể khác.


2.1.2 Sơ đồ thực thể liên kết:



Việc tóm tắt những thơng tin cần lưu trứ trong một cơ sở dữ liệu đối với một
thiết kế sử dụng các sơ đồ Ẻ là rất có ích. Trong sơ đồ Ẻ chúng ta sử dụng những
ký hiệu sau để biểu diễn các thành phần của sơ đồ:


Kiểu thực thể


Kiểu liên kết


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

Thuộc tính phức hợp


Thuộc tính suy dẫn được


Sự tham gia toàn bộ của E 2


vào kiểu liên kết R
1 N Tỷ số lực lượng E1:E2 là 1:N


Min,max Ràng buộc cấu trúc(min,max)
của kiểu thực thể E trong
sự tham gia vào kiểu liên kết R


Sơ đồ thực thể liên kết gồm 3 phần:


+ Thực thể + Thuộc tính + Liên kết


Ví dụ sơ đồ E-R cho CSDL QLNS gồm NHANVIEN(HoTen, DT, Luong),
PHONG(TenPhong, Vitri), NGUOIQUANLY(Hoten). NHANVIEN và PHONG
có quan hệ với nhau bởi liên kết SAPXEPVAO, PHONG và NGUOIQUANLY
có quan hệ với nhau bởi liên kết QUANLY



<b>2.2. Mơ hình dữ liệu quan hệ (Relational data model)</b>
<b>2.2.1. Các khái niệm cơ bản</b>


<b>2.2.1.1 Miền: Một miền D là một tập hợp các giá trị nguyên tố, hiểu theo</b>
nghĩa mỗi giá trị trong miền không thể phân chia trong phạm vi mơ hình quan hệ.
Để đặc tả một miền người ta chỉ ra một tên miền, một kiểu dữ liệu và khuôn
dạng dữ liệu


<b>2.2.1.2 Thuộc tính: Mỗi đối tượng quản lý đều có những đặc tính riêng</b>
biệt. Các đặc tính riêng biệt này được gọi là các thuộc tính. Tương ứng với mỗi
thuộc tính có một miền. Ví dụ, mỗi sinh viên đều có mã sinh viên, họ và tên, quê


R


E1 E2


R


E1 E2


R


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<i><b>quán, năm sinh. Các thuộc tính của một đối tượng được phân biệt với nhau qua</b></i>
tên của chúng. Trong thực tế, các nhà phân tích - thiết kế thường đặt tên thuộc
tính mang tính gợi nhớ. Trong giáo trình này khi khơng cần quan tâm đến ngữ
nghĩa ta thường ký hiệu tên các thuộc tính bởi các chữ cái hoa ở đầu bảng chữ cái
A, B, C, ...


<b>2.2.1.3 Quan hệ: Một quan hệ trên một tập các thuộc tính là một tập con của</b>
tích đề các của một hay nhiều miền



Một quan hệ r với tập thuộc tính U = {A1, A2,..., An} là tập con của tích đề
các dom(A<i>1) </i><i> dom(A2) </i><i> .... </i><i> dom(An), trong đó dom(Ai) là miền trị của thuộc</i>


tính Ai, là tập các giá trị có thể của thuộc tính đó. Như vậy quan hệ r là một tập
hợp n_bộ có dạng:


r= {(a1, a2,..., an) ai  Dom(Ai), i=1,2,…,n}.
Khi đó ta ký hiệu r(U) hoặc r(A1, A2,..., An)


Một quan hệ có thể biểu diễn dưới dạng một bảng, mỗi dòng biểu diễn một
bộ của quan hệ, mỗi cột biểu diễn một thành phần (một thuộc tính) của các bộ
trong quan hệ


Trong mơ hình quan hệ khơng cho phép có các thuộc tính phức hợp hay các
thuộc tính đa trị: các thuộc tính đa trị phải được biểu diễn bằng các quan hệ, cịn
các thuộc tính phức hợp chỉ đuợc biểu diễn bằng các thuộc tính thành phần đơn
của nó ( điều kiện để đạt dạng chuẩn 1: First normal form).


Giá trị null: Giá trị của một bộ tại một số thuộc tính nào đó chưa biết hoặc là
chưa có thì dùng null


Trong một quan hệ khơng có hai bộ bằng nhau trên mọi thuộc tính


<b>2.2.1.4 Lược đồ quan hệ: Một lược đồ quan hệ R là một cặp có thứ tự</b>
R=<U,F> trong đó U là tập hữu hạn các thuộc tính của quan hệ, F là tập các điều
kiện giữa các thuộc tính (F cịn được gọi là tập các ràng buộc tồn vẹn)


Ví dụ: Quan hệ TKB với tập thuộc tính U={Ngay, Tiet, Mon, Phong, Giaovien)
có dạng:



<i>Ngay</i> <i>Tiet</i> <i>Mơn</i> <i>Phịng</i> <i>Giaovien</i>


4/9 1 Cơ sở dữ liệu 214 Nguyễn Siêu


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

. . .


Các ràng buộc toàn vẹn:


- Miền của thuộc tính tiết là từ 1 đến 12


- Vào một tiết của một ngày, một giáo viên cụ thể chỉ xuâấthiện tại nhiều
nhất một phịng


Khi nói đến một lược đồ quan hệ trong đó chỉ tập trung vào khía cạnh mô tả
cấu trúc của một quan hệ mà không quan tâm đến các ràng buộc ta sẽ dùng ký
hiệu là R(U) hay R(A1 , A2,..., An).


Ta cũng dùng ký hiệu r(R) để chỉ một quan hệ r của một lược đồ R


Với một bộ t thuộc quan hệ r của lược đồ R và X  U, ta ký hiệu t[X] là bộ


t chỉ chứa các giá trị của các thuộc tính trong X ( hạn chế của bộ t trên X) và
dùng ký hiệu t[Ai] để chỉ giá trị của bộ t tưong ứng với thuộc tính Ai.


Một quan hệ r định nghĩa trên lược đồ quan hệ R(U) là một thể hiện của lược
đồ quan hệ R ở một thời điểm nào đó.


<i><b>Nhận xét: Về mặt trực quan, một quan hệ có thể xem như 1 bảng gồm các</b></i>
<i>cột (thuộc tính) và các dịng (bộ). </i>



Một lược đồ CSDL quan hệ là một tập các lược đồ quan hệ S={R1,R2,
…,Rn}


Để tiện cho việc trình bày, trong giáo trình này ta đưa ra một số quy định về
cách viết sau đây:


- Các thuộc tính: Ký hiệu bằng các chữ La tinh hoa: A, B, C,... đầu bảng chữ
cái


- Tập các thuộc tính: Ký hiệu bằng các chữ cái La tinh hoa ở cuối bảng chữ
cái: X,Y, Z,...


- Các thuộc tính trong tập thuộc tính được liệt kê như một xâu ký tự, khơng
có dấu tập hợp {}


Ví dụ: X={A,B,C}  A,B,C  ABC


- XY biểu diễn hợp của hai tập thuộc tính X và Y


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<i><b>Siêu khoá: Cho quan hệ r định nghĩa trên lược đồ R với tập thuộc tính</b></i>
U=[A1,...,An]. Tập K  U được gọi là siêu khoá của r (hoặc của R) nếu với mọi
t1, t2  r , t1  t2 thì t1[K]  t2[K]. (t1[K]t2[K] nghĩa là tồn tại A  K sao cho
t1[A]  t2[A]).


Nói cách khác một tập con K  U được gọi là siêu khoá của lược đồ quan


hệ R nếu K có tính chất xác định duy nhất một bộ trong mỗi thể hiện của R
* Một lược đồ quan hệ R ln có ít nhất một siêu khố và có thể có nhiều
<i>siêu khố. Trong trường hợp xấu nhất, siêu khóa là tồn bộ tập U.</i>



Ví dụ: Với lược đồ quan hệ SINHVIEN(MaSV, Hoten, QQ, NS) có các
siêu khố:


K1={MaSV}


K2={MaSV, Hoten}, …


Ý nghĩa thực tiễn của siêu khoá là dùng để nhận diện một bộ trong quan hệ,
nghĩa là khi cần tìm kiếm một bộ t của quan hệ r ta chỉ cần biết giá trị các thành
phần của siêu khoá là đủ. Tuy nhiên, nếu K  U là siêu khoá của r và K  K1
U thì K1 cũng là siêu khố của r. Vì vậy vấn đề đặt ra là cần lựa chọn một siêu
khố nhỏ nhất (có ít thuộc tính nhất) để có thể giảm bớt chi phí tìm kiếm.


<i><b>Khố: Cho lược đồ quan hệ R với tập thuộc tính U = [ A</b></i>1,..., An ]. Tập KU
được gọi là khoá của R nếu:


1. K là siêu khoá của R


2. Với mọi K'  K thì K' khơng phải là siêu khố của R.


Nói cách khác Khố của một lược đồ quan hệ là một siêu khoá của lược đồ
này sao cho mọi tập con thực sự của nó khơng là siêu khố


Một lược đồ quan hệ R có ít nhất một khố, trong trường hợp xấu nhất khố
là tồn bộ tập thuộc tính U.


Ví dụ: Với lược đồ quan hệ SINHVIEN(MaSV, Hoten, QQ, NS) ta có khố
K={MaSV}.



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<i><b>Khố ngồi: Một tập K được gọi là khố ngồi của lược đồ quan hệ R nếu</b></i>
nó khơng phải là khố của R nhưng nó lại là khố của một lược đồ quan hệ khác.


Một CSDL có nhiều lược đồ quan hệ sẽ thường có nhiều khố ngồi để biểu
diễn các mối liên kết giữa các quan hệ, ta gọi các mối liên kết này là các ràng
<i>buộc toàn vẹn tham chiếu</i>


u cầu giá trị các thuộc tính trong khố chính phải khác giá trị null. Một
CSDL phải thoả mãn điều đó và ta nói rằng đây là ràng buộc tồn vẹn thức thể


Các ràng buộc mà một thuộc tính phải thoả mãn thường đuợc gọi là ràng
<i>buộc toàn vẹn ngữ nghĩa, ví dụ: Mức lương tối đa của GVC là 7.0 hay lương</i>
nhân viên không được cao hơn lương thủ trưởng


Các thuộc tính tham gia vào một khố được gọi là thuộc tính khố, ngược
lại gọi là thuộc tính khơng khố


<b>2.2 Các thao tác cập nhật dữ liệu trên các quan hệ</b>


Các thao tác cơ bản ( hay cịn gọi là các phép tốn cơ bản ) trên các quan hệ
có thể chia làm hai loại: các phép tốn cập nhật và các phép tốn tìm kiếm thơng
tin


Có ba phép cập nhật cơ bản, đó là: thêm (Insert), xoá(Delete), sửa
đổi(Update). Một khi thực hiện các phép cập nhật một số ràng buộc trên lược đồ
CSDL có thể bị vi phạm.


<i><b>a) Phép thêm bộ: (INSERT)</b></i>


Phép thêm bộ dùng để thêm một bộ mới vào một quan hệ cho trước, được


định nghĩa như sau:


Cho quan hệ r trên tập thuộc tính U={A1,..., An}. Phép thêm bộ t vào quan
hệ r có dạng r= rt.


Ta viết INSERT( r ; A1=a1, A2=a2,... , An =an) , trong đó ai  dom (Ai)


Nếu xem thứ tự của các thuộc tính là cố định, khi đó ta có thể viết đơn giản
INSERT( r; a1, a2 , ... , an)


Ví dụ: Thêm bộ t=('01', 'Nguyễn Ngọc Anh', 'Hải Dương', 1972) vào quan
hệ SINHVIEN, ta viết:


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

hoặc INSERT(SINHVIEN; '01', 'Nguyễn Ngọc Anh', 'Hải Dương', 1972)
<i><b>b) Phép xoá (DELETE)</b></i>


Phép xoá dùng để xoá một bộ khỏi một quan hệ. Phép xoá bộ t khỏi quan
hệ r (U) có dạng r = r - t.


Ta viết DELETE (r ; A1=a1, A2=a2,..., An=an)
Hoặc DELETE (r ; a1, a2 , ..., an)


Trong trường hợp biết được khoá K của quan hệ r là tập {B1, ..., Bm} ta chỉ
cần viết DELETE (r; B1= b1, B2= b2, ..., Bm=bm)


Ví dụ: Xố bộ t=('01', 'Nguyễn Ngọc Anh', 'Hải Dương', 1972) trong quan
hệ SINHVIEN, ta viết:


DELETE ( SINHVIEN;MaSV='01', Hoten='Nguyễn Ngọc Anh', QQ='Hải
Dương', NS=1972)



<i><b>c) Phép sửa đổi (Update)</b></i>


Phép sửa đổi cho phép ta thay đổi giá trị một số thuộc tính của một bộ trong
một quan hệ cho trước. Phép sửa đổi được định nghĩa như sau:


Cho quan hệ r (U); U={A1, ..., An}. Tập C = {C1 , ..., C p}  U là tập các
thuộc tính mà tại đó các giá trị của bộ cần thay đổi. Khi đó phép thay đổi có
dạng r =r \ t  t'.


Ta viết: MODIFY(r; A1=a1,A2=a2 , ..., An=an; C1=c1,C2=c2,...,Cp =cp).
Nếu K={B1, ..., Bm} là khố của r. Khi đó ta chỉ cần viết


MODIFY(r; B1=b1,B2=b2, ..., Bm=bm; C1=c1,C2=c2, ...,Cp =cp)


Ví dụ: Sửa năm sinh của bộ t=('01', 'Nguyễn Ngọc Anh', 'Hải Dương', 1972)
trong quan hệ SINHVIEN thành 1971 ta viết:


MODIFY(SINHVIEN;MaSV='01',Hoten='Nguyễn Ngọc Anh', QQ='Hải
Dương', NS=1972; NS =1971)


Hoặc MODYFY(SINHVIEN; MaSV='01'; NS=1971).
<b>2.3. Mơ hình dữ liệu mạng ( tự đọc tài liệu)</b>


<b>2.4 Mơ hình dữ liệu phân cấp ( tự đọc tài liệu)</b>


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

<b>Chương III NGÔN NGỮ ĐỊNH NGHĨA VÀ THAO TÁC DỮ LIỆU</b>
<b>ĐỐI VỚI MƠ HÌNH QUAN HỆ</b>


Trong chương này, chúng ta sẽ tìm hiểu về các ngơn ngữ cho phép định nghĩa


các đối tượng của một CSDL và biểu diễn các yêu cầu (truy vấn) trên CSDL đó
mà một hệ quản trị CSDL có thể hỗ trợ. Các khía cạnh không truy vấn của một
ngôn ngữ thao tác dữ liệu quan hệ liên quan đến các thao tác thêm , xóa, sửa đỏi
các bộ thường khơng phức tạp. Vì vậy các ngôn ngữ thao tác dữ liệu trước đây
đôi khi cịn đuợc gọi là ngơn ngữ truy vấn. Các ngơn ngữ truy vấn đối với mơ
hình quan hệ được chia thành hai lớp: Các ngôn ngữ đại số và các ngơn ngữ tính
tốn vị từ.


<b>I. NGƠN NGỮ ĐẠI SỐ QUAN HỆ </b>


Ngôn ngữ đại số quan hệ là cơ sở quan trọng của một ngôn ngữ bậc cao
được sử dụng để thao tác trên các quan hệ. Với dữ liệu được lưu trữ là những
quan hệ nào đó, có thể sử dụng các phép toán của đại số quan hệ để tạo ra quan
hệ mới, quan hệ mới này là thông tin trả ra theo yêu cầu của người dùng. Các
phép toán của đại số quan hệ thường được chia thành hai nhóm. Nhóm thứ nhất
gồm các phép tốn tập hợp ( Phép hợp, Phép giao, Phép trừ, Phép tích đề các).
Nhóm thứ hai gồm các phép tốn đặc biệt trên quan hệ ( Phép chọn, Phép chiếu, ,
Phép kết nối, Phép chia các quan hệ).


<b>1.1 Các phép toán tập hợp </b>


Định nghĩa: Cho hai quan hệ r và s, r và s được gọi là khả hợp nếu chúng
được xác định trên cùng tập thuộc tính và các thuộc tính cùng tên có cùng miền
giá trị. Các phép tốn hợp, giao và hiệu các quan hệ được định nghĩa trên các
quan hệ khả hợp


<b>a. Phép hợp (Union)</b>


Định nghĩa: Hợp của hai quan hệ khả hợp r(U) và s(U) là một quan hệ, ký
hiệu là r  s, với tập thuộc tính U và các bộ là các bộ thuộc ít nhất một trong hai



quan hệ đó.


Ta viết r  s = { t | t  r hoặc t  s ) }


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

Định nghĩa: Giao của hai quan hệ khả hợp r(U) và s(U) là một quan hệ, ký
hiệu là r  s, với tập thuộc tính U và các bộ là các bộ đồng thời thuộc cả hai


quan hệ đó


Ta viết r  s = {t | tr và t  s}


<b>c. Phép trừ (Minus)</b>


Định nghĩa: Hiệu của quan hệ r(U) trừ quan hệ s(U) là một quan hệ, ký
hiệu là r – s, với tập thuộc tính U và các bộ là các bộ có mặt trong r nhưng khơng
có mặt trong s. Ta viết r - s = {t | tr và t s}


<b>d. Phép tích Đề các (Cartesian product)</b>


Định nghĩa: Cho hai quan hệ r(U) và s(V), với U= A1, ..., An , V= B1, ...,
Bm. Tích Đề các của r và s là một quan hệ, ký hiệu là r x s, là tập tất cả các
(n+m) bộ sao cho mỗi bộ này có n thành phần đầu làm thành một bộ thuộc r và m
thành phần sau làm thành một bộ thuộc s. Ta viết:


r  s = {t| t= (a1 , ..., an , b1, ..., bm )| (a1 , ..., an )  r và (b1 , ..., bm ) s}


<i><b>Nhận xét:</b></i> Nếu quan hệ r có p bộ và quan hệ s có q bộ thì quan hệ kết quả r


 s có p  q bộ.



<i><b>1.2 Các phép toán đặc biệt trên quan hệ</b></i>
<i><b>a. Phép chọn: (Selection)</b></i>


Phép chọn là phép toán lọc ra một tập con các bộ của quan hệ đã cho thoả
mãn một điều kiện xác dịnh. Điều kiện đó được gọi là điều kiện chọn hay biểu
thức chọn.


Biểu thức chọn E được định nghĩa là 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 hai biến là hai thuộc tính hoặc
giữa một biến là một thuộc tính và một giá trị hằng. Biểu thức chọn E cho giá tri
đúng hoặc sai đối với mỗi bộ đã cho của quan hệ khi kiểm tra riêng bộ đó. Các
phép so sánh trong biểu thức E là: =, >, ≥ , <, ≤, . Các phép toán logic trong


biểu thức E là:  (và),  (hoặc),  (phủ định)


<b>Định nghĩa 1: Cho quan hệ r trên tập thuộc tính U, E là một biểu thức</b>
logic phát biểu trên U. Ta nói rằng bộ t <i><b> r thoả mãn biểu thức E nếu thay mọi</b></i>


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

thức logic mệnh đề đúng. E được gọi là điều kiện chọn (hay biểu thức chọn ) của
quan hệ r trên tập thuộc tính U.


Ví dụ : Cho quan hệ SINHVIEN(MaSV, Hoten, QQ, NS).


Khi đó bộ t = <MASV='01', HOTEN ='Lê Anh', QQ ='Nghệ An', NS =
1960 >  SINHVIEN thoả mãn biểu thức E : (NS < 1970)  (QQ ='Nghệ An')


<b>Định nghĩa 2: Cho quan hệ r(U) và biểu thức chọn E phát biểu trên U.</b>
Phép chọn trên quan hệ r, theo điều kiện E cho ta một quan hệ mới, ký hiệu là



E(r), với tập thuộc tính U và các bộ là các bộ của r thoả mãn điều kiện E.


Ta viết : E(r) = {t  r | E(t) = đúng}, ở đây E(t) là giá trị của biểu thức
E khi thay thế mọi thuộc tính A có mặt trong E của t bởi t[A].


Ví dụ: Cho thơng tin về những sinh viên sinh trước năm 1972, quê ở 'Nghệ
An' trong quan hệ SINHVIEN.


Ta viết  (NS<1972)(QQ='Nghệ An')(SINHVIEN)
Khi đó nếu quan hệ SINHVIEN là


<i>MaSV</i> <i>Hoten</i> <i>QQ</i> <i>NS</i>


01 Lê Anh Nghệ An 1970


03 Thu Hà Hải phòng 1972


04 Hữu Thắng Nghệ An 1975


05 Hồng Sơn Hà Nội 1972


06 Huỳnh Đức TP Hồ Chí Minh 1974


07 Sỹ Hùng Nghệ An 1971


Kết quả phép chọn trên cho ta quan hệ


<i>MaSV</i> <i>Hoten</i> <i>QQ</i> <i>NS</i>


01 Lê Anh Nghệ An 1970



07 Sỹ Hùng Nghệ An 1971


* Thực chất của phép chọn theo điều kiện E là chọn ra từ một quan hệ r một
số bộ thoả mãn điều kiện E cho trước.


<i><b>b. Phép chiếu : (Projection)</b></i>


<b>Định nghĩa: Cho quan hệ r trên tập thuộc tính U={A</b>1, ..., An} và tập thuộc
tính X U. Phép chiếu quan hệ r trên tập thuộc tính X cho ta một quan hệ, ký


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

Ta viết x(r) = {t[ X] | t  r }.


Chú ý: Vì quan hệ được định nghĩa như tập các bộ nên trong quan hệ khơng
thể có hai bộ giống nhau hồn tồn. Do đó sau khi chiếu có thể xảy ra hiện tượng
có các bộ trùng nhau. Vì vậy ta có thể xác định x(r), theo hai bước


Bước 1: Lấy từ r các bộ t[X]


Bước 2: Loại bỏ các bộ giống nhau, chỉ trừ lại một bộ trong số các bộ giống
nhau.


Ví dụ 1: Cho xem thông tin về Hoten, QQ của các sinh viên trong quan hệ
<b>SINHVIEN</b>(MaSV, Hoten, QQ, NS).


<i>MaSV</i> <i>Hoten</i> <i>QQ</i> <i>NS</i>


01 Lê Anh Nghệ An 1970


02 Trần Trung Hà nội 1975



03 Thu Hà Hải phòng 1972


04 Hữu Thắng Nghệ An 1975


05 Hồng Sơn Hà Nội 1972


06 Huỳnh Đức TP Hồ Chí Minh 1974


07 Sỹ Hùng Nghệ An 1971


Khi đó ta viết {Hoten, QQ}(SINHVIEN) và kết quả ta được quan hệ mới sau


<i>Hoten</i> <i>QQ</i>


Lê Anh Nghệ An


Trần Trung Hà nội


Thu Hà Hải phòng


Hữu Thắng Nghệ An


Hồng Sơn Hà Nội


Huỳnh Đức TP Hồ Chí Minh


Sỹ Hùng Nghệ An


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

Trả lời:  QQ (SINHVIEN) và ta được kết quả



<i>QQ</i>
Nghệ An
Hải phịng
Hà Nội


TP Hồ Chí Minh


<b>c. Phép kết nối (Join)</b>


Cho quan hệ r xác định trên tập thuộc tính {A1,A2,…,An} và quan hệ s xác
định trên tập thuộc tính {B1,B2,…,Bm}


<i>Khái niệm xếp cạnh nhau (phép ghép bộ): Cho bộ u=(a1,a2,…,an) và bộ v=</i>
(b1,b2,…,bm). Xếp cạnh nhau của u và v, ký hiệu là (u,v) được xác định như
sau: (u,v)=( a1,a2,…,an, b1,b2,…,bm).


Phép kết nối hai quan hệ thực chất là phép ghép các cặp bộ của hai quan hệ
thoả mãn một điều kiện nào đó trên chúng. Điều kiện đó được gọi là điều kiện kết
nối hay biểu thức kết nối.


Biểu thức kết nối được định nghĩa là phép hội 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 một thuộc tính của quan hệ r và một
thuộc tính của quan hệ s.


Phép kết nối của quan hệ r với quan hệ s với biểu thức kết nối F được định
nghĩa như sau:


r s = { t| t=(u,v)  u  r  v  s  F(t)= đúng}



F


Tất nhiên ở đây cần giả thiết rằng các phép so sánh của các cặp thuộc tính
thuộc hai quan hệ là có nghĩa, hay mỗi giá trị của thuộc tính này có thể so sánh
được với mỗi giá trị của thuộc tính kia.


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

ký hiệu * . Phép kết nối tự nhiên của hai quan hệ có thể được định nghĩa như sau:
r(U) * s(V) = { t, t=(u,v)[U V]| t[U] r  t[V] s }.


Ví dụ 1: Cho hai quan hệ r và s như sau:
r(


A


B <b>C</b> D) <b>s(E</b> K H)


a1 b1 <b>1</b> d1 <b>1</b> k1 h1


a2 b2 <b>5</b> d2 <b>2</b> k2 h2


a3 b3 <b>3</b> d3 <b>4</b> k3 h3


a4 b4 <b>1</b> d4 <b>3</b> k4 h4


Kết nối quan hệ r với s theo điều kiện C > E ta có
r s


r s(A B C D E K H)


a2 b2 5 d2 1 k1 h1



a2 b2 5 d2 2 k2 h2


a2 b2 5 d2 4 k3 h3


a2 b2 5 d2 3 k4 h4


a3 b3 3 d3 1 k1 h1


a3 b3 3 d3 2 k2 h2


Ví dụ 2: Cho hai quan hệ r và s như sau:
r(


A


B C D) s(C E F)


a1 b1 1 d1 1 e1 f1


a2 b2 5 d2 2 e2 f2


a3 b3 3 d3 4 e3 f3


a4 b4 1 d4 3 e4 f4


Kết nối tự nhiên hai quan hệ r và s theo thuộc tính C ta có


<b>r * s ( A</b> B <b>C</b> D E F)



a1 b1 <b>1</b> d1 e1 f1


a4 b4 <b>1</b> d4 e1 f1


C > E


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

a3 b3 <b>3</b> d3 e4 f4


<i><b>Nhận xét: Phép kết nối quan hệ r và quan hệ s có thể được thực hiện theo</b></i>
các bước sau:


- Lấy tích đề các của r và s


- Thực hiện phép chọn theo điều kiện F
<b>e. Phép chia (Division)</b>


<b>Định nghĩa: Cho hai quan hệ r(U) và s(V) với U </b> V và s . Đặt X=U \


V. Phép chia quan hệ r cho quan hệ s là một quan hệ, ký kiệu là r  s, với tập


thuộc tính X, là tập tất cả các bộ t sao cho với mọi bộ v  s thì t ghép với v thuộc


r. Ta viết r  s ={ t|  v  s  (t,v)  r }


Ví dụ: Cho hai quan hệ r và s như sau:
r(


A


B C D) s ( B C)



a1 b1 1 d1 b1 1


a1 b2 2 d1 b2 2


a2 b3 3 d3 b3 3


a4 b1 1 d2


a1 b3 3 d1


a2 b3 1 d3


a4 b3 3 d2


a4 b2 2 d2


a2 b1 3 d3


Phép chia quan hệ r cho s cho ta quan hệ
r  s


( A


D)


a1 d1


a4 d2



<b>Bài tập: Trang 66, Nguyên lý của các hệ CSDL- Nguyễn Kim Anh</b>
<b> 1.3 Các phép toán quan hệ bổ sung </b>


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

<i>CSDL quan hệ được thương mại hố đã có những phép tốn bổ sung để thực hiện</i>
những truy vấn như vậy.


a. Các hàm kết tập: SUM, AVERAGE, MAX, MIN, COUNT
b. Các phép gộp nhóm


Có một kiểu yêu cầu khác nữât hay gặp mà cũng khơng thể hiện được trong
đại số quan hệ. Đó là yêu cầu nhóm các bộ trong một quan hệ theo một giá trị của
một số thuộc tính của chúng và sau đó áp dụng các hàm kết tập trên từng nhóm
một cách độc lập


Ví dụ Nhóm các bộ của quan hệ nhân viên theo MA_PHONG, sau đó có thể
đưa ra thơng tin: đối với mỗi phịng có bao nhiêu nhân viên, trung bình lương của
các nhân viên trong mỗi phịng,…


Có thể định nghĩa một phép gộp nhóm như sau:


<các thuộc tính cơ sở để gộp nhóm> f <danh sách các hàm kết tập> (r)
Trong đó f là ký hiệu của phép gộp nhóm, <các thuộc tính cơ sở để gộp
nhóm> là danh sach các thuộc tính của quan hệ r, <danh sách các hàm kết tập> là
danh sách các cặp(<hàm> <thuộc tính>). Kết quả của phép gộp nhóm là một
quan hệ. Ngồi các thuộc tính cơ sở để gộp nhóm, quan hệ kết quả cịn có các
thuộc tính tương ứng với các phần tử trong danh sách hàm kết tập. Ví dụ:


MA_PHONG

f

count MANV, Average LUONG (NHAN_VIEN)


Quan hệ kết quả sẽ gồm các thuộc tính MA_PHONG,COUNT_MANV,


AVERAGE_LUONG


Nếu danh sách các thuộc tính gộp nhóm là rỗng thì các hàm kết tập được áp
dụng cho các giá trị thuộc tính của tất cả các bộ trong quan hệ. Khi đó quan hệ
kết quả chỉ có một bộ.Ví dụ:


f

count MANV, Average LUONG (NHAN_VIEN)


quan hệ kết quả sẽ gồm các thuộc tính COUNT_MANV, AVERAGE_LUONG


COUNT_MANV AVERAGE_LUONG


10 2 100 000


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

<b>II. Ngôn ngữ tân từ ( Các phép tính quan hệ )</b>


Đại số quan hệ cung cấp một tập các phép toán và ta sử dụng chúng để chỉ
ra cho hệ thống biết làm thế nào để từ những quan hệ đang có xây dựng nên
những quan hệ ta muốn có. Trong khi đó, các phép tính quan hệ lại chỉ cung cấp
những ký hiệu để phát biểu định nghĩa quan hệ ta muốn có theo các quan hệ
đang có. Ngôn ngữ SQL (giới thiệu sau) được xây dựng dự trên các khíâ cạch của
phép tính quan hệ. Có hai cách áp dụng các phép tính tân từ vào ngơn ngữ truy
vấn cơ sở dữ liệu quan hệ


<b>2.1 Ngôn ngữ tân từ ( thường gọi là vị từ) biến bộ</b>


Ngôn ngữ tân từ biến bộ dựa trên sự đặc tả các biến bộ. Miền trị của của
mỗi biến bộ là một quan hệ cụ thể của CSDL, nói cách khác mỗi giá trị mag biến
bộ có thể nhận là một bộ nào đó trong quan hệ này.



a) Định nghĩa hình thức: Một câu hỏi trong ngơn ngữ tân từ có dạng {t|
ĐK(t)}. Với t là biến bộ và ĐK(t) là một biểu thức điều kiện có chứa biến t. Kết
quả tra ra cho câu hỏi là tập tất cả các bộ t làm cho ĐK(t) được thoả.


Ví dụ: Cho biết danh sách nhân viên có lương trên 1 500 000
{t|NHANVIEN(t) and t.LUONG>1 500 00}


Mỗi bộ trong kết quả được trả ra với tất cả các thuộc tính, nếu chỉ cần đưa
ra một số thuộc tính thì liệt kê chúng ra:


{t.HoTen,T.QueQuan, T.namSinh | NHANVIEN(t) and t.LUONG>1 500 00}
b) Biểu thức của phép tính biến bộ


Trong định nghĩa trên, ĐK(t) được gọi là cơng thức của phép tính biến bộ.
Cơng thức của phép tính biến bộ được tạo nên từ các công thức nguyên tố. Mỗi
công thức nguyên tố thuộc một trong những dạng sau:


- r(t): là một công thức nguyên tố, r là quan hệ,t là biến bộ. Nói cách khác
đó là phát biểu tr.


- ti.A  tj.B với  là một trong các phép so sánh =, ≠,>, ≥ , <, ≤


- ti.A  c, c  ti.B trong đó c là hằng giá trị


</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

L1: Mỗi công thức nguyên tố là một công thức.


L2: Nếu F1, F2 là các cơng thức thì (F1  F2), (F1  F2 ), F1, F2, F1


F2 là các cơng thức



L3: Nếu F là cơng thức, thì  tr (F(t)),  t r (F(t)) cũng là công thức


c. Các ví dụ biểu diễn câu hỏi bằng ngơn ngữ tân từ biến bộ
<b>2.2 Ngôn ngữ tân từ biến miền</b>


III. NGÔN NGỮ SQL (STRUCTURED QUERY LANGUAGE )


Giới thiệu : SQL (Structured Query Language): là ngôn ngữ truy vấn do
IBM phát triển vào thập niên 70, được ANSI công nhận và phát triển thành một
chuẩn quốc tế (86).


- Khởi thuỷ được gọi là SEQUEL (Structured English QUEry Language)
Bản cài đặt đầu tiên:SYSTEM R của IBM (DB/2) vào 1978.


- Trở thành chuẩn ANSI và ISO vào 1986 (SQL-86)
- ANSI/ISO chỉnh lý đầu tiên vào 1989 (SQL-89)
- ANSI/ISO chỉnh lý lần 2 vào 1992 (SQL-92)


- Chuẩn mới (SQL-99) SQL được cài đặt trong hầu hết các hệ qủan trị
CSDL, cho phép :


+ Truy vấn CSDL
+ Cập nhật CSDL


+ Tạo, sửa, huỹ các đối tượng CSDL như :table, indexes, views,…
+ Kiểm soát việc truy xuất CSDL và các đối tượng CSDL.


<b>I - Truy vấn dữ liệu với câu lệnh Select:</b>
Cú pháp:



SELECT [DISTINCT|ALL] {*|[<bt cột> [ as <tên mới>],…}
FROM <Danh sách các bảng>


[WHERE <Điều kiện lọc bộ> ]


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

Công dụng: Tạo ra 1 quan hệ mới từ các quan hệ ghi sau từ khóa From.
Trong đó :


1. Các tham số sau SELECT


- DISTINCT|ALL: Chỉ giữ lại một bộ trong các bộ trùng nhau hoặc lấy tất
cả các bộ trùng nhau


- *: tất cả các cột của tất cả các bảng tham gia truy vấn (sau FROM). Ký
hiệu S.* chỉ mọi cột của bảng S


- bt cột: Tên 1 thuộc tính của quan hệ tham gia: [table].Field hoặc là một
<Biểu thức cột > As <tên mới>


+ Toán hạng trong bt cột: Hằng (số, text,ngày tháng…) hoặc tên cột, tên
hàm(SUM (cột số), AVG(cột số),…)


+ Toán tử số học như: ^, *, /, \ (chia nguyên) , MOD, +, - , các phép so sánh
<,<=,>,>=,=,<>, các phép toán logic AND, OR, NOT, các phép toán phạm vi IN,
BETWEEN, LIKE


- as <tên mới>: tên cột xuát hiện trong quan hệ kết quả của truy vấn, nếu
khơng có as dùng tên cột hoặc bt cột


2. Các tham số sau FROM



3. Các tham số sau WHERE : <điều kiện chọn các bộ> dùng các toán tử là
các phép so sánh, các phép toán logic, các phép toán phạm vi IN, BETWEEN,
LIKE


4. GROUP BY: Dùng để gộp nhóm các bộ cùng giá trị tương ứng ở các cột
5. HAVING <điều kiện lọc nhóm>: Chỉ chọn các nhóm thoả mãn điều kiện
lọc nhóm ( nghĩa là dùng cùng GROUP BY )


6. Order By Field1 [ACS|DESC],...


Sắp thứ tự các bộ theo thứ tăng hay giãm của các giá trị trên Field1,
Field2,...


Ví dụ: Xét CSDL sau


HH(MSHH, TenHH, DVT, SoTon, ĐG)
KH(MSKH, TenKH, DC, DT, Fax)
DDH(SoDDH, NgayLap, MSKH)


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

Ví dụ 1: Hiện danh sách các mặt hàng gồm các thơng tin: MSHH, TenHH,
SoTon:


SELECT MSHH, TenHHH, SoTon
FROM HangHoa;


Ví dụ 2: Tính tiền bán từng mặt hàng trong CTDDH:


SELECT SoDDH, MSHH, SL, Dg, GiamGia, SL*DG*(1-GiamGia)*100 As
ThanhTien



FROM CTDDH;


Ví dụ 3: Tính tiền bán từng mặt hàng trong CTDDH sắp thứ tự theo
SoDDH, và Tiền bán :


SELECT SoDDH, MSHH, SL, Dg, GiamGia, SL*DG*(1-GiamGia)*100 As
ThanhTien


FROM CTDDH


Order By SoDDD, ThanhTien Desc;


<b>4- Các ví dụ dùng với phát biểu Where <Điều kiện lọc bộ>. </b>
<i>- So sánh: =, <>, >, <, >=, <=.</i>


Ví dụ 4: Hiện danh sách các mặt hàng có số lượng tồn kho < 10 gồm các
thông tin: MSHH, TenHHH, SoTon:


SELECT MSHH, TenHHH, SoTon
FROM HangHoa


Where SoTon < 10;
<i>- Logic: And, Or, Not.</i>


Ví dụ 5: Liệt kê DDH lập trong tháng 10 năm 1999: DDH(SoDDH,
NgayLap, MSKH)


Select *
From DDH



Where NgayLap>=#1/10/1999# And
NgayLap < #30/10/1999#;


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

Select SoDDH,TenHH,SL,DG*(1-GiamGia)*100 As GiaBan
,GiaBan* SL As ThanhTien


From CTDH, DDH


Where CTDDH.SoDDH = DDH.SoDDH AND
DDH.SoDDH = "10001";


<i>- Đối sánh mẫu Like: <biểu thức> Like "Mẫu dữ liệu"</i>


Chức năng: So sánh giá trị biểu thức với "Mẫu dl". Sử dụng ký tự đại diện *,
?, # (số)


Ví dụ 7: Chọn ra danh sách khách hàng họ "Nguyễn"
Select *


From KH


Where TenKH Like "Nguyễn *";


<b>-</b> Thuộc miền giá trị:


<biểu thức> [Not] Between Value1 And Value2


Chức năng: So sánh giá trị biểu thức thuộc miền giá trị [Value1, Value2].
Ví dụ 8: Danh sách các mặt hàng có đơn giá từ 20 đến 50



Select *
From HH


Where DG Between 20 And 50;


<i>- Thuộc tập giá trị: <biểu thức> [Not] In (Value Set)</i>


Chức năng: Kiểm tra giá trị biểu thức thuộc tập giá trị cho trước
Ví dụ 9: Danh sách các khách hàng có mã số 3, 6, 9


Select *
From KH


Where MSKH In (3,6,9);


Ví dụ 10: Danh sách các khách hàng đặt hàng ngày 1/5/2000
Select Distinct *


From KH


</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

Where NgayLap = #1/5/2000#);


Ví dụ 11: Danh sách các mặt hàng khơng bán được
Select *


From HH


Where MSHH Not In (Select Distinct MSHH From CTDH);



- Not Exists (Subquery): Chọn ra các bộ có giá trị field thỏa điều kiện trong
SubQuery


Ví dụ 12: Danh sách các mặt hàng không bán được
Select * From HH As A


Where Not Exists (Select * From CTDH As B Where A.MsHH = B.MsHH);
- Biểuthức <comparison> ALL (subquery): Kiểm tra giá trị thỏa phép so sánh
với tất cả các giá trị subquery.


Ví dụ 13: In ra SoDDH và SL mua mặt hàng số 3 của các DDH mua mặt
hàng này là nhiều nhất.


Select A.SoDDH, A.SL From CTDH As A Where A.MsHH=3 And
A.SL >= ALL (Select B.SL From CTHH As B Where B.MSHH = 3);


- Biểuthức <comparison> ANY | SOME (subquery): Kiểm tra giá trị thỏa phép
so sánh với ít nhất 1 giá trị tạo bởi subquery.


5- Phát biểu Group By <DS thuộc tính> và Having <điều kiện của nhóm>:
Dùng để tổng hợp, thống kê dữ liệu theo từng nhóm dựa trên giá trị của các
thuộc tính trong <DS thuộc tính>. Trong đó, phát biểu Having dùng chọn ra
những nhóm theo điều kiện.


Các hàm tổng hợp theo nhóm:


Sum(Biểu thức):Tính tổng giá trị các biểu thức số trên các bộ thuộc nhóm
Max(Biểu thức): Chọn ra giá trị lớn nhất trên các bộ thuộc nhóm


Min(Biểu thức): Chọn ra giá trị thấp nhất trên các bộ thuộc nhóm



Avg(Biểu thức): Tính trung bình cộng giá trị biểu thức trên các bộ thuộc nhóm
Count(* | Biểu thức | Distinct Biểu thức): Đếm các bộ trong từng nhóm.


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

Count(biểu thức): Chỉ đếm những bộ mà có giá trị biểu thức khác NULL.
Count(Distinct Biểu thức): Chỉ đếm những bộ mà có giá trị biểu thức khác
nhau và khác NULL.


Ví dụ 1: Đếm tổng số DDH của từng khách hàng:
Select MSKH, Count(*)


Form DDH


Group By MSKH;


Ví dụ 2: Liệt kê danh sách DDH và số tiền của mỗi DDH:
Select SoDDH, Sum(DG*SL)


From CTDH
Group By SoDDH;


Ví dụ 3: Liệt kê danh sách DDH và số tiền của mỗi DDH nhưng chỉ hiện
những DDH có tổng trị giá > 5000.


Select SoDDH, Sum(DG*SL)
From CTDH


Group By SoDDH


Having Sum(DG*SL)>5000;


<b>6-Thứ tự dịch của lệnh Select:</b>


Form --> Where --> Group By --> Having --> Select --> Order


Ví dụ : Danh sách các khách hàng có tổng trị giá đã mua trên 10 triệu
Select KH.MSKH, TenKH, Sum(DG*SL) As TongTien


From KH, CTDH, DDH


Where KH.MsHH = DDH.MSKH And DDH.SoDDH=CTDH.SoDDH
Group By DDH.MSKH Having Sum(DG*SL)>100000 Order By TongTien;
<b>II- Các Lệnh Định Nghiã Dữ Liệu:</b>


a) Lệnh Tạo Cấu Trúc Quan Hệ Mới:
Lệnh CREATE TABLE


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

-Các ràng buộc trên thuộc tính (NULL, NOT NULL, khố chính,
khố ngoại, …)


Cú pháp: CREATE TABLE <tên Quan Hệ >
(field1 type [(size)] [NOT NULL] [index1]


[, field2 type [(size)] [NOT NULL] [index2] [, ...]]
[, CONSTRAINT multifieldindex [, ...]])


<b>-</b> Các kiểu dữ liệu được sử dụng là :


Char(n) Kiểu chuỗi gồm n ký tự,
mặc định là 1



Text(n)


Integer Số nguyên 4 byte Long


Smallint Số nguyên 2 byte Short


Decimal(n,t) Không hỗ


trợ


Real số thực 4 byte Single


Float, Double số thực 8 byte Double


Date, Time Ngay giờ DateTime


Boolean 1 Bit YesNo


Ví dụ: Tạo quan hệ Nhanvien


Create Table NV (msnv Char(5), HoTen Char(30), NS Date, Nu Boolean,
HsLg Float);


<b>-</b> Các biểu thức ràng buộc:


1. Ràng buộc liên quan đến 1 thuộc tính:


Access: CONSTRAINT name {PRIMARY KEY | UNIQUE |


REFERENCES foreigntable [(foreignfield1,


foreignfield2)]}


1. Not Null : Không thể rỗng


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

3. REFERENCES foreigntable [(foreignfield)]: Ràng buộc tồn vẹn
tham chiếu, trong đó tên cột là tùy chọn nếu nó trùng tên Field.


4. Check (điều kiện) : Ràng buộc miền giá trị. Điều kiện có thể là một
biểu thức hoặc danh sách giá trị.


Ví dụ: Create Table NV (msnv Char(5) Primary Key, HoTen Char(30) Not
Null, NS Date, Nu Boolean, HsLg Float);


2. Ràng buộc quan hệ: Liên quan đến nhiều thuộc tính.
I. Primary Key(f1,..,fn):


II. Unique (f1,..,fn)


III. Foreign Key(f1,..fn) References tenQH2 [(fg1,..,fgn)]
IV. Check (điềukiện)


Ví dụ: Create Table NV (msnv Char(5) Not Null, HoTen Char(30) Not Null,
NS Date, Nu Boolean, HsLg Float, Primary Key(msnv));


Access: CONSTRAINT name {PRIMARY KEY (primary1[, primary2
[, ...]]) |


UNIQUE (unique1[, unique2 [, ...]]) |


FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES foreigntable


[(foreignfield1 [, foreignfield2 [, ...]])]}


Ví dụ: (Access)


Create Table NV (msnv Char(5) Not Null Constraint rb1 Primary
Key(msnv), HoTen Char(30) Not Null, NS Date, Nu Boolean, HsLg Float, MsPB
Char(5) Not Null Constraint References PhBan (MP));


Hay có thể viết:


Create Table NV (msnv Char(5) Not Null, HoTen Char(30) Not Null, NS
Date, Nu Boolean, HsLg Float, MsPB Char(5) Not Null, Constraint RB1 Primary
Key(msnv), Constraint RB2 Foreign Key (MsPB) References PhBan (MP));


a. Lệnh Xóa Một Quan Hệ:
DROP TABLE TênQH;


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>

VD: DROP TABLE THAN_NHAN


Chú ý: khơng thể xố 1 bảng được 1 khoá ngoại tham chiếu tới
b. Lệnh Thay Đổi Cấu Trúc Của Quan Hệ:


Sử dụng để sửa đổi cấu trúc và ràng buộc trên bảng, Thêm cột, Mở rộng cột.
Bổ sung, thay đổi và loại bỏ ràng buộc tòan vẹn.


Cú pháp:


a) Thêm thuộc tính:


ALTER TABLE TenQH ADD COLUMN fieldname type[(size)] [NOT


NULL] [CONSTRAINT <index>];


b) Xóa thuộc tính:


ALTER TABLE TênQH DROP COLUMN fieldname;


Chú ý: Lệnh khơng hợp lệ nếu thuộc tính được xóa là thuộc tính khóa.
III- Các Lệnh cập nhật dữ liệu:


Thêm Bộ Mới Vào Bảng:


cp1: INSERT INTO TenQH VALUES (value1[, value2[, ...])
Ví dụ: Thêm một nhân viên mới


INSERT INTO KH VALUES (5, 'Anh', #1/5/78#)


cp2: Thêm 1 bộ với các giá trị không đầy đủ (Các Field khơng liệt kê sẽ
có giá trị NULL).


INSERT INTO TenQH [(field1[, field2[, ...]])]
VALUES (value1[, value2[, ...]);


Ví dụ: Thêm 1 nhân viên mới chỉ biết Msnv, Tên, Giới tính
INSERT INTO KH (Msnv, Ten, GT) VALUES (5, 'Anh', 'Nam')
cp3: Thêm vào QH các bộ là kết quả của câu lệnh Select.
INSERT INTO TenQH [(field1[, field2[, ...]])]


SELECT [source.]field1[, field2[, ...] FROM tableexpression...;


Ví dụ: Chèn các dòng các dòng đặt hàng của DDH = 12 vào bảng


CTGiaoHang


</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>

WHERE SoDDH = 12;
Xóa các Bộ của một quan hệ:


DELETE [tênQH.*] FROM TênQH [WHERE <DK>];
Ví dụ: Xóa các DDH trước ngày 1/1/2000


DELETE FROM DDH WHERE NgayLHD <= #1/1/2000#;
Cập nhật giá trị của các bộ:


UPDATE tênQH SET <Field1>=<BT1>,<Field2>=<BT2>...
WHERE <ĐiềuKiện>;


Ví dụ: Cập nhật đơn giá của sản phẩm Bánh mì, Bơ lên 5%


UPDATE HH SET DonGia = [DonGia]*1.05 WHERE TenHH like
“*Bánh mì*” or TenHH like “*Bơ*”


Hội các bộ của các quan hệ:


[TABLE] query1 UNION [ALL] [TABLE] query2
[UNION [ALL] [TABLE] queryn [ ... ]]


Ví dụ: Tạo quan hệ chứa danh sách các DDH tháng 1/99 và tháng 4/99
Select *


From DDH


Where Ngaydat between #1/1/99# and #31/1/99#


Union


Select *
From DDH


Where Ngaydat between #1/4/99# and #30/4/99#


IV-Hướng dẫn và đề nghị cách gỉai một số câu truy vấn :
Gỉa sử cho CSDL “Địa Lý Việt Nam” có cấu trúc như sau:


Tinh_TP(T_TP, DT, DS, Ten_T)
Mien(T_TP,MN)


BG(Nuoc, T_TP)


</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>

Hãy viết câu trả lời các câu hỏi sau bằng ngôn ngữ SQL:


1) Cho biết dân số cùng tên tỉnh của các tỉnh thành phố có diện tích
7000 km2.


2) Cho biết dân số cùng với tên tỉnh của các tỉnh miền Bắc.
3) Cho biết mã các nước biên giới của các tỉnh miền Nam.
4) Cho biết diện tích trung bình của các tỉnh.


5) Cho biết mật độ dân cư cùng tên tỉnh của tất cả các tỉnh.


6) Cho biết tên những tỉnh có diện tích có 1 diện tích lớn hơn tất cả các
tỉnh láng giềng của nó.


Lời gỉai đề nghị :



Câu 1: Select Ten_T, DS From Tinh_TP Where DT>=7000
Câu 2: Select Ten_T, DS From Tinh_TP, Mien


Where Mien.T_TP= Tinh_TP.T_TP And MN="Bắc";
Câu 3: Select Nuoc From BG, Mien


Where Mien.T_TP= BG.T_TP And MN="Nam"
Câu 4: Select AVG(DT) From Tinh_TP;


Câu 5: Select Ten_T, DS / DT As MDDC From Tinh_TP;
Câu 6:


Cách 1: Thực hiện 2 bước


<b>-</b> Tạo Query liệt kê T_TP và diện tích lớn nhất của các tỉnh láng
giềng của nó: (Save as query : DTLGMax)


SELECT LG.T_TPLG, Max(Tinh_TP.DT) AS DTmax


FROM Tinh_TP INNER JOIN LG ON Tinh_TP.T_TP = LG.T_TP
GROUP BY LG.T_TP_LG;


<b>-</b> Tạo Query các tỉnh có diện tích lớn hơn diện tích các tỉnh láng
giềng của nó.


SELECT Tinh_TP.TenTinh, Tinh_TP.DT, DTLGMax.DTmax


</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

WHERE (((Tinh_TP.DT)>=[DTMax]));
Cách 2: Sử dụng phép toán >= ALL



SELECT a.TenTinh, a.DT FROM Tinh_TP AS a


WHERE (((a.DT)>=All (Select b.DT From Tinh_TP b, LG c
Where b.T_T = c.T_TP_LG And a.T_TP=c.T_TP)));


Bài Tập chương 3 : Cho lược đồ cơ sở dữ liệu sau:
1- CLB( MsCLB , DcCLB)


Tân từ: Mỗi CLB có 1 mã số (MSCLB) để phân biệt với các CLB khác, và
địa chỉ của CLB (DcCLB)


2- DOI(MsCLB, MsDoi, MsLT, Phai)


Tân từ: Mỗi đội có 1 mã số đội (MsDoi) để phân biệt với các đội khác của
cùng một Câu lạc bộ (MsCLB); Mỗi đội thuộc về 1 lứa tuổi duy nhất (MsLT) và
một phái (nam hay nữ). Tất cả các vận động viên của đội phải có cùng lứa tuổi
của đội hoặc thấp hơn lứa tuổi của đội.


3- TD(MsTD, MsPh, GioTD, NgayTD)


Tân từ: Mỗi trận đấu có 1 mã số (mstd) để phân biệt với những trận đấu
khác, diễn ra trong 1 phòng, vào 1 ngày (NgayTD) và bắt đầu ở một giờ (GioTD)
đã quy định.


4- DOI_TD(MsTD, MsDoi, MsCLB)


Tân từ: Mỗi trận đấu là một cuộc gặp gỡ giữa 2 đội. Cả 2 đội phải thuộc
cùng 1 lứa tuổi và cùng một phái.



5- PHỊNG(MsPh, DCPh, SốSân)


Tân từ: Mỗi phịng có 1 mã số (MSPh) để phân biệt với các phịng khác, có
1 địa chỉ và 1 số lượng sân (SốSân) nhất định, nơi đó có thể diễn ra các trận đấu.


6- LỨA_TUỔI(MsLT, TGTĐ_LT)


Tân từ: Mỗi lứa tuổi được phân biệt bởi mã lứa tuổi (MsLT) và có thời gian
trận đấu dành cho lứa tuổi đó.


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>

Tân từ: Mỗi vận động viên có 1 mã số (MsVDV) dùng để phân biệt với các
VDV khác, có 1 tên, 1 địa chỉ, thuộc 1 CLB, 1 phái và 1 lứa tuổi.


8- VĐV_ĐỘI(MsVDV, MsDoi)


Tân từ: Mỗi VĐV đăng ký chơi ở 1 đội. Họ có thể đăng ký vào nhiều đội
khác nhau.


Yêu cầu:Thực hiện các câu hỏi sau bằng ngôn ngữ SQL
a) Danh sách tên các VĐV của CLB có mã số 45.
b) Tên tất cả các VĐV của đội số 3 của CLB mã số 27.
c) Số lượng các trận đấu LT1 diễn ra ngày 16/06/90.


d) Mã số các CLB và mã số các đội trong đó có quy tụ các VĐV thuộc
1 lứa tuổi nhỏ hơn lứa tuổi của đội.


e) Địa chỉ và mã số các CLB có 1 hay nhiều đội tham dự trận đấu diễn
ra trong phòng mã số 17 ngày 06/12/90.


f) Danh sách các trận đấu bắt đầu hoặc kết thúc trong khoảng thời gian


từ 13g và 16g diễn ra trên 1 sân của phòng mã số 49 ngày 05/08/90.


g) Địa chỉ và tên các vận động viên đã chơi hoặc sẽ chơi đối lại đội mã
số 1 của các CLB mã số 50.


h) Số tối đa các trận đấu bắt đầu đồng thời trong ngày 06/12/90.
6. Cho cơ sở dữ liệu gồm các quan hệ:


MH(MãMH, TênMH, ĐVT, ĐGiá) - Các mặt hàng


NCC(MãNCC, TênNCC, ĐCNCC, ĐTNCC) - Các nhà cung cấp


MH_NCC(MãNCC, MãMH) - Các mặt hàng đã được các NCC cung cấp
trong đó:


MãNCC : Mã số nhà cung cấp
MãMH: Mã số mặt hàng


ĐVT : Đơn vị tính
ĐGiá : Đơn giá


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

ĐTNCC : Điện thoại nhà cung cấp
TênMH : Tên nhà cung cấp


Hãy trả lời các câu hỏi sau đây bằng biểu thức đại số quan hệ, bằng ngôn
ngữ đại số quan hệ vằ bằng ngôn ngữ SQL (nếu có thể):


a) Cho xem mã số của các nhà cung cấp đã cung cấp ít nhất một mặt hàng.
b) Cho xem mã số của các nhà cung cấp không cung cấp một mặt hàng nào.
c) Cho xem mã số, tên, điện thoại của các nhà cung cấp đã cung cấp mặt


hàng có mã số 10.


7. Cho cơ sở dữ liệu gồm 3 quan hệ (bảng) sau:
TACGIA(MãTG, TênTG, Quêquán)


NXB(MãNXB, TênNXB, Địachỉ, Điệnthoại)


SACH(MãS, TênS, NămXB, Slượng, MãTG, MãNXB)
a. Tạo các bảng trên bằng ngôn ngữ SQL.


b. Trả lời các câu hỏi sau bằng ngôn ngữ đại số quan hệ:
+ Cho biết tên những cuốn sách xuất bản năm 1998.


+ Cho biết mã, tên những cuốn sách xuất bản năm 1998 và có số lượng xuất
bản trên 1000 cuốn.


+ Cho biết tên những cuốn sách xuất bản năm 1998 của "Nhà xuất bản Giáo
dục"


+ Tìm tên những tác giả có sách xuất bản tại "Nhà xuất bản Giáo dục".
+ Xoá tác giả "Nguyễn Văn An" trong cơ sở dữ liệu trên.


c. Trả lời các câu hỏi ở câu b) bằng ngôn ngữ SQL.
8. Cho cơ sở dữ liệu gồm các quan hệ sau:


TRUONG(MãTR, TênTR, HiệuTR, Địachỉ)
KHOA (MãTR, MãKH, TênKH, SốSV)


SINHVIEN(MãTR, MãKH, MãSV, TênSV, Địachỉ)



Trả lời các câu hỏi sau bằng ngôn ngữ đại số quan hệ và bằng ngôn ngữ
SQL (nếu có thể).


a. Cho biết tên các trường đại học có khoa "CNTT".


</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=39></div>
<span class='text_page_counter'>(40)</span><div class='page_container' data-page=40>

<b>Chương IV</b>


<b>LÝ THUYẾT THIẾT KẾ CƠ SỞ DỮ LIỆU QUAN HỆ</b>


Thiết kế cơ sở dữ liệu là một bộ phận của hệ thống thông tin quản lý. Đây
là một hoạt động phức tạp, có tầm quan trọng đặc biệt trong các hệ thông tin
quản lý. Việc thiết kế cơ sở dữ liệu sẽ quyết định trực tiếp đến hiệu quả của
chương trình, phát triển và bảo trì hệ thống.


<b>I. QUÁ TRÌNH THIẾT KẾ CƠ SỞ DỮ LIỆU</b>


Quá trinh thiết kế CSDL thường qua các bước sau
Bước 1: Tập hợp các yêu cầu và phân tích.


Bước 2: Thiết kế khái niệm. Ở bước này người thiết kế lựa chọn một mơ
hình dữ liệu, dùng các khái niệm của mơ hình dữ liệu đã chọn để chuyển những
đặc tả yêu cầu của người dùng sang thành một lược đồ khái niệm, bao gồm mô tả
chi tiết các kiểu dữ liệu, các liên kết, các ràng buộc, đặc tả yêu cầu về chức năng.


Bước 3: Thiết kế Logic, ở bước này người thiết kế cài đặt CSDL bằng một
hệ quản trị CSDL


Bước 4: Thiết kế vật lý, bao gồm các cấu trúc lưu trữ bên trongvaf kiểu tổ
chức tệp cho CSDL



<b>II. DƯ THỪA DỮ LIỆU VÀ CÁC DỊ THƯỜNG CẬP NHẬT</b>


Mục đích chính của thiết kế CSDL quan hệ là nhóm các thuộc tính vào các
bảng sao cho giảm được nhiều nhất sự dư thừa dữ liệu. Đối với các quan hệ dư
thừa dữ liệu, có một số vấn đề nảy sinh được gọi là các dị thường cập nhật.:


1. Dị thường thêm bộ
2. Dị thường xóa bộ
3. Dị thường sửa bộ


<b>III. PHỤ THUỘC HÀM</b>


Phụ thuộc hàm (functional dependency) là một cơng cụ dùng để biểu diễn
một cách hình thức các ràng buộc toàn vẹn.


Ràng buộc toàn vẹn là điều kiện mà mọi thuộc tính hay mọi bộ đều phải
thỏa mãn ở bất kỳ thời điểm nào. Có thể có các loại ràng buộc tồn vẹn sau:


</div>
<span class='text_page_counter'>(41)</span><div class='page_container' data-page=41>

- Ràng buộc toàn vẹn tham chiếu: mối liên kết giữa các quan hệ thơng qua
khóa ngồi.


- Ràng buộc tồn vẹn ngữ nghĩa: các thuộc tính phải thỏa mãn điều kiện nào
đó, có thể gồm RBRV bề miền giá trị, RBTV liên thuộc tính, RBTV liên bộ.


Phương pháp biểu diễn này có rất nhiều ưu điểm, và đây là một công cụ cực
kỳ quan trọng, gắn chặt với lý thuyết thiết kế cơ sở dữ liệu. Phụ thuộc hàm được
ứng dụng trong việc giải quyết các bài toán tìm khóa, tìm phủ tối thiểu và chuẩn
hóa cơ sở dữ liệu.


Cho quan hệ phanCong sau:



phanCong (PHICONG, MAYBAY, NGAYKH, GIOKH)


Chiến 116 10/8 1:25p


Thắng 281 8/8 5:50a


Bạch 301 12/8 6:35p


Đằng 412 15/8 1:25p


Quan hệ phanCong diễn tả phi công nào lái máy bay nào và máy bay khởi
hành vào thời gian nào. Không phải sự phối hợp bất kỳ nào giữa phi công, máy
bay và ngày giờ khởi hành cũng đều được chấp nhận mà chúng có các điều kiện
ràng buộc qui định sau:


+ Mỗi máy bay có một giờ khởi hành duy nhất.


+ Nếu biết phi công, biết ngày giờ khởi hành thì biết được máy bay do phi
cơng ấy lái.


+ Nếu biết máy bay, biết ngày khởi hành thì biết phi cơng lái chuyến bay ấy.
Các ràng buộc này là các ví dụ về phụ thuộc hàm và được phát biểu lại như
sau:


+ MAYBAY xác định GIOKH


+ {PHICONG,NGAYKH,GIOKH} xác định MABAY
+ {MAYBAY,NGAYKH} xác định PHICONG



hay


+ GIOKH phụ thuộc hàm vào MAYBAY


</div>
<span class='text_page_counter'>(42)</span><div class='page_container' data-page=42>

+ PHICONG phụ thuộc hàm vào {MAYBAY,NGAYKH}
và được ký hiệu như sau:


+ {MAYBAY}→ GIOKH


+ {PHICONG,NGAYKH,GIOKH}→ MABAY
+ {MAYBAY,NGAYKH}→ PHICONG


Trong ký hiệu trên ta đã ký hiệu MAYBAY thay cho {MAYBAY}.
Một cách tổng quát:


<b>1 Định nghĩa phụ thuộc hàm</b>


Cho U là một tập thuộc tính, R(U) là lược đồ quan hệ trên U. Giả sử X,Y 


U. Khi đó Y được gọi là phụ thuộc hàm vào X trên lược đồ R(U), ký hiệu là X →
Y, nếu với mọi quan hệ r trên lược đồ quan hệ R(U), với hai bộ bất kỳ t1,t2  r,


mà t1[X] = t2[X] thì t1[Y] = t2[Y]). Khi đó ta nói quan hệ r thoả phụ thuộc hàm
X  Y.


Nếu Y phụ thuộc hàm vào X thì ta cũng nói X xác định hàm Y.


Cho tập hợp F những phụ thuộc hàm trên lược đồ quan hệ R(U). Ta nói X 


Y được suy diễn logic từ F và ký hiệu F|= (X  Y) nếu với mỗi quan hệ r trên



R(U), r thoả F ( r thoả mọi phụ thuộc hàm của F) thì r thoả X  Y.


Ta gọi bao đóng của tập hợp phụ thuộc hàm F là tập các phụ thuộc hàm
được suy diễn logic từ F và ký hiệu là F*. F*={ X  Y| F|= (X  Y)}.


<b>1.2. Định nghĩa khoá</b>


Cho lược đồ quan hệ R(U). F là tập phụ thuộc hàm xác định trên U. K U.


Ta nói K là một khoá của R nếu:


1/ K  U F*, nghĩa là với mọi quan hệ r của lược đồ R, hai bộ bất kỳ của


r bằng nhau trên K thì bằng nhau.(r R) ( t1,t2 r) t1[K]=t2[k]  t1=t2)


2/ Với  K’ là tập con thực sự của K, K'  K thì K'  U  F*


+ K được gọi là siêu khoá của lược đồ R nếu K  U


Thuộc tính A được gọi là thuộc tính khóa nếu A K với K là khóa bất kỳ


của Q. Ngược lại A được gọi là thuộc tính khơng khóa.


</div>
<span class='text_page_counter'>(43)</span><div class='page_container' data-page=43>

Có thể thấy PTH là một dạng phổ biến biểu diễn sự dư thừa dữ liệu. Mục
đích thiết kế CSDL là loại bỏ các dư thừa gây ra những hiện tượng dị thường cập
nhật. Việc tính F* từ F, hoặc xem xét một phụ thuộc hàm (PTH) X  Y có được


suy diễn logic từ F hay khơng thường được đặt ra khi thiết kế CSDL. Một tập các
quy tắc suy diễn của Armstrong cho phép chúng ta khẳng định một PTH có thuộc


F* hay khơng mà khơng phải kiểm tả dữ liệu cụ thể.


Cho lược đồ quan hệ R(U) với U={A1, . . . , An}. F là một tập PTH chỉ gồm
những thuộc tính trong U. X, Y, Z  U, ta sử dụng XY để ký hiệu cho X Y.


Khi đó ta có các tiên đề sau:


A1) Tính phản xạ: Nếu Y  X thì X  Y


A2) Tính tăng trưởng: Nếu X  Y và Z  U thì XZ  YZ


A3) Tính bắc cầu: Nếu X  Y và Y  Z thì X  Z


Ví dụ: Cho F={AB  C,C  A } cần chứng minh BC  ABC


Chúng ta sẽ ký hiệu quá trình suy diễn nhờ hệ quy tắc suy diễn này là
|- Arm. Ký hiệu F+ ={ f | F|- A rm f}. Ta có F+ F*


<i><b>Định lý: Hệ tiên đề Armstrong là đúng và đầy đủ.</b></i>
<b>1.4. Các luật suy diễn</b>


Từ hệ tiên đề Armstrong ta suy ra một số quy tắc (luật) suy diễn sau đây:
L1. Luật hợp: X  Y và X  Z thì X  YZ


L2. Luật tựa bắc cầu: Nếu X  Y và WY  Z thì XW  Z


L3. Luật tách: Nếu X  Y và ZY thì X  Z


Hệ quả Nếu X  Y thì X  A với mọi A  Y



<b>1.5. Bao đóng của tập thuộc tính</b>


Cho lược đồ quan hệ R(U), X  U và tập phụ thuộc hàm F xác định trên U.


Ta gọi bao đóng của tập thuộc tính X đối với tập phụ thuộc hàm F, ký hiệu X+
F, là
tập các thuộc tính A sao cho X A được suy diễn từ F nhờ các quy tắc suy diễn


Armstrong. X+


F={AU| (XA) F+}


Bổ đề: X  Y được suy diễn từ hệ tiên đề Armstrong khi và chỉ khi Y  X+:


(X  Y)  F+  Y  X+


</div>
<span class='text_page_counter'>(44)</span><div class='page_container' data-page=44>

Vào: Lược đồ quan hệ R(U), tập PTH F, tập thuộc tính XU


Ra: X+<sub>, bao đóng của x đối với F: X</sub>+ <sub>={A</sub><sub></sub><sub>U | X </sub><sub></sub><sub>A </sub><sub></sub><sub>F</sub>+<sub>}</sub>
Phương pháp:


Lần lượt tính các tập X0<sub>, X</sub>1<sub>, X</sub>2<sub>,...theo các bước sau:</sub>
Bước 0: Đặt X (0)<sub> = X</sub>


Bước i: Tính Xi<sub> từ X</sub>i-1<sub>, cụ thể:</sub>


X(i)<sub> =X</sub>(i-1) <sub></sub><sub> {A} nếu tồn tại (Y</sub><sub></sub><sub>Z) </sub><sub></sub><sub> F mà Y </sub><sub></sub><sub> X</sub>(i-1)<sub> với A </sub><sub></sub><sub> Z và A </sub><sub></sub><sub> X</sub>(i-1)
Xi<sub>= X</sub>(i-1)<sub> nếu ngược lại</sub>


Vì rằng X=X0 <sub></sub><sub>…</sub><sub></sub><sub>X</sub>i <sub></sub><sub>….</sub><sub></sub><sub>U và U là hữu hạn cho nên sẽ tồn tại một chỉ</sub>


số i nào đó mà Xi<sub> =X</sub>i+1<sub>, khi đó đặt X</sub>+<sub> = X</sub>i<sub> </sub>


Ví dụ: Cho tập phụ thuộc hàm sau:


F={ AB  C, C A, BC D, ACD  B, D  EG, BE  C, CG  BD, CE
 AG}. X=BD. Hãy tính X+F


<b> 1.7 Thuật tốn kiểm tra F|= X </b><b> Y ?. (Bài toán thành viên)</b>


Nói rằng X  Y là thành viên của F nếu X  Y  F+.


Một vấn đề quan trọng khi nghiên cứu lý thuyết CSDL là khi cho trước tập
các phụ thuộc hàm F và một phụ thuộc hàm X → Y, làm thế nào để biết X → Y
có thuộc F+ hay khơng bài tốn này được gọi là bài toán thành viên. Để trả lời
câu hỏi này ta có thể tính F+ rồi xác định xem X → Y có thuộc F+ hay khơng.
Việc tính F+ là một cơng việc địi hỏi thời gian và cơng sức. Tuy nhiên, thay vì
tính F+ chúng ta có thể dùng thuật tốn sau để xác định X → Y có là thành viên
của F hay không?


Vào: Lược đồ quan hệ R(U), tập phụ thuộc hàm F, các tập X, Y U


Ra: X  Y ?.


Cách kiểm tra:
i) Tính X+


ii) Kiểm tra Y  X+ . Nếu thoả mãn thì X  Y


<b>Định lý: Cho R(U), F là tập PTH trên U, X </b>U. X là siêu khóa của U dưới



</div>
<span class='text_page_counter'>(45)</span><div class='page_container' data-page=45>

Áp dụng định này ta có thể kiểm tra một tập con nào đấy có phải là siêu
khóa hay khơng.


<b>1.8. Thuật tốn tìm khoá của lược đồ quan hệ</b>


Khi thiết kế một hệ thống thơng tin, thì việc lập lược đồ cơ sở dữ liệu đạt
đến một tiêu chuẩn nào đó là một việc làm quan trọng. Việc xác định chuẩn cho
một lược đồ quan hệ có liên quan mật thiết với thuật tốn tìm khóa.


<i><b>Thuật tốn 1:Tìm một khóa của một lược đồ quan hệ R(U). Dựa vào định</b></i>
<i>nghĩa khóa của một lược đồ quan hệ</i>


<i>Bước 1: gán K = U</i>


<i>Bước 2: A là một thuộc tính của K, đặt K’ = K − A. Nếu K’+= U thì gán K</i>
<i>= K' thực hiện lại bước 2</i>


Nếu muốn tìm các khóa khác (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.


Ví dụ :R(A,B,C,D,E,G,H,I)


F={AC→ B;BI → ACD;ABC→D;H→I;ACE→BCG;CG→AE}
Tìm K


Lần lượt loại các thuộc tính trong K theo thứ tự sau:
A, B, D, E, I


Ta được một khóa là của lược đồ quan hệ là {C,G,H}



(Lưu ý là thuật toán này chỉ nên sử dụng trong trường hợp chỉ cần tìm một
khóa).


<b>Thuật tốn 2: Tìm một khoá của lược đồ quan hệ R(U,F)</b>


Vào: Lược đồ quan hệ R(U,F); F={Ti Pi |Ti,Pi  U, Ti Pi= , i=1,2,…,p}


T=Ti, P= Pj


Ra: Một khoá K của R
Phương pháp:


Đặt P=Pj


Bước 1: K=U\P


</div>
<span class='text_page_counter'>(46)</span><div class='page_container' data-page=46>

Bước 4: Với mỗi Ai  (T  P) thực hiện:


+ K=K\{Ai}
+ Nếu K+


U thì K=K  {Ai}


Bước 5: Kết luận K là khố


<b>2. Thuật tốn tìm tất cả khóa</b>


Cho lược đồ quan hệ R(U), tập PTH F.
<b>2.1 Thuật toán cơ bản</b>



Bước 1: Xác định tất cả các tập con khác rỗng của U. Kết quả tìm được giả
sử là các tập thuộc tính X1, X2, …,X2n-1


Bước 2: Tìm bao đóng của các Xi


Bước 3: Siêu khóa là các Xi có bao đóng đúng bằng U. Giả sử ta đã có các
siêu khóa là S = {S1,S2,…,Sm}


Bước 4: Xây dựng tập chứa tất cả các khóa của U từ tập S bằng cách xét mọi
Si, Sj con của S (i ≠ j), nếu Si  Sj thì ta loại Sj (i,j=1..n), kết quả cịn lại của S


chính là tập tất cả các khóa cần tìm.


Ví dụ 8: Tìm tất cả các khóa của lược đồ quan hệ và tập phụ thuộc hàm như
sau:


Q(C,S,Z); F = {f1:CS → Z; f2:Z → C}


<b>Xi</b> <i>Xi+</i> <b><sub>Siêu</sub></b> <b><sub>khóa</sub></b>


C C


S S


CS CSZ CS CS


Z ZC


CZ CZ



SZ SZC SZ SZ


CSZ CSZ CSZ


Vậy lược đồ quan hệ Q có hai khóa là: {C,S} và {S,Z}


</div>
<span class='text_page_counter'>(47)</span><div class='page_container' data-page=47>

thu hẹp không gian duyệt. Chúng ta sẽ nghiên cứu thuật toán cải tiến theo hướng
giảm số thuộc tính của tập cần duyệt tất cả các tập con.


<b>2.2 Thuật toán cải tiến</b>


Trước khi đi vào thuật toán cải tiến, ta cần quan tâm một số khái niệm sau:
+ Tập thuộc tính nguồn (TN) chứa tất cả các thuộc tính có xuất hiện ở vế
trái và khơng xuất hiện ở vế phải của các phụ thuộc hàm và các thuộc tính khơng
xuất hiện ở cả vế trái lẫn vế phải của các phụ thuộc hàm.


+ Tập thuộc tính đích (TD) chứa tất cả các thuộc tính có xuất hiện ở vế phải
và không xuất hiện ở vế trái của các phụ thuộc hàm.


+ Tập thuộc tính trung gian (TG) chứa tất cả các thuộc tính xuất hiện ở cả vế
trái lẫn vế phải của các phụ thuộc hàm.


<i>Hệ quả: Nếu K là khóa của R(U) thì TN </i> K và TD ∩ K = 


Chứng minh TN  K


Theo hệ quả 2 của thuật tốn tìm bao đóng ta có K+ K TD TG


Ta chứng minh A TN  A  K. Thật vậy:



Nếu A  K  K+ K TD TG  Q+-A  K không là khóa  mâu


thuẫn


Chứng minh TD ∩ K = 


Giả sử có thuộc tính A  TD ∩ K ta sẽ dẫn đến điều mâu thuẫn. Thật vậy:


Theo hệ quả 1 của thuật tốn tìm bao đóng thì K+ = (K-A)+


 A


A  TD  có X là vế trái của một phụ thuộc hàm trong F sao cho X → A


(1) và A ∉ X  X  K+ = (K-A)+ A vì A ∉ X  X  (K-A)+ (K-A) → X


(2)


(1) và (2) cho (K-A) → A  A (K-A)+  (K-A)+  A = (K-A)+  K+ =


(K-A)+<sub> mâu thuẫn với điều K là khóa.</sub>


<i>Dựa vào hệ quả trên ta có thuật tốn tìm tất cả khóa sau:</i>
Dữ liệu vào: Lược đồ quan hệ R(U) và tập phụ thuộc hàm F
Dữ liệu ra: Tất cả các khóa của quan hệ


<i>Thuật tốn tìm tất cả khóa của một lược đồ quan hệ</i>


</div>
<span class='text_page_counter'>(48)</span><div class='page_container' data-page=48>

<i>Bước 2: if TG = </i>∅ then lược đồ quan hệ chỉ có một khóa K
<i> K = TN</i>



<i> kết thúc</i>
<i> Ngược lại</i>
<i> Qua bước 3</i>


<i>Bước 3: tìm tất cả các tập con Xi của tập trung gian TG</i>
<i>Bước 4: tìm các siêu khóa Si bằng cách </i><i>Xi</i>


<i>if (TN </i> Xi)+ = U then


<i>Si = TN </i> Xi


<i>Bước 5: tìm khóa bằng cách loại bỏ các siêu khóa khơng tối tiểu</i>


 Si, Sj  S


<i>if Si </i> Sj then Loại Sj ra khỏi Tập siêu khóa S


<i>S cịn lại chính là tập khóa cần tìm.</i>
Ví dụ 9: Giải lại bài tập ví dụ 8


Ap dụng thuật tốn cải tiến ta có lời giải như sau:
TN = {S}; TG = {C,Z}


Gọi Xi là các tập con của tập TG:


Kết quả quan hệ trên có hai khóa là : {S,C} và {S,Z}


2.3 Dùng đồ thị của tập phụ thuộc hàm để xác định khóa của một lược đồ
quan hệ.



a. Đồ thị của một tập phụ thuộc hàm: Biểu diễn PTH bằng đồ thị như sau:
AB


ABC , ABC


- Đỉnh gốc: là đỉnh mà chỉ có điểm đi của mũi tên
- Đỉnh ngọn: là đỉnh chỉ có điểm đến của mũi tên


- Đỉnh trung gian: là đỉnh vừa có điểm đến vừa có điểm đi của mũi tên
A


B


C <sub>A</sub>


B


C


</div>
<span class='text_page_counter'>(49)</span><div class='page_container' data-page=49>

<b>b. Dùng đồ thị để xác định một khóa</b>
<i>Thuật tốn</i>


<i>- Các đỉnh gốc của đồ thị là thuộc tính khóa</i>


<i>- Các đỉnh ngọn của đồ thị khơng là thuộc tính khóa</i>
<i>- K là tập các đỉnh gốc:</i>


<i>+ Nếu K+</i>



<i>F = U thì K là khóa.</i>


<i> Ngược lại, ta thêm lần lượt vào K một số thuộc tính là đỉnh trung gian</i>
<i>cho đến khi K+</i>


<i>F = U</i>


<i>Ví dụ: F={ A</i><i>B, AB</i><i>C, B</i><i>D, CD</i><i>E}. Tìm khóa của U. </i>


<b>1.9. Các tập phụ thuộc hàm tương đương</b>


Cho hai tập phụ thuộc hàm F và G. Ta nói F và G tương đương nếu F+ <sub>= G</sub>+<sub>.</sub>
Khi đó ta cịn gọi là G phủ F (và F phủ G). và viết F G


*Cách kiểm tra F tương đương với G


+ Với mỗi phụ thuộc hàm (XY)  F kiểm tra (XY)  G+ hay không?


bằng cách xét Y  X+G hay không?


Nếu mọi PTH trong F đều thuộc G+<sub> thì mọi PTH trong F</sub>+<sub> cũng được suy</sub>
diễn logic từ G+<sub>. Do vậy F</sub>+


 G+


+ Với mỗi phụ thuộc hàm (XY)  G kiểm tra (XY)  F+ hay không?


Kiểm tra tương tự như trên. Cuối cùng kết luận F và G tương đương
<i>Thuật toán xác định F và G có tương đương khơng</i>



<i>Bước 1: Với mỗi phụ thuộc hàm X→Y của F ta xác định xem X→Y có là</i>
<i>thành viên của G khơng</i>


<i>Bước 2: Với mỗi phụ thuộc hàm X→Y của G ta xác định xem X→Y có là</i>
<i>thành viên của F khơng</i>


<i>Nếu cả hai bước trên đều đúng thì F ≡ G</i>


<b>Chú ý: Thuật tốn xác định f = X→Y có là thành viên của F hay khơng</b>
Bước 1: tính X+


Bước 2: so sánh X+ với Y nếu X+  Y thì ta khẳng định X → Y là thành


viên của F


</div>
<span class='text_page_counter'>(50)</span><div class='page_container' data-page=50>

F={A→BC,A→D,CD→E} và G = {A→BCE,A→ABD,CD→E}
a) F có tương đương với G khơng?


b) F có tương đương với G’={A→BCDE} khơng?


<b>IV. PHỦ TỐI THIỂU CỦA MỘT TẬP PHỤ THUỘC HÀM </b>
<b>(minimal cover)</b>


<b>1 Phụ thuộc hàm có vế trái dư thừa</b>


F là tập các phụ thuộc hàm trên lược đồ quan hệ Q, Z→YF. Nói rằng phụ


<i>thuộc hàm Z → Y có vế trái dư thừa (phụ thuộc khơng đầy đủ) nếu có một thuộc</i>
<i>tính A</i><i>Z sao cho:</i>



<i>F ≡ F- {Z → Y} </i> {(Z-A) → Y}


<i>Ngược lại Z → Y là phụ thuộc hàm có vế trái khơng dư thừa hay Y phụ</i>
<i>thuộc hàm đầy đủ vào Z hay phụ thuộc hàm đầy đủ.</i>


Ví dụ 2: Q(A,B,C) F={AB→C; B→C}
AB → C là phụ thuộc hàm không đầy đủ
B → C là phụ thuộc hàm đầy đủ


Chú ý: phụ thuộc hàm có vế trái chứa một thuộc tính là phụ thuộc hàm đầy
đủ.


Ví dụ 3: cho tập phụ thuộc hàm F = {A → BC,B → C,AB → D} thì phụ
thuộc hàm AB→D có vế trái dư thừa B


<i>Định nghĩa: Ta nói F là tập phụ thuộc hàm có vế trái khơng dư thừa nếu F</i>
<i>khơng chứa phụ thuộc hàm có vế trái dư thừa.</i>


<i>Thuật toán loại khỏi F các phụ thuộc hàm có vế trái dư thừa.</i>


<i>Bước 1: lần lượt thực hiện bước 2 cho các phụ thuộc hàm X→Y của F</i>
<i>Bước 2:Với mọi tập con thật sự X’≠ </i><i>của X.</i>


<i>Nếu X'→Y</i><i>F+ thì thay X→Y trong F bằng X'→Y thực hiện lại bước 2</i>


Ví dụ: Ở ví dụ 3 phụ thuộc hàm AB→D có A+=ABCD  A→DF+. Trong


F ta thay AB→D bằng


A→D  F ≡ {A → BC,B → C,A → D}



</div>
<span class='text_page_counter'>(51)</span><div class='page_container' data-page=51>

Mỗi tập phụ thuộc hàm F đều tương đương với một tập phụ thuộc hàm G mà
vế phải của các phụ thuộc hàm trong G chỉ gồm một thuộc tính.


Ví dụ 4: cho F = {A → BC,B → C,AB → D} ta suy ra
F ≡ {A → B, A → C ,B → C,AB → D} = G


G được gọi là tập phụ thuộc hàm có vế phải một thuộc tính.
<b>3 Tập phụ thuộc hàm khơng dư thừa</b>


Nói rằng F là tập phụ thuộc hàm không dư thừa nếu không tồn tại F’ F sao


cho F’≡ F. Ngược lại F là tập phụ thuộc hàm dư thừa.


Ví dụ: cho F = {A→BC, B→D, AB→D} thì F dư thừa vì
F ≡ F’= {A→BC, B→D}


<i>Thuật tốn loại khỏi F các phụ thuộc hàm dư thừa:</i>
<i>Bước 1: Lần lượt xét các phụ thuộc hàm X → Y của F</i>


<i>Bước 2: nếu X → Y là thành viên của F - {X → Y} thì loại X → Y khỏi F</i>
<i>Bước 3: thực hiện bước 2 cho các phụ thuộc hàm tiếp theo của F</i>


<b>4 Tập phụ thuộc hàm tối thiểu (minimal cover)</b>


F được gọi là một tập phụ thuộc hàm tối thiểu (hay phủ tối thiểu) nếu F thỏa
đồng thời ba điều kiện sau:


1. F là tập phụ thuộc hàm có vế trái khơng dư thừa
2. F là tập phụ thuộc hàm có vế phải một thuộc tính.


3. F là tập phụ thuộc hàm khơng dư thừa


<i>Thuật tốn tìm phủ tối thiểu của một tập phụ thuộc hàm</i>
<i>Bước 1: loại khỏi F các phụ thuộc hàm có vế trái dư thừa.</i>


<i>Bước 2: Tách các phụ thuộc hàm có vế phải trên một thuộc tính thành các</i>
<i>phụ thuộc hàm có vế phải một thuộc tính.</i>


<i>Bước 3: loại khỏi F các phụ thuộc hàm dư thừa.</i>


Chú ý: Theo thuật toán trên, từ một tập phụ thuộc hàm F ln tìm được ít
nhất một phủ tối thiểu Ftt để F≡Ftt và nếu thứ tự loại các phụ thuộc hàm trong tập
F là khác nhau thì có thể sẽ thu được những phủ tối thiểu khác nhau.


</div>
<span class='text_page_counter'>(52)</span><div class='page_container' data-page=52>

Hãy tính phủ tối thiểu của F.
Giải:


Bước 1: AB→CD là phụ thuộc hàm có vế trái dư thừa?
B → CD  F+? trả lời: B+=BCD  B → CD  F+


Vậy AB → CD là phụ thuộc hàm có vế trái dư thừa A  kết quả của bước 1


là:


F≡{B → CD;B → C;C → D}
Bước 2: kết quả của bước 2 là:
F≡{B → D; B → C;C → D}=F1tt


Bước 3: trong F1tt, B → C là phụ thuộc hàm dư thừa?
B → C  G+? với G = F1tt - {B → C}={B → D;C → D}



BG+=BD  B → C  G+  trong F1tt B → C không dư thừa.


trong F1tt,B → D là phụ thuộc hàm dư thừa?


B → D G+? với G = F1tt - {B → D}={B → C;C → D}


BG+=BCD  B → D  G+  trong F1tt,B → D dư thừa.


kết quả của bước 3 cho phủ tối thiểu: F≡{B → C;C → D}=Ftt


Ví dụ 6: Cho lược đồ quan hệ Q(MSCD,MSSV,CD,HG) và tập phụ thuộc F
như sau:


F = {MSCD → CD;CD → MSCD; CD,MSSV → HG; MSCD,HG →
MSSV;


CD,HG → MSSV; MSCD,MSSV → HG}
Hãy tìm phủ tối thiểu của F


kết quả:


Ftt = {MSCD → CD; CD → MSCD; CD,HG → MSSV;
MSCD,MSSV → HG}


<i><b>Định lý: Mỗi tập phụ thuộc hàm F đều tương đương với một tập phụ thuộc</b></i>
hàm tối thiểu F' nào đó.


</div>
<span class='text_page_counter'>(53)</span><div class='page_container' data-page=53>

<b>1. </b><i><b>Khái niệm phép tách lược đồ quan hệ: Cho lược đồ quan hệ R(U,F).</b></i>
Việc tách một lược đồ quan hệ R(U) là thay thế nó bởi tập các lược đồ con


{R1(U1), R2(U2), ...,Rn(Un)} trong đó U1U2 ... Un=U.


Chú ý rằng ở đây khơng địi hỏi U1, U2, ... ,Un phải rời nhau


Mục đích của việc tách lược đồ quan hệ là nhằm loại bỏ các dị thường dữ
liệu.


Ví dụ: Cho lược đồ quan hệ nhà cung cấp NCC (TênNCC, Địachỉ,
Sảnphẩm, Giá) và tập phụ thuộc hàm {TênNCCĐịachỉ; TênNCC, Sảnphẩm 


Giá}. Với lược đồ này ta thấy dữ liệu dư thừa rất lớn, chẳng hạn địa chỉ của mỗi
nhà cung cấp được lưu trữ nhiều lần.


Ta có thể tách lược đồ NCC thành 2 lược đồ là NCC1(TênNCC, Địachỉ) và
<b>NCC2(TênNCC, Sảnphẩm, Giá)</b>


Với việc tách này ta thấy mỗi nhà cung cấp chỉ cần lưu một địa chỉ tương
ứng mà không cần lặp đi lặp lại nhiều lần như trong NCC.


Giả sử trên U có tập F các phụ thuộc hàm . Với Z  U, Hình chiều của F lên


Z, ký hiệu là Z(F)={ (X Y F+ | XY  Z }


Ta ký hiệu phép chiếu của F lên mỗi Ui là Fi,. Khi đó phép tách lược đồ
R(U,F) như trên có thể viết là {R1(U1,F1), R2(U2,F2),…,Rn(Un,Fn)} và ký hiệu là


 (R1, R2, ..., Rn) hay =(R1,R2, ..., Rn).


<i><b>2. Phép tách với kết nối không tổn thất (không mất thông tin).</b></i>



( Phép tách không mất mát thông tin- Lossless Join De composition)


Cho lược đồ quan hệ R và tập phụ thuộc hàm F. Phép tách lược đồ R thành
tập các lược đồ R1, . . . , Rn được gọi là tách kết nối khơng tổn thất ( cịn gọi là
khơng mất thông tin) đối với tập phụ thuộc hàm F nếu với mỗi quan hệ r trên R
thoả F thì, ta đều có


r =r1*r2*…*rn = U1(r)* U2(r) * . . . * Un(r)


Như vậy  là tách - kết nối không tổn thất đối với F khi kết nối tự nhiên các


hình chiếu của r lên các tập con thành phần của , ta lại được chính quan hệ r.


Ví dụ về phép tách kết nối tổn thất


</div>
<span class='text_page_counter'>(54)</span><div class='page_container' data-page=54>

Đặt r1 là quan hệ có được bằng cách chiếu r lên
U1(TENNCC,SANPHAM,DONGIA),


Đặt r2 là quan hệ có được bằng cách chiếu r lên U2(TENNCC,DIACHI)
Đặt r’ là quan hệ có được bằng cách kết nối tự nhiên giữa r1 và r2 qua
TENNCC. Chẳng hạn: r


<b>TENNCC DIACHI</b> <b>SANPHAM DONGIA</b>


Hung 12 Nguyễn Kiệm Gạch ống 200
Hung 12 Nguyễn Kiệm Gạch thẻ 250
Hung 40 Nguyễn Oanh Gạch ống 200


<b>r2 r1</b>
<b>TENNCC DIACHI</b>



Hung 12 Nguyễn Kiệm
Hung 40 Nguyễn Oanh


<b>r’ = r1|><|r2</b>
TENNCC


TENNCC DIACHI SANPHAM DONGIA


Hung 12 Nguyễn Kiệm Gạch ống 200


Hung 12 Nguyễn Kiệm Gạch thẻ 250


Hung 40 Nguyễn Oanh Gạch ống 200


Hung 40 Nguyễn Oanh Gạch thẻ 250


Kết quả là r ≠ r’ hay r ≠ r.U1|><|r.U2.


Với kết quả trên, ta nói phép tách ρ(U1,U2) tách R thành U1, U2 là tách-kết
nối (phân rã) mất mát thông tin.


Vậy với điều kiện nào thì phép tách trở thành tách-kết nối khơng mất mát
thơng tin?


<i><b>Thuật tốn kiểm tra tính kết nối không tổn thất của một phép tách</b></i>
<b>TENNCC SANPHAM</b> <b>DONGIA</b>


Hung Gạch ống 200



</div>
<span class='text_page_counter'>(55)</span><div class='page_container' data-page=55>

Dữ liệu vào: lược đồ quan hệ R(A1,A2,…An), tập phụ thuộc hàm F, phép
tách ρ=(U1,U2,…,Uk).


Dữ liệu ra: kết luận phép tách ρ có phải là phép tách kết nối không tổn thất
hay không ?


<i>Phương pháp: </i>


1. Thiết lập bảng với k+1 dòng, n+1 cột . Dịng đầu ghi tên các thuộc tính,
cột đầu ghi các quan hệ Ui. Cột j ứng với thuộc tính Aj (j=1...n), hàng i ứng với
lược đồ quan hệ Ui(i=1…k). Tại ví trí hàng i, cột j ta điền ký hiệu Aj nếu Aj 


Ui, nếu không ta đặt ký hiệu Bij vào vị trí đó.


2. Xét lần lượt các phụ thuộc hàm trong F, áp dụng cho bảng vừa mới thành
lập ở trên. Giả sử xét (X → Y)  F, chúng ta tìm những hàng bằng nhau trên tập


thuộc tính của X, nếu thấy những hàng như vậy ta thay đổi ký hiệu trên các dòng
này để chúng mang giá trị bằng nhau trên Y. Việc thay đổi được thực hiện theo
quy tắc :


+ Nếu một trong hai ký hiệu là ai thì cho ký hiệu kia trở thành ai


+ Nếu cả hai ký hiệu dều có dạng Bij thì lấy tuỳ ý một trong hai ký hiệu đó,
gán chung cho cả hai.


Bước này được tiếp tục cho các phụ thuộc hàm còn lại của F( kể cả việc lặp
lại các PTH đã được áp dụng ) cho đến khi khơng cịn áp dụng được nữa( không
thể thay đổi được giá trị nào trong bảng nữa).



3. Xét bảng kết quả, nếu thấy trong bảng này có một hàng chứa tồn aj
(j=1..n) thì kết luận đó là phép tách kết nối khơng tổn thất (bảo tồn thơng tin) ,
ngược lại là phép kết nối mất mát thông tin.


Ví dụ:


<i><b>Định lý 1: Thuật tốn trên là đúng</b></i>


Trong trường hợp phép tách R thành hai lược đồ con R1 và R2 thì ta có thể
xác định tính tách kết nối không tổn thất bằng định lý sau:


<i><b>Định lý 2: Giả sử </b></i>= (R1(U1),R2(U2)) là một phép tách của R(U) và F là tập
phụ thuộc hàm trên R.Khi đó  là phép tách -kết nối khơng tổn thất (không mất


</div>
<span class='text_page_counter'>(56)</span><div class='page_container' data-page=56>

Chú ý rằng các phụ thuộc hàm trên không nhất thiết thuộc F, chỉ cần thuộc
F+


<i><b>Hệ quả: Cho lược đồ quan hệ R(U), F là tập phụ thuộc hàm trên U và X,Y</b></i>


 U. Nếu (X → Y)  F+ thì phép tách = (R1(U1),R2(U2)) với U1=XY, U2=XZ,
với Z=U\XY là phép tách không mất mát thơng tin


Ví dụ: R(S,N,A,I,P) F={ S → NA, SI → P}.


Xét phép tách: U1(SNA), U2(SIP). Ta có U1U2 =S, U1\ U2 =NA, và ta có
pth S → NA là đúng, nên phép tách trên là khơng tổn thất.


Nếu áp dụng hệ quả ta có thể có phép tách khơng tổn thất như sau:


- Với ptt S → NA , ta tách U1(SNA) còn Z=SNAIP\SNA=IP. 


U2=SZ=SIP. Vậy R được tách thành U1,U2 là phép tách không tổn thất như đaqx
được kiểm tra ở trên.


Vận dụng điều này ta sẽ phân rã được R thành các lước đồ con bảo tồn
thơng tin


<b>3 Phép tách bảo tồn phụ thuộc hàm (decompositions that preserve</b>
<b>dependencies)</b>


Thơng thường chúng ta mong muốn một phép tách phải có tính chất khơng
mất mát thơng tin bởi vì nó đảm bảo rằng một quan hệ nào đó có thể được phục
hồi từ các quan hệ chiếu của nó. Một tính chất quan trọng khác của phép tách
quan hệ R thành =R1, R2, ...,Rk là tập các phụ thuộc hàm F trên R phải được suy
diễn ra bởi tập các phụ thuộc hàm chiếu của F trên Ri, với i=1, 2,...,k.


<b>Định nghĩa: Cho phân rã ρ =(R1(U</b>1),R2(U2),…,Rk(Ui)) của một lược đồ
quan hệ R, và một tập phụ thuộc hàm F. Hình chiếu của F trên một tập các thuộc
tính Ui ký hiệu Ui(F) là tập các phụ thuộc hàm X → Y  F+ sao cho XY  Ui.


Ui(F)=Fi+={ X → Y| X → Y  F+ và XY  Ui}
Ta nói phân rã ρ bảo tồn tập phụ thuộc hàm F nếu
F+<sub> = (</sub><sub></sub><sub>ΠUi(F)</sub>+<sub> với i=1..k</sub>


Hệ quả: F+  (ΠUi(F)+ với i=1..k


</div>
<span class='text_page_counter'>(57)</span><div class='page_container' data-page=57>

ta xác định xem nó có là thành viên của tập phụ thuộc hàm G = ΠUi(F) hay


không. Ta không cần xác định chiều ngược lại.
VI. CHUẨN HOÁ LƯỢC ĐỒ QUAN HỆ
<i><b>1. Các khái niệm: </b></i>



* Chuẩn hoá lược đồ quan hệ là quá trình phân tách các lược đồ quan hệ
thành các lược đồ nhỏ hơn hay biến đổi về các dạng chuẩn thích hợp để tránh các
dị thường về dữ liệu.


<i>* Lược đồ được chuẩn hoá là lược đồ trong đó miền trị của mỗi thuộc tính</i>
chỉ chứa các giá trị nguyên tố (không phân nhỏ được nữa), do đó mỗi giá trị trong
các quan hệ cũng là các giá trị nguyên tố.


* Lược đồ có chứa các miền trị không nguyên tố được gọi là lược đồ khơng
<i>chuẩn hố.</i>


Sau đây ta chỉ xem xét các lược đồ chuẩn hoá.


<i><b>Định nghĩa 1: Cho lược đồ quan hệ R trên tập thuộc tính U = { A</b></i>1, ... , An}.
Thuộc tính AU được gọi là thuộc tính khố nếu A là thành phần của một khố


nào đó của R. Ngược lại A được gọi là thuộc tính khơng khố.


Ví dụ: Cho lược đồ quan hệ R trên tập thuộc tính U = { A, B, C, D} và các
phụ thuộc hàm AB C, B  D, BC A. Khi đó các khố của R là AB và BC


nên A, B, C là thuộc tính khố, cịn D là thuộc tính khơng khố.


<i><b>Định nghĩa 2: Cho lược đồ quan hệ R(U). X,Y </b></i>U, A U ; Ta nói rằng Y


phụ thuộc hàm đầy đủ vào X nếu:
- XY  F+


- Với mọi tập con thực sự X' của X thì X'Y khơng thuộc F+



Ngược lại, chúng ta sẽ nói rằng Y phụ thuộc bộ phận vào X


<i><b>Định nghĩa 3: Cho lược đồ quan hệ R(U). X </b></i> U, A U. chúng ta nói


rằng A là phụ thuộc bắc cầu vào X nếu tồn tại Y  U sao cho X Y, Y  A


thuộc F+<sub> nhưng Y </sub>


 X khơng thuộc F+ với A XY.


Ngược lại ta nói rằng A không phụ thuộc bắc cầu vào X hay A phụ thuộc
trực tiếp vào X


<i><b>2. Các dạng chuẩn </b></i>


</div>
<span class='text_page_counter'>(58)</span><div class='page_container' data-page=58>

<b>a. Dạng chuẩn 1 ( First Normal Forrm - 1NF)</b>


Định nghĩa 4: Lược đồ quan hệ R được gọi là ở dạng chuẩn 1 nếu và chỉ
nếu toàn bộ các miền giá trị của các thuộc tính trong R đều chỉ chứa các giá trị
nguyên tố.


<i>* Như vậy mọi lược đồ chuẩn hoá đều ở dạng chuẩn 1.</i>
<b>b. Dạng chuẩn 2 ( Second Normal Forrm- 2NF)</b>


Định nghĩa 5: Lược đồ quan hệ R được gọi là ở dạng chuẩn 2 nếu:
i) R đã ở dạng chuẩn 1


ii) Mọi thuộc tính khơng khố của R đều phụ thuộc hàm đầy đủ vào khố
chính.



Nhắc lại định nghĩa một thuộc tính pth đầy đủ vào một tập: Cho lược đồ
quan hệ R(U). XU, A U ; Ta nói rằng A phụ thuộc hàm đầy đủ vào X nếu:


- XA  F+


- Với mọi tập con thực sự X' của X thì X'A không thuộc F+


Ngược lại, chúng ta sẽ nói rằng A phụ thuộc bộ phận vào X
<b>c. Dạng chuẩn 3 ( Third Normal Forrm - 3NF)</b>


<i> Định nghĩa 6: Lược đồ quan hệ R được gọi là ở dạng chuẩn 3 (3NF) nếu:</i>
i) R đã ở dạng chuẩn 2.


ii) Mọi thuộc tính khơng khố của R đều khơng phụ thuộc bắc cầu vào khố
chính của R.


<b>d. Dạng chuẩn Boyce-Codd (Boyce-Codd Normal Forrm -BCNF )</b>


<i>Định nghĩa 7: Lược đồ quan hệ R với tập phụ thuộc hàm F được gọi là ở</i>
dạng chuẩn Boyce-codd nếu với mọi XA  F+ và A X thì X chứa một khóa


của R( nói cách khác, X là siêu khóa). Nói cách khác, sơ đồ quan hệ R chỉ có các
phụ thuộc hàm không tầm thường là những phụ thuộc hàm trong đó một khóa xác
định hàm một hay nhiều thuộc tính khác.


Định lý: Mọi lược đồ quan hệ R với tập phụ thuộc hàm F ở dạng chuẩn
Boyce -Codd thì cũng ở dạng chuẩn ba.


<i><b>3. Phép tách đưa lược đồ quan hệ về dạng chuẩn.</b></i>



</div>
<span class='text_page_counter'>(59)</span><div class='page_container' data-page=59>

Bổ đề : a. Giả sử R là một lược đồ quan hệ với tập phụ thuộc hàm F. Đặt


=(R1,R2, ..., Rk) là một phép tách không mất thông tin của R đối với F. Với mối
i=1, 2, ..., k, gọi Fi là hình chiếu của F lên Ri và đặt =(S1, S2,...,Sm) là một phép
không mất mát thông tin của Ri đối với Fi. Thì phép tách R thành =(R1,R2, ...,
Rn-1, S1, S2,...,Sm, Ri+1, ..., Rk) là một pháp tách không mất thơng tin đối với F.


b. Giả sư có R, F và =(R1,R2, ..., Rk),

= (R1,R2, ..., Rk, Rk+1, ..., Rn) là một
phép tách của R thành tập các lược đồ chứa các lược đồ của  thì

là một phép


tách khơng mất thơng tin


<i>Thuật tố3.1: tách khơng mất thông tin về dạng chuẩn Boyce-codd</i>
+ Vào: Lược đồ quan hệ R(U). Tập phụ thuộc hàm F.


+ Ra:  một phép tách không mất mát thông tin bao gồm một tập các sơ đồ


con trong đó mỗi sơ đồ đều ở dạng chuẩn Boyce-codd với các phụ thuộc hàm là
hình chiếu của F lên sơ đồ đó.


Phương pháp:


- Chúng ta xây dựng phép tách  đối với R theo phương pháp lặp. Mỗi lần


lặp,  sẽ được tách tiếp với một phép tách không mất mát thông tin đối với F


- Ban đầu, đặt =(R). Nêu S là một sơ đồ quan hệ trong  không ở dạng


chuẩn Boyce-codd, xét một phụ thuộc hàm XA của S, với điều kiện X khơng



chứa khóa của S và A X. Ta thay thế S bởi S1, S2 với S1= A {X} và S2={S}\A
- Tiếp tục quá trình cho đến khi mọi sơ đồ con đều ở dạng chuẩn
Boyce-codd, chúng ta sẽ xây dựng được phép tách khơng mất mát thơng tin chuẩn hóa R
về dạng BCNF.


<i><b>3.2 Phép tách bảo toàn tập phụ thuộc hàm về dạng chuẩn ba</b></i>
<i>Thuật tốn3.2: Tách bảo tồn tập phụ thuộc hàm về dạng chuẩn ba </i>


+ Vào: Lược đồ quan hệ R(U). Tập phụ thuộc hàm F, khơng mất tính tổng
quát giả sử F là phủ tối thiểu.


+ Ra:  ={R1(U1), ...,Rm(Um) | Ri(Ui), i=1, ..., m là 3NF} với phép tách bảo
toàn phụ thuộc hàm.


+ Phương pháp:


</div>
<span class='text_page_counter'>(60)</span><div class='page_container' data-page=60>

Nếu U0  thì lấy R0(U0).


2) Nếu L  A F mà LA = U \ U0 thì  =(R0(U0), R1(U \ U0)) là phép tách
thành 3NF


3) Ngược lại, kết quả ra bao gồm các lược đồ XA ứng với một phụ thuộc
hàm X  A trong F. Tuy nhiên, nếu  XA1, ..., XAk thì chúng ta có thể sử
dụng lược đồ XA1. . . Ak thay cho XAi với i=1,2,...,k


<i><b>3.3 Phép tách không mất thơng tin và bảo tồn tập phụ thuộc hàm về</b></i>
<i><b>dạng chuẩn ba</b></i>


Định lý: Giả sử  là kết quả của phép tách R theo thuật toán 3.2 và X là một



khóa của R thì = {X} là một phép tách bảo tồn phụ thuộc hàm và khơng


mất mát thơng tin chuẩn hóa R về dạng chuẩn ba.


Thuật tốn 3.3: Tách không mất mát thông tin và bảo toàn tập phụ thuộc
hàm về dạng chuẩn ba


+ Vào: Lược đồ quan hệ R(U). Tập phụ thuộc hàm F.


+ Ra:  ={R1(U1), ...,Rm(Um) | Ri(Ui), i=1, ..., m là 3NF} với phép tách khơng
mất mát thơng tin và bảo tồn tập phụ thuộc hàm.


+ Phương pháp:


<i>Bước 1: Tìm phủ tối thiểu F' của F. </i>


Giả sử F'={ XjAij,i=1,2,...,n,j=1,2,...m}
<i>Bước 2: </i>


i) Đặt U0= X với X là tập các thuộc tính khơng xuất hiện trong bất kỳ một
phụ thuộc hàm nào (cả vế trái lẫn vế phải) của F (U0 có thể bằng rỗng).


Nếu U0  thì lấy R0(U0).


ii) Nếu L  A F mà LA = U \ U0 thì  =(R0(U0), R1(U \ U0)) là phép tách
thành 3NF


iii) Ngược lại, kết quả ra bao gồm các lược đồ XA ứng với một phụ thuộc
hàm X  A trong F. Tuy nhiên, nếu  XA1, ..., XAk thì chúng ta có thể sử


dụng lược đồ XA1. . . Ak thay cho XAi với i=1,2,...,k.


Giả sử  ={R0(U0), R1(U1), ...,Rm(Um)}
<i>Bước 3: </i>


</div>
<span class='text_page_counter'>(61)</span><div class='page_container' data-page=61>

ii) Nếu tồn tại Ui mà K  Ui thì (Ri(Ui), R0(U0)) là lược đồ chuẩn hố 3NF
khơng mất mát thơng tin và bảo tồn phụ thuộc hàm của R(U)


iii) Nếu không tồn tại Ui thoả ii) nhưng tồn tại Ui mà K U0  Ui thì ta có:


(Ri(Ui), R0(K) với i 0) (thay U0 =K) là lược đồ chuẩn hố 3NF khơng mất mát
thơng tin và bảo tồn phụ thuộc hàm của R(U)


iv) Nếu không tồn tại Ui thoả iii) thì (Ri(Ui), R0(U0), R(K)) là lược đồ
chuẩn hố 3NF khơng mất mát thơng tin và bảo tồn phụ thuộc hàm của R(U).


Ví dụ 1: Cho lược đồ quan hệ R(U), với U={C, T, H, R, S,G} và tập phụ
thuộc hàm F={CT, HTR, HRC, CSG, HSR}. Hãy tách lược đồ R thành


dạng 3NF không mất mát thông tin.
1. Phủ tối thiểu của F là F'=F


2. * Khơng tồn tại thuộc tính khơng xuất hiện trong mọi PTH của F'
(U0=)


* Không tồn tại PTH L  A mà LA = U \ U0


* Khơng tồn tại các PTH có vế trái giống nhau


Vậy ta có phép tách là (R1(CT), R2(HTR), R3(HRC), R4(CSG), R5(HSR)).


3. Ta tìm được một khố của R là K=SH. Do K  U5=SHR nên (R1(CT),
R2(HTR), R3(HRC), R4(CSG), R5(HSR)) là lược đồ chuẩn hố khơng mất mát
thơng tin.


Ví dụ 2: Cho lược đồ quan hệ R(U) với U= {A, B, C, D, E, F, G} và tập phụ
thuộc hàm F={ABC, DE, ADF}. Hãy tách lược đồ quan hệ trên thành tập


các lược đồ dạng 3NF với phép tách khơng mất mát thơng tin.
1. Tìm phủ tối thiểu F' của F


Ta có F' = {AB, A C, DE, AD F}


2. Tách


i) Do G có mặt trong bất kỳ PTH nào của F' nên đặt U0 = G và xác định lược
đồ R0(G)


ii) Không tồn tại phụ thuộc hàm dạng L  A mà LA = U - U0
iii) Từ A B, A  C ta xác định lược đồ : R1(ABC)


</div>
<span class='text_page_counter'>(62)</span><div class='page_container' data-page=62>

Vậy phép tách là:  (R0(G),R1(ABC), R2(DE), R3(ADF)).
3. Đưa ra kết quả:


+ Ta tìm được một khố của U là: K= ADG
+ Không tồn tại Ui mà K  Ui


+ Tồn tại U3= ADF để K = ADG U3G = ADGF nên ta có phép tách
thành các lược đồ 3NF không mất mát thông tin của R là:  (R0(ADG),
R1(ABC), R2(DE), R3(ADF)).



<i><b>Chú ý: Ta có thể chuẩn hố lược đồ quan hệ về 3NF bằng phương pháp sơ</b></i>
đồ:


 <i>Chuẩn hoá về 1NF và vẽ sơ đồ</i>


 <i>Chuẩn hoá về 2NF: Tách các phụ thuộc hàm bộ phận</i>
 <i>Chuẩn hoá về 3NF: Tách các phụ thuộc hàm bắc cầu.</i>
<b>Câu hỏi và bài tập</b>


1. Cho lược đồ quan hệ R, quan hệ r xác định trên R và tập phụ thuộc hàm
F = {AB  E, AG  I, BE  I, E  G, GI  H}


Chứng minh rằng nếu quan hệ r xác định trên R thoả F thì r cũng thoả
ABGH.


2. Cho lược đồ quan hệ R, quan hệ r xác định trên R và tập phụ thuộc hàm
F = {AB  C, B  D, CD  E, CE  GH, G  A}


Chứng minh rằng nếu quan hệ r xác định trên R thoả F thì r cũng thoả
ABE, ABG.


3. Cho lược đồ quan hệ R trên tập thuộc tính U={ A, B, C, D, E, F, G, H }
và tập phụ thuộc hàm F = {A  D, AB  DE, CE  G, E  H}


a. Tính (AB)+<sub>.</sub>


b. Tìm các khố của R.


4. Cho lược đồ quan hệ R(U) với U = { A, B, C, D, E, F, G, H, I, K, L } và
tập phụ thuộc hàm



F = {BK  FG, G  F, A  CDL, ABEK  H}


Hãy tìm một khố của R.


</div>
<span class='text_page_counter'>(63)</span><div class='page_container' data-page=63>

U={A, B, C, D, E, F, G, H}


F={A  CD, C D, EG  F, B  H}


Hãy tách lược đồ trên thành tập các lược đồ 3NF với phép tách không mất
mát thông tin.


6. Cho lược đồ quan hệ R trên tập thuộc tính U={A, B, C, D, E, F, G, H} và
tập phụ thuộc hàm


F = {AEF  CD, A  GH, EF  B, G  H}


Hãy tách lược đồ R thành tập các lược đồ ở dạng chuẩn 3 với phép tách
không mất mát thông tin.


7. Cho lược đồ quan hệ S(U) với U = {A, B, C, D, E} và tập phụ thuộc hàm
F = {A  BC, B  C, AD  E}


Hãy tách lược đồ S thành tập các lược đồ 3NF với phép tách không mất mát
thông tin.


<b>Chương V</b>
<b>TỐI ƯU HOÁ CÂU HỎI</b>


Như ta đã biết, mỗi biểu thức khi tính tốn trên máy đều phải trả một giá


nhất định về thời gian, bộ nhớ. Do đó vấn đề làm thế nào để giảm bớt thời gian
tính tốn, giảm bộ nhớ càng nhiều càng tốt là một vấn đề cần quan tâm. Để đạt
được điều này, trước khi thực hiện các câu hỏi ta cần phải thực hiện các phép
biến đổi thích hợp sao cho chi phí về bộ nhớ, thời gian tính tốn của biểu thức
nhận được giảm so với thời gian tính tốn của biểu thức ban đầu. Cơng việc này
được gọi là tối ưu hố câu hỏi (Optimiztation). Tuy nhiên việc tối ưu hoá khơng
nhất thiết phải tối ưu trên mọi khả năng có thể của các cách cài đặt các câu hỏi.
Trong phạm vi môn học này ta chỉ quan tâm đến một số phương pháp tối ưu hoá
các biểu thức quan hệ, trong đó chủ yếu quan tâm đến việc xử lý các biểu thức có
liên quan đến các phép kết nối, phép tích đề các.


Đ1. CHIẾN LƯỢC TỐI ƯU HOÁ CƠ BẢN


</div>
<span class='text_page_counter'>(64)</span><div class='page_container' data-page=64>

của quan hệ r1 gồm n bộ với quan hệ r2 gồm m bộ ta được quan hệ gồm mn bộ
bằng cách nhân mỗi bộ của r1 với mỗi bộ của r2. Hơn nữa đối với các phép toán
này bộ nhớ cũng rất tốn kém. Vì vậy chiến lược tối ưu hố câu hỏi cơ bản là <i><b>tìm</b></i>
<i><b>cách tổ chức lại câu hỏi để giảm bớt thời gian tính tốn của biểu thức.</b></i>


Ví dụ 1: Cho CSDL thư viện bao gồm các quan hệ sau:
SACH(MaS, TenS, TenTG, MaNXB): Quan hệ sách.


NHAXB(MaNXB, Tennxb, ĐCXB, ĐTNXB): Quan hệ nhà xuất bản.
DOCGIA(SOtheĐG, TenDG, ĐCĐG, ĐTĐG): Quan hệ độc giả.
MUON( SOtheĐG, MaS, NgayM): Quan hệ sổ mượn.


Biểu thức đại số quan hệ trả lời câu hỏi: Đưa ra tên của những cuốn sách
đã cho mượn trước ngày 1/4/1992 được viết


TenS(ngayM < {1/4/1992}(MUON * SACH))



Ta có thể đưa biểu thức đó về biểu thức tương đương sau đây tối ưu hơn


TenS(MãS (ngayM< {1/4/2000}(MUON))) * TenS,MãS (SACH))
Đ2. CÁC CHIẾN LƯỢC TỐI ƯU TỔNG QUÁT


Ullman đã đưa ra 6 chiến lược tổng quát để tối ưu hoá câu hỏi sau đây:
1. Đưa các phép chọn, chiếu thực hiện sớm nhất có thể.


2. Tổ hợp những phép chọn với phép tích đề các thành phép kết nối.
3. Tổ hợp dãy các phép tính một ngơi như phép chọn, phép chiếu.
4. Tìm các biểu thức con chung trong một biểu thức.


5. Xử lý các tệp trước khi tính tốn (Chẳng hạn sắp xếp, tạo tệp chỉ số).
6. Đánh giá trước khi thực hiện tính tốn.


Đ3. CÁC PHÉP BIẾN ĐỔI TƯƠNG ĐƯƠNG


Để thực hiện việc tối ưu hoá biểu thức đại số quan hệ, ta dựa vào các phép
biến đổi tương đương các biểu thức quan hệ. Giả sử E1 và E2 là các biểu thức
quan hệ, F là biểu thức chọn trên các thuộc tính của E1 và E2. Khi đó ta có các
phép biến đổi tương đương sau:


</div>
<span class='text_page_counter'>(65)</span><div class='page_container' data-page=65>

(R1 E1 R2) E2 R3 = R1 E1 (R2E2 R3 ) với E1 là các điều kết nối R1 với R2, E2
là các điều kết nối R2 với R3


2. Nếu E1, E2 và E3 là các biểu thức điều kiện thì:


E1(E2 . . .(En (R))) = E1  E2 . . .  En(R)
3. X (Y(R)) = X(R) với X  Y



4. E (X(R)) = X (E (R)) với E=E(X) là biểu thức chọn phát biểu trên X
5. E (R1(X)  R2(Y)) = E1 (R1(X)) E2(R2(Y) ) với E=E1(X)  E2(Y)
E (R1(X)  R2(Y)) = E1 (R1(X))  R2(X) với E=E1(X)


E (R1(X)  R2(Y)) = E2 (E1(R1(X))  R2(Y)) với E=E1(X)  E2(XY)
6. E (R1 R2) = E (R1) E(R2 )


7. E (R1 - R2) = E (R1) - E (R2 )


8. X(R1(Y) x R2(Z))= XY (R1(X)) x X z (R2(Z))
9. X(R1 R2)= X (R1) X(R2)


Đ4. CÁC VÍ DỤ


Ví dụ 1: Cho CSDL thư viện bao gồm các quan hệ sau:
SACH(MaS , TenS, TenTG, MaNXB): Quan hệ sách.


NHAXB(MaNXB, TenNXB, ĐCXB, ĐTNXB): Quan hệ nhà xuất bản.
DOCGIA(SOtheDG , TenĐG, ĐCĐG, ĐTĐG,): Quan hệ độc giả.
MUON( SOtheDG, MaS, NgayM): Quan hệ sổ mượn.


Hãy đưa ra tên của những cuốn sách đã cho mượn trước ngày 1/4/1992.
Ta có biểu thức đại số quan hệ TenS(ngayM< {1/4/2000}(MUON * SACH))
Ta có thể biểu diễn biểu thức trên dạng cây như sau:


r3 (r3=TenS(r2))


r2 (r2=ngayM <{1/4/2000} (r1))


r1 (r1=SACH*MUON)



SACH MUON


</div>
<span class='text_page_counter'>(66)</span><div class='page_container' data-page=66>

+ Ta thấy phép chọn  ngayM< {1/4/2000} chỉ thuộc quan hệ MUON nên ta có thể
thay thế  ngayM < {1/4/2000} (MUON * SACH ) bởi  ngayM < {1/4/2000} (MUON) *
SACH . Do đó ta đã đẩy được phép chọn này xuống thực hiện sớm hơn. Khi đó ta


r3 (r3=TenS(r1))
r1 (r1=SACH* r2)


r2 (r2=ngayM <{1/4/2000} (MUON))
SACH MUON


+ Vì thơng tin cuối cùng ta cần chỉ có TênS nên ta có thể đưa thêm các phép
chiếu vào để làm giảm bớt kích thước các quan hệ trước khi kết nối. Do đó ta có


r3 (r3=TenS(r1))
r1 (r1=r4* r2)


r4 r2 (r4=TenS, MãS (SACH)), r2=ngayM
<{1/4/2000} (MUON))


SACH MUON


r3 (r3=TenS(r1))
r1 (r1=r4* r5)


r5 (r5=MãS(r2))



r4 r2 (r4=TenS, MãS (SACH)), r2=ngayM <{1/4/2000} (MUON))


SACH MUON


Như vậy biểu thức đại số tối ưu thu được là


TenS(MãS (ngayM< {1/4/2000}(MUON))) * TenS,MãS (SACH))
Ví dụ 2: Cho 3 quan hệ: q(ABD), r(BCF), s(FG)


Hãy tối ưu hoá biểu thức đại số sau:


B='b' (BF(q*r) - BF(r*s))
Ta có:


</div>
<span class='text_page_counter'>(67)</span><div class='page_container' data-page=67>

= B='b' (BF(q*r)) - B='b'(BF(r*s)) (theo 7)
= BF (B='b' ( q*r)) - BF ( B='b'(r*s)) (theo 4)


= BF(B='b' ( q)* B='b' (r)) - BF ( B='b'(r)*s) (vì s(FG) khơng chứa B)


</div>
<span class='text_page_counter'>(68)</span><div class='page_container' data-page=68>

<b>Câu hỏi và bài tập</b>


1. Cho CSDL gồm các quan hệ sau:


SV(MãSV, TênSV, MãKh, Địachỉ, Nămsinh)


CBGD(MãCB, TênCB, MãKh, Mơndạy, ĐThoại)
KHOA(MãKh, TênKh, Vịtrí, TrKhoa).


Tìm lời giải đại số tối ưu cho các câu hỏi sau:



a. Cho xem danh sách các sinh viên với (TênSV, Nămsinh) có địa chỉ ở
"Vinh" và học khoa "CNTT"


b. Cho xem Tên, môn dạy, điện thoại của các cán bộ khoa "CNTT"
2. Cho 3 quan hệ q(ABD), r(BDF), s(FG)


Hãy tối ưu hoá các biểu thức đại số sau:
a. AD ( q * r * G='g'(s))


b. B (A='a' ( D=d (q) * (r - BDF (r * s ))))
3. Cho cơ sở dữ liệu gồm các quan hệ:


MH(MãMH, TênMH, Quycách, ĐVT, Đgiá) - Quan hệ mặt hàng
NCC(MãNCC, TênNCC, ĐCNCC, ĐTNCC) -Quan hệ nhà cung cấp


MH_NCC(MãNCC, MãMH, NgàyCC, SLCC)-Quan hệ mặt hàng đã cung
cấp


Hãy đưa ra biểu thức đại số quan hệ tối ưu trả lời các câu hỏi sau đây
a. Cho xem mã của các nhà cung cấp đã cung cấp ít nhất một mặt hàng.
b. Cho xem mã, tên của các nhà cung cấp không cung cấp một mặt hàng
nào.


c. Cho xem mã số, tên, điện thoại của các nhà cung cấp đã cung cấp mặt
hàng có mã số 10.


4. Cho cơ sở dữ liệu gồm 3 quan hệ sau:
TACGIA(MãTG, TênTG, Quêquán)


NXB(MãNXB, TênNXB, Địachỉ, Điệnthoại)



</div>
<span class='text_page_counter'>(69)</span><div class='page_container' data-page=69>

Hãy đưa ra biểu thức đại số quan hệ tối ưu trả lời các câu hỏi sau đây
a. Cho biết tên những cuốn sách xuất bản năm 1998.


b. Cho biết mã, tên những cuốn sách xuất bản năm 1998 và có số lượng xuất
bản trên 1000 cuốn.


c. Cho biết tên những cuốn sách xuất bản năm 1998 của "Nhà xuất bản Giáo
dục".


</div>
<span class='text_page_counter'>(70)</span><div class='page_container' data-page=70>

<b>Chương VI</b>
<b>ĐIỀU KHIỂN KHAI THÁC TƯƠNG TRANH</b>


Cơ sở dữ liệu phục vụ nhiều người dùng. Tuy mỗi người thực hiện một
nhiệm vụ khác nhau, nhưng họ có thể cùng truy nhập đến một dữ liệu. Do vậy
trong cùng một khoảng thời gian có thể xảy ra sự tranh chấp dữ liệu giữa các
người dùng khác nhau. Sự tranh chấp đó có thể là tranh chấp về một dữ liệu hoặc
về thứ tự truy cập. Khi đó họ đã chấp nhận khai thác tương tranh.


Điều khiển khai thác tương tranh là một trong những chức năng của hệ
quản trị cơ sở dữ liệu nhằm đảm bảo việc điều khiển các khai thác đồng thời dữ
liệu và cho kết quả như khi khai thác tuần tự. Bản chất của điều khiển khai thác
tương tranh là phân phối thời gian thực hiện, chia sẽ dữ liệu cho những người sử
dụng.


Đ1. CÁC KHÁI NIỆM
<b>1.1. Tồn vẹn dữ liệu</b>


Tính tồn vẹn dữ liệu là sự bảo vệ dữ liệu trong cơ sở dữ liệu chống lại sự
truy nhập, sửa đổi hay phá huỷ khơng có căn cứ. Đảm bảo tính đúng đắn, chính


xác của dữ liệu. Các điều kiện toàn vẹn dữ liệu là những điều cần được kiểm
chứng bởi các dữ liệu ở những thời điểm đã định.


<b>Định nghĩa 1. Điều kiện toàn vẹn dữ liệu là các điều kiện cần được kiểm</b>
chứng bởi các dữ liệu ở những thời điểm đã định.


Các dạng của điều kiện toàn vẹn dữ liệu bao gồm:
- Điều kiện toàn vẹn trên một thuộc tính


- Điều kiện tồn vẹn trên nhiều thuộc tính
- Điều kiện về tính duy nhất


<i><b>a. Điều kiện tồn vẹn trên một thuộc tính.</b></i>


Điều kiện tồn vẹn dữ liệu trên một thuộc tính thường được xác định khi
xác định một dạng dữ liệu sơ cấp. Các điều kiện đó bao gồm:


- Điều kiện về miền giá trị
- Điều kiện về kiểu dữ liệu


</div>
<span class='text_page_counter'>(71)</span><div class='page_container' data-page=71>

Điều kiện toàn vẹn dữ liệu trên nhiều thuộc tính bao gồm các dạng sau:
- Phụ thuộc hàm, phụ thuộc đa trị


- Phụ thuộc tồn tại hay hạn chế
- Điều kiện ràng buộc giải tích


- Điều kiện về sự bất biến của một số đại lượng đối với các phép xử lý.
<i><b>c. Điều kiện về tính duy nhất</b></i>


Điều kiện về tính duy nhất nhằm đảm bảo tính duy nhất của các bộ trong


cơ sở dữ liệu. Điều kiện này thường được gắn với khoá của các quan hệ.


<b>Định nghĩa 2. Cơ sở dữ liệu mà các dữ liệu của nó ln tơn trọng các điều</b>
kiện toàn vẹn được gọi là cơ sở dữ liệu chặt chẽ.


<b>1.2. Giao tác chương trình</b>


<b>Định nghĩa 3. Giao tác là các đơn vị xử lý tuần tự được người sử dụng khai</b>
thác tuỳ ý mà vẫn giữ được tính chặt chẽ của cơ sở dữ liệu.


Nói cách khác các giao tác là các thao tác vừa đủ nhỏ để dễ quản lý mà vẫn
đảm bảo tính chặt chẽ của cơ sở dữ liệu. Những thao tác này không quá nhỏ để
tránh sự phức tạp trong quản lý.


Việc xử lý dữ liệu được chia thành các giao tác. Các giao tác lại có thể chia
thành các phần việc nhỏ hơn mà ta gọi là các hành động.


<b>Định nghĩa 4. Hành động là các lệnh riêng được khai thác bởi hệ thống cho</b>
một giao tác.


<b>1.3. Vấn đề tương tranh, tranh chấp trong khai thác dữ liệu</b>


Khi các giao tác cùng thực hiện trên cùng một dữ liệu trong cùng một
khoảng thời gian, nghĩa là khi có sự tranh chấp về tài nguyên có thể gây ra ra một
số hiện tượng sau:


- Thất lạc phép toán: Đây là hiện tương thường xảy ra. Khi có hai hay nhiều
phép tốn đồng thời tác động lên một dữ liệu trong cùng một khoảng thời gian
nhưng có thể chỉ một phép tốn có hiệu quả.



- Khơng đảm bảo tính chặt chẽ của cơ sở dữ liệu.


</div>
<span class='text_page_counter'>(72)</span><div class='page_container' data-page=72>

Trước hết ta có các định nghĩa sau:


* Modul của hệ thống dùng để điều khiển các khai thác tương tranh các dữ
liệu được gọi là người điều khiển.


* Ta gọi một đơn vị của cơ sở dữ liệu cho phép người sử dụng khai thác và
điều khiển được là một Hạt.


* Phép toán là dãy các hoạt động tạo thành một chức năng trên một hạt, tơn
trọng tính chặt chẽ của cơ sở dữ liệu. Trạng thái của hạt sau khi thực hiện các
phép toán được gọi là kết quả của phép toán.


* Dãy các hoạt động đạt được do tách các hoạt động khác nhau trong các
giao tác T1 , ..., Tn mà vẫn tôn trọng trật tự của các hoạt động của mỗi giao tác
được gọi là khai thác giao tác.


* Một khai thác tôn trọng trật tự của các hoạt động đối với mọi giao tác
tham gia vào khai thác đó được gọi là khai thác tuần tự.


<b>2.2. Khai thác có thứ tự</b>


Khi khai thác dữ liệu, để khơng mất phép tốn và khơng vi phạm các điều
kiện toàn vẹn của cơ sở dữ liệu ta thường sử dụng cách sắp xếp tuần tự các giao
tác, nghĩa là khai thác hết giao tác này mới khai thác giao tác khác.


Ta gọi một khai thác E của các giao tác T1, . . . , Tn là khai thác kế tiếp có
thứ tự nếu có một hoán vị r của (1, 2, . . ., n) sao cho E=< Tr(1), . . . , Tr(n)>. Một
khai thác của các giao tác T1, . . . , Tn được gọi là tuần tự nếu nó cho kết quả như


một khai thác kế tiếp của T1, . . . , Tn.


<b>2.3. Thuộc tính của các phép toán</b>


Như ta đã biết, việc tranh chấp chỉ xảy ra khi có ít nhất hai giao tác đồng
thời trên cùng một hạt nhớ. Do đó nếu hai giao tác thực hiện trên hai hạt độc lập
có thể thực hiện đồng thời mà khơng xảy ra xung đột. Ngồi ra hai giao tác trên
cùng một hạt mà không làm thay đổi giá trị của hạt cũng có thể khai thác đồng
thời mà không sợ xảy ra xung đột.


</div>
<span class='text_page_counter'>(73)</span><div class='page_container' data-page=73>

Đ3. SỬ DỤNG THUẬT TOÁN KHOÁ HAI PHA


Modun điều khiển tương tranh chỉ cho phép khai thác đồng thời trên cùng
một hạt những phép toán tương hợp với nhau. Mỗi hệ quản trị cơ sở dữ liệu có
một cách riêng để mơ tả về các phép tốn có thể tương hợp với nhau. Việc thực
hiện một phép toán phải đảm bảo các mơ tả về tính tương hợp này.


Thao tác khoá một hạt nhớ h cho phép toán M gồm hai hành động sau:
+ LOCK(h, M): Dành cho giao tác Ti khiến modun điều khiển tương tranh
kiểm soát hạt h trước khi thực hiện phép toán M. Hạt h này sẽ được dùng cho
phép toán M cho đến khi M giải phóng h.


+ UNLOCK(h): Thơng báo cho các giao tác khác rằng hạt h đã được giải
phóng.


Tư tưởng của việc sử dụng khố hai pha cho một giao tác là khoá hết các hạt
nhớ h khác nhau cho đến khi hồn thành các phép tốn của giao tác này mới thôi.
Giao tác thoả mãn yêu cầu này gọi là giao tác hai pha.


Một giao tác là hai pha nếu nó khơng LOCK sau khi sử dụng UNLOCK.


Giao tác hai pha có ý nghĩa rất lớn trong việc điều khiển khai thác tương
tranh vì tất cả các khai thác của một tập các giao tác {Ti} hai pha là khai thác có
thứ tự.


Tuy nhiên một điều cần lưu ý là khi một giao tác T khố một hạt nhớ h thì
nảy sinh khố chết vì vậy cần phải có biện pháp ngăn cản và phát hiện khố chết.


Đ4. CÁC THUẬT TỐN CHO PHÉP KHỐ CÁC GIAO TÁC


Để điều khiển tranh chấp, người ta đã sử dụng phương pháp đánh dấu các
giao tác và đánh dấu hạt.


Đánh dấu các giao tác là việc gán trị số cho các giao tác và cho phép sắp xếp
giao tác.


Đánh dấu các hạt là việc gán giá trị số các hạt để nhớ những đánh dấu của
các giao tác cuối cùng đã làm việc trên hạt đó.


Với phương pháp đánh dấu giao tác và đánh dấu hạt, ta có các thuật toán
cho phép khoá các giao tác sau:


</div>
<span class='text_page_counter'>(74)</span><div class='page_container' data-page=74>

Ti hay Tj khi thứ tự đánh dấu không thoả mãn. Khi đó ta có thuật tốn thực hiện
giao tác Ti trên hạt g như sau:


Procedure Read(Ti , g );
if (i>=E(g) then


"khai thác đọc";
E(g):= i
Else ABORT;


End;


Procedure Write (Ti , g);
if (i>= E(g) then


"khai thác ghi";
E(g):= i
Else ABORT;
End;


Một điều cần lưu ý rằng, do thứ tự đánh dấu Ti , Tj không thoả mãn nên cần
thực hiện lại giao tác Ti. Để thực hiện lại giao tác Ti lần nữa, người ta cho Ti một
đánh dấu mới i' (i<j<i' ). Nếu Tj lại cũng mang dấu mới j' (i<j<i'<j' ) thì Ti vẫn
khơng được thực hiện. Vì vậy người ta dùng phương pháp khôi phục lại Ti. Các
bước để khôi phục Ti gồm:


 Khôi phục nội dung trước cũng như đánh dấu hạt được khai thác.
 Làm cho điều khiển mới của trật tự khai thác phù hợp với dấu


<b>b. Thuật toán sắp xếp từng phần: Thuật tốn sắp xếp tồn bộ nhằm sắp</b>
xếp các phép tốn trên các thực thể. Thuật toán sắp xếp từng phần nhằm kiểm tra
các giao tác gồm các phép toán khơng giao hốn được: đọc/ghi, ghi/đọc, ghi/ghi
thực hiện tốt hay không. Các hạt nhớ dùng hai đánh dấu là dấu đọc và dấu ghi.


</div>
<span class='text_page_counter'>(75)</span><div class='page_container' data-page=75>

i) Thực hiện giao tác T<i>i đọc hạt g. Khi đọc cần kiểm tra đánh dấu của T</i>i
với dấu ghi của g. Giao tác Ti được thực hiện khi đánh dấu của nó lớn hơn dấu
ghi trên g.


ii) Thực hiện giao tác T<i>j ghi hạt g. Khi thực hiện giao tác T</i>j cần quan tâm
đến các giao tác đã đọc và ghi trên g được thực hiện trước đó. Việc thực hiện Tj


cần đảm bảo đánh dấu của Tj lớn hơn dấu đọc và dấu ghi của hạt g.


<b>Chương VII</b>
<b>AN TOÀN DỮ LIỆU</b>


Đ1. AN TỒN TRONG CƠ SỞ DỮ LIỆU
<b>1.1. An tồn cơ sở dữ liệu</b>


Khái niệm an toàn dữ liệu đề cập đến việc giữ bí mật và quyền khai thác cơ
sở dữ liệu. Đa số những người sử dụng cơ sở dữ liệu đều muốn cơ sở dữ liệu của
mình được đảm bảo an tồn, bí mật khơng để người khác nhịm vào. Vì vậy cơ sở
dữ liệu phải có khả năng giữ gìn tính cá nhân của dữ liệu.


An toàn dữ liệu là sự bảo vệ dữ liệu trong cơ sở dữ liệu chống lại sự truy
nhập, sửa đổi hay phá huỷ bất hợp pháp. An toàn dữ liệu có thể được nhìn theo
ba khía cạnh chính:


- Tính bảo mật: Nghĩa là ngăn ngừa, phát hiện và chống lại sự xâm nhập cơ
sở dữ liệu bất hợp pháp.


- Tính tồn vẹn: Đảm báo tính tồn vẹn của dữ liệu nhằm tránh các thay đổi
khơng phù hợp.


- Tính sẵn sàng: Việc bảo đảm tính sẵn sàng của dữ liệu nhằm tránh sự từ
chối phục vụ. Điều này có nghĩa là ngăn ngừa, phát hiện, ngăn cản các hành
động từ chối các khả năng của hệ thống.


</div>
<span class='text_page_counter'>(76)</span><div class='page_container' data-page=76>

Vi phạm an toàn cơ sở dữ liệu là việc xâm nhập hay biến đổi không hợp lệ
các thông tin do hệ thống quản lý.



Các vi phạm an toàn cơ sở dữ liệu bao gồm các hành động đọc khơng hợp
lệ, thay đổi hoặc xố dữ liệu khi khơng được phép.


Vi phạm an tồn thơng tin có thể là vi phạm cố ý hay vi phạm không cố ý.
Tuy nhiên, dù cố ý hay vơ ý thì hậu quả do các vi phạm gây ra có thể là rất lớn.
Ta có thể tính đến các hậu quả sau:


+ Sử dụng thông tin không hợp lệ do người dùng không được phép đã đọc
dữ liệu cố ý hay vơ tình.


+ Thay đổi dữ liệu. Việc thay đổi không hợp pháp đã làm thay đổi một phần
thơng tin có liên quan đến các điều kiện tồn vẹn.


+ Từ chối dịch vụ. Điều này dẫn đến việc người dùng không truy nhập được
đến các dữ liệu, hoặc không sử dụng được tài nguyên.


<b>1.3. Các yêu cầu bảo vệ cơ sở dữ liệu</b>


Việc bảo vệ cơ sở dữ liệu để đảm bảo tính an tồn của dữ liệu là một nhiệm
vụ hết sức quan trọng. Bảo vệ dữ liệu khỏi các vi phạm an tồn có nghĩa là bảo
vệ các dữ liệu khỏi việc đọc hay cập nhật khơng được phép một cách cố ý hay vơ
tình. Các yêu cầu về việc bảo vệ bao gồm:


- Tránh các truy nhập không hợp pháp.
- Tránh suy diễn.


- Đảm bảo tính tồn vẹn của dữ liệu.


Đ2. CÁC ĐIỀU KHIỂN AN TỒN DỮ LIỆU



Để bảo vệ an tồn cơ sở dữ liệu, người ta thường dùng các biện pháp sau:
- Điều khiển luồng thông tin


- Điều khiển suy diễn
- Điều khiển truy nhập.


<b>2.1. Điều khiển luồng thông tin</b>


Điều khiển luồng thông tin là một biện pháp nhằm kiểm tra xem nội dung
trong luồng thông tin trao đổi giữa hai đối tượng khai thác có bị rị rỉ sang các đối
tượng khác khơng.


</div>
<span class='text_page_counter'>(77)</span><div class='page_container' data-page=77>

<i>Thơng tin có thể rị rỉ trên kênh truyền giữ X và Y</i>
<b>2.2. Điều khiển suy diễn</b>


Điều khiển suy diễn nhằm bảo vệ cơ sở dữ liệu khỏi các truy nhập gián tiếp.
Truy nhập gián tiếp thường xảy ra trên các kênh suy diễn. Một kênh suy diễn là
một kênh mà người sử dụng có thể tìm được X và suy ra được Y nhờ Y=f(X).
Các kênh suy diễn chính làm thất thốt thơng tin bao gồm:


- Truy nhập gián tiếp: Việc này thường xảy ra khi người khơng có quyền
truy nhập thu được tập dữ liệu Y thông qua một câu hỏi trên tập dữ liệu X được
phép sử dụng.


- Dữ liệu tương quan: Là kênh suy diễn mà trong đó dữ liệu X được phép
truy nhập có quan hệ ngữ nghĩa với dữ liệu Y cần bảo vệ.


- Mất dữ liệu: Đây là kênh suy diễn giúp người sử dụng biết được sự có mặt
của X. Việc mất dữ liệu thường xảy ra khi để lộ tên của một đối tượng, làm cho
người khơng có quyền truy nhập dữ liệu của đối tượng vẫn có thể truy nhập được.


Ngồi ra khi thực hiện các suy diễn thống kê, suy luận trên dữ liệu cũng có khả
năng mất dữ liệu.


<b>2.3. Điều khiển truy nhập</b>


Điều khiển quyền truy nhập trong các hệ thống thông tin nhằm đảm bảo tất
cả các truy nhập đối tượng hệ thống tuân theo kiểu cách và quy luật bảo vệ hệ
thống. Một hệ thống điều khiển quyền truy nhập gồm hai chủ thể là người sử
dụng và các quá trình. Các chủ thể này khai thác các dữ liệu, chương trình thơng
qua các phép tốn. Hai thành phần chức năng của một hệ thống điều khiển truy
nhập là:


- Tập các chính sách và luật truy nhập
- Tập các thủ tục điều khiển.


<i><b> a. Tập các chính sách và luật truy nhập </b></i>


</div>
<span class='text_page_counter'>(78)</span><div class='page_container' data-page=78>

luật truy nhập có chức năng diễn tả các chính sách an tồn. Chúng định ra trạng
thái của hệ thống trong thời gian khai thác.


<i>Thủ tục điều khiển</i>


<i><b>b. Tập các thủ tục điều khiển</b></i>


Tập các thủ tục điều khiển hay còn gọi là các cơ chế an tồn có chức năng
kiểm sốt các câu hỏi, cho phép hay từ chối các yêu cầu của các câu hỏi. Các cơ
chế an toàn bao gồm:


+ Các cơ chế ngoài: Gồm các biện pháp điều khiển vật lý và các chức năng
quản trị để ngăn cản các truy nhập đến các tài nguyên vật lý.



+ Các cơ chế trong: Có chức năng xác định tính đúng đắn của người dùng
và xử lý các u cầu từ bên ngồi.


MỤC LỤC


Tr
ang


<b>Lời nói đầu</b> 1


<b>Chương I. Tổng quan về cơ sở dữ liệu</b> 2


<b>Đ1. Các khái niệm cơ bản</b> 2


1.1. Dữ liệu và hệ thống tệp cổ điển 2


1.2. Cơ sở dữ liệu 3


1.3. Vai trò của cơ sở dữ liệu 5


Từ chối truy nhập
Cho phép truy nhập
Cần thay đổi yêu cầu
Các thủ tục


điều khiển


<i>Yêu cầu truynhập</i>



Các chính
sách an tồn


</div>
<span class='text_page_counter'>(79)</span><div class='page_container' data-page=79>

1.4. Hệ quản trị cơ sở dữ liệu 5


<b>Đ2. Các mơ hình dữ liệu</b> 10


2.1. Mơ hình hố trong tin học 10


2.2. Các mơ hình dữ liệu 11


<b>Đ3. Ngơn ngữ điều khiển dữ liệu</b> 16


<b>Chương II. Mơ hình dữ liệu quan hệ</b> 17


<b>Đ1. Các định nghĩa</b> 17


<b>Đ2. Cơ sở dữ liệu quan hệ và hệ cơ sở dữ liệu quan hệ</b> 19


2.1. Các khái niệm 19


2.2. Tạo lập cơ sở dữ liệu quan hệ 19


<b>Đ3. Định nghĩa siêu khoá và khoá</b> 20


<b>Đ4. Các phép tính trên cơ sở dữ liệu quan hệ</b> 21
<b>Chương III. Ngôn ngữ định nghĩa và thao tác dữ liệu</b> 24


<b>Đ1. Đại số quan hệ</b> 24



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


1.2. Đại số hệ và Đại số quan hệ 33


1.3. Cài đặt các phép toán đại số quan hệ 37


1.4. Ngôn ngữ đại số quan hệ 42


1.5. Các ví dụ về tìm kiếm bằng ngơn ngữ đại số quan hệ 44


<b>Đ.2. Ngôn ngữ SQL</b> 46


2.1. Các lệnh về kiến trúc cơ sở dữ liệu 46


2.2. Các lệnh cập nhật dữ liệu 49


2.3. Các hàm mẫu 53


2.4. Các lệnh truy vấn 53


2.5. Các mệnh đề an toàn dữ liệu của SQL 57


<b>Đ3. Ngôn ngữ QBE</b> 58


<b>Chương IV. Lý thuyết thiết kế cơ sở dữ liệu quan hệ</b> 63


<b>Đ1. Phụ thuộc hàm</b> 63


1.1. Đặt vấn đề 63



1.2. Định nghĩa phụ thuộc hàm 64


</div>
<span class='text_page_counter'>(80)</span><div class='page_container' data-page=80>

1.4. Bao đống của tập phụ thuộc hàm 64


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


1.6. Định nghĩa khố và siêu khoá 65


1.7. Tập phụ thuộc hàm tối thiểu 66


<b>Đ2. Phép tách các lược đồ quan hệ</b> 68


<b>Đ3. Chuẩn hoá lược đồ quan hệ</b> 69


<b>Chương V. Tối ưu hoá câu hỏi</b> 75


<b>Đ1. Chiến lược tối ưu hoá cơ bản</b> 75


<b>Đ2. Các chiến lược tối ưu tổng quát</b> 76


<b>Đ3. Các phép biến đổi tương đương</b> 76


<b>Đ4. Các ví dụ</b> 87


<b>Chương VI. Điều khiển khai thác tương tranh</b> 82


<b>Đ1. Các khái niệm</b> 82


1.1 Tồn vẹn dữ liệu 82



1.2 Giao tác chương trình 83


1.3 Vấn đề tương tranh, tranh chấp trong khai thác dữ liệu 84


<b>Đ2. Đặc tính của khai thác khơng xung đột</b> 84


2.1 Các khái niệm 84


2.2 Khai thác có thứ tự 84


2.3 Thuộc tính của các phép tốn 85


<b>Đ3. Sử dụng thuật toán khoá hai pha</b> 85


<b>Đ4. Các thuật toán cho phép khố các giao tác</b> 86


<b>Chương VII. An tồn dữ liệu</b> 88


<b>Đ1. An toàn trong cơ sở dữ liệu</b> 88


1.1 An toàn cơ sở dữ liệu 88


1.2 Vi phạm an toàn cơ sở dữ liệu 88


1.3 Yêu cầu bảo vệ cơ sở dữ liệu 89


<b>Đ2. Điều khiển an toàn dữ liệu</b> 89


2.1 Điều khiển luồng thông tin 89



2.2 Điều khiển suy diễn 90


</div>
<span class='text_page_counter'>(81)</span><div class='page_container' data-page=81></div>
<span class='text_page_counter'>(82)</span><div class='page_container' data-page=82>

<b>TÀI LIỆU THAM KHẢO</b>


1. Đồn Văn Ban, Ngơ Trung Việt, Đặng Văn Hưng, Trần Thị Phiến và
Phạm Ngọc Khơi, Phân tích, thiết kế, cài đặt Hệ thông tin quản lý (Bản dịch),
Viện Tin học, 1990.


2. Thạc Bình Cường, Bài giảng Phân tích và thiết kế hệ thống thông
<i><b>tin, Đại học Bách khoa Hà Nội, 2000.</b></i>


3. Nguyễn An Tế, Giáo trình Nhập mơn cơ sở dữ liệu, Đại học Quốc
gia Thành phố Hồ Chí Minh, 1996.


4. Vũ Đức Thi, Cơ sở dữ liệu, Nhà xuất bản Thống kê Hà nội, 1997.
5. Đỗ Trung Tuấn, Cơ sở dữ liệu, Nhà xuất bản Giáo dục, 1998.


6. Lê Tiến Vương, Nhập môn cơ sở dữ liệu quan hệ, Nhà xuất bản
Khoa học và Kỹ thuật, 1996.


7. C. J. Date, An introduction to database Systems, Addison Weslay
Publishinh Company, 4th Ed., 1986.


8. David Maier, The Theory of Relational Databases, Computer
Science Press, Rockville, 1983.


</div>
<span class='text_page_counter'>(83)</span><div class='page_container' data-page=83>

TỦ SÁCH ĐẠI HỌC SƯ PHẠM VINH



<b>PHẠM QUANG TRÌNH</b>




<b>NHẬP MƠN </b>



<b>CƠ SỞ DỮ LIỆU</b>



</div>
<span class='text_page_counter'>(84)</span><div class='page_container' data-page=84>

<b>PHẠM QUANG TRÌNH</b>



<b>NHẬP MƠN </b>



<b>CƠ SỞ DỮ LIỆU</b>



</div>
<span class='text_page_counter'>(85)</span><div class='page_container' data-page=85></div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×