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

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.

pdf74 trang | Chia sẻ: truongthinh92 | Lượt xem: 1697 | Lượt tải: 1download
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:

  • pdfkhoa_hoc_may_tinh_c5_6869.pdf
Tài liệu liên quan