Tại sao cần cơ sở dữ liệu và mô hình quan hệ
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| table/ˈteɪbl/ | bảng |
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | cơ sở dữ liệu quan hệ |
| flat files/flæt faɪlz/ | tập tin phẳng |
| data redundancy/ˈdeɪtə rɪˈdʌndənsi/ | sự dư thừa dữ liệu |
| data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ | sự không nhất quán dữ liệu |
| integrity/ɪnˈteɡrɪti/ | Tính toàn vẹn |
| field/fiːld/ | trường |
| entity/ˈentɪti/ | thực thể |
| record/ˈrekɔːd/ | bản ghi |
| tuple/ˈtuːpl/ | bộ |
| attribute/ˈætrɪbjuːt/ | thuộc tính |
| primary key/ˈpraɪməri kiː/ | khóa chính |
| composite key/ˈkɒmpəzɪt kiː/ | khóa tổng hợp |
| candidate key/ˈkændɪdeɪt kiː/ | khóa ứng viên |
| secondary key/ˈsekəndəri kiː/ | khóa phụ |
| indexing/ˈɪndeksɪŋ/ | lập chỉ mục |
| foreign key/ˈfɒrən kiː/ | khóa ngoại |
| referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ | toàn vẹn tham chiếu |
| one-to-many/wʌn tə ˈmeni/ | một-đến-nhiều |
| many-to-many/ˈmeni tə ˈmeni/ | nhiều-đến-nhiều |
Bài báo mà IBM không muốn
- Năm 1970, một nhà nghiên cứu của IBM tên là Edgar Codd đã xuất bản một bài báo dài mười hai trang đề xuất lưu trữ dữ liệu trong các bảng đơn giản, được liên kết bằng các giá trị chung, và yêu cầu dữ liệu bằng ngôn ngữ nói bạn muốn cái gì thay vì nó nằm ở đâu trên đĩa.
- IBM đã bán một cơ sở dữ liệu lưu trữ dữ liệu dưới dạng cây gắn liền với bố cục tập tin, do đó họ đã bỏ qua ông ấy trong nhiều năm. Every program viết dựa trên các tập tin đó phải được viết lại mỗi khi bố cục thay đổi.
- Đến thập niên 1980, mọi ngân hàng, hãng hàng không và cơ quan chính phủ đều chuyển sang các bảng của Codd. Nửa thế kỷ sau, chúng vẫn chạy trên nền tảng đó.
- Bài học này là về các vấn đề của phương pháp dựa trên tập tin, cách một cơ sở dữ liệu quan hệ giải quyết chúng, và những từ bạn phải sử dụng chính xác.
Phương pháp dựa trên tập tin
- Trước thời cơ sở dữ liệu, mỗi chương trình giữ tập tin phẳng riêng của nó: chương trình bán hàng có tập tin khách hàng, chương trình kế toán có tập tin khác, chương trình giao hàng có tập tin thứ ba.
- Mỗi tập tin có bố cục cố định mà mã của chương trình phụ thuộc vào, và không có gì bên ngoài chương trình biết có gì bên trong đó.
- Nó hoạt động tốt cho một chương trình nhỏ. Vấn đề bắt đầu khi chương trình thứ hai cần cùng dữ liệu đó.

Ba chương trình, ba bản sao của khách hàng
Những hạn chế
- Trùng lặp dữ liệu: cùng một dữ liệu, địa chỉ của một khách hàng, được lưu trong nhiều tập tin, lãng phí dung lượng lưu trữ và công sức.
- Không nhất quán dữ liệu: các bản sao được cập nhật riêng biệt, nên chúng diverge và không ai biết bản nào đúng.
- Phụ thuộc dữ liệu: các chương trình bị ràng buộc với định dạng tập tin, nên việc thay đổi bố cục có nghĩa là phải viết lại mọi chương trình sử dụng tập tin đó.
- Tính toàn vẹn khó được áp dụng, dữ liệu khó chia sẻ an toàn, tìm kiếm xuyên qua các tập tin chậm, và bảo mật không thể thiết lập theo từng trường.
Lưu địa chỉ khách hàng trong nhiều tệp riêng biệt dẫn đến:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Cùng một dữ liệu được lưu trữ ở nhiều nơi (trùng lặp) có thể được cập nhật riêng lẻ và trở nên không nhất quán.
Trong hệ thống tệp phẳng, cùng một dữ liệu thường bị sao chép nhiều lần across các tệp, điều này có thể trở nên không nhất quán khi chỉ một bản sao được cập nhật.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Sự trùng lặp này và hậu quả là sự không nhất quán chính là vấn đề cốt lõi mà mô hình quan hệ giải quyết.
Những hạn chế nào của phương pháp dựa trên tệp? Chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Sự dư thừa, sự không nhất quán và sự phụ thuộc dữ liệu là ba hạn chế được đặt tên. Các bảng và phép nối thuộc về phương pháp quan hệ thay thế nó.
Cách một cơ sở dữ liệu quan hệ giải quyết chúng
- Một cơ sở dữ liệu quan hệ lưu trữ dữ liệu trong các bảng do một phần mềm quản lý, DBMS, mà mọi chương trình đều sử dụng.
- Mỗi sự thật được lưu trữ một lần, nên trùng lặp và không nhất quán biến mất: một địa chỉ được thay đổi ở một nơi và mọi chương trình đều thấy sự thay đổi đó.
- Các chương trình yêu cầu DBMS lấy dữ liệu theo tên, nên việc lưu trữ có thể thay đổi mà không cần các chương trình thay đổi: tính độc lập dữ liệu
- Các quy tắc toàn vẹn, quyền truy cập và sao lưu được thực thi tập trung, và bất kỳ bảng nào cũng có thể được tìm kiếm hoặc nối với bất kỳ bảng nào khác.

Một bản sao dữ liệu, một người gác cổng
Cơ sở dữ liệu quan hệ loại bỏ sự không nhất quán của dữ liệu như thế nào?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một bản sao, một lần cập nhật, không có sai lệch. DBMS cung cấp cho mọi chương trình cùng một giá trị hiện tại.
Từ vựng: bảng, dòng và cột
- Một bảng (mối quan hệ) là một lưới gồm các dòng và cột, mỗi loại thực thể (đối tượng mà dữ liệu được lưu trữ về nó) tương ứng với một bảng:
CUSTOMER,ORDER,PRODUCT. - Một ghi chép (record) là một dòng, một ví dụ của thực thể; thuật ngữ chính thức là tuple.
- Một trường (field) là một cột, một mục thông tin về mỗi ghi chép; thuật ngữ chính thức là thuộc tính (attribute).

Dòng là ghi chép, cột là trường, và một cột vươn ra bảng kia
Đọc bảng quan hệ với lệnh SELECT
Bảng quan hệ chỉ có các hàng (bản ghi) và cột (trường). WHERE giữ lại các hàng khớp với điều kiện; SELECT sau đó chỉ giữ lại các cột bạn đã yêu cầu.
Từ vựng: khóa
- Một khóa chính (primary key) là một trường hoặc tổ hợp các field, xác định duy nhất mỗi ghi chép; nó không bao giờ null và không bao giờ trùng lặp. Một khóa tổng hợp (composite key) là khóa chính bao gồm hai hoặc nhiều trường.
- Một khóa ứng viên (candidate key) là bất kỳ trường hoặc tổ hợp nào có thể đóng vai trò là khóa chính. Một khóa phụ (secondary key) là một trường không phải khóa chính được lập chỉ mục để tìm kiếm nhanh; lập chỉ mục (indexing) xây dựng chỉ mục trên một trường giúp tra cứu và nối diễn ra nhanh hơn.
- Một khóa ngoại (foreign key) là một trường có giá trị khớp với khóa chính của bảng khác, liên kết hai bảng lại. Theo ký hiệu rút gọn, khóa chính được gạch chân và khóa ngoại được ghi chú:
CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate) -- CustomerID is a foreign key → CUSTOMER
Khóa chính:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Khóa chính xác định duy nhất mỗi hàng. Khóa ngoại là khóa liên kết với bảng khác.
Gắn mỗi loại khóa với định nghĩa của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Khóa chính xác định một hàng; khóa ngoại liên kết với bảng khác; tổng hợp = nhiều trường hợp nhau; ứng viên = một khóa chính có thể.
Một trường có giá trị trùng khớp với khóa chính của bảng khác là khóa ______.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Khóa ngoại là thứ tạo ra mối quan hệ giữa hai bảng.
Ví dụ giải chi tiết: gọi tên các phần của cơ sở dữ liệu thư viện
- Một thư viện lưu trữ sách, thành viên và mỗi lần mượn. Xác định các thực thể, khóa chính cho từng thực thể, và các khóa ngoại.
- Các thực thể:
BOOK,MEMBER,LOAN. Khóa chính:BookID,MemberID,LoanID, mỗi khóa được chọn vì tính duy nhất đối với từng bản ghi và không bao giờ trống; một tiêu đề hay tên gọi sẽ không thỏa mãn, vì hai cuốn sách có thể chia sẻ cùng một tiêu đề. LOAN(LoanID, BookID, MemberID, DateOut, DateDue):BookIDvàMemberIDlà khóa ngoại, mỗi cái khớp với khóa chính của bảng riêng của nó. Số điện thoại của thành viên thuộc vềMEMBER, không nằm trong mỗi lần mượn.
Trong LOAN(LoanID, BookID, MemberID, DateOut), BookID và MemberID là các ____ khóa.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mỗi cái trùng khớp với khóa chính của bảng khác, BOOK và MEMBER, và liên kết khoản vay với chúng.
Mối quan hệ và toàn vẹn tham chiếu
- Một mối quan hệ (relationship) liên kết hai thực thể. Một-đến-một: mỗi thành viên có một thẻ thư viện. Một-đến-nhiều: một thành viên có nhiều lần mượn; mỗi lần mượn thuộc về một thành viên. Nhiều-đến-nhiều: một cuốn sách có nhiều tác giả và một tác giả viết nhiều sách.
- Toàn vẹn tham chiếu (referential integrity) có nghĩa là mọi giá trị khóa ngoại phải khớp với một khóa chính tồn tại trong bảng mà nó trỏ tới: không có lần mượn nào cho thành viên không tồn tại, không có ghi chép cô lập.
- DBMS thực thi điều này: từ chối phép chèn với khóa ngoại không rõ ràng, và từ chối xóa một ghi chép mà các ghi chép khác vẫn còn trỏ tới.
Toàn vẹn tham chiếu đảm bảo rằng:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Nó ngăn chặn bản ghi cô lập — bạn không thể tham chiếu đến một khóa chính không tồn tại.
Gắn mỗi mối quan hệ với loại của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Đếm xem bao nhiêu thực thể của mỗi loại có thể liên kết với một thực thể của loại kia. Nhiều-nhiều cần một bảng liên kết để lưu trữ.
Ví dụ giải chi tiết: toàn vẹn tham chiếu ngăn chặn điều gì
- Một khách hàng có ba đơn hàng chưa thanh toán bị xóa khỏi bảng
CUSTOMER. Giải thích cách toàn vẹn tham chiếu áp dụng. - Mỗi
CustomerIDcủa đơn hàng là một khóa ngoại phải khớp với một khách hàng tồn tại. Xóa khách hàng sẽ để lại ba đơn hàng trỏ vào một ghi chép không còn nữa: ghi chép cô lập. - Do đó DBMS từ chối phép xóa cho đến khi các đơn hàng bị xóa hoặc gán lại, hoặc nếu được cấu hình theo kiểu cascading, nó cũng xóa luôn các đơn hàng. Dù theo cách nào, không đơn hàng nào ever trỏ vào một khách hàng không có mặt.
- Nêu quy tắc là gì, điều gì sẽ vi phạm nó, và DBMS làm gì.
Toàn vẹn tham chiếu cho phép xóa một khách hàng trong khi các đơn hàng trong bảng khác vẫn tham chiếu đến khách hàng đó.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Điều đó sẽ tạo ra bản ghi cô lập. DBMS từ chối việc xóa, hoặc áp dụng cascading xuống các đơn hàng, để mọi khóa ngoại đều trỏ vào một bản ghi tồn tại.
Định nghĩa mà giám khảo chấp nhận
| Thuật ngữ | Định nghĩa |
|---|---|
| thực thể | đối tượng mà dữ liệu được lưu trữ về nó, được biểu diễn bằng một bảng |
| thuộc tính | một mục dữ liệu về một thực thể, một cột |
| tuple | một dòng của bảng, một ghi chép |
| khóa chính | một thuộc tính hoặc tổ hợp thuộc tính xác định duy nhất mỗi tuple |
| khóa ứng viên | một thuộc tính hoặc tổ hợp có thể được chọn làm khóa chính |
| khóa phụ | một thuộc tính được lập chỉ mục dùng để tìm kiếm bảng nhanh chóng |
| khóa ngoại | một thuộc tính trong một bảng là khóa chính của bảng khác, tạo thành liên kết |
| toàn vẹn tham chiếu | mọi giá trị khóa ngoại đều trỏ tới một khóa chính tồn tại |
Điểm số dễ mất
- Tuple là dòng, thuộc tính là cột. hoán đổi chúng sẽ mất điểm cả hai.
- "Duy nhất" đơn lẻ không định nghĩa khóa chính; nó xác định mỗi ghi chép và không bao giờ null.
- Khóa ngoại có thể lặp lại: một khách hàng, nhiều đơn hàng. Chính khóa mới là thứ không được lặp.
- Khóa phụ dùng để tìm kiếm nhanh, không dùng để xác định. Đừng gọi nó là "khóa chính thứ hai".
Bạn đã nắm vững
- phương pháp dựa trên tệp (file-based approach) mắc sự dư thừa, sự không nhất quán và sự phụ thuộc dữ liệu, với toàn vẹn, chia sẻ, tìm kiếm và bảo mật yếu
- cơ sở dữ liệu quan hệ (relational database) lưu trữ mỗi sự thật một lần trong các bảng do một DBMS quản lý, nên các chương trình độc lập với việc lưu trữ và các quy tắc được thực thi tập trung
- thực thể → bảng · tuple → ghi chép, dòng · thuộc tính → trường, cột · khóa chính xác định, khóa ngoại liên kết, ứng viên có thể xác định, phụ được lập chỉ mục để tìm kiếm
- toàn vẹn tham chiếu: mọi khóa ngoại đều khớp với một khóa chính tồn tại, nên không có ghi chép cô lập