Bỏ qua nội dung

Cơ sở dữ liệu

Khoa học máy tính A-Level · Chủ đề 8

Bài học video cho chủ đề này Mở trang video
17:18

Cơ sở dữ liệu & Mô hình Quan hệ

Trước khi có cơ sở dữ liệu, mỗi chương trình đều tự quản lý các tập tin phẳng riêng — một tập tin cho mỗi chương trình. Hãy tưởng tượng một cửa hàng. Chương trình bán hàng, chương trình tính hóa đơn, và chương trình vận chuyển…

Giọng đọc tiếng Anh · phụ đề tiếng Anh + 中文 được ghi trực tiếp

8.1

Lưu trữ dựa trên tập tin và những hạn chế của nó

Chương trình
Thí sinh cần có thể: Ghi chú và hướng dẫn
Thể hiện sự hiểu biết về những hạn chế khi sử dụng phương pháp dựa trên tập tin để lưu trữ và truy xuất dữ liệu
Mô tả các đặc điểm của cơ sở dữ liệu quan hệ giúp khắc phục những hạn chế của phương pháp dựa trên tập tin
Thể hiện sự hiểu biết và sử dụng đúng thuật ngữ liên quan đến mô hình cơ sở dữ liệu quan hệ Bao gồm: thực thể, bảng, dòng ghi, trường, tuple, thuộc tính, khóa chính, khóa ứng viên, khóa phụ, khóa ngoại, mối quan hệ (một-nhiều, một-một, nhiều-nhiều), toàn vẹn tham chiếu, lập chỉ mục
Sử dụng sơ đồ thực thể - mối quan hệ (E-R) để tài liệu hóa thiết kế cơ sở dữ liệu
Thể hiện sự hiểu biết về quá trình chuẩn hóa Dạng chuẩn hóa thứ nhất (1NF), Dạng chuẩn hóa thứ hai (2NF) và Dạng chuẩn hóa thứ ba (3NF)
Giải thích tại sao một bộ bảng dữ liệu đã cho đang ở hoặc không ở dạng 3NF
Xây dựng thiết kế cơ sở dữ liệu đã chuẩn hóa dựa trên mô tả cơ sở dữ liệu, một bộ dữ liệu đã cho hoặc một bộ bảng đã cho

Nguồn: Chương trình Cambridge International

Trước khi có cơ sở dữ liệu, các chương trình lưu trữ dữ liệu trong tập tin phẳng — thường mỗi chương trình một tập tin. Điều này ổn cho dữ liệu nhỏ nhưng thất bại khi mở rộng quy mô.

Một bàn tay đang tìm kiếm trong tủ hồ sơ thẻ bài
Lưu trữ dựa trên tập tin giữ dữ liệu trong các tập tin riêng biệt, giống như giấy tờ trong tủ hồ sơ — khó tìm kiếm và dễ bị sao chép

Những hạn chế

  • sự dư thừa dữ liệu — cùng một dữ liệu (địa chỉ khách hàng) được lưu trong nhiều tập tin, mỗi tập tin cho một chương trình, nên dung lượng lưu trữ bị lãng phí và mọi bản sao phải được cập nhật.
  • sự bất nhất dữ liệu — khi một bản sao được cập nhật và bản sao khác thì không, các tập tin mâu thuẫn nhau và không ai biết bản nào đúng.
  • sự phụ thuộc dữ liệu — mỗi chương trình được viết theo đúng bố cục của tập tin của nó; thay đổi độ dài trường hoặc thêm trường và mọi chương trình đọc tập tin đó phải được viết lại.
  • không truy cập chung — một tập tin bị khóa trong khi một chương trình đang sử dụng, nên người dùng không thể làm việc với dữ liệu cùng lúc.
  • toàn vẹn yếu — không có quy tắc trung tâm ngăn chặn giá trị không hợp lệ hoặc liên kết đến một khách hàng không tồn tại; bảo mật yếu — quyền truy cập theo từng tập tin, không theo từng trường; và truy vấn xuyên qua các tập tin cần một chương trình mới mỗi lần.
Các chương trình Lương và Bán hàng mỗi cái đều liên kết đến tập tin dữ liệu riêng của chúng, nên trường Số Nhân viên được lưu trữ hai lần
Phương pháp dựa trên tập tin: mỗi chương trình giữ các tập tin của riêng mình

Một cơ sở dữ liệu quan hệ khắc phục những vấn đề này bằng cách lưu trữ dữ liệu trong bảng do một phần mềm quản lý (DBMS) điều khiển, mà tất cả các chương trình đều sử dụng.

Một DBMS chứa các bảng thiết kế, quy tắc xác thực, quyền truy cập và dữ liệu, với một cơ sở dữ liệu dùng chung duy nhất, được sử dụng bởi cả ứng dụng lương và bán hàng
Phương pháp cơ sở dữ liệu: một DBMS phục vụ tất cả các chương trình

Tại sao cơ sở dữ liệu quan hệ tốt hơn — câu trả lời ba điểm. Mỗi mục dữ liệu được lưu trữ một lần, trong một bảng, và các bảng được liên kết bằng khóa, nên không có sự dư thừa và không có sự bất nhất; dữ liệu độc lập với các chương trình, những chương trình yêu cầu DBMS lấy những gì chúng cần và không bị ảnh hưởng khi cấu trúc thay đổi; và DBMS áp đặt các quy tắc toàn vẹn, kiểm soát quyền truy cập theo từng người dùng và từng trường, cho phép nhiều người dùng cùng lúc, và trả lời mọi truy vấn mà không cần viết một chương trình mới.

Ví dụ đã giải. Một tiệm sửa chữa lưu trữ khách hàng, thiết bị và công việc sửa chữa của mình bằng phương pháp dựa trên tập tin, mỗi chương trình một tập tin. Hãy đưa ra ba vấn đề gây ra bởi điều này, và mô tả cách một cơ sở dữ liệu quan hệ sẽ loại bỏ chúng.

Tên và số điện thoại của khách hàng được lưu trong tập tin sửa chữa và tập tin hóa đơn (dư thừa); khi khách hàng thay đổi số điện thoại, một tập tin được cập nhật và tập tin kia thì không (bất nhất); và khi tiệm muốn có báo cáo mới — sửa chữa theo kỹ thuật viên — một chương trình mới phải được viết để đọc các tập tin (không có truy vấn tự phát). Trong cơ sở dữ liệu quan hệ, khách hàng được lưu một lần trong bảng KHÁCH HÀNG và được tham chiếu bằng CustomerID từ bảng SỬA CHỮA, nên một thay đổi được thực hiện một lần và được thấy ở mọi nơi; báo cáo là một truy vấn SQL duy nhất.

Từ vựng Luyện tập
English Tiếng Việt
DBMS/ˌdiː biː em ˈes/ Hệ quản trị cơ sở dữ liệu
SQL/ˌes kjuː ˈel/ SQL
8.1

Mô hình quan hệ — các thuật ngữ

  • bảng (mối quan hệ) — một lưới gồm các hàng và cột; một bảng cho mỗi loại thực thể (ví dụ CUSTOMER).
  • bản ghi (hàng, còn gọi là bộ tuple) — một hàng; một ví dụ của thực thể.
  • trường (cột, còn gọi là thuộc tính) — một cột; một mẩu thông tin về mỗi bản ghi.
  • khóa chính — một trường (hoặc các trường) xác định duy nhất mỗi bản ghi; không bao giờ null hoặc trùng lặp.
  • khóa ngoại — 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.
  • khóa tổng hợp — một khóa chính bao gồm hai hoặc nhiều trường kết hợp với nhau.
  • khóa ứng viên — bất kỳ trường nào (hoặc các trường) có thể trở thành khóa chính.
  • khóa thứ cấp — một trường không phải khóa chính được tạo chỉ mục để tìm kiếm nhanh.
  • tạo chỉ mục — xây dựng chỉ mục trên một trường để tra cứu và ghép nối chạy nhanh hơn.
  • toàn vẹn tham chiếu — mọi giá trị khóa ngoại phải khớp với một khóa chính đang tồn tại (không có bản ghi orphan).

Một bảng được viết tắt với khóa chính được gạch dưới và các khóa ngoại được ghi chú:

CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate)   -- CustomerID is FK → CUSTOMER
Hai bảng được liên kết bằng một khóa ngoại: bảng KHÁCH HÀNG có khóa chính CustomerID; bảng ĐƠN HÀNG có khóa chính OrderID của riêng nó plus một khóa ngoại CustomerID có giá trị khớp với CustomerID trong KHÁCH HÀNG
Khóa ngoại liên kết hai bảng: ORDER.CustomerID khớp với khóa chính CUSTOMER.CustomerID

Ví dụ đã giải. Nêu ý nghĩa của thực thể, khóa chính và toàn vẹn tham chiếu trong cơ sở dữ liệu quan hệ, và hoàn thành bảng tương ứng thuật ngữ ↔ mô tả cho tuple và thuộc tính.

Một thực thể là một đối tượng về đó dữ liệu được lưu trữ — một người, vật thể hoặc sự kiện — trở thành một bảng. Một khóa chính là thuộc tính (hoặc tổ hợp các thuộc tính) xác định duy nhất mỗi bản ghi trong bảng. Toàn vẹn tham chiếu có nghĩa là mọi giá trị khóa ngoại phải khớp với giá trị của khóa chính trong bảng mà nó tham chiếu, nên một bản ghi không thể tham chiếu đến một bản ghi không tồn tại. Một tuple là một hàng của bảng (một bản ghi); một thuộc tính là một cột (một trường). Học các cặp: bảng/mối quan hệ, bản ghi/tuple, trường/thuộc tính.

Khám phá

Đọ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 Luyện tập
English Tiếng Việt
table/ˈteɪbl/ bảng
tuple/ˈtuːpl/ hàng (tuple)
8.1

Sơ đồ thực thể - mối quan hệ (E-R)

Một sơ đồ thực thể - mối quan hệ hiển thị cấu trúc: mỗi thực thể là một hình chữ nhật, mỗi mối quan hệ là một đường kẻ, với số lượng được đánh dấu ở mỗi đầu:

  • một-đến-một (1:1).
  • một-nhiều (1:M) — mỗi Khách hàng có nhiều Đơn đặt hàng; mỗi Đơn đặt hàng có một Khách hàng.
  • nhiều-nhiều (M:N) — Học sinh tham gia nhiều Khóa học, và Khóa học có nhiều Học sinh.
Sơ đồ E-R với thực thể STUDENT và CLASS được nối bằng đường quan hệ, chân chim biểu thị nhiều ở đầu học sinh và một thanh ngắn ở đầu lớp
Sơ đồ E-R: một lớp có nhiều học sinh
Ký hiệu đầu đường chân chim cho một, nhiều, một duy nhất, không hoặc một, một hoặc nhiều, và không hoặc nhiều
Các ký hiệu chân chim biểu thị tính đơn số của một mối quan hệ

Một mối quan hệ nhiều-nhiều không thể lưu trữ trực tiếp. Chia nó thành hai mối quan hệ một-nhiều thông qua một bảng liên kết chứa hai khóa ngoại:

ENROLMENT(StudentID, CourseID, EnrolmentDate)
Mối quan hệ nhiều-nhiều giữa STUDENT và COURSE được lưu trữ dưới dạng hai mối quan hệ một-nhiều thông qua bảng liên kết ENROLMENT chứa StudentID và CourseID
Bảng liên kết giải quyết mối quan hệ nhiều-nhiều thành hai mối quan hệ một-nhiều

Vẽ sơ đồ E-R cho một tập hợp các bảng cho trước. Mỗi bảng trở thành một thực thể. Một mối quan hệ tồn tại khi một bảng chứa khóa ngoại trỏ đến bảng khác; nó chạy từ bảng chứa khóa ngoại (đầu nhiều) đến bảng chứa khóa chính của nó (đầu một). Một bảng có hai khóa ngoại và không có danh tính nào khác thường là một bảng liên kết giải quyết mối quan hệ nhiều-nhiều. Gán nhãn cho mỗi đường theo loại quan hệ.

Sơ đồ E-R cho cơ sở dữ liệu cửa hàng sửa chữa với bốn thực thể: CUSTOMER một-nhiều DEVICE, DEVICE một-nhiều REPAIR và TECHNICIAN một-nhiều REPAIR, sử dụng ký hiệu chân chim và hiển thị khóa chính, khóa ngoại
Vẽ sơ đồ từ các bảng: mỗi khóa ngoại là một mối quan hệ một-nhiều, với "nhiều" nằm ở bảng chứa khóa đó

Ví dụ minh họa. Một cửa hàng sửa chữa có các bảng CUSTOMER(CustomerID, Name, Phone), DEVICE(DeviceID, CustomerID, Type, Model), TECHNICIAN(TechnicianID, Name) và REPAIR(RepairID, DeviceID, TechnicianID, RepairDate, Cost). Xác định các mối quan hệ và loại của chúng.

DEVICE chứa CustomerID, nên CUSTOMER–DEVICE là một-nhiều (một khách hàng, nhiều thiết bị). REPAIR chứa DeviceID, nên DEVICE–REPAIR là một-nhiều; nó cũng chứa TechnicianID, nên TECHNICIAN–REPAIR là một-nhiều. Không có đường nối trực tiếp CUSTOMER–REPAIR: đường liên kết đi qua DEVICE. Ba đường, ba chân chim, tất cả đều ở đầu REPAIR hoặc DEVICE.

Từ vựng Luyện tập
English Tiếng Việt
cardinality/ˌkɑːdɪˈnælɪti/ cardinality
one-to-many/wʌn tə ˈmeni/ một-nhiều
link table/lɪŋk ˈteɪbl/ bảng liên kết
8.1

Chuẩn hóa

Chuẩn hóa tổ chức các bảng để giảm thiểu sự trùng lặp và bất nhất, đi qua các dạng chuẩn theo thứ tự.

  • Dạng chuẩn thứ nhất (1NF) — mỗi trường chỉ chứa một giá trị đơn (nguyên tử), không có nhóm lặp lại, và có khóa chính.
  • Dạng chuẩn thứ hai (2NF) — trong 1NF, và mọi trường không phải khóa phụ thuộc vào toàn bộ khóa chính (chỉ quan trọng đối với khóa tổng hợp).
  • Dạng chuẩn thứ ba (3NF) — trong 2NF, và mọi trường không phải khóa chỉ phụ thuộc duy nhất vào khóa chính, không phụ thuộc vào trường không khóa khác (không có sự phụ thuộc truyền dẫn).

Thiết kế 3NF lưu trữ mỗi sự thật đúng một lần, do đó các lỗi bất thường chèn/cập nhật/xóa biến mất. Sự đánh đổi là có nhiều bảng hơn và nhiều phép nối (join) hơn. Hãy hướng tới 3NF.

Để tạo ra thiết kế 3NF: xác định các thực thể và thuộc tính của chúng; chọn khóa chính cho mỗi thực thể; tách các trường lặp lại/trước không nguyên tử (1NF); tách các trường phụ thuộc vào một phần của khóa tổng hợp (2NF); tách các trường phụ thuộc truyền dẫn vào khóa (3NF); thêm khóa ngoại cho các mối quan hệ.

Chuẩn hóa: một bảng nơi tên khách hàng và điện thoại lặp lại trên từng đơn hàng được tách thành bảng ORDER riêng biệt và bảng CUSTOMER, sao cho mỗi sự thật được lưu trữ đúng một lần
Chuẩn hóa loại bỏ sự trùng lặp bằng cách tách dữ liệu lặp lại thành bảng riêng

Ví dụ minh họa. Bảng ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity) có khóa chính tổng hợp (OrderID, ProductID). Chuẩn hóa nó lên 3NF. Kiểm tra từng trường không khóa đối với khóa. Quantity phụ thuộc vào cả hai OrderID và ProductID, điều này ổn. Nhưng CustomerID phụ thuộc vào OrderID duy nhất - chỉ là một phần của khóa tổng hợp. Đó là phụ thuộc một phần, nên bảng chưa đạt 2NF. Tách nó thành ORDER_LINE(OrderID, ProductID, Quantity) và ORDER(OrderID, CustomerID, CustomerName). Bây giờ kiểm tra 3NF: trong bảng ORDER mới này, CustomerName phụ thuộc vào CustomerID, vốn không phải là khóa - đây là phụ thuộc truyền dẫn. Tách lại: ORDER(OrderID, CustomerID) và CUSTOMER(CustomerID, CustomerName). Đặt tên cho sự phụ thuộc làm vi phạm mỗi dạng (phụ thuộc một phần làm vi phạm 2NF, phụ thuộc truyền dẫn làm vi phạm 3NF); mô tả "nó có dữ liệu lặp lại" là triệu chứng và sẽ không nhận điểm.

Ba câu hỏi cần đặt ra cho bất kỳ bảng nào. Mỗi ô có phải là một giá trị đơn, không có nhóm lặp lại không? Nếu không, nó chưa đạt 1NF. Nếu khóa là tổng hợp, thì mọi trường không khóa có phụ thuộc vào toàn bộ khóa không? Nếu một số trường phụ thuộc vào một phần của nó, có phụ thuộc một phần và bảng chưa đạt 2NF. Mọi trường không khóa có phụ thuộc vào khóa duy nhất không? Nếu một trường phụ thuộc vào một trường không khóa khác, có phụ thuộc truyền dẫn và bảng chưa đạt 3NF. Câu trả lời "hãy giải thích tại sao bảng chưa đạt 3NF" cần nêu tên sự phụ thuộc và các trường liên quan.

Chuẩn hóa bảng cho thuê xe qua ba bước: nhóm lặp lại xe bị loại bỏ để đạt 1NF, chi tiết xe phụ thuộc vào CarReg duy nhất được chuyển sang bảng CAR để đạt 2NF, và chi tiết khách hàng phụ thuộc vào CustomerID được chuyển sang bảng CUSTOMER để đạt 3NF
1NF loại bỏ nhóm lặp lại, 2NF loại bỏ phụ thuộc một phần, 3NF loại bỏ phụ thuộc truyền dẫn

Ví dụ minh họa. Một cửa hàng cho thuê xe ghi nhận mỗi lần thuê là RENTAL(RentalID, RentalDate, CustomerID, CustomerName, CustomerPhone, CarReg, CarModel, DailyRate, Days), trong đó một lần thuê có thể bao gồm nhiều xe. Giải thích tại sao bảng này chưa được chuẩn hóa và đưa ra thiết kế 3NF.

Không thuộc 1NF: các trường xe hơi CarReg, CarModel, DailyRate, Days tạo thành nhóm lặp lại — một hợp đồng thuê có nhiều xe. Di chuyển chúng sang RENTAL_CAR(RentalID, CarReg, CarModel, DailyRate, Days) với khóa tổng hợp (RentalID, CarReg). Không thuộc 2NF: trong RENTAL_CAR, CarModel và DailyRate phụ thuộc vào CarReg duy nhất — phụ thuộc một phần. Di chuyển chúng sang CAR(CarReg, CarModel, DailyRate), giữ lại RENTAL_CAR(RentalID, CarReg, Days). Không thuộc 3NF: trong RENTAL, CustomerName và CustomerPhone phụ thuộc vào CustomerID, một trường không phải khóa — phụ thuộc truyền dẫn. Di chuyển chúng sang CUSTOMER(CustomerID, CustomerName, CustomerPhone), giữ lại RENTAL(RentalID, RentalDate, CustomerID). Thiết kế 3NF gồm bốn bảng — CUSTOMER, RENTAL, RENTAL_CAR, CAR — với CustomerID, RentalID và CarReg là khóa ngoại; gạch dưới mọi khóa chính.

Từ vựng Luyện tập
English Tiếng Việt
join/dʒɔɪn/ join
normalisation/ˌnɔːməlaɪˈzeɪʃn/ chuẩn hóa
normal forms/ˈnɔːml fɔːmz/ các dạng chuẩn
atomic/əˈtɒmɪk/ nguyên tử
transitive dependency/ˈtrænsɪtɪv dɪˈpendənsi/ phụ thuộc vào tham số
partial dependency/ˈpɑːʃl dɪˈpendənsi/ phụ thuộc một phần
8.2

Hệ Quản Trị Cơ Dữ Liệu (DBMS)

Chương trình
Thí sinh cần có thể: Ghi chú và hướng dẫn
Thể hiện sự hiểu biết về các tính năng do Hệ quản trị Cơ sở dữ liệu (DBMS) cung cấp nhằm giải quyết các vấn đề của phương pháp dựa trên tập tin Bao gồm: • quản lý dữ liệu, bao gồm duy trì từ điển dữ liệu • mô hình hóa dữ liệu • sơ đồ logic • toàn vẹn dữ liệu • an ninh dữ liệu, bao gồm thủ tục sao lưu và việc sử dụng quyền truy cập cho từng cá nhân / nhóm người dùng
Thể hiện sự hiểu biết về cách các công cụ phần mềm bên trong DBMS được sử dụng trong thực tế Bao gồm việc sử dụng và mục đích của: • giao diện nhà phát triển • bộ xử lý truy vấn

Nguồn: Chương trình Cambridge International

Một DBMS quản lý cơ dữ liệu tập trung. Các tính năng khắc phục giới hạn của phương pháp dựa trên tệp:

  • từ điển dữ liệu — mô tả chi tiết từng bảng, trường, kiểu và khóa; chương trình truy vấn từ đó thay vì mã hóa cứng cấu trúc.
  • kiểm soát trùng lặp/nhất quán — mỗi sự thật chỉ được lưu trữ một lần.
  • kiểm soát truy cập đồng thời — khóa và giao dịch cho phép nhiều người dùng làm việc cùng lúc.
  • sao lưu và khôi phục; bảo mật và quyền hạn theo từng người dùng.
  • luật toàn vẹn — khóa, ràng buộc độc nhất và phạm vi, được áp dụng tập trung.
  • giao dịch — một nhóm thao tác mà tất cả đều thành công hoặc tất cả đều thất bại.
  • bảng xem — các bảng ảo hiển thị "phần" dữ liệu của riêng mỗi người dùng.
  • quản lý dữ liệu và mô hình hóa dữ liệu — kiểm soát cách dữ liệu được lưu trữ và xác định cấu trúc của nó dưới dạng bản đồ logic (thiết kế logic, độc lập với lưu trữ vật lý).
  • toàn vẹn dữ liệu và bảo mật dữ liệu — đảm bảo tính chính xác và kiểm soát truy cập tập trung.
  • bộ xử lý truy vấn chạy các câu hỏi; giao diện nhà phát triển cung cấp công cụ và API để xây dựng ứng dụng.

Các công cụ của nó bao gồm trình soạn thảo từ điển dữ liệu, bộ tạo truy vấn, bộ tạo biểu mẫu, máy sinh báo cáo, quản lý người dùng và trình soạn thảo SQL.

Những gì từ điển dữ liệu chứa (câu hỏi "liệt kê ba mục"): tên các bảng; tên các trường trong mỗi bảng; kiểu dữ liệu và độ dài của mỗi trường; khóa chính, khóa ngoại và mối quan hệ giữa các bảng; quy tắc xác thực; chỉ mục; và ai có quyền truy cập mỗi bảng. Đây là metadata — dữ liệu về dữ liệu — và DBMS sử dụng nó để kiểm tra mọi truy vấn và mọi thay đổi.

Cách DBMS giữ dữ liệu an toàn (câu hỏi "mô tả hai phương pháp"): xác thực — tên đăng nhập và mật khẩu, hoặc sinh trắc học, trước bất kỳ truy cập nào; quyền truy cập — mỗi người dùng hoặc nhóm chỉ được phép đọc, ghi hoặc xóa một số bảng hoặc trường nhất định, thường thông qua một bảng xem; mã hóa dữ liệu được lưu trữ và dữ liệu gửi đi, khiến tệp sao chép trở nên vô nghĩa; sao lưu được thực hiện thường xuyên, giúp khôi phục dữ liệu sau khi mất; và nhật ký giao dịch ghi lại ai đã thay đổi cái gì.

Hai công cụ phần mềm. Giao diện nhà phát triển là những gì lập trình viên sử dụng để xây dựng cơ dữ liệu và các ứng dụng trên đó: tạo bảng và thiết lập khóa, ràng buộc xác thực, viết truy vấn và SQL, thiết kế biểu mẫu và báo cáo, mà không cần biết dữ liệu được lưu trữ vật lý như thế nào. Bộ xử lý truy vấn nhận một truy vấn (SQL từ chương trình hoặc truy vấn được tạo trong giao diện), kiểm tra nó đối với từ điển dữ liệu, tìm ra cách hiệu quả nhất để chạy nó, lấy dữ liệu và trả về kết quả.

Bản đồ logic. DBMS tách biệt thiết kế logic (có những bảng và trường nào và chúng liên quan với nhau như thế nào) khỏi lưu trữ vật lý (tệp, chỉ mục, khối đĩa). Chương trình làm việc với bản đồ logic, do đó lưu trữ vật lý có thể được tổ chức lại mà không cần thay đổi bất kỳ chương trình nào — đây là sự độc lập dữ liệu mà phương pháp dựa trên tệp thiếu hụt.

Ổ cứng với nắp bị tháo ra, hiển thị các đĩa quay chồng lên nhau có bề mặt giống gương và cánh đầu đọc/ghi nằm phía trên chúng
Lưu trữ vật lý mà bản đồ logic ẩn giấu: các đĩa quay của ổ cứng và đầu đọc/ghi
Khám phá

Phòng thí nghiệm dịch vụ cơ sở dữ liệu

Xem cách DBMS chuyển đổi câu truy vấn thành quyền truy cập dữ liệu chia sẻ an toàn.

Khám phá

Phòng thí nghiệm dịch vụ cơ sở dữ liệu

Xem cách DBMS chuyển đổi câu truy vấn thành quyền truy cập dữ liệu chia sẻ an toàn.

8.3

DDL và DML

Chương trình
Thí sinh cần có thể: Ghi chú và hướng dẫn
Thể hiện sự hiểu biết rằng DBMS thực hiện toàn bộ việc tạo/sửa đổi cấu trúc cơ sở dữ liệu thông qua Ngôn ngữ Định nghĩa Dữ liệu (DDL) của nó
Thể hiện sự hiểu biết rằng DBMS thực hiện tất cả các truy vấn và bảo trì dữ liệu thông qua Ngôn ngữ Thao tác Dữ liệu (DML) của nó
Thể hiện sự hiểu biết rằng tiêu chuẩn ngành cho cả DDL và DML là Ngôn ngữ Truy vấn Có cấu trúc (SQL) Hiểu một câu lệnh SQL đã cho
Hiểu các câu lệnh SQL (DDL) đã cho và có khả năng viết các câu lệnh SQL (DDL) đơn giản bằng cách sử dụng một tập con các câu lệnh Tạo cơ sở dữ liệu (CREATE DATABASE) Tạo định nghĩa bảng (CREATE TABLE), bao gồm tạo các thuộc tính với kiểu dữ liệu phù hợp: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME Sửa đổi định nghĩa bảng (ALTER TABLE) Thêm khóa chính vào bảng (PRIMARY KEY (field)) Thêm khóa ngoại vào bảng (FOREIGN KEY (field) REFERENCES Table (Field))
Viết một script SQL để truy vấn hoặc sửa đổi dữ liệu (DML) được lưu trữ trong (tối đa hai) bảng cơ sở dữ liệu Các truy vấn bao gồm SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG
Bảo trì dữ liệu bao gồm INSERT INTO, DELETE FROM, UPDATE

Nguồn: Chương trình Cambridge International

SQL (Ngôn ngữ Truy vấn Có Cấu trúc) có hai phần:

SQL phân chia thành DDL (xây dựng cấu trúc) và DML (làm việc với dữ liệu)
DDL xây dựng cấu trúc cơ dữ liệu; DML làm việc với dữ liệu
  • Ngôn ngữ Định nghĩa Dữ liệu (DDL) — tạo hoặc thay đổi cấu trúc (bảng, khóa, ràng buộc).
  • Ngôn ngữ Thao tác Dữ liệu (DML) — làm việc với dữ liệu (chèn, cập nhật, xóa, truy vấn).

Nguyên tắc DDL

CREATE TABLE CUSTOMER (
  CustomerID INTEGER PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Phone VARCHAR(20)
);

Thêm khóa ngoại:

CREATE TABLE ORDER (
  OrderID INTEGER PRIMARY KEY,
  CustomerID INTEGER,
  OrderDate DATE,
  FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);

Sửa và xóa bỏ:

ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
DROP TABLE CUSTOMER;

Các loại phổ biến: INTEGER, REAL, VARCHAR(n), CHAR(n) (cũng CHARACTER(n)), DATE, TIME, BOOLEAN, DECIMAL(p, s).

Nguyên tắc DML

Truy vấn với SELECT:

Một truy vấn SELECT trả về chỉ những hàng phù hợp với điều kiện của nó
Một truy vấn SELECT trả về chỉ những hàng phù hợp với điều kiện của nó
SELECT Name, Phone
FROM CUSTOMER
WHERE City = 'London'
ORDER BY Name ASC;

SELECT liệt kê các trường, FROM đặt tên bảng, WHERE lọc hàng, ORDER BY sắp xếp.

Một join kết hợp hai bảng bằng mối quan hệ khóa-ngoại:

SELECT C.Name, O.OrderDate
FROM CUSTOMER C INNER JOIN ORDER O
  ON C.CustomerID = O.CustomerID
WHERE O.OrderDate >= '2024-01-01';
Một truy vấn SQL được chú thích từng dòng: SELECT đặt tên các trường và cột COUNT, FROM đặt tên bảng đầu tiên với alias, INNER JOIN ON liên kết bảng thứ hai thông qua khóa ngoại, WHERE giữ lại các hàng khớp, GROUP BY tạo một hàng cho mỗi khách hàng, ORDER BY sắp xếp kết quả
Các phần của truy vấn, theo thứ tự chúng phải được viết

Hàm tổng hợp (COUNT, SUM, AVG, MIN, MAX) thường được sử dụng với GROUP BY:

SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDER
GROUP BY CustomerID;

Chèn, cập nhật, xóa:

INSERT INTO CUSTOMER (CustomerID, Name, Phone)
VALUES (101, 'Ada Lovelace', '020-1234-5678');

UPDATE CUSTOMER SET Phone = '020-9999-0000' WHERE CustomerID = 101;

DELETE FROM CUSTOMER WHERE CustomerID = 101;

Luôn đặt clause WHERE trên UPDATE và DELETE, nếu không thay đổi sẽ ảnh hưởng đến mọi hàng.

Mẹo cho bài thi SQL

  • sử dụng đúng tên bảng và trường từ đề bài.
  • đặt chuỗi trong dấu nháy đơn ('Smith'); không đặt số trong dấu nháy.
  • so sánh: =, <, >, <=, >=, <>.
  • LIKE 'A%' khớp với mọi chuỗi bắt đầu bằng A (% = bất kỳ chuỗi nào, _ = một ký tự); IN (1,2,3); BETWEEN 10 AND 20.
  • Kết hợp các điều kiện bằng AND / OR / NOT, và kết thúc mỗi câu lệnh bằng dấu chấm phẩy.

Mẫu DDL mà đề thi yêu cầu. Mọi CREATE TABLE đều đặt tên cho từng trường cùng kiểu dữ liệu của nó, đánh dấu khóa chính, và khai báo từng khóa ngoại kèm bảng tham chiếu; khóa tổng hợp được khai báo trên một dòng riêng:

CREATE TABLE RENTAL_CAR (
  RentalID INTEGER,
  CarReg VARCHAR(8),
  Days INTEGER,
  PRIMARY KEY (RentalID, CarReg),
  FOREIGN KEY (RentalID) REFERENCES RENTAL(RentalID),
  FOREIGN KEY (CarReg) REFERENCES CAR(CarReg)
);

Ví dụ có lời giải. Sử dụng CUSTOMER(CustomerID, Name, Phone) và DEVICE(DeviceID, CustomerID, Type, Model), viết script SQL để: (a) liệt kê tên và số điện thoại của tất cả khách hàng sở hữu thiết bị loại 'tablet', sắp xếp theo thứ tự tên alphabet; (b) đếm số lượng thiết bị theo từng loại; (c) cập nhật rằng khách hàng 17 hiện có số điện thoại là '0771 234 5678'; (d) thêm một thiết bị mới, ID 305, là một 'laptop' model 'X1' thuộc về khách hàng 17.

(a)

SELECT CUSTOMER.Name, CUSTOMER.Phone
FROM CUSTOMER INNER JOIN DEVICE
  ON CUSTOMER.CustomerID = DEVICE.CustomerID
WHERE DEVICE.Type = 'tablet'
ORDER BY CUSTOMER.Name ASC;

(b)

SELECT Type, COUNT(DeviceID) AS NumberOfDevices
FROM DEVICE
GROUP BY Type;

(c) UPDATE CUSTOMER SET Phone = '0771 234 5678' WHERE CustomerID = 17; (d) INSERT INTO DEVICE (DeviceID, CustomerID, Type, Model) VALUES (305, 17, 'laptop', 'X1');

Điểm sẽ được tính cho từng clause — các trường, các bảng, điều kiện join, WHERE, ORDER BY — nên ngay cả khi một script sai một clause thì vẫn nhận điểm cho các phần còn lại. Viết Table.Field whenever hai bảng được liên kết.

Ví dụ có lời giải. Giải thích script này làm gì: SELECT T.Name, SUM(R.Cost) AS Total FROM TECHNICIAN T INNER JOIN REPAIR R ON T.TechnicianID = R.TechnicianID GROUP BY T.Name;

Nó xuất ra tên của mỗi kỹ thuật viên kèm tổng chi phí sửa chữa mà kỹ thuật viên đó đã thực hiện, một dòng cho mỗi kỹ thuật viên: hai bảng được join dựa trên TechnicianID, các dòng được nhóm theo tên, và các chi phí trong mỗi nhóm được cộng lại. Khi được hỏi một script làm gì, hãy mô tả kết quả thay vì cú pháp.

Khám phá

Nối hai bảng với INNER JOIN

Phép nối khớp các dòng mà khóa ngoại bằng khóa chính — ở đây Orders.CustomerID = Customer.CustomerID — và gộp mỗi cặp khớp thành một dòng rộng hơn.

Khám phá

SELECT … WHERE

Từng bước một truy vấn: WHERE giữ lại các hàng khớp, sau đó SELECT chọn các cột bạn yêu cầu.

Từ vựng Luyện tập
English Tiếng Việt
flat files/flæt faɪlz/ tệp 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
field/fiːld/ trường
query/ˈkwɪərɪ/ truy vấn
primary key/ˈpraɪməri kiː/ khóa chính
foreign key/ˈfɒrən kiː/ khóa ngoại
Xem bài học
8.3

Các định nghĩa mà giám khảo chấp nhận

Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

Thuật ngữ Định nghĩa
entity một đối tượng mà dữ liệu về nó được lưu trữ — con người, vật thể hoặc sự kiện — trở thành một bảng trong cơ sở dữ liệu quan hệ
attribute một mục dữ liệu về một entity (một cột của bảng)
tuple một dòng của bảng: một实例 của entity
primary key một thuộc tính, hoặc tổ hợp các thuộc tính, xác định duy nhất mỗi bản ghi trong bảng
foreign key một thuộc tính trong một bảng có giá trị khớp với khóa chính trong bảng khác, dùng để liên kết hai bảng
candidate key bất kỳ thuộc tính (hoặc tổ hợp) nào có thể được chọn làm khóa chính
secondary key một thuộc tính không phải khóa chính được lập chỉ mục để bảng có thể tìm kiếm hoặc sắp xếp nhanh chóng trên đó
composite key một khóa chính bao gồm hai hoặc nhiều thuộc tính kết hợp lại
referential integrity mọi giá trị khóa ngoại phải khớp với một giá trị khóa chính đang tồn tại trong bảng mà nó tham chiếu đến
first normal form một bảng trong đó mọi thuộc tính đều nguyên tử, không có nhóm lặp lại, và có khóa chính
second normal form ở 1NF, và mọi thuộc tính không phải khóa phụ thuộc vào toàn bộ khóa chính (không có phụ thuộc một phần)
third normal form ở 2NF, và không có thuộc tính nào phi khóa phụ thuộc vào một thuộc tính phi khóa khác (không có phụ thuộc truyền dẫn)
data dictionary metadata mà DBMS lưu giữ về cấu trúc cơ sở dữ liệu: các bảng, trường, kiểu dữ liệu, khóa, mối quan hệ, xác thực
DDL / DML ngôn ngữ dùng để định nghĩa hoặc thay đổi cấu trúc cơ sở dữ liệu / ngôn ngữ dùng để truy vấn và bảo trì dữ liệu trong đó
Từ vựng Luyện tập
English Tiếng Việt
integrity/ɪnˈteɡrɪti/ tính toàn vẹn
relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ cơ sở dữ liệu quan hệ
entity/ˈentɪti/ thực thể
record/ˈrekɔːd/ bản ghi
attribute/ˈætrɪbjuːt/ thuộc tí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
referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ toàn vẹn tham chiếu
entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ biểu đồ thực thể - mối liên hệ
data dictionary/ˈdeɪtə ˈdɪkʃənəri/ từ điển dữ liệu
concurrent access/kənˈkʌrənt ˈækses/ truy cập đồng thời
transactions/trænˈsækʃnz/ giao dịch
backup/ˈbækʌp/ bản sao lưu
views/vjuːz/ lượt xem
data management/ˈdeɪtə ˈmænɪdʒmənt/ quản lý dữ liệu
data modelling/ˈdeɪtə ˈmɒdəlɪŋ/ mô hình hóa dữ liệu
logical schema/ˈlɒdʒɪkl ˈskiːmə/ sơ đồ logic
data integrity/ˈdeɪtə ɪnˈteɡrɪti/ toàn vẹn dữ liệu
data security/ˈdeɪtə sɪˈkjʊərɪti/ an ninh dữ liệu
query processor/ˈkwɪərɪ ˈprəʊsesə/ bộ xử lý truy vấn
developer interface/dɪˈveləpə ˈɪntəfeɪs/ giao diện nhà phát triển
authentication/ɔːˌθentɪˈkeɪʃn/ xác thực
Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ Ngôn ngữ Định nghĩa Dữ liệu
Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ Ngôn ngữ Thao tác Dữ liệu
aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ hàm tổng hợp
8.3

Mẹo làm bài thi

  • Định nghĩa các thuật ngữ một cách chính xác: entity, attribute, primary key, foreign key, và các loại quan hệ (1:1, 1:nhiều, nhiều:nhiều).
  • Đưa ra lý do cho mỗi dạng chuẩn hóa: 1NF (không có nhóm lặp lại), 2NF (không có phụ thuộc một phần), 3NF (không có phụ thuộc phi khóa) — và nêu tên các trường liên quan.
  • Giải thích DBMS cung cấp những gì (tính độc lập dữ liệu, bảo mật, toàn vẹn, truy cập đồng thời, từ điển dữ liệu, giao diện nhà phát triển, bộ xử lý truy vấn).
  • Phân biệt DDL (định nghĩa cấu trúc) khỏi DML (truy vấn và thay đổi dữ liệu), và viết clause SQL từng bước: SELECT, FROM, INNER JOIN … ON, WHERE, GROUP BY, ORDER BY.
  • Để vẽ sơ đồ E-R từ các bảng, trước hết hãy tìm khóa ngoại: mỗi khóa ngoại đại diện cho một quan hệ một-nhiều, với "nhiều" nằm ở bảng chứa khóa ngoại đó.

Lỗi thường gặp

  • Vẽ trực tiếp quan hệ nhiều-nhiều. Nó phải được tách thành hai quan hệ một-nhiều thông qua một bảng liên kết chứa cả hai khóa ngoại.
  • Giải thích "không ở 3NF" bằng cách nói "dữ liệu bị lặp lại". Nêu tên phụ thuộc (một phần hoặc truyền dẫn) và các trường liên quan.
  • Dấu ngoặc kép đôi bao quanh chuỗi trong SQL, hoặc dấu ngoặc đơn bao quanh số. Chuỗi cần 'single quotes'; số thì không cần.
  • Bỏ sót điều kiện ON sau INNER JOIN. Không có nó thì hai bảng sẽ không được liên kết.
  • Đặt một trường thường bên cạnh COUNT hoặc SUM trong một SELECT mà không có GROUP BY.
  • UPDATE hoặc DELETE mà không có WHERE. Nó sẽ thay đổi hoặc xóa mọi dòng trong bảng.

Bài học tương tác về chủ đề này

Làm theo từng bước, kèm theo bài tập kiểm tra ngay lập tức.

Đề thi cũ

Nhiều chủ đề hơn trong Khoa học máy tính A-Level

Đăng nhập hoặc tạo tài khoản

IGCSE, A-Level & AP