Chơng I Hệ cơsởdữliệuquanhệ và ngônngữhỏicócấutrúcsql A - Hệ cơsởdữliệuquanhệ 1. Quanhệvà các phép toán đại sốquanhệ 1.1. QuanhệQuanhệ là một tập con của tích Đề-các của một hoặc nhiều miền. Nh vậy một quanhệcó thể là vô hạn. ở đây luôn luôn giả thiết rằng quanhệ là một tập hữu hạn. Mỗi hàng của một quanhệ gọi là một bộ, khi đó quanhệ là tập con của tích Đề-các D1ìD2ìD3ì .ìDn là quanhệ n ngôi. Mỗi bộ của quanhệcó n thành phần (thờng hiểu là n cột). Các cột của quanhệ gọi là các thuộc tính. Có thể định nghĩa quanhệ theo cách hình thức nh sau: Gọi R={A1, A2, ., An} là tập hữu hạn các thuộc tính, mỗi thuộc tính Ai với i=1, 2, ., n có miền giá trị tơng ứng là dom(Ai). Quanhệ trên tập thuộc tính R={ A1, A2, ., An} là tập con của tích Đề-các, r dom(A1) ì dom(A2) ì .ì dom(An). Khi đó kí hiệu r(R) hoặc r(A1, A2, ., An) là quan hệ. 1.2. Khoá của lợc đồ quanhệ Khoá (Key) của quanhệ r trên tập thuộc tính R={A1, .An} là tập con KR sao cho bất kì hai bộ khác nhau t1, t2 r luôn thoả t1(K)t2(K). Điều này có nghĩa là lợc đồ quanhệ không có hai bộ giống nhau trên mọi thuộc tính của R. 1.3. Các phép toán đại sốquanhệ Gọi r và s là quanhệ trên tập thuộc tính R={A1, A2, .,An} và R1={B1,B2, .,Bn}. Giả thiết rằng quanhệ r, s là tập hữu hạn các bộ. Đối với các phép hợp, giao và trừ, hai quanhệ tham gia phải là khả hợp. 1* Hợp của hai quanhệ Kí hiệu hợp của hai quanhệ r và s là r s. Biểu diễn hình thức có dạng: r s ={t/ts hoặc tr hoặc tr và s} 2* Phép giao Kí hiệu giao của hai quanhệ r và s là r s. Biểu diễn hình thức có dạng: r s ={t/tr và s} 3* Phép trừ Kí hiệu r-s là tập các bộ thuộc r nhng không thuộc s. Biểu diễn hình thức có dạng: r-s={t/t r và t s}. 1* Tích Đề-các trên các quanhệ Tích Đề-các của r và s là tập (n*m) bộ với n thành phần đầu có dạng một bộ thuộc r và m thành phần sau có dạng của một bộ thuộc s. Biểu diễn hình thức có dạng: r ì s={t/t có dạng (a1,a2, .,an,b1,b2, .,bn) trong đó (a1,a2, .,an r ) và (b1,b2, .,bn s)} 4* Phép chiếu Gọi t là một bộ thuộc r, A R, t[A] là giá trị của bộ tại thuộc tính A, X R. Với X={B1,B2, .,Bn} thì t[X]=(t[B1],t[B2], .,t[Bn]). Phép chiếu trên tập X của quanhệ r kí hiệu là r[X] đợc định nghĩa nh sau: r[X]={t[X]/t r}. Thực chất của phép chiếu là loại bỏ đi một số thuộc tính và giữ lại những thuộc tính còn lại của quanhệ đó 5* Phép chọn Giả sử F đợc diễn tả bằng một tổ hợp Boolean của các toán hạng, mỗi toán hạng là một phép so sánh đơn giản giữa hai biến là hai thuộc tính, hoặc một bên là thuộc tính một bên là hằng, cho giá trị "đúng" hoặc "sai" đối với mỗi bộ đã cho khi kiểm tra riêng trên bộ đấy. Trong F có các phép toán so sánh là {<, =, >, >=, <=, }, và các phép logic là {, , ơ}. Biểu diễn hình thức có dạng: ơF(r)={t r | F(t)=đúng} 6* Phép kết nối Gọi là một trong các phép so sánh {=, >=, >, <, <=, <>}, phép kết nối đợc định nghĩa nh sau: Phép kết nối của quanhệ r đối với thuộc tính A với quanhệ s đối với thuộc tính B là: r s = {(tu)tr, us và t[A] u[B]} với giả thiết mỗi giá trị của thuộc tính t[A] đều có thể so sánh đợc với giá trị của thuộc tính u[B] (qua phép so sánh ). Trờng hợp là dấu "=" gọi là kết nối bằng hay còn gọi là kết nối tự nhiên. Khi đó kết nối tại thuộc tính cùng tên của hai quanhệvà một trong hai thuộc tính đó sẽ đợc loại bỏ qua phép chiếu. 7* Phép chia Gọi r là quanhệ n-ngôi và s là quanhệ m-ngôi (n>m, s ). Khi đó phép chia đợc định nghĩa nh sau: Phép chia r ữ s là tập tất cả (n-m) bộ t sao cho với mọi bộ u s thì t u r. 2. Cơ sởdữliệuCơsởdữliệu (CSDL) là mô hình thực thể phản ánh thế giới thực đ ợc đề cập đến, do đó nó là sự trừu tợng hoá của thế giới thực. CSDL là nguồn dữliệu cho mọi hệ thống thông tin dựa trên máy tính, những dữliệu này đ ợc lu giữ trong máy tính đợc tổ chức dựa trên một qui định nào đó nhằm giảm thiểu đợc sự d thừa và đảm bảo sự thống nhất với nhau (toàn vẹn dữ liệu). Trong lịch sử phát triển của CSDL có 3 mô hình CSDL chính đợc sử dụng là: 8* Mô hình phân cấp: Mô hình dữliệu là một cây trong đó các nút biểu diễn các tập thực thể, giữa các nút con và các nút cha đợc liên hệ theo một mối liên hệ xác định. 9* Mô hình mạng: Mô hình đợc biểu diễn là một đồ thị có hớng. 10* Mô hình quan hệ: Mô hình này dựa trên cơsở khái niệm lý thuyết tập hợp của các quan hệ, tức là tập các k- bộ. 3. Mô hình cơ sởdữliệuquanhệ Khái niệm toán học của mô hình CSDL quanhệ (hiểu theo nghĩa lí thuyết tập hợp) thì quanhệ là tập con của tích Đề-các (đợc gọi là miền). Gọi D1, D2, D3 . Dn là n miền. Tích Đề-các n miền là D1ìD2ìD3ì .ìDn là tập tất cả n bộ (v1,v2,v3, .,vn) sao cho viDi, với i=1, 2, ., n. 4. Hệquản trị cơ sởdữliệuHệ chơng trình để có thể quản lý, tổ chức lu trữ, cho phép tìm kiếm, thay đổi, thêm bớt dữliệu trong CSDL đợc gọi là Hệquản trị CSDL. Hệquản trị CSDL có nhiệm vụ rất quan trọng là giúp ngời dùng có thể sử dụng đợc hệ thống mà ít nhiều không cần quan tâm tới thuật toán chi tiết hoặc biểu diễn dữliệu trong máy tính . 5. Hệ tiên đề phụ thuộc hàm Khái niệm phụ thuộc hàm trong một quanhệ là một khái niệm rất quan trọng đối với việc xây dựng mô hình dữ liệu. Trong các hệ thống thông tin quản lý khi cần thiết kế CSDL quanhệ thờng đòi hỏi phải chọn lợc đồ các quan hệ. Việc chọn các lợc đồ này tốt hơn hay xấu hơn lợc đồ khác đợc dựa trên một số các tiêu chuẩn cụ thể nào đó. Do đó cần phải nghiên cứu tính chất cơ bản cũng nh các thuật toán để có thể nhận đợc những tập lợc đồ phù hợp. Trọng tâm của công việc này là xét đến các phụ thuộc dữ liệu, nghĩa là các mối ràng buộc có thể có hiện hữu của l ợc đồ. Chẳng hạn nh thuộc tính này xác định duy nhất thuộc tính kia. Ví dụ trong công việc quản lý tập hoá đơn thì mã hoá đơn xác định duy nhất một khách hàng thanh toán hoá đơn đó. Cho R(U) là một lợc đồ quanhệ với U = {A1, A2, .An} là tập hợp các thuộc tính. Giả sử có X và Y là tập con của U. Nói rằng X Y (X xác định hàm Y hay Y phụ thuộc vào hàm X) nếu bất kì r là một quanhệ xác định trên R(U) sao cho bất kì hai bộ t1, t2 r mà t1[X] = t2[X] thì t1[Y] = t2[Y] Phụ thuộc hàm kí hiệu là FD. Cần lu ý rằng ở đây chỉ xét các phụ thuộc hàm thoả mãn cho mọi quanhệ trên lợc đồ tơng ứng của nó. Không thể xem xét một phụ thuộc hàm thoả mãn quanhệ r đặc biệt (ví dụquanhệ rỗng) của một lợc đồ R rồi sau đó qui nạp rằng phụ thuộc đó là thoả mãn trên R. Ví dụ: Mỗi khách hàng tồn tại vừa đúng với một giá trị tơng ứng với từng thuộc tính nh: Tên khách hàng, địa chỉ .v.v vàcó thể viết nh sau: khách hàng Tên khách hàng, khách hàng Địa chỉ, Gọi F là tập hợp các phụ thuộc hàm đối với lợc đồ quanhệ R(U) và X Y là một phụ thuộc hàm, X, YU. Nói rằng X Y đợc suy diễn logic từ F nếu mối quanhệ r trên R(U) đều thoả mãn các phụ thuộc hàm của F thì cũng thoả X Y. Chẳng hạn có tập phụ thuộc hàm F = {A B, B C} thì A C suy ra từ F. Gọi F + là bao đóng (Closure) của F, tức là tập tất cả các phụ thuộc hàm đợc suy diễn logic từ F. Nếu F = F + thì F là họ đầy đủ (Full Family) của phụ thuộc hàm. Để xác định khoá của lợc đồ quanhệvà các suy diễn logic giữa các phụ thuộc hàm cần thiết phải tính đợc F + từ F. Do đó đòi hỏi phải có các hệ tiên đề. Tập các qui tắc đợc Armstrong đa ra năm 1974 và thờng đợc gọi là hệ tiên đề Armstrong. Gọi R(U) là lợc đồ quanhệ với U = {A1, A2, . An} là tập các thuộc tính và X, Y, Z U. Hệ tiên đề Armstrong bao gồm: 11* A1 (Phản xạ): Nếu YX thì X Y 12* A2 (Tăng trởng): Nếu ZU và X Y thì XZ YZ, trong đó kí hiệu XZ là hợp của hai tập hợp X, Z thay cho kí hiệu XZ 13* A3 (Bắc cầu): Nếu X Y và Y Z thì X Z Với những lập luận trên có thể rút ra những nhận xét: Giả sử F là tập các phụ thuộc hàm đúng trên quanhệ r. Nếu X Y là một phụ thuộc hàm đợc suy dẫn từ F nhờ hệ tiên đề Armstrong thì X Y là đúng trên quanhệ r. Những kết luận suy ra từ hệ tiên đề Armstrong: a. Luật hợp: Nếu X Y và X Z thì X YZ b. Luật tựa bắc cầu: Nếu X Y và WY Z thì WX Z c. Luật tách: Nếu X Y và ZY thì X Z 6. Các dạng chuẩn trong CSDL quanhệ Do việc cập nhật dữliệu (các phép tính nh thêm, loại bỏ, thay đổi) gây nên những dị thờng dữliệu cho nên các quanhệ cần thiết phải đợc biến đổi thành các dạng phù hợp. Quá trình đó đợc xem là quá trình chuẩn hoá. Quanhệ đợc chuẩn hoá là quanhệ mà trong đó mỗi miền của một thuộc tính chỉ chứa những giá trị nguyên tố (Atomic) nghĩa là không phân nhỏ đợc nữa và do đó mỗi giá trị trong quanhệ cũng là nguyên tố. Quanhệcó chứa các miền giá trị không nguyên tố gọi là quanhệ không chuẩn hoá. Một quanhệ đ ợc chuẩn hoá có thể thành một hoặc nhiều quanhệ chuẩn hoá khác và không làm mất mát thông tin. Ba dạng chuẩn hoá thờng đợc sử dụng trong thiết kế CSDL quanhệ Dạng chuẩn thứ nhất (First Normal Form - 1NF) Dạng không chuẩn hoá Dạng chuẩn thứ hai (Second Normal Form - 2NF) Dạng chuẩn thứ ba (Third Normal Form - 3NF) Sơ đồ quanhệ giữa các dạng chuẩn dữliệu 1NF Một lợc đồ quanhệ R đợc gọi là ở dạng chuẩn một (1NF) nếu và chỉ nếu toàn bộ các miền có mặt trong R đều chỉ chứa một giá trị nguyên tố hay nói một cách khác lợc đồ quanhệ phải tồn tại khoá. Định nghĩa này cho thấy bất kì quanhệ chuẩn nào cũng ở dạng 1NF. 2NF Lợc đồ quanhệ R ở dạng chuẩn thứ hai nếu nó đã ở dạng chuẩn thứ nhất và nếu mỗi thuộc tính không khoá của R là phụ thuộc hàm đầy đủ vào khoá chính. 3NF Trớc khi đa ra định nghĩa của dạng chuẩn 3NF, cần đa thêm khái niệm phụ thuộc bắc cầu: Cho một lợc đồ quanhệ R(U), X là tập con của các thuộc tính U và A là một thuộc tính thuộc U. Thuộc tính A đợc gọi là phụ thuộc bắc cầu vào X trên R nếu tồn tại một tập con Y của sao cho X Y thì Y A nhng Y / X (và không xác định hàm) với A XY. Tính bắc cầucó thể đợc biểu diễn theo sơ đồ sau: X A Y Sơ đồ thuộc tính quanhệ phụ thuộc bắc cầu Qua sơ đồ có thể thấy rằng A có thể xác định hàm Y. Trong trờng hợp A / Y thì đợc gọi là tính bắc cầu chặt. Tính bắc cầu sẽ đợc sử dụng trong 3NF. Điều kiện A XY là cần thiết vì nếu A Y X thì theo luật phản xạ luôn có X Y A. Điều kiện Y / X để loại bỏ nhiều khoá khỏi dạng chuẩn 3NF. Cũng nh ở 2NF việc loại bỏ phụ thuộc bắc cầu đi đến 3NF cũng nhằm loại bỏ những dị thờng gây ra do quá trình cập nhật dữliệu vào quan hệ. Từ đó có thể định nghĩa dạng chuẩn 3NF nh sau: Lợc đồ quanhệ R ở dạng chuẩn thứ ba (3NF) nếu nó là 2NF và mỗi thuộc tính không khoá của R là không phụ thuộc hàm bắc cầu vào khoá chính. B. Giới thiệu về NgônngữhỏicócấutrúcSQL 1. Khái niệm về ngônngữSQLNgônngữ xử lý dữliệuquanhệ là ngônngữ bao gồm tập các chỉ thị cho phép hỏi, thay đổi, thêm bớt và sửa thông tin của một CSDL. Trong các ngônngữ thao tác dữliệu SQL, SEQUEL, QUEL, QBE .v.v thì ngônngữSQL (Structure Query Language) là ngônngữhỏi đáp dữliệucócấu trúc, phi thủ tục, chuẩn mực và điển hình đợc xác nhận là mạnh, phổ dụng lại dễ sử dụng. Ngônngữ này đợc phát triển từ ngônngữ SEQUEL-2, thử nghiệm và cài đặt tại trung tâm nghiên cứu của hãng IBM (tại SALJOISE, CALIFONIA) cho hệ thống quản trị cơsởdữliệu lớn điển hình là SYSTEM-R. Trong SYSTEM-R, SQL vừa đóng vai trò là một ngônngữcó thể thao tác độc lập của ngời dùng đầu cuối, đồng thời lại có khả năng là một ngônngữ con đợc nhúng trong ngônngữ chủ PL/1. Hiện nay ngônngữSQL đã đợc chuyển thành chuẩn chính thức của ANSI (Viện tiêu chuẩn Mĩ) và ISO (Cơ quan tiêu chuẩn quốc tế) và đợc rất nhiều các phần mềm Quản trị hệ CSDL hỗ trợ cho ngônngữ này nh Oracle, NGRESS, DB2, SYBASE, INFOMIC .v.v. 2. Các đặc điểm của ngônngữSQL Đây là một ngônngữ rất phù hợp cho CSDL phân tán theo mô hình Client-Server, nó cho phép nhiều ng ời dùng cùng truy nhập đến một cơsởdữliệu với độ an toàn ổn định và tính bảo mật cao. NgônngữSQL đảm bảo lu lợng truyền thông tin trên mạng tối thiểu vì Client chỉ gửi câuhỏivà nhận về kết quả từ Server chứ không phải gửi cả CSDL đi để xử lý. Đặc biệt là do đợc các hệquản trị CSDL hỗ trợ nên phơng thức chung để giao tiếp giữa các phần mềm quản trị CSDL (nh dùng ODBC) và điều này làm cho hệ thống có tính mở. Thật vậy, có thể sử dụng một hệquản trị CSDL tốt (đòi hỏicấu phần cứng mạnh) nhng có thể vẫn dùng phần mềm yêu cầu phần cứng thấp trên các Client hoặc có thể dùng các máy NC (Net Computer). Mặt khác cũng có thể dùng nhiều hệquản trị CSDL trong cùng một hệ thống để khai thác các thế mạnh của chúng, ví dụcó thể dùng Lotus Notes trên các Client (giao diện ng ời dùng thân thiện, u việt về truyền thông, xử lý tốt văn bản) và kết nối vào CSDL Oracle trên Server (tính bảo mật cao, đa ng- ời dùng, quản lý tốt các giao tác-Transaction). NgônngữSQL còn có khả năng thực hiện đợc những câuhỏi phức tạp mà các dạng ngônngữ khác không đáp ứng đợc và một câu lệnh SQLcó thể thay thế cho một tập hợp các câu lệnh lập trình CSDL thông thờng. Ngoài cơcấu xử lý dữliệuSQL còn có các công cụ để xây dựng các ứng dụng WEB, có khả năng xử lý dữ liệu, tạo báo cáo, thiết kế mô hình dữliệuvàquản trị hệ thống. 3. Các loại câu lệnh SQL thao tác với dữliệu cần quan tâm khi tối u Trong ngônngữSQLcó hai loại lệnh thao tác với dữ liệu, đó là: 14* Các lệnh định nghĩa dữliệu DDL (Data Defined Language): là các lệnh tạo bảng, tạo Index .v.v 15* Các lệnh cập nhật dữliệu DML (Data Manipulation Language) nh SELECT, UPDATE, INSERT, DROP. Các lệnh cập nhật dữliệu đợc sử dụng thờng xuyên cho nên cần thiết phải tìm ra phơng án chọn cách viết câu lệnh, cách thực hiện câu lệnh sao cho có hiệu quả nhất về mặt thời gian cũng nh là về không gian lu trữ. Oracle có thể tối u các loại câu lệnh sau: 1. Câu lệnh đơn: Một câu lệnh đơn là một câu lệnh INSERT, UPDATE, DELETE hoặc SELECT thao tác duy nhất trên một bảng. 2. Query đơn: thực chất là một câu lệnh SELECT (có thể với nhiều bảng). 3. Kết nối: Một kết nối là một truy vấn dữliệu nhiều hơn một bảng và từ kết nối giữa các bảng nằm trong mệnh đề FROM. Phép kết nối kéo dữliệu từ các bảng khác nhau vàso sánh chúng từng đôi tại dòng chung ở tất cả các bảng Có các kiểu kết nối sau: 1* Liên kết ngang bằng (Equijoins) liên kết này dựa vào sự cân bằng của điều kiện tìm kiếm mà chỉ ra mối quanhệ giữa 2 bảng. 2* Liên kết không ngang bằng (Non-Equijoins) là liên kết 1 bảng này với một bảng khác dựa trên sự so sánh không bằng nh toán tử <=, >=, BETWEEN .v.v. 3* Liên kết ngoài (Outer joins): Giả sử có 2 bảng KháchHàng và HoáĐơncùng có 2 cột là MãKháchHàng. Khi liên kết 2 bảng cho hiện lên tên của những khách hàng cósố thứ tự trùng nhau. Nếu muốn hiện lên cả những khách hàng không thoả mãn trong bảng KháchHàng cũng đợc hiện lên thì cần dùng liên kết ngoài . 4* Liên kết với chính nó (Self joins): Đây là kiểu liên đặc biệt giữa một bảng với chính nó nh 2 bảng riêng biệt . Để làm đợc việc này thì bảng đó phải có một tên quan hệ. 4. Tích Đề-các: là kết quả của việc nhân hai tập hợp. 5. Câu lệnh phức: Một câu lệnh phức nh là một câu lệnh SELECT, INSER, UPDATE, hoặc DELETE có chứa một câu lệnh SELECT khác (đợc gọi là subquery). 6. Các query kết hợp: Một query kết hợp là một query có sử dụng các toán tử tập hợp nh UNION, UNION ALL, INTERSECT hoặc MINUS. 7. câu lệnh sử dụng View: View là một bảng logic mà thực chất là một câu lệnh SELECT mà có thể thao tác giống nh đối với bảng. 8. Câu lệnh phân tán: nghĩa là câu lệnh truy nhập dữliệu từ xa. . I Hệ cơ sở dữ liệu quan hệ và ngôn ngữ hỏi có cấu trúc sql A - Hệ cơ sở dữ liệu quan hệ 1. Quan hệ và các phép toán đại số quan hệ 1.1. Quan hệ Quan hệ. hàm bắc cầu vào khoá chính. B. Giới thiệu về Ngôn ngữ hỏi có cấu trúc SQL 1. Khái niệm về ngôn ngữ SQL Ngôn ngữ xử lý dữ liệu quan hệ là ngôn ngữ bao gồm