Toàn Vẹn Dữ Liệu
Nghĩa là, mọi thay đổi phải thành công hoặc không có thay đổi nào xảy ra.
• Các hệ quản trị CSDL cho phép người lập trìnhchỉ định giao tác. Mọi thay đổi của CSDL
xảy ra bên trong giao tác phải thành công hoặc giao tác đó sẽ quay lui trở lại (roll back).
Khi một giao tác bị quay lui, giá trị của tất cả các cột trong tất cả các hàng sẽ được khôi
phục lại giá trị cũ trước khi giao tác bắt đầu.
Bạn đang xem trước 20 trang tài liệu Bài giảng Các vấn đề cơ sở của khoa học máy tính - Chương 6 Cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6:
CƠ SỞ DỮ LIỆU
Nội Dung
1. Giới thiệu.
2. Các loại cơ sở dữ liệu.
3. Các ưu điểm khi sử dụng CSDL.
4. Mô hình hóa miền dữ liệu.
5. Xây dựng CSDL quan hệ từ mô hình dữ liệu
6. Chuẩn hóa dữ liệu.
7. Ngôn ngữ SQL.
8. Ngôn ngữ định nghĩa dữ liệu (DDL).
9. Ngôn ngữ thao tác dữ liệu (DML).
2
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Giới Thiệu
• Ngày nay, CSDL có mặt ở khắp nơi. Hầu hết
trong các ứng dụng, chúng ta đều gặp CSDL.
CSDL tạo hiệu quả, an toàn và linh động trong
việc lưu trữ dữ liệu.
• Ngay sau khi máy tính thế hệ thứ hai ra đời
(sau thập niên 1950), sự có mặt của các ngôn
ngữ lập trình cấp cao đòi hỏi dung lượng lưu
trữ lớn. Dữ liệu được chứa trong các tập tin
(tập các mẫu tin) trên băng từ. Cách lưu trữ
này sớm bộc lộ những trở ngại nhất định.
• Đầu tiên là những tập tin lớn, cần thời gian
tìm kiếm lâu hơn. Chúng ta hãy xem lại các
giải thuật đã thảo luận trước đây, thời gian
3
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Giới Thiệu
của giải thuật tìm kiếm tuần tự là O(n). Vì thế,
những tập tin lớn, cần nhiều thời gian hơn để
tìm phần tử nào đó. Chẳng hạn, chúng ta cần
tìm một khách hàng trong hàng triệu khách
hàng là điều không thể.
• Một vấn đề khác trong việc tổ chức dữ liệu
không hợp lý, chẳng hạn cùng một thông tin
của khách hàng nhưng được lưu lại nhiều lần
sẽ dẫn đến việc sử dụng bộ nhớ lưu trữ
không hiệu quả.
4
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Loại Cơ Sở Dữ Liệu
• Bắt đầu từ sau thập niên 1960, các hệ CSDL
(database system) đã được phát triển. Hai
loại CSDL đầu tiên là loại phân cấp
(hierarchy) và mạng (network). IBM đưa ra
DL/1 là mô hình CSDL phân cấp và hàng loạt
phần cứng và phần mềm khác cùng với mô
hình CSDL mạng.
• Các cấu trúc CSDL phân cấp và mạng được
tổ chức thành nhiều tập tin quan hệ với nhau
để truy cập thông tin nhanh hơn, bảo mật tốt
hơn và dễ dàng cập nhật hơn. Tuy nhiên, các
cấu trúc này khá phức tạp và không linh
động.
5
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Loại Cơ Sở Dữ Liệu
• Vào năm 1970, E. F. Codd của IBM đưa ra mô
hình CSDL quan hệ (relational database). Mô
hình quan hệ dựa nhiều vào lý thuyết toán.
• Theo mô hình này, dữ liệu được chứa trong
các bảng, gọi là các “quan hệ”. Mỗi quan
hệ/bảng lưu giữ thông tin về một kiểu thực
thể (entity type) và các thực thể quan hệ nhau
bởi thông tin đã lưu trong các bảng đó.
• Codd cũng đưa ra một ngôn ngữ để truy vấn
dữ liệu dựa vào lý thuyết tập hợp. Vào thập
niên 1980, ngôn ngữ truy vấn có cấu trúc
(Structured Query Language - SQL) được thế
giới biết đến. Sau đó, IBM bắt đầu bán CSDL
6
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Loại Cơ Sở Dữ Liệu
quan hệ có tên là DB2.
• Ngày nay, mô hình dữ liệu quan hệ được sử
dụng rộng rãi và là mô hình mà chúng ta sẽ
thảo luận.
7
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Ưu Điểm Khi Sử Dụng CSDL
• Động cơ chính của việc sử dụng CSDL là tốc
độ truy xuất. Một CSDL được thiết kế đúng
cách, sự truy xuất các phần thông tin riêng
biệt có thể thực hiện ngay tức thời, bất kể số
mẫu tin hay kích thước của CSDL. Tốc độ
truy xuất có thể biểu diễn là O(k), trong đó k
là hằng số có giá trị bé.
• Việc sử dụng CSDL làm cho các chương trình
truy xuất dữ liệu mà không cần biết nó như
thế nào. Nếu một chương trình đọc tập tin
thông thường, nó phải biết kiểu dữ liệu, các
định dạng và thứ tự các trường (field) của tập
tin đó.
8
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Ưu Điểm Khi Sử Dụng CSDL
• Tuy nhiên, khi chương trình đọc từ tập tin
CSDL, nó thường chỉ cần xác định rõ thông
tin gì mà nó muốn.
• CSDL cũng cho phép tận dụng hiệu quả
không gian lưu trữ, giảm dư thừa dữ liệu đến
mức tối tiểu.
• Các hệ quản trị CSDL (Database management
system - DBMS) cũng tăng tính bảo mật CSDL
thông qua một số cách. Cho ví dụ, các tiện
ích sao lưu và khôi phục dữ luôn có sẵn trong
các DBMS và dữ liệu có thể được sao lưu cả
khi nó đang được sử dụng.
• Các hệ CSDL cũng hỗ trợ cho khái niệm về
9
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Ưu Điểm Khi Sử Dụng CSDL
giao tác (transaction). Một giao tác là một
nhóm các thay đổi có quan hệ nhau tác động
đến CSDL. Nghĩa là, tất cả thay đổi phải xảy
ra hoặc là không xảy ra.
• Ví dụ, chúng ta đang chuyển tiền từ tài khoản
tiền gởi tiết kiệm (savings account) và gởi
tiền này vào tài khoản tiền gởi thanh toán
(checking account).
• Chúng ta muốn cả hai thao tác rút và gởi thực
hiện thành công, nhưng nếu rút tiền thành
công và gởi tiền bị lỗi thì sao? Do vậy, chúng
ta phải khôi phục lại tiền đã rút từ tài khoản
tiền gởi tiết kiệm.
10
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Ưu Điểm Khi Sử Dụng CSDL
• Các hệ CSDL cho phép những thay đổi dữ
liệu được nhóm vào trong các giao tác để
thực hiện thành công trọn vẹn hoặc là không
thực hiện điều gì.
• Các DBMS cũng tăng tính bảo mật dữ liệu vì
nó cho phép nhiều người dùng. Ví dụ như
doanh nghiệp Amazon.com cho phép nhiều
người dùng từ khắp thế giới truy cập CSDL
để xem và đặt hàng cùng lúc. Những thay đổi
của người dùng này sẽ không gây trở ngại
cho người dùng khác.
• DBMS quản lý những khả năng xung đột có
thể xảy ra bằng cách khóa dữ liệu tạm thời
khi cần thiết. 11
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các Ưu Điểm Khi Sử Dụng CSDL
• Với tất cả lý do trên, các hệ CSDL được sử
dụng phổ biến. Như chúng ta thấy, việc sử
dụng các hệ CSDL cũng trở nên thuận tiện
hơn khi dùng ngôn ngữ SQL. Do vậy, hầu hết
các ứng dụng ngày nay đều sử dụng CSDL.
12
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Trước khi tạo CSDL quan hệ, người thiết kế
phải qua một quá trình gọi là mô hình hóa dữ
liệu (data modeling).
• Giai đoạn mô hình hóa nhận dạng các “thực
thể” (entity), các “thuộc tính” (attribute) của
mỗi kiểu thực thể (entity type) và các “mối
quan hệ” (relationship) giữa các kiểu thực thể
khác nhau.
• Cho ví dụ, trong việc xây dựng CSDL cho một
trường đại học, các kiểu thực thể gồm các
sinh viên, các giảng viên, các ký túc xá, các
phòng học, các chuyên ngành, các khóa học,
13
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Hình sau cho thấy mô hình dữ liệu của các
thực thể và các mối quan hệ mà chúng ta
đang thảo luận được thể hiện trong lược đồ
thực thể - mối quan hệ (entity-relationship: E-
R).
14
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
15
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Các thuộc tính của một sinh viên gồm tên, địa
chỉ, ký túc xá đang ở, số phòng, chuyên
ngành, cố vấn,
• Một mối quan hệ giữa kiểu thực thể giảng
viên với sinh viên là mối quan hệ
advisor/advisee.
• Thực thể là “thứ gì đó” mà CSDL sẽ lưu trữ.
Khái niệm kiểu thực thể thường tương ứng
với lớp của các đối tượng thế giới thực,
chẳng hạn các giảng viên, các xe, các tòa
nhà. Đôi lúc kiểu thực thể được hiểu theo
nghĩa trừu tượng hơn. Vấn đề chính của mô
hình hóa dữ liệu là xác định các kiểu thực thể
của mô hình. 16
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Với các khái niệm quen thuộc trong lập trình
hướng đối tượng, một kiểu thực thể tương tự
như một lớp. Mỗi thực thể riêng biệt của một
kiểu thực thể (một thể hiện của một lớp – đối
tượng) sẽ được biểu trưng bởi một tập các
giá trị thuộc tính.
• Thực thể như là “danh từ”, trong khi thuộc
tính như là “tính từ” hay từ ngữ để mô tả của
thực thể mà CSDL sẽ lưu trữ. Cho ví dụ, thực
thể sinh viên cụ thể có các thuộc tính là
“Bill Smith”, “Akron, OH”, “Fisher Dorm”,
323, “Computer Science”, “Professor
Findley”,
17
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Cấu trúc của một CSDL được mô tả bởi “lược
đồ” (schema) của nó. Như chúng ta sẽ thấy
sau này, để chuyển mô hình dữ liệu thành
lược đồ CSDL quan hệ , mỗi thực thể của một
kiểu thực thể phải duy nhất.
• Tập giá trị các thuộc tính của mỗi thực thể
phải khác với tất cả thực thể khác trong cùng
kiểu. Ví dụ, chúng ta có thể gán thuộc tính
“khóa” cho mỗi thực thể của kiểu thực thể
sinh viên để phân biệt các sinh viên với nhau.
• Giả sử mối quan hệ giữa kiểu thực thể giảng
viên với sinh viên là mối quan hệ
advisor/advisee. Điều quan trọng là chúng
18
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
ta phải quyết định xem mối quan hệ này là 1:1
(một-một), 1:N (một-nhiều) hay N:M (nhiều-
nhiều). Các tỷ số này được gọi là tỷ số lực
lượng (cardinality ratio). Chúng ta có thể hiểu
“lực lượng” là số lượng thể hiện của một
kiểu thực thể.
• Trong ví dụ trên, chúng ta có thể chọn mối
quan hệ 1:N (một cố vấn cho nhiều sinh viên).
Ngược lại, nếu nhà trường yêu cầu nhiều cố
vấn cho mỗi sinh viên (ví dụ, một cố vấn học
tập và một cố vấn đời sống) thì mối quan hệ
sẽ được chọn là N:M (nhiều cố vấn cho mỗi
sinh viên và nhiều sinh viên cho mỗi cố vấn).
19
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Mô Hình Hóa Miền Dữ Liệu
• Một vấn đề nữa là chúng ta cần xác định số
thể hiện tối thiểu của kiểu thực thể. Ví dụ, nếu
yêu cầu là mỗi sinh viên phải có cố vấn thì số
thể hiện tối thiểu phía giảng viên của mối
quan hệ advisor/advisee phải là 1. Ngược
lại là 0 (nghĩa là có thực thể sinh viên nhưng
không được kết hợp với cố vấn nào).
• Tương tự, nếu yêu cầu là mỗi giảng viên đều
là cố vấn thì số thể hiện tối thiểu phía sinh
viên của mối quan hệ advisor/advisee phải
là 1. Ngược lại là 0 (nghĩa là có thực thể
giảng viên nhưng không cố vấn cho sinh viên
nào).
20
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Mô hình dữ liệu gồm có lược đồ khái niệm
(conceptual schema) hoặc sự mô tả cấu trúc
của CSDL.
• Sau khi lược đồ khái niệm được tạo, công
viêc kế đến là chuyển đổi mô hình dữ liệu
thành các bảng, các mối quan hệ và các qui
tắc toàn vẹn dữ liệu (data integrity).
• Một kiểu thực thể là một bảng, mỗi hàng
trong bảng là một thể hiện của kiểu thực thể.
Trong thuật ngữ CSDL quan hệ, một bảng
được gọi là một “quan hệ” (relation). Lưu ý là
quan hệ khác với “mối quan hệ”
(relationship). 21
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Một quan hệ gồm các hàng, mỗi hàng là một
thể hiện của kiểu thực thể và mỗi cột là một
thuộc tính của kiểu thực thể.
• Mỗi hàng của quan hệ được gọi là một bộ
(tuple). Người ta thường dùng từ “hàng”
nhiều hơn từ “bộ”. Bộ là một hàng của bảng,
một thể hiện của quan hệ, một thể hiện của
kiểu thực thể. Mỗi bộ gồm giá trị các thuộc
tính của thể hiện của kiểu thực thể. Thuộc
tính cũng còn được gọi là trường (field).
• Tóm lại, các từ đồng nghĩa: quan hệ/bảng,
bộ/hàng, thuộc tính/trường/cột .
22
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Bước đầu tiên là tạo một quan hệ cho mỗi
thực thể trong mô hình dữ liệu. Mỗi thuộc tính
của kiểu thực thể trong mô hình trở thành tên
cột trong quan hệ. Khi này, chúng ta phải
chọn một thuộc tính hay một tập thuộc tính
được gọi là khóa chính (primary key), dùng
để nhận dạng duy nhất mỗi hàng của quan
hệ.
• Một khóa chính lý tưởng thì ngắn, dạng số và
không bao giờ thay đổi. Để đạt được điều lý
tưởng thì không phải lúc nào cũng có được,
nhưng nó giúp chúng ta khi chọn khóa.
23
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Cho ví dụ, nếu bảng “Student” gồm các
thuộc tính name, address, social security
number (SSN) và một số thuộc tính khác,
chúng ta có thể chọn hai thuộc tính name–
address hoặc một thuộc tính SSN để làm
khóa. Chọn SSN thì tốt hơn, bởi vì SSN làm
cho hiệu quả hơn khi xử lý, do nó là kiểu số
và ít thay đổi hơn là tên hay địa chỉ.
• Đôi khi không có thuộc tính rõ ràng để chọn
làm khóa tốt trong các thuộc tính của bảng.
Thay vì chọn nhiều trường làm khóa, cách tốt
hơn là chúng ta sử dụng khóa đại diện
(surrogate key).
24
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Khóa đại diện chỉ đơn giản là một số, được
sinh ra bởi hệ quản trị CSDL và gán cho mỗi
bộ. Trong ví dụ trên, nếu thuộc tính SSN
không tồn tại trong bảng “Student”, chúng ta
sẽ tạo ra khóa đại diện cho bảng Student và
gọi nó là “StudentID”.
• Khi các quan hệ được tạo cho tất cả thực thể
trong mô hình dữ liệu, tiếp theo là tạo các mối
quan hệ cho mô hình.
• Với mối quan hệ 1:1, chọn một quan hệ là
“cha” và quan hệ còn lại là “con”, tạo cột
khóa ngoại trong quan hệ con mà nó dùng để
kết hợp mỗi bộ trong quan hệ con với một bộ 25
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
tương ứng trong quan hệ cha.
• Nếu số thể hiện tối thiểu trên cả hai phía của
mối quan hệ 1:1 là 1 thì việc chọn quan hệ
nào làm cha sẽ không có vấn đề gì. Tuy nhiên,
nếu số thể hiện của một phía là 0, thì chọn
quan hệ còn lại làm quan hệ cha.
• Với mối quan hệ 1:N, quan hệ trên phía 1 sẽ là
“cha” và quan hệ trên phía N sẽ là “con”.
Chúng ta tạo cột khóa ngoại trong quan hệ
con để “nhiều con” sẽ được kết hợp với “một
cha”. Cho ví dụ, với mối quan hệ advisor/
advisee, chỉ đơn giản là chúng ta thêm cột
26
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
khóa ngoại vào quan hệ Student, tên của cột
khóa ngoại là “AdvisorID” và kết hợp với cột
khóa chính trong quan hệ Professor.
• Với mối quan hệ N:M thì phức tạp hơn. Chúng
ta phải tạo một bảng mới, một quan hệ mới.
Quan hệ như thế đôi khi được gọi là “bảng
giao” (intersection table) hay “quan hệ mối
quan hệ” (relationship relation).
• Bảng giao gồm các cột khóa ngoại là các
khóa chính của cả hai thực thể trong mối
quan hệ. Khóa chính của bảng giao thường
được ghép từ hai khóa ngoại đó.
27
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Xây Dựng CSDL Quan Hệ Từ Mô
Hình Dữ Liệu
• Cho ví dụ, để tạo mối quan hệ M:N giữa các
bảng Student và Course, chúng ta sẽ tạo
quan hệ “StudentCourseIntersection”.
StudentCourseIntersection sẽ có các cột
khóa ngoại cho Student (ví dụ StudentID)
và cho Course (ví dụ CourseID). Mỗi hàng
trong StudentCourseIntersection sẽ chứa
thông tin về một sinh viên học ở khóa học cụ
thể. Bất kỳ sinh viên nào cũng có thể học ở
nhiều khóa và nhiều sinh viên có thể học
chung một khóa.
28
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
• Một số mô hình dữ liệu thì tốt hơn một số
khác. Khi thiết kế CSDL không đúng, sẽ làm
tăng khả năng dư thừa dữ liệu (data
redundancy) dẫn đến những dị thường
(anomaly) trong CSDL. Chẳng hạn, khi xóa
thông tin của kiểu thực thể này thì lại mất
thêm thông tin của kiểu thực thể khác.
• Sự chuẩn hóa (normalization) là quá trình
kiểm tra các quan hệ. Sau khi chuẩn hóa, các
quan hệ có cấu trúc tốt hơn.
• Mục tiêu của chuẩn hóa là đảm bảo rằng mỗi
quan hệ chỉ thể hiện cho một chủ đề (theme).
Cho ví dụ, quan hệ chứa thông tin về các sinh
29
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
viên, quan hệ chứa thông tin về các ký túc xá,
nhưng không có quan hệ chứa thông tin cho
cả hai.
• Có nhiều dạng chuẩn hóa. Dạng chuẩn
(normal form) ở mức cao hơn sẽ giảm dư
thừa dữ liệu và tránh được những dị thường.
Bất kỳ dạng chuẩn nào ở mức cao hơn cũng
thích hợp với các dạng thấp hơn. Do vậy, một
quan hệ ở dạng chuẩn 3 (3NF) thì cũng ở
dạng chuẩn 2 (2NF) và dạng chuẩn 1 (1NF).
• Các dạng chuẩn dựa vào khái niệm phụ thuộc
hàm (functional dependency). Phụ thuộc hàm
nghĩa là giá trị của một thuộc tính hoặc tập
30
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
các thuộc tính xác định giá trị của thuộc tính
khác.
• Giả sử chúng ta đã tạo quan hệ với các thuộc
tính sau. Cũng giả sử rằng không có sinh viên
cùng tên ở trong cùng ký túc xá và không có
giảng viên cùng tên trong trường:
• Khóa của quan hệ Student gồm hai thuộc
tính Sname và DormID. Theo định nghĩa, thuộc
31
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
tính khóa xác định duy nhất một bộ trong
quan hệ. Với giá trị cụ thể của Sname và
DormID, giá trị của tất cả thuộc tính khác
được xác định.
• Tuy nhiên, không phải tất cả các phụ thuộc
hàm đều là khóa. Trong quan hệ Student, có
một phụ thuộc hàm giữa thuộc tính
MajorAdvisorName và AdvisorDept. Ví dụ,
với tên của cố vấn cụ thể thì tên khoa của cố
vấn đó sẽ được xác định.
• Dạng chuẩn đầu tiên (1NF) được định nghĩa
đơn giản. Mỗi thuộc tính trong quan hệ phải
là thuộc tính nguyên tử (atomic attribute),
thuộc tính đơn trị (single-valued attribute). 32
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
• Cho ví dụ, nếu thuộc tính trong quan hệ
Student là TelephoneNumber, thì một bộ bất
kỳ trong quan hệ chỉ có một giá trị cho
TelephoneNumber. Nếu chúng muốn một
sinh viên có thể có nhiều số điện thoại, thì
chúng ta phải tạo một quan hệ riêng cho vấn
đề này. Mỗi bộ trong quan hệ PhoneNumber
mới chỉ có một số điện thoại và nhiều bộ
trong quan hệ này được kết hợp thông qua
mối quan hệ 1:N với một sinh viên cụ thể.
• Dạng chuẩn thứ 2 (2NF) yêu cầu quan hệ là
dạng chuẩn 1 và mỗi thuộc tính không khóa
phụ thuộc hàm đầy đủ vào khóa chính (không
33
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
phụ thuộc hàm vào bất kỳ tập con nào của
khóa - còn gọi là phụ thuộc hàm bộ phận).
• Nếu quan hệ có khoá chính chỉ gồm một
thuộc tính hoặc quan hệ có khóa đại diện
(surrogate key) thì luôn ở dạng chuẩn 2.
• Câu hỏi đặt ra là có phải mọi thuộc tính không
khoá trong mô hình quan hệ ở trên phụ thuộc
hàm đầy đủ vào khoá của nó không. Nghĩa là
các quan hệ có ở dạng chuẩn 2 không?
• Trong trường hợp này, câu trả lời là “Không”.
Giả sử là có một RA cho mỗi ký túc xá Dorm,
thì giá trị RA phụ thuộc vào DormID chứ
không phụ thuộc vào Sname. Để đưa quan hệ
34
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
Student và Dorm về dạng chuẩn 2, chúng ta
phải tạo một quan hệ mới và bỏ thuộc tính RA
khỏi quan hệ Dorm :
• Dạng chuẩn 3 (3NF) yêu cầu quan hệ ở dạng
chuẩn 2 và không có thuộc tính không khoá
nào phụ thuộc bắc cầu (transitive
dependency) vào khóa chính (hoặc phụ thuộc
hàm giữa các thuộc tính không khoá).
• Trong ví dụ trên, quan hệ vừa tạo không phải
dạng chuẩn 3 vì thuộc tính MajorAdvisor-
35
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
Name và AdvisorDept đều phụ thuộc vào
khóa chính, nhưng thuộc tính AdvisorDept
cũng phụ thuộc bắc cầu vào MajorAdvisor-
Name.
• Nghĩa là, với một sinh viên cụ thể, chúng ta
có thể xác định được tên cố vấn
(MajorAdvisorName) của sinh viên đó và khi
biết được tên cố vấn, chúng ta có thể xác
định được khoa (AdvisorDept) của cố vấn
đó. Đây là phụ thuộc bắc cầu.
• Để đưa quan hệ mới tạo trở thành dạng
chuẩn 3NF, chúng ta phải bỏ phụ thuộc bắc
cầu trong quan hệ:
36
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
• Bây giờ các quan hệ ban đầu được chia
thành 3 quan hệ: quan hệ về sinh viên, ký túc
xá và các giảng viên làm cố vấn.
• Trong thực tế, chúng ta nên chọn giá trị khoá
tốt hơn cho quan hệ sinh viên và giảng viên.
37
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Chuẩn Hóa Dữ Liệu
Chẳng hạn, thuộc tính khoá là ID có kiểu dữ
liệu dạng số nguyên thay vì là kiểu chuỗi.
Ngoài ra, trong quan hệ giảng viên nên thêm
các thuộc tính như địa chỉ, lương,
38
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ SQL
• Công ty IBM đầu tiên đưa ra ngôn ngữ SQL
(structured query language - ngôn ngữ truy
vấn có cấu trúc) để xử lý CSDL. Nó là ngôn
ngữ cấp cao để tạo CSDL, thao tác dữ liệu và
truy lục/lấy các tập dữ liệu.
• SQL là ngôn ngữ phi thủ tục (nonprocedural
language), nghĩa là các câu lệnh SQL mô tả
dữ liệu và các thao tác cần phải “làm gì”
nhưng nó không chỉ rõ từng bước tiến hành
là làm “thế nào” để hệ CSDL thực hiện.
• Các chuẩn ANSI (American National
Standards Institute - Viện Tiêu chuẩn Quốc
gia Hoa Kỳ) cho SQL được công bố vào năm
39
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ SQL
1986, 1989, 1992, 1999 và 2003.
• Trong thực tế, các nhà cung cấp khác nhau
đưa ra một số thay đổi nhỏ về cú pháp và
ngữ nghĩa với mỗi ngôn ngữ SQL của họ. Tuy
nhiên, phần lớn các lệnh SQL đều tương
thích với SQL chuẩn.
• Một số hệ quản trị CSDL phổ biến được nhiều
người biết đến là DB2 (IBM), MySQL (nguồn
mở), Oracle và SQL Server (Microsoft).
• Các câu lệnh SQL thường được phân biệt
thành hai phần là ngôn ngữ định nghĩa dữ
liệu (data definition language - DDL) và ngôn
40
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ SQL
ngữ thao tác dữ liệu (data manipulation
language - DML).
• Các lệnh của DDL tạo các cấu trúc CSDL như
bảng (table), khung nhìn (view), thủ tục kích
khởi (trigger) và thủ tục lưu (stored
procedure).
• Các lệnh của DML như chèn, cập nhật, chọn
hay xóa dữ liệu trong CSDL.
• SQL không phân biệt dạng chữ. Các lệnh và
tên có thể nhập ở dạng chữ hoa hay thường.
Tuy nhiên, một số người thích sử dụng chữ
hoa và chữ thường để phân biệt từ khóa với
tên.
41
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
• Câu lệnh đầu tiên của ngôn ngữ định nghĩa
dữ liệu (DDL) để học là CREATE. Lệnh CREATE
TABLE dùng để tạo một quan hệ. Trong SQL,
quan hệ được gọi là bảng, bộ được gọi là
hàng và thuộc tính được gọi là cột.
• Sau đây là cú pháp của lệnh CREATE TABLE:
CREATE TABLE
(
[, ]
[CONSTRAINT
[,CONSTRAINT ]]
);
• Sự đặc tả cú pháp này nói rằng câu lệnh phải
42
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
bắt đầu bằng từ khóa CREATE TABLE, sau đó
là tên bảng và dấu ngoặc mở. Kế tiếp là một
hay nhiều đặc tả cho tên cột, kiểu dữ liệu mỗi
cột và các thuộc tính mỗi cột (ví dụ, cho phép
null hay không). Sau danh sách các tên cột
là phần tùy chọn các ràng buộc bắt đầu bằng
từ khóa CONSTRAINT, đến tên ràng buộc và
kiểu ràng buộc (ví dụ, PRIMARY KEY hay
UNIQUE). Cuối cùng là dấu ngoặc đóng và dấu
chấm phẩy.
• Người thiết kế CSDL tự do chỉ định tên bảng,
tên cột hay tên ràng buộc. SQL chuẩn có các
qui tắc đặt tên, nhưng mỗi nhà cung cấp hệ
43
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
quản trị CSDL có các qui tắc riêng của họ và
có một ít thay đổi so với SQL chuẩn.
• Cho ví dụ, SQL2003 chuẩn cho phép tên có
thể dài đến 128 ký tự, nhưng MySQL thì chỉ
giới hạn 64 ký tự và Oracle thì chỉ 30 ký tự.
• Các kiểu dữ liệu của SQL cũng có thay đổi.
Nói chung, các kiểu có thể sử dụng là:
- Integer.
- Number/Numeric (số dấu chấm động).
- Varchar (chuỗi ký tự có chiều dài thay đổi).
- Date/DateTime.
- Char (chuỗi ký tự có chiều dài cố định).
44
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
• Chúng ta phải tham khảo tài liệu của hệ quản
trị CSDL đang sử dụng để chọn kiểu dữ liệu
thích hợp.
• Các thuộc tính phổ biến nhất mà chúng ta chỉ
định cho các cột là NULL, NOT NULL và
DEFAULT.
• Thuộc tính NOT NULL không cho phép giá trị
rỗng trên cột tương ứng của hàng được thêm
vào. Theo mặc định thì cột chứa giá trị null.
• Thuộc tính DEFAULT cho phép chúng ta sử
dụng một biểu thức để tạo giá trị mặc định
cho cột nếu không có giá trị nào của cột đó
được cung cấp khi chèn một hàng mới.
45
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
• Cho ví dụ, sự khai báo sau đây chỉ định giá trị
mặc định cho cột State là “NY”:
State Char(2) DEFAULT 'NY',
• Có 4 ràng buộc mà chúng ta có thể chỉ định là
PRIMARY KEY, FOREIGN KEY, UNIQUE và
CHECK. Ràng buộc PRIMARY KEY chỉ định một
hay nhiều cột dùng làm khóa chính.
• Ràng buộc FOREIGN KEY chỉ định cột dùng để
chứa khóa chính của bảng khác. Đây là mối
quan hệ giữa các bảng với nhau.
• Ràng buộc UNIQUE yêu cầu tất cả các hàng
trong bảng có giá trị duy nhất cho một hay
nhiều cột được chỉ định trong ràng buộc.
46
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
Ràng buộc UNIQUE đôi khi được gọi là khóa
phụ hay khóa dự tuyển (candidate key) .
• Ví dụ sau sẽ tạo nhiều bảng:
CREATE TABLE Student
( Sname VarChar(25) NOT NULL,
Dorm VarChar(20) NOT NULL,
Room Integer,
Phone Char(12),
Major VarChar(20),
MajorAdvisorName VarChar(25),
CONSTRAINT StPK PRIMARY KEY(
Sname, Dorm),
CONSTRAINT StDormFK FOREIGN KEY(
Dorm) REFERENCES Dorm(DormName), 47
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
CONSTRAINT StFacultyFK FOREIGN
KEY(MajorAdvisorName)
REFERENCES Faculty(Fname)
);
CREATE TABLE Dorm
( DormName VarChar(20) NOT NULL,
RA VarChar(25),
CONSTRAINT DormPK PRIMARY KEY(
DormName)
);
CREATE TABLE Faculty
( Fname VarChar(25) NOT NULL,
Dept VarChar(20),
CONSTRAINT FacultyPK PRIMARY KEY(
Fname)
);
48
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
• Một kiểu ràng buộc khác là CHECK. Ràng buộc
CHECK cho phép chúng ta chỉ định điều kiện
hợp lệ cho cột. Cho ví dụ:
CONSTRAINT FoundedCheck CHECK (
FoundedDate > 1900),
CONSTRAINT ZipCheck CHECK (zip LIKE
'[0-9][0-9][0-9][0-9][0-9]'),
• Ràng buộc đầu tiên cho biết giá trị của cột
FoundedDate phải lớn hơn 1900. Ràng buộc
thứ hai cho biết giá trị của cột zip phải gồm 5
ký số từ 0 đến 9.
• Ngược lại với việc tạo các bảng là xóa chúng.
49
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
Để xóa bảng, lệnh DROP được sử dụng. Sau
đây là cú pháp của lệnh DROP:
DROP ;
• Phía sau từ khóa DROP là kiểu và tên của đối
tượng. Các kiểu đối tượng gồm TABLE, VIEW,
PROCEDURE (thủ tục lưu), TRIGGER, Để xóa
bảng Student, chúng ta có thể viết như sau:
DROP TABLE Student;
• Khi cần sửa một đối tượng CSDL như bảng
chẳng hạn, lệnh ALTER được sử dụng. Ví dụ,
để thêm cột Birthdate có kiểu dữ liệu là
Date vào bảng Student:
50
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Định Nghĩa Dữ Liệu
ALTER TABLE Student ADD COLUMN
Birthdate Date;
• Ngoài việc thêm các cột, chúng ta có thể sử
dụng lệnh ALTER TABLE để xóa các cột, thêm
hay xóa các ràng buộc và thiết lập hay xóa
các giá trị mặc định.
• Bài tập tại lớp: giải thích các ví dụ sau:
a)ALTER TABLE Student
ALTER COLUMN Phone Char(12) NOT NULL;
b) ALTER TABLE Student
DROP COLUMN Room;
51
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Câu lệnh đầu tiên của ngôn ngữ thao tác dữ
liệu để học là SELECT. Lệnh SELECT dùng để
truy lục/lấy thông tin từ CSDL. Nó là lệnh rất
linh động và nhiều người biết sử dụng nó.
• Trong trường hợp đơn giản nhất, sử dụng
lệnh SELECT để truy tìm giá trị của các cột nào
đó trong bảng, chẳng hạn giá trị của Sname và
Major trong bảng Student:
SELECT Sname, Major FROM Student;
• Giải thích lệnh trên?
• Chúng ta cũng có thể chỉ chọn một hay một
số hàng bằng cách thêm mệnh đề WHERE:
52
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
SELECT Sname
FROM Student
WHERE Major = 'Computer Science';
• Giải thích lệnh/truy vấn trên?
• Nếu chúng ta muốn lấy tất cả các cột cho
những hàng thỏa điều kiện, chúng ta có thể
sử dụng dấu hoa thị (*):
SELECT *
FROM Student
WHERE Major = 'Computer Science';
• Mệnh đề WHERE cũng rất linh động, chúng ta
có thể sử dụng các toán tử quan hệ và luận lý
53
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
để xây dựng biểu thức điều kiện cho nó (xem
bảng các toán tử). Ví dụ:
SELECT *
FROM Student
WHERE Sname LIKE '%Jones'
AND Major NOT IN ('Math','Computer
Science') AND (Dorm = 'Williams'
OR Dorm = 'Schoelkopf');
• Giải thích truy vấn trên?
• Các kết quả của sự truy vấn cũng có thể
được sắp thứ tự, bằng cách thêm mệnh đề
ORDER BY. Cho ví dụ:
54
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
SELECT Sname
FROM Student
WHERE Major = 'Computer Science'
ORDER BY Sname;
(hoặc ORDER BY Sname DESC để sắp giảm
dần)
• Một số toán tử:
= bằng
> lớn hơn
< nhỏ hơn
>= lớn hơn hay bằng
<= nhỏ hơn hay bằng
!= khác 55
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
!< không nhỏ hơn
!> không lớn hơn
AND VÀ luận lý
OR HOẶC luận lý
NOT NOT luận lý
IN là True nếu toán hạng là một trong
các giá trị được liệt kê (hoặc các giá
trị trả về của truy vấn con)
LIKE là True nếu toán hạng so trùng với
mẫu cho trước. Ký tự % đại diện cho
chuỗi gồm không hoặc nhiều ký tự
bất kỳ. Ký tự gạch nối (_) đại diện cho
ký tự đơn bất kỳ. 56
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
BETWEEN là True nếu toán hạng nằm trong
miền được chỉ định.
• Một số lượng từ:
EXISTS là True nếu truy vấn con trả về
ít nhất là một hàng.
ALL là True nếu sự so sánh với tất
cả giá trị trả về của truy vấn con
là True.
ANY/SOME là True nếu tồn tại một sự so
sánh bất kỳ là True.
57
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Hãy cho biết kết quả của truy vấn sau nếu
bảng Student có 300 sinh viên học chuyên
ngành Computer Science?
SELECT Major FROM Student;
• Những truy vấn như thế thường không sử
dụng. Điều mà chúng ta quan tâm là danh
sách các chuyên ngành khác nhau của các
sinh viên. Để thực hiện điều đó, từ khoá
DISTINCT được thêm vào truy vấn SELECT:
SELECT DISTINCT Major FROM Student;
• Khi chúng ta muốn truy vấn thông tin ở nhiều
bảng, chẳng hạn truy vấn yêu cầu JOIN (nối)
58
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
các bảng lại với nhau. Có nhiều cách để thực
hiện điều này và có nhiều kiểu JOIN cho từng
trường hợp cụ thể.
• Giả sử chúng ta cần một danh sách tên sinh
viên và tên cố vấn (resident advisor) trong
các ký túc xá của họ. Sau đây là một cách để
JOIN hai bảng Student và Dorm để có được
thông tin yêu cầu:
SELECT Sname, RA
FROM Student, Dorm
WHERE Student.Dorm = Dorm.DormName;
• Công việc của JOIN là kết nối các hàng của
hai quan hệ khi điều kiện chỉ định là True.
59
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Một cách khác cho cùng kết quả được viết
như sau:
SELECT Sname, RA
FROM Student JOIN Dorm
ON Student.Dorm = Dorm.DormName;
• Sau khi đã tạo các bảng trong CSDL, bước kế
tiếp là nhập dữ liệu. Lệnh SQL để thêm hàng
mới vào bảng là INSERT. Cú pháp như sau:
INSERT INTO (
, , , )
VALUES(, , , );
• Theo cú pháp trên, sau từ khoá INSERT INTO
60
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
là tên bảng. Kế đến là dấu ngoặc mở, danh
sách một hay nhiều tên cột và dấu ngoặc
đóng. Tiếp theo là từ khoá VALUES, dấu ngoặc
mở, danh các giá trị tương ứng với các tên
cột, dấu ngoặc đóng và dấu chấm phẩy.
• Ví dụ:
INSERT INTO Student(Sname, Dorm,
Room, Phone)
VALUES ('Mary Poppins', 'Higgins',
142, '585 223 2112');
• Trong ví dụ trên, có những cột không được
chỉ định thì giá trị của chúng là null.
61
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Thứ tự các tên cột trong lệnh INSERT không
cần phải giống với thứ tự các tên cột trong
bảng, nhưng thứ tự các giá trị trong mệnh đề
VALUES phải tương ứng với thứ tự các cột.
• Nếu chúng ta muốn tất cả các cột trong bảng
đều được cung cấp giá trị, khi này danh sách
các tên cột trong lệnh INSERT là không cần
thiết. Trong trường hợp này, thứ tự của các
giá trị phải giống với thứ tự của các cột trong
bảng. Ví dụ:
INSERT INTO Student
VALUES ('Mark Hopkins', 'Williams',
399, '585 223 2533', 'Math',
'William Deal'); 62
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Để thay đổi dữ liệu trong CSDL, chúng ta sử
dụng lệnh UPDATE. Cú pháp như sau:
UPDATE
SET = , =
, , =
WHERE ;
• Ví dụ:
UPDATE Student
SET Major = 'English',
MajorAdvisorName = 'Ann Carroway'
WHERE Sname = 'Mary Poppins';
63
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Mệnh đề WHERE trong lệnh UPDATE cũng
giống như trong lệnh SELECT, nó mạnh và
linh động. Chúng ta có thể thực hiện truy vấn
con bên trong mệnh đề WHERE. Mệnh đề
WHERE trong lệnh UPDATE chỉ định giá trị của
hàng nào trong CSDL được thay đổi.
• Trong ví dụ trên, chỉ có một hàng được thay
đổi. Tuy nhiên, lệnh UPDATE cũng có thể thay
đổi nhiều hàng cùng lúc. Giả sử khoa Khoa
học Máy tính (Computer Science) đổi tên
thành khoa Công nghệ Thông tin
(Information Technology). Lệnh UPDATE
sau sẽ thay đổi tất cả các hàng có giá trị ở cột
64
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
Dept trong bảng Faculty là Computer
Science thành Information Technology.
UPDATE Faculty
SET Dept = 'Information Technology'
WHERE Dept = 'Computer Science';
• Xoá các hàng trong CSDL rất dễ thực hiện
bằng lệnh DELETE. Cú pháp như sau:
DELETE FROM
WHERE ;
• Ví dụ:
DELETE FROM Student
WHERE Sname = 'Mary Poppins';
65
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
• Để xoá tất cả các hàng khỏi bảng, chỉ đơn
giản là chúng ta bỏ mệnh đề WHERE khỏi lệnh
DELETE. Lưu ý là để xoá bảng khỏi CSDL
chúng ta phải sử dụng lệnh DROP.
• Bây giờ chúng ta sẽ trở lại lệnh SELECT để
thảo luận về truy vấn con (subquery). Khi một
truy vấn con tham chiếu đến một số thuộc
tính của truy vấn bên ngoài/cha thì nó được
gọi là correlated subquery (truy vấn con kết
hợp/tương quan).
• Lưu ý: Có hai kiểu truy vấn con:
- Truy vấn con lồng nhau (nested subquery):
khi một truy vấn con gọi một truy vấn con
khác. 66
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
- Truy vấn con kết hợp (correlated
subquery): khi một truy vấn con lấy thông
tin từ truy vấn cha.
• Chúng ta hãy hình dung sự thực thi của truy
vấn con kết hợp. Truy vấn cha duyệt qua tất
cả các hàng của bảng và truy vấn con lấy
thông tin từ hàng đang được xét để thực hiện
công việc của nó.
• Cho ví dụ, giả sử chúng ta muốn biết có ký
túc xá (bảng Dorm) nào trong CSDL mà không
có sinh viên được kết hợp với chúng.
• Một cách để trả lời câu hỏi này là phải duyệt
qua tất cả các hàng của bảng Dorm, ứng với
67
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Ngôn Ngữ Thao Tác Dữ Liệu
mỗi hàng xét xem nếu giá trị của thuộc tính
Student.Dorm trong tất cả sinh viên khác với
giá trị của thuộc tính Dorm.DormName thì đó là
ký túc xá cần tìm.
• Bài tập tại lớp: hãy viết truy vấn trên, sử dụng
lượng từ NOT EXISTS?
• Lượng từ EXISTS và NOT EXISTS thường
dùng với các truy vấn con kết hợp để kiểm tra
có kết quả hay không có kết quả thu được từ
truy vấn con.
• Tương tự như ví dụ trên, chúng ta có thể tìm
những ký túc xá mà có sinh viên ở bằng cách
thay lượng từ NOT EXISTS thành EXISTS.
68
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
• Các hệ thống CSDL cung cấp các công cụ để
giúp duy trì tính toàn vẹn của dữ liệu
(integrity of the data).
• Một tập các qui tắc cơ bản quan trọng đảm
bảo và nhất quán dữ liệu trong CSDL được
gọi là các ràng buộc toàn vẹn tham chiếu
(referential integrity constraints).
• Các qui tắc được xây dựng sẵn cho việc bắt
buộc toàn vẹn tham chiếu là:
1. Chèn hàng mới vào bảng cha luôn được
cho phép.
2. Chèn hàng mới vào bảng con được cho
phép chỉ khi giá trị khoá ngoại tồn tại
trong bảng cha. 69
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
3. Xoá một hàng từ bảng cha được cho phép
chỉ khi không có các hàng con.
4. Xoá một hàng từ bảng con luôn được cho
phép.
5. Cập nhật khoá chính trong bảng cha được
cho phép chỉ khi không có các hàng con.
6. Cập nhật khoá ngoại trong một hàng con
được cho phép chỉ khi giá trị mới cũng tồn
tại trong bảng cha.
• Một công cụ khác của hệ quản trị CSDL để hỗ
trợ toàn vẹn dữ liệu là giao tác (transaction).
Một giao tác là cơ chế nhóm các thay đổi có
quan hệ với nhau trong CSDL với điều kiện
70
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
hoặc là tất cả thay đổi đều xảy ra hoặc không
xảy ra thay đổi nào.
• Ví dụ, một khách hàng muốn chuyển tiền gởi
từ tài khoản tiết kiệm (savings account) sang
tài khoản ATM (tài khoản vãng lai - checking
account). Khi này, CSDL thực hiện hai việc là
giảm số dư trong tài khoản tiết kiệm và tăng
số dư trong tài khoản ATM.
• Nếu công việc đầu tiên thực hiện thành công
và công việc thứ hai thất bại thì khách hàng
sẽ bị mất tiền. Do vậy để đảm bảo thực hiện
đúng, khi công việc thứ hai lỗi thì số dư
trong tài khoản tiết kiệm phải không thay đổi.
71
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
Nghĩa là, mọi thay đổi phải thành công hoặc
không có thay đổi nào xảy ra.
• Các hệ quản trị CSDL cho phép người lập
trìnhchỉ định giao tác. Mọi thay đổi của CSDL
xảy ra bên trong giao tác phải thành công
hoặc giao tác đó sẽ quay lui trở lại (roll back).
Khi một giao tác bị quay lui, giá trị của tất cả
các cột trong tất cả các hàng sẽ được khôi
phục lại giá trị cũ trước khi giao tác bắt đầu.
• Ví dụ:
BEGIN TRANSACTION
INSERT INTO DocGia
72
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
VALUES(@ma_docgia, @ho, @tenlot,
@ten, @ngaysinh)
DECLARE @day smallint, @month
smallint, @year smallint
SET @day = DAY(GETDATE()) –
DAY(@ngaysinh)
SET @month = MONTH(GETDATE()) –
MONTH(@ngaysinh)
SET @year = YEAR(GETDATE()) –
YEAR(@ngaysinh)
IF (@day >= 0 AND @month >= 0 AND
@year >= 18)
BEGIN
73
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Toàn Vẹn Dữ Liệu
INSERT INTO NguoiLon
VALUES(@ma_docgia, @sonha,
@duong,@quan,@dienthoai,
@han_sd)
COMMIT TRANSACTION @TranName
END
ELSE
BEGIN
PRINT 'Chua du 18 tuoi'
ROLLBACK TRANSACTION @TranName
END
END
74
Các Vấn Đề Cơ Sở của KHMT ThS. GVC Tô Oai Hùng
Các file đính kèm theo tài liệu này:
- khoa_hoc_may_tinh_c5_6869.pdf