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

cô sôû döõ lieäu 60t lt 30t th cô sôû döõ lieäu 60t lt 30t th chöông i moät soá khaùi nieäm cô baûn chöông ii caùc caùch tieáp caän moät csdl chöông iii moâ hình döõ lieäu quan heä chöông iv r

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 (356.27 KB, 85 trang )

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

<b>1</b>



<b>CƠ SỞ DỮ LIỆU</b>



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

<b>2</b>


Chương I: MỘT SỐ KHÁI NIỆM CƠ BẢN


Chương II: CÁC CÁCH TIẾP CẬN MỘT CSDL
Chương III. MƠ HÌNH DỮ LIỆU QUAN HỆ


Chương IV: RAØNG BUỘC TOAØN VẸN


ChươngV: CHUẨN HÓA LƯỢC ĐỒ QUAN HỆ
Chương VI : ĐẠI SỐ QUAN HỆ


Chương VII: NGÔN NGỮ TRUY VẤN CSDL
Chương VIII: TỐI ƯU HÓA CÂU TRUY VẤN


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

<b>3</b>



<b>Chương I. MỘT SỐ KHÁI NIỆM CƠ BẢN</b>


<b>NỘI DUNG</b>



Hệ thống tập tin cổ điển


Cơ sở dữ liệu



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

<b>4</b>



Xét hệ thống tập tin quản lý nhân sự của một đơn vị:



Phịng Tổ chức – Hành chính: Lý lịch chi tiết của CBCNV;


Phịng Kế tốn: Phịng, họ tên, lương, phục cấp, ngày công...;
Quản đốc phân xưởng: Họ tên, ngày cơng, ngày nghỉ, ...


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

<b>5</b>


<i><b>**Ưu điểm</b></i>:


– It tốn thời gian. Đầu tư & chi phí thấp.


– Khả năng đáp ứng khai thác nhanh chóng và kịp thời.
<i><b>**Nhược điểm</b></i>:


 Thông tin lưu nhiều nơi <sub></sub> dư thừa <sub></sub> khơng nhất


quán


 Lãng phí thời gian nhập, cập nhật dữ liệu & lưu trữ.
 Sự phối hợp tổ chức và khai thác là khó khăn.


 Thiếu sự chia sẻ thông tin giữa các đơn vị bộ phận.
 Khó khăn khi nâng cấp ứng dụng.


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

<b>6</b>


Cơ sở dữ liệu Là một hệ thống thơng tin có cấu trúc,
được lưu trữ trên các thiết bị mang tính từ tính, phục vụ
việc khai thác thông tin của nhiều người sử dụng một cách
đồng thời với nhiều mục đích khác nhau.


<i>Lưu ý</i>: Các tính chất: <i>Hệ thống, có cấu trúc, nhiều người sử </i>
<i>dụng, khai thác đồng thời, nhiều mục đích khác nhau.</i>



<i><b>**Các vấn đề phát sinh cần giải quyết</b></i>


 Tính chủ quyền bị vi phạm
 Tính nhất quán của dữ liệu
 Vấn đề bảo mật


 Tính an toàn dữ liệu


 Vấn đề tranh chấp dữ liệu khi truy xuất đồng thời


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

<b>7</b>


<b>Là hệ thống các chương trình quản trị CSDL, đồng thời </b>
<b>là cơng cụ giao tiếp giữa người sử dụng hoặc các ứng dụng </b>
<b>với CSDL.</b>


<i><b>Hệ quản trị CSDL cần có</b></i><b>:</b>


<b>a) Từ điển dữ liệu (</b><i><b>Data Dictionary</b></i><b>)</b>


<b>b) Cơ chế giải quyết tranh chấp. (</b><i><b>Quyền và mức độ ưu tiên</b></i><b>)</b>
<b>c) Cơ chế bảo mật dữ liệu. (</b><i><b>Bức tường lửa + mật khẩu</b></i><b>)</b>


<b>d) Cơ chế tự động sao lưu (</b><i><b>Backup</b></i><b>) và phục hồi (</b><i><b>Restore</b></i><b>) dữ liệu </b>
<b>khi có sự cố. (</b><i><b>Định kỳ theo thời gian</b></i><b>)</b>


<b>e) Ngơn ngữ giao tiếp người sử dụng (NSD) với CSDL. (</b><i><b>SQL</b></i><b>)</b>
<b>f) Đảm bảo tính độc lập giữa dữ liệu và chương trình.</b>


<b>g) Có thể, cần có giao diện tốt với người dùng không chuyên.</b>



<b> HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU</b>



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

<b>8</b>



<b>Có 5 cách tiếp cận một CSDL</b>



Mơ hình dữ liệu mạng



Mơ hình dữ liệu phân cấp


Mơ hình dữ liệu quan hệ



Mơ hình dữ liệu thực thể kết hợp


Mơ hình dữ liệu hướng đối tượng



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

<b>9</b>


Mơ hình dữ liệu mạng được biểu thị bởi một đồ thị có hướng.
Hai khái niệm cơ bản: <i><b>Loại mẫu tin</b></i> và <i><b>Loại liên hệ</b>.</i>


- Loại mẫu tin (<i><b>Record Type</b></i>) là đặc trưng cho 1 loại đối tượng
riêng biệt, được biểu thị bởi một hình chữ nhật.


-Loại liên hệ (<i><b>Set Type</b></i>) là sự liên kết giữa 1 loại mẫu tin với 1
loại mẫu tin khác (gọi là mẫu tin thành viên). 4 loại liên hệ:
 <i>1 </i><sub></sub><i> 1</i> : 1 mẫu tin chủ chỉ kết hợp với 1 mẫu tin thành viên.
 <i>1 </i><sub></sub><i> n</i> : 1 mẫu tin chủ kết hợp với nhiều mẫu tin thành viên.
 <i>n </i><sub></sub><i> 1</i> : n mẫu tin chủ kết hợp với chỉ 1 mẫu tin thành viên.
 <i>Đệ quy (Recursive)</i>: Mẫu tin chủ có thể là thành viên của nó.
<i><b>Mơ hình này đơn giản nhưng khơng thích hợp để biểu diễn các CSDL lớn.</b></i>


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

<b>10</b>



Mô hình phân cấp là một cây, mỗi nút là một thực thể.
Hai khái niệm được sử dụng trong mô hình: Loại mẫu tin và
Loại mối liên hệ. Loại liên hệ ở đây là phân cấp, theo cách:


 Mẫu tin thành viên chỉ đóng vai trị thành viên của 1 mối liên
hệ duy nhất, tức là thuộc một chủ duy nhất. Mối liên hệ từ mẫu
tin chủ tới các mẫu tin thành viên là 1  n, ngược lại, từ mẫu
tin thành viên tới mẫu tin chủ là 1  1.


 Giữa 2 loại mẫu tin chỉ tồn tại một mối liên hệ duy nhất.


<i><b>Mơ hình phân cấp được sử dụng chủ yếu cho các tổ chức có cấu trúc phân </b></i>
<i><b>cấp, như ngành thống kê chẳng hạn. Dữ liệu của loại mẫu tin chủ thường </b></i>
<i><b>chứa các kết quả tổng hợp được từ dữ liệu của các mẫu tin thành viên, do </b></i>
<i><b>đó có rất nhiều nhược điểm khi dữ liệu thường xuyên có biến động.</b></i>


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

<b>11</b>



MÔ HÌNH QUAN HỆ

(

<i><b>Relational Data Model</b></i>

)



Mơ hình quan hệ do E.F.Codd đề xuất năm 1970. Nền tảng
của nó là lý thuyết tập hợp trên các quan hệ. Các khái niệm
cơ bản gồm: <i><b>Thuộc tính </b></i>(<i><b>Attribute</b></i>), <i><b>Quan hệ </b></i>(<i><b>Relation</b></i>), <i><b>Bộ </b></i>
<i><b>giá </b></i> <i><b>trị </b></i> (<i><b>Value</b></i> <i><b>Tuple</b></i>), <i><b>Lược đồ quan hệ </b></i> (<i><b>Relation</b></i> <i><b>Schema</b></i>),
<i><b>Khoá (</b><b>Key</b></i>), phụ thuộc hàm (<i><b>Functional</b></i> <i><b>Dependency</b></i>), ...


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

<b>12</b>



<b>MƠ HÌNH THỰC THỂ KẾT HỢP </b>




(

<i><b>Entity RelationShip</b></i>

)



Mơ hình thực thể kết hợp do P.P.Chen đề xuất năm 1976. Các
khái niệm chủ yếu được sử dụng bao gồm: Loại thực thể
(<i><b>Entity Type</b></i>), Thực thể (<i><b>Entity</b></i>), Thuộc tính của loại thực thể
(<i><b>Entity Attribute</b></i>), Khóa của loại thực thể (<i><b>Entity Key</b></i>), Loại
mối kết hợp (<i><b>Entity Relationship</b></i>), Số ngôi của mối kết hợp
(<i><b>Relationship Degree</b></i>), Thuộc tính của mối kết hợp
(<i><b>Relationship Attribute</b></i>), Bản số của mỗi nhánh kết hợp
(<i><b>Relationship Cardinal</b></i>). Từ năm 1980, các khái niệm mới
được bổ sung như Loại thực thể chuyên biệt hóa (<i><b>Specialized</b></i>
<i><b>Entity</b></i>), Mối kết hợp đệ quy (<i><b>Recursive Relationship</b></i>)


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

<b>13</b>



<b>MÔ HÌNH HƯỚNG ĐỐI TƯỢNG</b>



(

<i><b>Object Oriented Model</b></i>

)



Đây là mơ hình tiên tiến nhất hiện nay. Những ưu điểm
lớn của kỹ thuật hướng đối tượng là:


(1) Tính đóng gói (<i><b>Encapsulation</b></i>): Dữ liệu và các thao tác xử
lý cấu trúc dữ liệu đó được “<i>hịa quyện</i>” với nhau thành một
thể thống nhất.


(2) Tính kế thừa (<i><b>Inheritance</b></i>): Một cấu trúc dữ liệu mới có thể
được xây dựng và phát triển từ các cấu trúc dữ liệu đã có
trước đó, có thể kế thừa các thành phần dữ liệu và phương
thức từ các kiểu dữ liệu cơ sở.



(3) Tính tương ứng bội (<i><b>Polymorphism</b></i>).
(4) Tính tái sử dụng (<i><b>Reusability</b></i>).


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

<b>14</b>



<b>Chương III. MƠ HÌNH DỮ LIỆU QUAN HỆ</b>


<b>NỘI DUNG</b>

:


<b>2.1. MỘT SỐ KHÁI NIỆM VÀ ĐỊNH NGHĨA</b>


<b>1. Thuộc tính</b>
<b>2. Quan hệ</b>
<b>3. Bộ giá trị</b>
<b>4. Thể hiện</b>
<b>5. Khoá</b>


<b>6. Lược đồ quan hệ & lược đồ CSDL ...</b>


<b>2.2. CÁC THAO TÁC CƠ BẢN TRÊN MỘT QUAN HỆ</b>


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

<b>15</b>



<b> MỘT SỐ KHÁI NIỆM VÀ ĐỊNH NGHĨA</b>



1. THUỘC TÍNH (<i><b>Attribute</b></i>): Là một đặc tính của đối tượng
cần được phản ánh trong CSDL phục vụ việc khai thác
thơng tin về sau.


<i>Ví dụ</i>: Họ tên, Giới tính, Ngày sinh, Nơi sinh, ...


Thuộc tính được đặc trưng bởi 3 yếu tố:


<i>a. Tên gọi</i>: Một dãy ký tự bất kỳ. Nên đặt tên gợi nhớ.


<i>b. Kiểu giá trị</i>: Số, Chuỗi, Ngày, Logic


<i>c. Miền giá trị</i>: Xác định tập giá trị thuộc tính có thể nhận.


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

<b>16</b>



Ví dụ: CSDL quản lý NHÂN VIÊN với các quan hệ



<b>1. PhongBan (MaPB, TenPB, DiaDiem, MaNQL, KinhPhi, DoanhThu)</b>
<i><b>Tân từ: Mỗi phòng ban có một tên gọi (</b><b>TenPB</b><b>) đầy đủ, một địa điểm </b></i>


<i><b>trú đóng (</b><b>DiaDiem</b><b>), một mã số của nhân viên phụ trách phịng </b></i>
<i><b>(MaNQL), một khoản kinh phí (</b><b>KinhPhi</b><b>) để hoạt động, một khoản </b></i>
<i><b>doanh thu (</b><b>DoanhThu</b><b>) nếu có, và một mã số (</b><b>MaPB</b><b>) duy nhất để </b></i>
<i><b>phân biệt với các phịng ban khác trong cơng ty.</b></i>


<b>2. CongViec (MaCV, TenCV, LuongMin, LuongMax, MgrFlag)</b>


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

<b>17</b>



<b>3. NhanVien (MaNV, TenNV, MaCV, Luong, HoaHong, MaPB, </b>
<b>GioiTinh)</b>


<i><b>Tân từ: Mỗi nhân viên (</b><b>NhanVien</b><b>) được cấp một mã số (</b><b>MaNV</b><b>) duy nhất để </b></i>
<i><b>phân biệt với mọi nhân viên khác. Nhân viên phải có một tên gọi (</b><b>TenNV</b><b>) </b></i>
<i><b>cụ thể, đảm nhận một công việc là </b></i> <i><b>MaCV</b><b>, được hưởng một mức lương </b></i>


<i><b>(</b><b>Luong</b><b>) theo chức danh công việc, một kho n hoa h ng (</b><b>ả</b></i> <i><b>ồ</b></i> <i><b>HoaHong</b><b>) nếu có, </b></i>
<i><b>làm ở phịng ban cụ thể có mã số là </b><b>MaPB</b><b>. Mỗi nhân viên đều phải có giới </b></i>
<i><b>tính xác định là ‘F’ (F=Female=Nữ) hoặc ‘M’ (M = Male = Nam).</b></i>


<b>4. QuaTrinh(MaNV, Seq, Ngay_BD, Ngay_KT, Luong, FrJob, ToJob, </b>
<b>FrPB, ToPB)</b>


<i><b>Tân từ: Nhân viên có mã số </b><b>MaNV </b><b>có thể có nhiều quá trình thay đổi được </b></i>
<i><b>đánh số thứ tự (</b><b>Seq</b><b>) từ 1 trở đi. Một quá trình diễn ra từ ngày (</b><b>Ngay_BD</b><b>) </b></i>
<i><b>đến ngày (</b><b>Ngay_KT</b><b>), có thể do thay đổi lương (</b><b>Salary</b><b>) có thể do thay đổi từ </b></i>
<i><b>cơng việc này (</b><b>FrJob</b><b>) sang công việc khác (</b><b>ToJob</b><b>), hoặc thuyên chuyển từ </b></i>
<i><b>phòng này (</b><b>FrPB</b><b>) sang phòng khác (</b><b>ToPB</b><b>).</b></i>


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

<b>18</b>



3. BỘ GIÁ TRỊ (<i><b>Tuple</b></i><b> </b> Record  Row)


Là tổ hợp giá trị của các thuộc tính <i>thỏa tân từ</i>.
<i><b>Ví dụ: Giả sử đã có một bộ giá trị của qhệ </b></i><b>PhongBan:</b>
<b>(10, ‘Tổ Chức’, …). Khi đó các bộ gía trị sau:</b>


<b>(10, ‘Kinh Doanh’, … ); vaø </b>
<b>(20, ‘ ’, … )</b>


<b>là khơng hợp lệ.</b>


4. THỂ HIỆN (<i><b>Instance </b></i>hay <i><b>Occurence</b></i>)


<b>Là tập hợp các bộ giá trị của quan hệ tại một thời điểm. </b>
<b>Như vậy một quan hệ có rất nhiều thể hiện.</b>



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

<b>19</b>



5. KHỐ (<i><b>Key</b></i>)


a. Khóa là tổ hợp các thuộc tính mà giá trị của chúng xác
định duy nhất 1 bộ gía trị.


Ví dụ:. <b>MaPB</b> là khóa của <b>PhongBan.</b>


Giả sử các phịng ban đều có tên khác nhau, khi đó:
<b>TenPB</b>: cũng là khóa


<b>MaPB</b>, <b>DiaDiem</b>: cũng là khóa
<b>MaPB</b>, <b>TenPB</b>: cũng là khóa


Cho <b>R (A<sub>1</sub>, A<sub>2</sub>, A<sub>n</sub>) </b>là quan hệ. <b>A<sub>1</sub></b> là khóa. Khi đó cũng có:
<b>A<sub>1</sub>A<sub>2</sub>, A<sub>1</sub>A<sub>3</sub>, A<sub>1</sub>A<sub>4</sub>, A<sub>1</sub>A<sub>n</sub></b>: là khóa


<b>A<sub>1</sub>A<sub>2</sub>A<sub>3</sub>, …, A<sub>1</sub>A<sub>2</sub>A<sub>n</sub></b> là các khóa. Vậy có bao nhiêu khóa?
Trả lời: 2n-1 . Với n=32 thuộc tính thì có hơn 2 tỷ khóa!!!


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

<b>20</b>


b. Định nghóa khóa và siêu khóa (<i><b>Key & Super key</b></i>):


<b>R (A<sub>1</sub>,A<sub>2</sub>, …, A<sub>n</sub>) </b>là quan hệ.<b> K</b> <b>{ A<sub>1</sub>,A<sub>2</sub>, A<sub>n</sub></b> <b>}</b>
<b>K </b>là khóa của <b>R</b> nếu và chỉ nếu thỏa:


1) <b>K</b> là khóa theo đ/n 1



2)  <b>K<sub>1</sub></b> <b> K</b> mà <b>K<sub>1</sub></b> là khóa theo đ/n 1


<b>MaPB </b>hoặc<b> TenPB </b>là khóa của quan hệ <b>PhongBan</b>


Nếu <b>K </b>là khóa thì<b> K </b><b> A<sub>i</sub></b> được gọi là siêu khóa.


c. Khóa chỉ định (<i><b>Candidate Key</b></i>): Các khóa thỏa đ/n 2.


d. Khóa chính (<i><b>Primary Key</b></i>): Trong số các khóa chỉ định có thể
chọn 1 khóa tiện lợi nhất nhất cho việc sử dụng để sắp xếp các
bộ giá trị (theo thứ tự tăng dần) phục vụ cho việc tìm kiếm và
kết nối thơng tin nhanh chóng, gọi nó là khóa chính.


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

<b>21</b>


<i>Quy ước:</i>


 Khóa chính của quan hệ (thì) được gạch chân.
 Khơng được phép sửa đổi giá trị khóa chính.
e. Khóa ngoại (<i>Foreign Key</i>):


Cho<b> R(U) </b>và<b> S(V); K1 </b><b>U, K2</b><b>V; K1 </b>là khóa chính của<b> R</b>.


Nếu thỏa:


<b> </b>(i) <b>K1, K2 </b>có cùng số lượng cùng ý nghĩa của các thuộc tính.
  (ii) Giữa <b>R</b> và <b>S</b> có mối quan hệ 1:n


Khi đó <b>K2</b> là khóa ngọai của <b>S</b> khi tham cham chiếu tới<b> K1 </b>của<b> R.</b>


<i>Ví du</i>ï: <b>MaPB </b>của<b> NhanVien </b>là khóa ngọai khi tham chiếu tới <b>MaPB </b>của



<b>PhongBan.</b>


<b>MaNQL</b> của <b>PhongBan</b> là khóa ngọai khi tham chiếu tới <b>MaNV </b>của quan
hệ <b>NhanVien</b>.


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

<b>22</b>


f. Khóa lồng (<i><b>Nested Key</b></i>)


<b>R(U), K1</b><b>U </b>là khóa chính của<b> R.</b>


<b>S(V), K2</b><b>V </b>là khóa ngọai của<b> S</b> khi tham chiếu tới <b>K1</b> của<b> R.</b>
<b>K3</b><b>K2</b> là những thuộc tính khóa chính của <b>S.</b> Khi đó<b> K3</b> được
gọi là thuộc tính khóa lồng.


<i>Ví du</i>ï: <b>MaNV </b>của <b>QuaTrinh </b>là thuộc tính khóa lồng vì vừa là
khóa ngọai vừa là thuộc tính khóa chính của <b>QuaTrinh.</b>


6. PHỤ THUỘC HÀM (<i><b>Functional Dependency</b></i>)


R(U); X, Y  U. Nếu tồn tại một ánh xạ f từ X vào Y thì ta nói
rằng X xác định hàm Y hay Y phụ thuộc hàm vào X và ký hiệu
là X  Y.


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

<b>23</b>



7. RAØNG BUỘC TOAØN VẸN (<i><b>Integrity Rule / Constraint</b></i>)


Là một quy tắc bất biến mà tất cả các thao tác trên CSDL phải
tn theo nhằm đảm bảo tính đúng đắn, an tồn và toàn vẹn dữ


liệu trong CSDL.


8. LƯỢC ĐỒ QUAN HỆ (<i><b>Relation Schema</b></i>)


Là sự trừu tượng hoá của quan hệ. Khi nói đến lược đồ quan hệ
tức là đề cập đến cấu trúc tổng quát của một quan hệ, là một
ma trận hai chiều.


Lược đồ CSDL là tập hợp các lược đồ quan hệ {Ri}


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

<b>24</b>



<i>1. Thêm bộ giá trị mới vào quan hệ R (A</i>

<i><sub>1</sub></i>

<i>, A</i>

<i><sub>2</sub></i>

<i>, ... A</i>

<i><sub>n</sub></i>

<i>)</i>

:


INSERT (R; v<sub>1</sub>,v<sub>2</sub>, ..., v<sub>n</sub>)


<i>Ví dụ</i>: “<i>Thêm vào phịng số 10 nhân viên mới có mã số 300, tên là </i>
<i>Hồng Duy làm nhân viên kế tốn với lương 2700$.</i>”


INSERT (NhanVien; 300, ‘Hoàng Duy’, ‘KeToan’, 2700, 10,
NULL, ‘M’)


<i>2. Sửa giá trị các bộ của quan hệ R</i>

:



UPDATE (R; A<sub>1</sub>=e<sub>1</sub>, A<sub>2</sub>=e<sub>2</sub>, ..., A<sub>n</sub>=e<sub>n</sub>; <i>điều kiện sửa</i>)


<i>Ví dụ</i>: “<i>Tăng lương 10% cho các nhân viên phụ trách các </i>
<i>phoøng/ban</i>”


UPDATE (NhanVien; Luong = Luong*1.1; MaCV = ‘QuanLi’)



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

<b>25</b>



<i>3. Xóa các bộ của quan hệ R</i>

:


DELETE (R; <i>điều kiện xố</i>)


<i>Ví dụ</i>: “<i>Xóa các nhan viên phụ trách các phòng/ban</i>”


DELETE (NhanVien; MaCV = ‘QuanLi’)


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

<b>26</b>



<b>Chương IV. RÀNG BUỘC TOÀN VẸN</b>


<b>NỘI DUNG</b>



4.1. ĐỊNH NGHĨA – CÁC YẾU TỐ CỦA MỘT RBTV
o Định nghóa RBTV


o Các yếu tố của RBTV
4.2. PHÂN LOẠI CÁC RBTV


o RBTV có bối cảnh trên một quan hệ
o RBTV có bối cảnh trên nhiều quan hệ


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

<b>27</b>



<b>ĐỊNH NGHĨA – CÁC YẾU TỐ CỦA RBTV</b>



<i>1. Định nghóa</i>.


Ràng buộc tồn vẹn (RBTV – <i>Integrity Constraint</i>) là một


quy tắc bất biến mà tất cả các thao tác trên CSDL phải tuân
theo nhằm đảm bảo tính chất đúng đắn, an tồn và tồn vẹn dữ
liệu trong CSDL.


<i>2. Các yếu tố của một RBTV</i>.


<i>a) Nội dung của RBTV.</i>


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

<b>28</b>



<i>Ví dụ R1</i>:


“<i>Mỗi phịng ban phải có một khoản kinh phí tối thiểu là 10,000$ </i>
<i>để hoạt động”</i>. (<i>Theo tân từ của PhongBan</i>)


Hoặc bằng biểu thức toán học chặt chẽ hơn:


<i>d</i><i> PhongBan : d.kinhPhi </i><i> 10,000</i>


<i>Ví dụ R2</i>:


<i>“Mỗi nhân viên phải có giới tính xác định là ‘F’ (‘F’ = Female = </i>
<i>Nữ) hoặc ‘M’ (‘M’ = Male = ‘Nam’)</i>”


 <i>e</i><i> NhanVien: e.GioiTinh </i><i> { ‘F’, ‘M’ }</i>


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

<b>29</b>



<i>b) Boái caûnh xaûy ra RBTV</i>.



Xác định rõ RBTV có liên quan đến mấy quan hệ và đó là
những quan hệ nào.


<i>c) Tầm ảnh hưởng của RBTV</i>.


Caăn xađy dựng bạng goăm 4 ct: Teđn quan h, Theđm, Xóa, Sửa.
Nêu thao tác nào vi phám RBTV đôi với quan h nào thì tái giao
đieơm dòng và ct đó được ghi dâu cng (+). Nêu chư ạnh hưởng
tređn các thuc tính nào thođi thì ghi teđn các thuc tính đó ở phía
dưới dâu cng. Nêu khođng ạnh hưởng thì ghi daẫu trừ (-); và nêu
khođng ạnh hưởng vì lý do khođng sửa được thì ghi theđm dâu sao (*)
ở phía tređn cụa dâu trừ đó.


<i>Ví dụ</i>: Ảnh hưởng trên thuộc tính MaPB: +<sub>(MaPB)</sub>
Và khơng ảnh hưởng do khơng thể sửa được: -(*).


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

<b>30</b>



<b>Quan hệ</b> <b>Thêm</b> <b>Xóa</b> <b>Sửa</b>


<i>PhongBan</i> - + -(*)


<i>NhanVien</i> +<sub>(MaPB)</sub> - +<sub>(MaPB)</sub>


<i>e</i><i> NhanVien, </i><i> d </i><i> PhongBan: e.MaPB = d.MaPB</i>


<i>NhanVien[MaPB] </i><i> PhongBan[MaPB]</i>


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

<b>31</b>




<b>ĐỊNH NGHĨA – CÁC YẾU TỐ CỦA RBTV</b>



<i>d) Hành động cần tiến hành khi RBTV bị vi phạm.</i>


Thông thường là:
 Thông báo lỗi
 Từ chối thao tác.


Thông báo lỗi phải đầy đủ, rõ ràng và lịch sự.
Hai trường hợp xử lý:


 <sub>Trực tuyến</sub><sub> (On-line  </sub><i><sub>InterActive</sub></i><sub>): Ra màn hình</sub>


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

<b>32</b>



<b>PHÂN LOẠI CÁC RBTV</b>



<i>1. RBTV có bối cảnh là một quan hệ</i>.


a) RBTV về miền giá trị: Thuộc tính khơng chỉ đặc trưng
bởi kiểu dữ liệu mà nó cịn bị giới hạn bởi miền giá trị
trong kiểu dữ liệu đó.


<i>“Mỗi nhân viên phải có giới tính xác định là ‘F’ (‘F’ = </i>
<i>Female = Nữ) hoặc ‘M’ (‘M’ = Male = ‘Nam’)</i>”


 <i>e</i><i> NhanVien: e.GioiTinh </i><i> { ‘F’, ‘M’ }</i>


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

<b>33</b>




<b>PHÂN LOẠI CÁC RBTV</b>



<i>2. RBTV có bối cảnh trên nhiều quan hệ</i>.


a) RBTV về khóa ngoại cịn gọi là RBTV phụ thuộc tồn tại
hay RBTV tham chiếu.


RBTV tham chiếu xảy ra nếu có 1 trong 2 trường hợp sau:
Có sự hiện diện của khố ngoại


Có sự lồng khoá giữa các quan hệ


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

<b>34</b>


Vd: “<i>Mỗi nhân viên phải thuộc một phòng/ban nhất định”:</i>


<i>NhanVien[MaPB] </i><i> PhongBan[MaPB]</i>


<b>PHÂN LOẠI CÁC RBTV</b>



<b>Quan hệ</b> <b>Thêm</b> <b>Xóa</b> <b>Sửa</b>


<i>PhongBan</i> - + -(*)


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

<b>35</b>


b) RVTB liên thuộc tính – liên bộ giá trị – liên quan hệ.


Do sự hiện diện của thuộc tính tính tốn (giá trị của thuộc tính
đó được tính tốn từ các thuộc tính khác).


Ví dụ: Xét quan hệ



SINHVIEN (MaSV, TenSV, DTB)
DIEM_SV(MaSV, MaMon, Diem)
Biểu diễn:


<b>PHÂN LOẠI CÁC RBTV</b>



)


.



(


.



:

<i>sv</i>

<i>DTB</i>

<i>AVG</i>

<i>dsv</i>

<i>Diem</i>


<i>SINHVIEN</i>



<i>sv</i>



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

<b>36</b>



Quan hệ Thêm Xoá Sửa


SINHVIEN + - +


DIEM_SV + + +(Diem, <sub>MaSV)</sub>


Bảng tầm ảnh hưởng:


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

<b>37</b>




<i>1. Phụ thuộc hàm F (Functional Dependency)</i>
<i>a)Định nghóa</i>.


R(U); X, Y  U. Nếu tồn tại một ánh xạ f từ X vào Y thì ta nói
rằng X xác định hàm Y hay Y phụ thuộc hàm vào X và ký hiệu
là X  Y.


<i>b) Phụ thuộc hàm hiển nhiên: </i>X  Y đươc gọi PTH hiển nhiên
nếu Y  X


<i>c) Phụ thuộc hàm được suy diễn lơgíc từ tập PTH đã cho</i>


<i>d) Bao đóng của tập PTH F: </i>tức là tập các PTH được suy diễn
logic từ F. Nếu F = F+ thì ta nói F là họ đầy đủ của PTH.


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

<b>38</b>



<i>2. Hệ tiên đề Armstrong.</i>


<i><b>a) Hệ 3 tiên đề cơ bản.</b></i>


<i>Luật phản xạ: </i> X, Y  U. Nếu Y  X thì XY


<i>Luật tăng trưởng:</i> X, Y, W  U. Nếu XY thì XWYW


<i>Luật bắc cầu: </i>X, Y, Z  U. Nếu XY  YZ thì XZ
<i><b>b) Bổ đề, 3 tiên đề mở rộng.</b></i>


<i>(iv) Luật tách: </i>X, Y, Z  U. Nếu XYZ thì X  Y  XZ



<i>(v) Luật gộp: </i>X, Y, Z  U. Nếu XY  XZ thì XYZ


<i>(vi) Luật tựa bắc cầu</i>:


X, Y, Z, W  U. Nếu XY  YWZ thì XWZ


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

<b>39</b>


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


R (U) là một quan hệ được định nghĩa trên tập thuộc tính U.
F là tập phụ thuộc hàm xác định trên R; và X  U.


X+


F =  A  U: X  A  F+ 


<i>Bài toán thành viên: </i>X  A  F+ nếu và chỉ nếu A  X+
F.


<i><b>d) Ứng dụng bao đóng để tìm một khóa của lược đồ quan hệ:</b></i>
Khóa là tập thuộc tính K mà bao đóng của K đúng bằng
R(K+=R) và nếu bớt khỏi K một phần tử bất kỳ thì bao đóng


của nó khác R.


Từ định nghĩa ta thấy có thể tìm khóa bắt đầu từ tập R vì và ta
bớt dần các phần tử của R để nhận được tập bé nhất mà bao
đóng của nó đúng bằng R.


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

<b>40</b>




<b>ChươngV: CHUẨN HĨA LƯỢC ĐỒ QUAN HỆ</b>



<b>NỘI </b>

DUNG

<b>:</b>


Trong công tác quản lý và xử lý các hệ cơ sở dữ liệu, chúng ta
thường phải đưa CSDL về dạng đơn giản nhất, xử lý nhanh nhất.
Để thực hiện mục đích đó chúng ta phải tiến hành “chuẩn hóa”
các hệ CSDL. Tức là chúng ta sẽ xét một số dạng quen thuộc
mà trong CSDL gọi là các dạng chuẩn.


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

<b>41</b>



<b>DẠNG CHUẨN THỨ NHẤT</b>



Daïng chuẩn 1 (first Norm Form) ký hiệu là 1NF.


Cho lược đồ CSDL R, Q là một quan hệ trên R được gọi là
đạt dạng chuẩn 1NF nếu và chỉ nếu tồn bộ các miền giá trị
có mặt trong Q đều chỉ chứa các giá trị nguyên tố (giá trị
nguyên tố là giá trị không thể tách thành các giá trị khác –
giá trị đơn).


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

<b>42</b>



<b>DẠNG CHUẨN THỨ HAI – 2NF</b>



<b>Thuộc tính phụ thuộc đầy đủ</b>


Y phụ thuộc hoàn toàn vào X nếu:


- XY và bớt khỏi X dù 1 thuộc tính A thì
- not (X\A) Y


<b>Quan hệ Q được gọi là đạt dạng chuẩn 2NF khi thỏa 2 </b>
<b>điều kiện:</b>


Q đạt dạng chuẩn 1NF


Tất cả các thuộc tính khơng khóa phải phụ thuộc đầy đủ vào
khóa.


<b>Ví dụ: Cho quan hệ Q(A,B,C,D,E,F,G)</b>
F = {ABCDEFG, BG}


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

<b>43</b>


<b>Ví dụ 3: Cho quan hệ Q(A,B,C,D,E,H)</b>


F = {AE, CD, EDH}


Khóa của quan hệ Q là ABC vì tồn tại CD là phụ thuộc hàm
khơng đầy đủ vào khóa. Vậy Q khơng đạt chuẩn 2NF


<b>Lưu ý</b><i>: Trong một số trường hợp nếu tất cả các phần tử của Q </i>
<i>đều là khóa, tức là tập các phần tử khơng khóa bằng rỗng nên Q </i>
<i>đạt chuẩn 2NF.</i>


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

<b>44</b>



<b>DẠNG CHUẨN THỨ BA- 3NF</b>




<b>Quan hệ Q đạt chuẩn 3NF nếu thỏa 2 điều kiện</b>
- Đạt chuẩn 2NF


- Tất cả các thuộc tính không khóa phải không phụ
thuộc bắt cầu vào khóa.


<b>Ví d :ụ</b> SinhVien(MaSV, HoTen, NgaySinh, MaLop)


<i>cau</i>
<i>bac</i>
<i>PTH</i>
<i>TenLop</i>
<i>MaSV</i>
<i>MaLop</i>
<i>MaSV</i>
<i>TenLop</i>
<i>MaLop</i>
<i>TenLop</i>
<i>MaSV</i>









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

<b>45</b>


<b>Quan hệ Q đạt chuẩn BCK hay BCNF nếu thỏa 2 điều </b>

<b>kiện</b>


- Đạt chuẩn 3NF


- Quan hệ Q không tồn tại PTH dạng Xx với x X


<b>Ví dụ: Cho quan heä R = {A, B, C, D}</b>
F = {ABC, CABD}


Các tập có bao đóng khác R là: X = {A}, X = {B}, X= {D},
X= {A, D}, X= {B, D} và trong các tập trên khơng có PTH
dạng Xx với x X


Vậy R đạt chuẩn BCNF.


Dạng chuẩn của một lược đồ CSDL là dạng chuẩn thấp nhất
của các dạng chuẩn của các quan hệ con của lược đồ đó.


<b>DẠNG BOYCE-CODD - BCNF</b>





<i>Q</i>
<i>X</i>  


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

<b>46</b>



<b>Chương VI : </b>

<b>ĐẠI SỐ QUAN HỆ</b>




<b>6.1 CÁC PHÉP TOÁN TẬP HỢP TRÊN CÁC QUAN HỆ</b>
<b>6.2 CÁC THAO TÁC CƠ SỞ TRÊN QUAN HỆ</b>


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

<b>47</b>



<b>CÁC PHÉP TOÁN TẬP HỢP TRÊN CÁC QUAN HỆ</b>



1. Phép hợp nhất 2 quan hệ (UNION).


Cho R và S là 2 quan hệ được định nghĩa trên cùng một tập
thuộc tính U = { A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>n</sub> }.


Phép hợp nhất 2 quan hệ R và S, ký hiệu R  S, là một quan hệ
Q cũng được định nghĩa trên cùng tập thuộc tính U, mà


T<sub>Q</sub> = { t : t  T<sub>R</sub>  t  T<sub>S</sub> }
2. Phép trừ 2 quan hệ (MINUS).


Cho R(U) và S(U) là 2 quan hệ. Hiệu của 2 quan hệ R và S, ký
hiệu R \ S, là một quan hệ Q được định nghĩa trên cùng tập


thuộc tính U, mà


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

<b>48</b>



<b>CÁC PHÉP TỐN TẬP HỢP TRÊN CÁC QUAN HỆ</b>



3. Pheùp giao (INTERSECTION).


Cho R(U) và S(U) là 2 quan hệ. Phép giao của 2 quan hệ R và


S, ký hiệu R  S, là một quan hệ Q được định nghĩa trên cùng
tập thuộc tính U, mà


T<sub>Q</sub> = { t : t  T<sub>R</sub>  t  T<sub>S</sub> }


4. Phép tích Đề Các (Des CARTESIAN).


Cho R(A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>n</sub>) vaø S(B<sub>1</sub>, B<sub>2</sub>, ..., B<sub>n</sub>) là 2 quan hệ.


Tích Đề các của 2 quan hệ R và S, ký hiệu R x S, là một quan
hệ Q được định nghĩa trên tập thuộc tính {A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>n</sub>, B<sub>1</sub>,
B<sub>2</sub>, ..., B<sub>n</sub>)}, mà


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

<b>49</b>


5. Pheùp chia 2 quan hệ. (DIVISION).


Khơng làm mất tính tổng qt, giả sử R (A,B) và S(B) là 2 quan
hệ. Thương của 2 quan hệ R và S, ký hiệu là R  S, là một quan
hệ Q được định nghĩa trên thuộc tính A, mà


T<sub>Q</sub> = { t =r.A: r  T<sub>R</sub>  u  T<sub>S</sub>  (t,u)  T<sub>R</sub>},
Tức là: Q x S  R


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

<b>50</b>


Ví dụ: Có 3 quan hệ với các thể hiện sau:


Quan hệ phi công: PhiCong (#p) = { 30, 31, 32 }


Quan hệ máy bay MayBay (#m) = { 100, 101, 102, 103 }
Khả năng lái máy bay của các phi công: KhaNang (#p, #m )


Với các bộ giá trị: { (30,100), (30,101), (30,102), (30,103),


(31,100), (31,102), (32,100), (32,101) }


Câu hỏi: “<i>Cho danh sách các phi cơng có khả năng lái được </i>
<i>tất cả các máy bay?</i>”


Trả lời: “<i>Phi cơng số 30<b>. Đó là kết quả của phép chia quan hệ </b></i>
<i><b>KhaNang cho quan hệ MayBay (KN </b></i><i><b> MB) ”</b></i>


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

<b>51</b>


1. Phép chiếu (PROJECTION)


Cho R (U) là quan hệ được định nghĩa trên tập thuộc tính
U = (A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>n</sub>); và K  U.


Phép chiếu quan hệ R trên tập thuộc tính K, ký hiệu là R[K]
hoặc <sub>K</sub>(R), là một quan hệ Q (K), mà T<sub>Q</sub> = { t = r.K, r  T<sub>R</sub> }
Nói đơn giản, là một quan hệ mới lấy từ R sau khi đã loại bỏ
đi các cột không cần giữ lại, và loại bỏ các dòng giống nhau.
2. Phép chọn (SELECTION)


Phép chọn các bộ của quan hệ R thỏa điều kiện <i>e</i> đã cho, ký
hiệu là R : (<i>e</i>), hoặc

<sub>(e)</sub> (R).


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

<b>52</b>



<i><b>Theo định nghóa, trong kết quả của phép chiếu và phép chọn sẽ không có </b></i>
<i><b>các bộ giá trị giống nhau</b></i>.



Ví dụ 1: “<i><b>Cho biết mã số và tên của các phòng ban trong công ty?</b></i>”.


<i><b>Phép tốn</b></i>: <b>PhongBan [ MaPB, TenPB]</b>


Ví dụ 2: “<i><b>Cho biết các nhân viên của Cty hiện đang làm công việc gì ?</b></i>”.


<i><b>Phép tốn</b></i>: <b>NhanVien [MaCV]</b>


Ví dụ 3: “<i><b>Cho biết mã số và tên, công việc, tiền lương của các nhân viên </b></i>
<i><b>trong công ty?</b></i>”.


<i><b>Phép tốn</b></i>: <b>NhanVien</b> <b>[</b> <b>MaNV</b>, <b>TenNV</b>, <b>MaCV,</b> <b>Luong]</b>


Ví dụ 4: “<i><b>Cho tên và tiền lương của các nhân viên của phòng số 40?</b></i>”.


<i><b>Phép tốn</b></i>: <b>(</b> <b>NhanVien: (MaPB = 40))[</b> <b>TenNV</b>,<b>Luong]</b>


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

<b>53</b>


3. Pheùp thêta kết ( - JOIN)


Ở đây  là một trong các phép so sánh: >, >=, <, <=, =


Cho R (U) và S (V) là các quan hệ được định nghĩa trên tập
thuộc tính U ={A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>n</sub>} và V = {B<sub>1</sub>, B<sub>2</sub>, ..., B<sub>n</sub>)}. AU,
B V là 2 thuộc tính của 2 quan hệ.


Phép  - kết giữa quan hệ R và S, ký hiệu là R S, là


moät quan hệ Q (UV), mà T<sub>Q</sub> = { t = (u, v): u  T<sub>R</sub>  v  T<sub>S</sub> 
u.A  v.B}



Phép  - kết R và S có thể được biểu diễn tương đương:
R S = (R x S) : (R.A  S.B)


<b>CÁC THAO TÁC CƠ SỞ TRÊN QUAN HỆ</b>



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

<b>54</b>


Các trường hợp đặc biệt:


Nếu  là phép so sánh bằng nhau (=) thì phép kết được gọi là
phép kết bằng nhau, hay phép kết tương đương.


Nếu  là phép so sánh bằng nhau (=) và 2 thuộc tính A, B có
tên giống nhau thì gọi đó là phép kết tự nhiên (NATURAL
JOIN), và ký hiệu là R S.


<i>Ví dụ</i>: “<i>Cho tên phòng ban cùng danh sách tên các nhân viên</i>”:
PhongBan NhanVien [TePB, TenNV]


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

<b>55</b>



<b>CÁC PHÉP TOÁN KHÁC</b>



1. Phép kết trong (INNER JOIN). Thực chất là phép bằng nhau,
hay phép kết tương đương EQUI-JOIN. Có thể ký hiệu phép
tốn này bằng dấu sao (*).


Kết quả của phép kết trong giữa R và S:
Q(A, X, B, Y)



(1, x1, 1, y1)
(2, x2, 2, y2)


R(A, X)
(1, x1)
(2, x2)
(3, x3)


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

<b>56</b>


2. Phép kết vế trái (LEFT JOIN).


Phép kết vế trái giữa R và S, ký hiệu R S, là 1 quan hệ Q
định nghĩa trên tập thuộc tính U  V, mà


T<sub>Q</sub> = { t = (u, v): u  T<sub>R</sub>  v  T<sub>S</sub>  u.A = v.B
Kết quả phép kết vế trái giữa R và S là:
Q(A, X, B, Y)


(1, x1, 1, y1)
(2, x2, 2, y2)


(3, x3, <i>Null, Null</i>) <i>(1)</i>


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

<b>57</b>


3. Phép kết vế phải (RIGHT JOIN).


Phép kết vế phải giữa R và S, ký hiệu R S, là 1 quan hệ Q
định nghĩa trên tập thuộc tính U  V, mà


T<sub>Q</sub> = { t = (u, v): u  T<sub>R</sub>  v  T<sub>S</sub>  u.A = v.B


Kết quả phép kết vế phải giữa R và S là:


Q(A, X, B, Y)
(1, x1, 1, y1)
(2, x2, 2, y2)


(<i>Null, Null</i>, 4, y4) <i>(2)</i>


Suy ra, có thể dễ dàng tìm được các bộ của S mà khơng có bộ
giá trị tương ứng trong quan hệ R.


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

<b>58</b>


Viết các biểu thức quan hệ để trả lời cho các câu hỏi sau:


1: “<i>Cho danh sách nhân viên làm cùng phòng với Watson</i>”.


(NhanVien : (TenNV = ‘Watson’))[MaPB] NhanVien


2: “<i>Cho tên của người lãnh đạo Smith</i>”.


<b>(((</b>(NhanVien : (TenNV =‘Smith’))[MaPB] PhongBan)[MaNQL])
NhanVien<b>)</b> [TenNV]


3: “<i>Cho danh sách nhân viên có lương trên 4000</i>”
NhanVien : (Luong > 4000)


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

<b>59</b>



<b>Chương VII: </b>

<b>NGÔN NGỮ TRUY VẤN CSDL </b>




<b>NỘI DUNG</b>



<b>7.1 TRUY VẤN ĐỂ TÌM KIẾM THƠNG TIN</b>
<b>7.2 TRUY VẤN ĐỂ THAY ĐỔI DỮ LIỆU</b>


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

<b>60</b>



<i><b>Tư tưởng chủ đạo:</b></i><b> Cần cái gì? Từ đâu mà có?</b>


<i><b>1. Truy Vấn Đơn Giản:</b></i>
Cú pháp:


SELECT <<i>biểu thức1</i>>, <<i>biểu thức2</i>>, … <<i>biểu thức n</i>>


FROM <<i>quan heä</i>> ;


(<i><b>Những cái ta </b></i><b>CẦN</b><i><b> thì đặt sau SELECT. Cái </b></i><b>TỪ ĐÂU</b><i><b> mà có đặt sau FROM</b></i>)


<i><b>Ghi chuù: </b></i>


(*) Nếu các <<i>biểu thức</i>> là tên tất cả các <i>field</i> thì dùng *


(*) Đặt tên lại cho biểu thức thì thêm AS <<i>tên</i>> sau <<i>biểu thức</i>>
(*) Sử dụng DISTINCT ngay sau SELECT để lấy dòng  nhau


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

<b>61</b>


<i><b>Các ví dụ minh họa:</b></i>


1. “<i>Cho mã số, tên, cơng việc, lương, h hồng, mã phịng, giới </i>
<i>tính của các nhân viên của Cty”</i>.



<b>SELECT MaNV, TenNC, MaCV, Luong, HoaHong, MaPB, GioiTinh</b>
<b>FROM NhanVien;</b>


<b> SELECT * FROM NhanVien;</b>


2. “<i>Cho tên và tiền lương 1 năm của các nhân viên?</i>”


<b>SELECT TenNV, Luong*12 AS LuongCaNam</b>
<b>FROM NhanVien;</b>


3. “<i>Cho biết mã hiệu các công việc mà các nhân viên của Công </i>
<i>ty hiện đang làm?</i>”


<b>SELECT DISTINCT MaCV FROM NhanVien;</b>


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

<b>62</b>


<i><b>2. Sắp xếp kết quả in ra – Mệnh đề ORDER BY</b></i>


Cú pháp mệnh đề:


ORDER BY <<i>bthức 1</i>>[ASC | DESC], … <<i>bthức<sub>n</sub></i>>[ASC | DESC]
<i><b>Ghi chú: </b></i>


(*) Có thể thay <<i>bthức</i>> bằng số thứ tự của nó trong mệnh đề


SELECT.


(*) Có thể dùng với TOP n [ PERCENT] để lấy các dịng đầu.
<i><b>Ví dụ:</b></i>



1. “<i>Cho danh sách các nhân viên theo từng phòng ban.</i>”


<b>SELECT * FROM NhanVien ORDER BY MaPB;</b>
 <b>SELECT * FROM NhanVien ORDER BY 6;</b>


<i><b>(Vì </b></i><b>MaPB </b><i><b> là thuộc tính thứ 6 trong danh sách biểu thức sau </b></i><b>SELECT</b><i><b>)</b></i>


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

<b>63</b>


<i><b>3. Chọn lọc bản ghi – Mệnh đề WHERE</b></i>


Cú pháp mệnh đề: WHERE <điều kiện chọn >
Điều kiện là một biểu thức lơgíc có dạng:


p<sub>1</sub> AND | OR p<sub>2</sub> AND | OR p<sub>3</sub> … And | Or p<sub>n</sub>


Ở đây p<sub>i</sub> (i = 1, 2, …, n) là các biểu thức lơgíc cơ sở, thường có
dạng:


 [NOT] <<i>biểu thức 1</i>> <<i>phép so sánh</i>> <<i>biểu thức 2</i>>
 [NOT] EXISTS (<<i>câu truy vấn SQL</i>>)


Ở đây: <<i>phép so sánh</i>> có thể là:
 <, <=, >, >=, =, <>


 IN (<<i>danh sách giá trị cách nhau bởi dấu phảy</i>>)
 BETWEEN <<i>giá trị</i> <i>thấp</i>> AND < <i>giá trị</i> <i>cao</i>>
 LIKE <<i>mẫu - Pattern</i>>


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

<b>64</b>




<i>1) Liệt kê những nhân viên của phòng 40</i>


<b>SELECT * FROM NhanVien WHERE MaPB=40</b>


<i>2) Liệt kê những nhân viên quản lý và có lương lớn hơn 4000</i>


<b>SELECT * FROM NhanVien WHERE MaCV=’QuanLi’ </b>


<b>AND Luong>4000</b>


<i>3) Cho thông tin những nhân viên có lương lớn hơn 4000 hoặc </i>
<i>nhân viên thuộc phịng 40</i>


<b>SELECT * FROM NhanVien WHERE MaPB=40 OR Luong </b>
<b>> 4000</b>


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

<b>65</b>


<i><b>4. Xác định nguồn dữ liệu – Mệnh đề FROM</b></i>


Cú pháp mệnh đề:


FROM <<i>quan heä<sub> 1</sub></i>> [<<i>bí danh</i>>], …, <<i>quan hệ<sub> n</sub></i>> [<<i>bí danh</i>>]


(*) Việc liệt kê danh sách quan hệ sau FROM ln địi hỏi phải
thể hiện mối quan hệ giữa chúng trong mệnh đề WHERE và
sẽ khiến máy phải thực hiện một phép tích Des Cartesian.
(*) Nên dùng bí danh cho quan hệ để tiện lợi cho cách viết lệnh.


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

<b>66</b>



<i><b>5. Các hàm tích hợp trên nhóm bản ghi – Mệnh đề GROUP BY</b></i>
Các hàm tích hợp trên nhóm các bản ghi gồm có:


SUM (<biểu thức số>): Hàm tính tổng


COUNT (* | [DISTINCT] <tên field>): Đếm số lượng mẫu tin


AVG (<biểu thức số>): Hàm tính giá trị trung bình


MIN (<biểu thức>) : Lấy giá trị nhỏ nhất


MAX (<biểu thức>): Lấy giá trị lớn nhất


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

<b>67</b>



<i>Cú pháp mệnh đề</i>:


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


(*) Nếu khơng có GROUP BY thì tồn bộ là một nhóm


(*) Ngoại trừ các biểu thức có hàm tích hợp thì các biểu thức
cịn lại phải có mặt trong mệnh đề GROUP BY.


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

<b>68</b>


<i><b>6. Giới hạn kết quả in ra – Mệnh đề HAVING</b></i>


<i>Cú pháp mệnh đề</i>:


HAVING <điều kiện chọn các bản ghi kết quả>



(*) HAVING phải đi kèm với mệnh đề GROUP BY


Tóm lại, cú pháp tổng quát của câu lệnh truy vấn tìm kiếm laø:


SELECT [DISTINCT] [TOP n [PERCENT]] <các biểu thức>


FROM <quan hệ 1>[<bí danh>], <quan hệ 1>[<bí danh>], …
[WHERE <điều kiện chọn bản ghi để xử lý>]


[GROUP BY <các biểu thức phân nhóm> ]
[HAVING <điều kiện chọn bản ghi kết quả> ]
[ORDER BY <các biểu thức sắp xếp> ]


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

<b>69</b>


<i><b>7. Câu truy vấn con (SubQuery)</b></i>


<i><b>Định nghĩa: </b></i> Là một câu truy vấn mà kết quả của nó được
dùng trong một câu truy vấn khác. Câu truy vấn con phải
được đặt trong cặp dấu ngoặc tròn ( ).


<b>Trong SQL-SERVER, ORACLE, DB2, INFORMIX, …</b>


Câu truy vấn con có thể được dùng để tạo nguồn dữ liệu cho
một câu truy vấn khác, có nghĩa là nó có thể có mặt trong
mệnh đề FROM.


Có thể được dùng nhiều biểu thức sau SELECT trong câu truy
vấn con, xem như đó là một bộ giá trị. Các phép toán so
sánh với một bộ giá trị vẫn được viết một cách bình thường.



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

<b>70</b>



<b> TRUY VẤN ĐỂ TÌM KIẾM THƠNG TIN</b>



Các phép so sánh có thể dùng với câu truy vấn con là:


 >, >=, =, <, <=, <> (Nếu Subquery cho lại duy nhất 1 giá trị)
 IN, =Some, =Any: Các phép tốn tương đương nhau, dùng để


kiểm tra xem một giá trị có nằm trong tập giá trị của


Subquery.


 > All, >=All, <All, <=All


 [Not] Exists : Kieåm tra SubQuery có trả về mẫu tin nào


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

<b>71</b>


“Cho danh sách nhân viên có lương cao nhất và thấp nhất


<i><b>Công ty”</b></i>


Q1: Tìm mức lương cao nhất (x) và thấp nhất (y) cơng ty.
Q2: Tìm các nhân viên có lương = (x) hoặc lương = (y).


SELECT * FROM NhanVien


WHERE Luong = (SELECT MAX(Luong)



FROM NhanVien)


OR Luong = (SELECT MIN(Luong) FROM NhanVien)


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

<b>72</b>



<b>TRUY VẤN ĐỂ THAY ĐỔI DỮ LIỆU</b>



1. Tạo bảng từ dữ liệu của câu truy vấn
<i><b>Cú pháp: </b></i>


SELECT <các biểu thức> INTO <tên quan hệ>


FROM <các quan hệ>
[<i>Mệnh đề</i> WHERE>]
[<i>Mệnh đề</i> GROUP BY]
[<i>Mệnh đề</i> HAVING]
[<i>Mệnh đề</i> ORDER BY]


<i><b>Ví dụ: “</b>Tạo quan hệ có tên là Manager để lưu các n/v phụ </i>
<i>trách các phòng/ban</i>”.


Select * into Manager from NhanVien where


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

<b>73</b>


2. Thêm bộ giá trị vào quan hệ.


a. Thêm 1 bộ từ giá trị đã cho:
<i><b>Cú pháp: </b></i>



INSERT INTO <tên quan hệ>[(<các field>)]VALUES (<các giá trị>)


<i><b>Ví dụ: “</b>Thêm nhân viên mới có tên là Hồng Duy mã số 300 </i>
<i>vào phịng số 10 làm n/v kế tốn với lương 2700$</i>”.


INSERT INTO NhanVien


VALUES (300, ‘Hoàng Duy’, ‘KeToan’, 2700, NULL, 10, ‘M’);


<i>* Nên viết</i>:


Insert Into NhanVien(MaNV, TenNV, MaCV, Luong,
HoaHong, MaPB, GioiTinh)


Values (300, ‘Hoàng Duy’, ‘KeToan’, 2700, NuLL, 10, ‘M’)


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

<b>74</b>



<i>b. Thêm các bộ từ CSDL</i>:
<i><b>Cú pháp: </b></i>


INSERT INTO <tên quan hệ>[(<các field>)]


Select (<các biểu thức>)


From <các quan hệ>
[Where <điều kiện>]


[Group by <các biểu thức phân nhóm>]



[Having <điều kiện chọn bản ghi cuối cùng>];


<i><b>Ví dụ: “</b><b>Thêm vào quan hệ Manager các nhân viên có lương > 4000$</b></i>”


INSERT INTO MANAGER


SELECT * FROM NhanVien


WHERE Luong > 4000


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

<b>75</b>



<i>4. Xóa các bộ trong CSDL</i>:
<i><b>Cú pháp: </b></i>


DELETE FROM <tên quan hệ>
[WHERE <điều kiện xóa các bộ>];


(*) Nếu không có điều kiện sau WHERE thì tất cả các bộ giá
trị của quan hệ sẽ bị xóa.


<i><b>Ví dụ: “</b>Xóa khỏi quan hệ NhanVien các nhân viên phụ trách </i>
<i>các phòng ban</i>”.


DELETE FROM NhanVien


WHERE MaCV = ‘QuanLi’;


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

<b>76</b>


1. Tạo cấu trúc bảng (quan hệ)


2. Sửa đổi cấu trúc bảng.


a) Sửa kích thước các cột (<i>Field Size</i>)


b) Thêm cột mới vào bảng (Add Column).
c) Xác định miền giá trị (Domain).


d) Thiết lập giá trị mặc định (Default Value).
e) Thiết lập khóa chính (Primary Key).


3. Thiết lập khóa ngoại (Foreign Key).
4. Bổ sung chỉ mục (Index).


5. Tạo và cấp quyền hạn cho người sử dụng.


6. Hủy bỏ Khóa, Chỉ mục, Quan hệ, Người dùng...


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

<b>77</b>



<b>TỐI ƯU HÓA CÂU TRUY VẤN</b>



 MỞ ĐẦU


 CÁC NGUN TẮC TỔNG QT ĐỂ TỐI ƯU HĨA
CÂU TRUY VẤN


– Các nguyên tắc cơ bản


– Các biểu thức tương đương



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

<b>78</b>



<b>MỞ ĐẦU</b>



Tối ưu hóa câu truy vấn là các phép biến đổi (tương đương)
các câu truy vấn nhằm giảm thời gian xử lý và không gian
lưu trữ.


Tối ưu


<b>Thời gian xử lý</b>


Khơng gian lưu trữ


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

<b>79</b>



<b>NGUYÊN TẮC TỐI ƯU HÓA CÂU TRUY VẤN</b>



<b>1. </b>

<b>Các nguyên tắc cơ bản</b>



<b>Gồm 6 nguyên tắc:</b>



 Thực hiện các phép chọn càng sớm càng tốt


 Tồ hợp các phép chọn và phép tích Đề-Các thành phép


kết


 Tồ hợp các phép quan hệ một ngơi như phép chọn và



phép chiếu


 Tìm biểu thức con chung trong một biểu thức
 Tiền xử lý bảng <sub></sub> indexes


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

<b>80</b>



<b>NGUYÊN TẮC TỐI ƯU HÓA CÂU TRUY VẤN</b>



<b>2. Các biểu thức tương đương</b>



Hai biểu thức được gọi là tương đương nếu với cùng thể
hiện CSDL sẽ trả về cùng kết quả.


Kí hieäu:


Với định nghĩa tương đương này ta có một số quy tắc
chuyển dịch đại số thông thường sau đây.


2
1 <i>E</i>


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

<b>81</b>



<b>NGUYÊN TẮC TỐI ƯU HÓA CÂU TRUY VAÁN</b>



Các nguyên tắc liên quan đến phép kết và phép tích đề các


(E<sub>1</sub>⋈E<sub>2</sub>) ⋈E<sub>3</sub>

E<sub>1</sub>⋈(E<sub>2</sub> ⋈E<sub>3</sub>)


)


(



)



(

<i>E</i>

<sub>1</sub>

<i>E</i>

<sub>2</sub>

<i>E</i>

<sub>3</sub>

<i>E</i>

<sub>1</sub>

<i>E</i>

<sub>2</sub>

<i>E</i>

<sub>3</sub>


<b>Qui tắc kết hợp</b>




E1 E2 E2 E1



1
2


2


1

<i>E</i>

<i>E</i>

<i>E</i>



<i>E</i>



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

<b>82</b>



<b>NGUYÊN TẮC TỐI ƯU HÓA CÂU TRUY VẤN</b>



Các ngun tắc liên quan đến phép chọn và phép chiếu
Dãy các phép chọn



Dãy các phép chiếu


Giao hoán phép chọn và phép chiếu


<i>n</i>


<i>n</i>

<i>R</i>

<i>f</i>

<i>f</i>

<i>f</i>



<i>f</i>


<i>f</i>



<i>f</i>



<i>R</i>

:

<sub>1</sub>

)

:

<sub>2</sub>

)...)

:

:

<sub>1</sub>

<sub>2</sub>



(((


<i>n</i>
<i>n</i>
<i>n</i>
<i>n</i>
<i>n</i>
<i>A</i>
<i>A</i>
<i>A</i>
<i>A</i>
<i>B</i>
<i>B</i>
<i>B</i>
<i>B</i>
<i>voi</i>

<i>B</i>
<i>B</i>
<i>B</i>
<i>B</i>
<i>R</i>
<i>B</i>
<i>B</i>
<i>B</i>
<i>B</i>
<i>A</i>
<i>A</i>
<i>A</i>
<i>A</i>
<i>R</i>





3
2
1
3
2
1
3
2
1
3
2

1
3
2


1 ])[ ] [ ]


[
(


]


...


)[


:


(


:


]


...



[

<i>A</i>

<sub>1</sub>

<i>A</i>

<sub>2</sub>

<i>A</i>

<i><sub>n</sub></i>

<i>f</i>

<i>R</i>

<i>f</i>

<i>A</i>

<sub>1</sub>

<i>A</i>

<sub>2</sub>

<i>A</i>

<i><sub>n</sub></i>


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

<b>83</b>


<b>Giao hoán phép chọn và phép tích Đề-các</b>


<b>Giao hốn giữa phép chọn và phép hợp</b>


2
1


2



1

)

:

(

:

)



(

<i>R</i>

<i>R</i>

<i>f</i>

<i>R</i>

<i>f</i>

<i>R</i>

nếu f liên quan R<sub>1</sub>


1
2


2


1

)

:

(

:

)



(

<i>R</i>

<i>R</i>

<i>f</i>

<i>R</i>

<i>f</i>

<i>R</i>

nếu f liên quan R<sub>2</sub>


)


:


(


)


:


(


:


)



(

<i>R</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>f</i>

<i>R</i>

<sub>1</sub>

<i>f</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>f</i>

<sub>2</sub> <sub> nếu </sub> <i><sub>f</sub></i> <sub></sub> <i><sub>f</sub></i><sub>1</sub> <sub></sub> <i><sub>f</sub></i><sub>2</sub>


)


:


(


)


:



(


:


)



(

<i>R</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>f</i>

<i>R</i>

<sub>1</sub>

<i>f</i>

<i>R</i>

<sub>2</sub>

<i>f</i>



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

<b>84</b>


<b>Giao hoán giữa phép chọn và phép trừ</b>


<b>Giao hốn phép chiếu với phép tích Đề-các</b>


<b>Giao hốn giữa phép chiếu và phép hợp</b>


)


:


(


)


:


(


:


)



(

<i>R</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>f</i>

<i>R</i>

<sub>1</sub>

<i>f</i>

<i>R</i>

<sub>2</sub>

<i>f</i>



]


[


]


[


]


)[




(

<i>R</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>A</i>

<sub>1</sub>

<i>A</i>

<sub>2</sub>

<i>A</i>

<i><sub>N</sub></i>

<i>R</i>

<sub>1</sub>

<i>B</i>

<sub>1</sub>

<i>B</i>

<sub>2</sub>

<i>B</i>

<i><sub>m</sub></i>

<i>R</i>

<sub>2</sub>

<i>C</i>

<sub>1</sub>

<i>C</i>

<sub>2</sub>

<i>C</i>

<i><sub>k</sub></i>


với <i>A</i>1  <i>An</i> là thuộc tính bao gồm <i>B</i>1 <i>Bm</i> <i>R</i>1 và


2


1

<i>C</i>

<i>R</i>



<i>C</i>

<i><sub>k</sub></i>



])


[


(


])


[


(


]


)[



(

<i>R</i>

<sub>1</sub>

<i>R</i>

<sub>2</sub>

<i>A</i>

<sub>1</sub>

<i>A</i>

<i><sub>n</sub></i>

<i>R</i>

<sub>1</sub>

<i>A</i>

<sub>1</sub>

<i>A</i>

<i><sub>n</sub></i>

<i>R</i>

<sub>2</sub>

<i>A</i>

<sub>1</sub>

<i>A</i>

<i><sub>n</sub></i>


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

<b>85</b>



<b>TÀI LIỆU THAM KHẢO</b>



1. Nguyễn Đăng Tỵ,<i> Giáo trình CSDL, ĐHQG Tp.HCM, 2001</i>


2. Lê Tiến Vương, <i>Nhập môn CSDL, NXB Thống kê, 2000</i>



<i>3. Bùi Minh Từ Diễm, Bài giảng nhập môn CSDL, KHTN, 2002</i>
<i>4. Nguyễn Bá Tường, CSDL Lý thuyết và thực hành, NXB Khoa </i>


<i>học kỹ thuật</i>


</div>

<!--links-->

×