Tải bản đầy đủ (.pdf) (40 trang)

BẢNG ĐIỂM HỌC PHẦN SQL – LỚP CT15

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 (2.32 MB, 40 trang )

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

<i>Trường Đại học Khoa học Tự nhiên </i>
<i>Khoa Công nghệ Thông tin </i>


<i>Bộ môn Hệ thống Thông tin </i>


<i><b>Chương 3: Cơ bản về thiết kế cơ sở </b></i>


<i><b>dữ liệu </b></i>



<b>Phạm Nguyên Thảo </b>



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

<i>2 </i>


<i><b>Nội dung </b></i>



<b>Khái niệm về phụ thuộc hàm </b>


<b>Khái niệm về dạng chuẩn </b>



<b>Chuẩn bị cài đặt CSDL </b>



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

<i>3 </i>
<i><b>Khái niệm phụ thuộc hàm </b></i>


<b>Phụ thuộc hàm (PTH) – functional dependency </b>


<b>thể hiện sự phụ thuộc của một tập thuộc tính </b>


<b>(Y) đối với một tập thuộc tính khác(X) </b>



– Định nghĩa dựa trên những ngữ nghĩa, qui tắc tìm
hiểu được từ mơi trường ứng dụng


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

<i>4 </i>



<i><b>Khái niệm PTH (tt) </b></i>



<b>Cho quan hệ Q(X, Y, Z), với X, Y, Z là các tập </b>


<b>thuộc tính, X </b>

<b>, Y </b>



– Một thể hiện TQ của Q <i>thỏa</i> PTH XY nếu:


q,q’TQ, q.X = q’.X =>q.Y = q’.Y
– TQ <i>vi phạm</i> PTH XY nếu:


q,q’ TQ: q.X = q’.X và q.Y  q’.Y


– PTH XY được gọi là <i>định nghĩa trên Q</i> nếu TQ là
thể hiện của Q, TQ thỏa PTH này


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

<i>5 </i>


<i><b>PTH – ví dụ </b></i>



<b>Xét lịch xếp lớp của một cơ sở giảng dạy trong </b>


<b>một ngày, ta có các phụ thuộc hàm sau: </b>



– (1) GV, Giờ  Lớp


<i>( nếu biết giảng viên và giờ dạy, ta sẽ biết được lớp mà giảng </i>
<i>viên dạy vào giờ đó) </i>


– (2) Giờ, Lớp  Phòng


<i>(Cho một giờ học và lớp học cụ thể, ta sẽ biết được lớp đang </i>


<i>học phòng nào vào giờ đó) </i>


 <i>Nếu biết giảng viên và giờ dạy, ta sẽ biết Phòng </i>
<i>mà giảng viên dạy vào giờ đó </i>


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

<i>6 </i>


<i><b>Hệ tiên đề Amstrong để suy dẫn PTH </b></i>


<b>Luật phản xạ: </b>



<b> </b> <b>Y</b><b> X, X</b><b>Y </b>

<b>Luật cộng: </b>



<b> </b> <b>Nếu X </b><b>Y và Z </b><b> W thì X,W </b><b>Y,Z </b>

<b>Luật bắc cầu: </b>



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

<i>7 </i>


<i><b>Một số luật dẫn thơng dụng khác </b></i>



<b>Từ các luật dẫn trong tiên đề Amstrong ta có </b>


<b>thể suy ra các luật dẫn khác, một số sau đây </b>


<b>thường được sử dụng: </b>



– Luật bắc cầu giả:


Nếu X Y và Y,W  Z thì X,W  Z
– Luật hội:


Nếu X Y và X Z thì X Y,Z


– Luật phân rã:


Nếu X Y và Z Y thì X Z


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

<i>8 </i>


<i><b>Khái niệm khóa dựa trên PTH </b></i>



<b>Cho quan hệ Q và </b>

<sub>F</sub>

<b> là tập PTH định nghĩa trên </b>


<b>Q </b>



<b>K </b>

<b> Q</b>

<b>+</b>

<b> là một khóa của Q nếu: </b>



<b>i. f: K</b><b> Q+</b>  <sub>F</sub><b>+ (K xác định tất cả các thuộc </b>


<b>tính cịn lại trong Q+<sub>) </sub></b>


<b>ii.</b> <b>K’ </b><b> K | K’ </b><b> Q+ </b>


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

<i>9 </i>


<i><b>Nội dung </b></i>



<b>Khái niệm về phụ thuộc hàm </b>



<b>Khái niệm về dạng chuẩn </b>


<b>Chuẩn bị cài đặt CSDL </b>



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

<i>10 </i>



<i><b>Tình trạng trùng lắp thơng tin </b></i>



<b>Phụ thuộc hàm là một loại ràng buộc tồn vẹn </b>


<b>Khi thêm, xóa, cập nhật dữ liệu phải đảm bảo </b>



<b>không vi phạm PTH </b>



– Các PTH mà vế trái là một khóa: được kiểm tra
hiệu quả bằng cơ chế khóa của HQT


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

<i>11 </i>


<i><b>Tình trạng trùng lắp thơng tin (tt) </b></i>


<b>Ví dụ: </b>



<b>MON_KT(N,G,P,M,GV); </b><sub>F</sub><b><sub>2</sub> = {N,G,P</b><b>M; M </b><b>GV} </b>
<b>Với một thể hiện: </b>


– <i>Nhận xét về sự trùng lắp thông tin và bất tiện khi </i>
<i>thêm/ xóa/ sửa dữ liệu?</i>


<b>N G </b> <b>P </b> <b>M </b> <b>GV </b>


2 8:00 – 10:00 101 Giải thuật X
2 10:00 – 12:00 101 CSDL Y
2 8:00 – 10:00 103 Giải thuật X


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

<i>12 </i>


<i><b>Tình trạng trùng lắp thơng tin (tt) </b></i>




<b>Các bất tiện gây ra do trùng lắp thông tin: </b>



– Bất tiện khi thêm/cập nhật : để đảm bảo dữ liệu


nhất quán, phải kiểm tra và cập nhật hàng loạt trên
các thông tin trùng lắp


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

<i>13 </i>


<i><b>Khái niệm dạng chuẩn </b></i>



<b>Dạng chuẩn là một tiêu chuẩn được đưa ra để </b>


<b>đánh giá chất lượng của một lược đồ CSDL </b>


<b>Mục tiêu khi nâng cấp dạng chuẩn của một </b>



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

<i>14 </i>


<i><b>Định nghĩa các dạng chuẩn </b></i>



• <i><b>Dạng chuẩn 1:</b></i><b> </b>


– Một quan hệ ở dạng chuẩn 1 khơng có các trường lặp và các
trường kép, còn được gọi là cấu trúc phẳng.


– Ví dụ:


LỊCH_COI_THI (GV_CT, N,G,P,M,GV)


F = {f<sub>1</sub>: GV_CTN,G,P: một giảng viên coi thi chỉ coi vào


một ngày(N), một giờ (G) và


trong một phòng(P) duy nhất
f<sub>2</sub>: M  GV : mỗi môn thi (M) có một giảng


viên (GV) duy nhất phụ trách


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

<i>15 </i>


<i><b>Định nghĩa các dạng chuẩn (tt) </b></i>


<b>Dạng chuẩn 2: </b>



– Một quan hệ Q ở dạng chuẩn 2 nếu và chỉ nếu tất
cả thuộc tính khơng khóa đều <i>phụ thuộc đầy đủ</i> vào
khóa, tức là:


<b>(f: X</b><b>Y) </b><b> F, không tồn tại X’ </b><b> X sao cho </b>
<b>(X’</b><b>Y) </b><b> F+ </b>


– Ví dụ:


MON_KT(N,G,P,M,GV);


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

<i>16 </i>


<i><b>Định nghĩa các dạng chuẩn (tt) </b></i>


<b>Dạng chuẩn 3: </b>



– Q ở DC3 nếu và chỉ nếu với mỗi phụ thuộc hàm
XA không hiển nhiên định nghĩa trên Q (A là


thuộc tính đơn, X là tập thuộc tính), một trong hai
điều kiện sau được thỏa:


i. Hoặc X chứa một khóa của Q


ii. Hoặc A là một thuộc tính trong khóa của Q


– Ví dụ:


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

<i>17 </i>


<i><b>Định nghĩa các dạng chuẩn (tt) </b></i>



<b>Dạng chuẩn BCK (Boyce_Codd_Kent) </b>



– Q ở DC BCK nếu và chỉ nếu: với mỗi PTH không
hiển nhiên X  A định nghĩa trên Q thì B  Q+,<sub> ta </sub>


ln có (XB) là một PTH thuộc <sub>F</sub>+. Hay nói cách
khác, X chứa một khóa của Q


– Ví dụ:


LICH_KT_1(M,P) ; F<sub>1</sub> = {M P}
LICH_KT_2(M,N,G); F<sub>2</sub> = 


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

<i>18 </i>


<i><b>Tính lồng nhau của các dạng chuẩn </b></i>




<b>DC 1 </b>



<b>DC 2 </b>



<b>DC 3 </b>



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

<i>19 </i>


<i><b>Dạng chuẩn của lược đồ CSDL </b></i>


<b>Định nghĩa: </b>



Cho một lược đồ CSDL <sub>C</sub> = {<Q<sub>i</sub>, <sub>F</sub><sub>i</sub>>}, i = 1..n


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

<i>20 </i>


<i><b>Nâng cấp lược đồ - Thuật tốn phân rã </b></i>



<b>Mục tiêu: Đưa lược đồ về dạng chuẩn cao hơn. </b>


<b>Thuật tốn: </b>



Với mọi quan hệ Q trong lược đồ đạt dạng chuẩn
thấp:


– Chọn một PTH XY gây ra dạng chuẩn thấp cho
quan hệ Q


– Phân rã Q thành Q<sub>1</sub>(XY) và Q<sub>2</sub>(Q+<sub> - Y) </sub>


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

<i>21 </i>



<i><b>Nâng cấp lược đồ - Thuật tốn phân rã (tt) </b></i>


<b>Ví dụ: </b>



LỊCH_COI_THI (GV_CT, N,G,P,M,GV)


F = {f<sub>1</sub>: GV_CTN,G,P: một giảng viên coi thi chỉ coi vào


một ngày(N), một giờ (G) và
trong một phòng(P) duy nhất


f<sub>2</sub>: M  GV : mỗi mơn thi (M) có một giảng
viên (GV) duy nhất phụ trách


f<sub>3</sub>: N,G,P  M : mỗi ngày, vào một giờ, trong một


phòng, chỉ có một mơn thi duy nhất
}


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

<i>22 </i>


<i><b>Dạng chuẩn – nhận xét </b></i>



– Dạng chuẩn càng cao thì càng giảm được trùng lắp
thông tin. Lược đồ ở dạng chuẩn BCK khơng cịn
trùng lắp thơng tin.


– Tuy nhiên, dạng chuẩn cao có thể gây ra khó khăn
khi truy vấn (các quan hệ bị tách nhỏ nên phải thực
hiện nhiều phép kết hơn)



– Đôi khi dạng chuẩn cao gây khó khăn trong kiểm


tra một số PTH (trong ví dụ về DC BCK, để kiểm tra
PTH N,G,PM, ta phải kết LICH_KT_1 và


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

<i>23 </i>


<i><b>Nội dung </b></i>



<b>Khái niệm về phụ thuộc hàm </b>



<b>Khái niệm về dạng chuẩn </b>



<b>Chuẩn bị cài đặt CSDL </b>



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

<i>24 </i>


<i><b>Các vấn đề chính </b></i>



<b>Cân nhắc các thơng tin về khối lượng dữ liệu </b>


<b>và tần suất khai thác: </b>



– Quyết định gộp – tách bảng (Thông thường các
quan hệ nên đạt DC 3 trở lên, tuy nhiên đôi khi


chấp nhận dạng chuẩn thấp hơn để truy vấn thuận
lợi hơn)


– Lựa chọn khố chính cho bảng (trường hợp bảng
có nhiều khóa, chọn một khố làm khố chính, các


khóa cịn lại dùng ràng buộc unique để cài đặt)


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

<i>25 </i>


<i><b>Lựa chọn chỉ mục (index) </b></i>



<b>Khơng có chỉ mục, HQT thực hiện truy vấn </b>


<b>bằng cách duyệt qua từng dòng trong bảng </b>


<b>Cài đặt các chỉ mục cho bảng giúp truy vấn </b>



<b>thơng tin nhanh hơn (tìm kiếm trên B-Tree) </b>


<b>Khóa chính và các ràng buộc unique : hiển </b>



<b>nhiên là các chỉ mục của bảng </b>



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

<i>26 </i>


<i><b>Lựa chọn chỉ mục (tt) </b></i>



<b>Nghĩ đến việc cài đặt chỉ mục cho các trường </b>


<b>hợp sau: </b>



– Trường hợp 1: Có nhu cầu truy vấn thường xuyên
các bộ của bảng Q theo một số (tập)thuộc tính nào
đó


Ví dụ: GiaoDich(MãGD, …,NgàyGD)


Có nhu cầu truy xuất <i><b>thường xuyên</b></i> các bộ của giao dịch
trong một ngày hoặc trong một khoảng thời gian nhất



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

<i>27 </i>


<i><b>Lựa chọn chỉ mục (tt) </b></i>



– Trường hợp 2: tập thuộc tính tham gia vào phép kết
của một câu truy vấn xảy ra thường xuyên


Ví dụ:


HocSinh(STT, Lop, HoTen,…)


KetQua(STTHS, Lop, Mon, Diem)


Thường xuyên có nhu cầu truy vấn: cho biết kết quả học
tập của một học sinh


select hs.STT, hs.Lop, hs.HoTen, kq.Mon, kq.Diem
from HocSinh hs join KetQua kq on hs.STT = kq.STT
and hs.Lop = kq.Lop


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

<i>28 </i>


<i><b>Lựa chọn chỉ mục (tt) </b></i>



– Trường hợp 2 (tt)


Tổng qt: trên mơ hình quan hệ, xác định các con đường
<i>truy xuất thường xuyên: </i>



 Từ một bộ của Q<sub>1</sub>(có một giá trị cụ thể của A là a) có nhu
cầu truy xuất thường xuyên các bộ của Q2 tương ứng (tìm
kiếm các bộ của Q<sub>2</sub> với A = a) : khai báo chỉ mục (A) cho Q<sub>2 </sub>


Truy xuất thường xuyên có ngữ nghĩa tương tự phép kết
<i>Lưu ý: một chỉ mục (AB) khác với hai chỉ mục (A) và (B) </i>


<i> </i>


1 2 <sub>Q</sub>


2(ABY)


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

<i>29 </i>


<i><b>Các loại chỉ mục </b></i>



<b>Có hai loại chỉ mục: </b>



– Clustered index


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

<i>30 </i>


<i><b>Clustered index </b></i>



<b>Các bộ được sắp xếp vật lý theo chỉ mục (thật </b>


<b>sự nằm ở nút lá của cây) </b>



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

<i>31 </i>



<i><b>Nonclustered index: </b></i>



<b>Chỉ mục logic, dữ liệu thật sự khơng được sắp </b>


<b>xếp vật lý theo chỉ mục </b>



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

<i>32 </i>


<i><b>Nonclustered index (tt): </b></i>



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

<i>33 </i>


<i><b>Nonclustered index (tt) </b></i>



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

<i>34 </i>


<i><b>Lựa chọn chỉ mục (tt) </b></i>



<b>Một số cân nhắc khi chọn chỉ mục: </b>



– Sử dụng nhiều chỉ mục tăng tốc độ truy vấn, nhưng
làm giảm hiệu quả của các thao tác thêm/xố/ cập
nhật dữ liệu


– Khơng nên tạo chỉ mục trên các bảng quá nhỏ (vài
trăm dòng) .


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

<i>35 </i>


<i><b>Một số cân nhắc khi chọn chỉ mục (tt) </b></i>




– Các giá trị chỉ mục phải phân bố đều các bộ trong
bảng.


– Cố gắng dùng các chỉ mục với số thuộc tính ít


(chiếm ít không gian và cần ít chi phí duy trì hơn chỉ
mục với số thuộc tính lớn)


– Clustered index phải nhỏ (số thuộc tính ít, kích


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

<i>36 </i>


<i><b>Nội dung </b></i>



<b>Khái niệm về phụ thuộc hàm </b>



<b>Khái niệm về dạng chuẩn </b>



<b>Chuẩn bị cài đặt CSDL </b>



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

<i>37 </i>


<i><b>Một số qui định </b></i>



<b>Một bảng có tối đa 249 nonclustered index </b>


<b>(bao gồm cả những index ngầm định khi khai </b>


<b>báo khố chính và chỉ mục) </b>



<b>Kích thước tối đa của một chỉ mục (tổng kích </b>


<b>thước các thuộc tính tham gia vào chỉ mục) </b>



<b>khơng quá 900 bytes </b>



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

<i>38 </i>


<i><b>Cú pháp khai báo chỉ mục </b></i>


<b> </b>


<b>Create [ Unique ][ Cluster| Nonclustered] Index </b><i>index_name</i>


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

<i>39 </i>


<i><b>Cài đặt chỉ mục – Ví dụ </b></i>


<b> </b>


<b> </b> <b>Create nonclustered index</b> idx_STTHS_Lop


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

<i>40 </i>


</div>

<!--links-->

×