Bỏ qua nội dung

A.3 · Cơ sở dữ liệu

Tổ chức Baccalaureate Quốc tế · IB Diploma · Computer Science · SL · Chủ đề 3

3.1

Phạm vi và yêu cầu tiên quyết

Trọng tâm SL được hỗ trợ. Mục tiêu đánh giá đầu tiên 2027; PDF chính thức trả về 403; tài liệu ngắn thu thập trước đó là bài đánh giá cuối cùng 2026. Hướng dẫn còn lại, yêu cầu đánh giá và thực hành giữ nguyên các bản ghi đã lưu.

Yêu cầu tiên quyết: đọc các đại lượng và đơn vị được nêu, sử dụng phép tính toán và các điều kiện mô hình dưới đây. Mỗi bài học sẽ phát triển phương pháp riêng trước khi chuyển giao độc lập.

Đây là các ví dụ giảng dạy gốc hoặc được ghi rõ là hư cấu, không phải là các phép đo thực tế hay các nghiên cứu đánh giá học viên đã hoàn tất.

3.2

Cơ sở dữ liệu quan hệ: khóa và mối quan hệ

Giải thích hiện tượng này là gì?

  • sao chép địa chỉ người dùng trong mỗi đơn hàng có thể tạo ra hồ sơ mâu thuẫn khi địa chỉ thay đổi.
  • Bắt đầu bằng một dự đoán. Nêu rõ các đại lượng hoặc đặc điểm bạn sẽ so sánh, sau đó quyết định bằng chứng nào có thể phân biệt hai lời giải thích.

Xây dựng mô hình

  • Một bảng quan hệ chứa các hàng và thuộc tính. Khóa chính xác định một hàng; khóa ngoại liên kết đến khóa được tham chiếu trong bảng khác. Chuẩn hóa có thể giảm thiểu trùng lặp không cần thiết và bất thường cập nhật trong khi vẫn giữ được các mối quan hệ có ý nghĩa.
  • Khóa chính: Tập thuộc tính xác định duy nhất một hàng trong bảng; Khóa ngoại: Tập thuộc tính tham chiếu đến khóa trong bảng khác.
Cơ sở dữ liệu quan hệ: khóa và mối quan hệ: sơ đồ ví dụ hướng dẫn gốc

Chọn bằng chứng để kiểm định mô hình

  • Một phép join (nối) kết hợp các hàng theo điều kiện đã chỉ định. Số lượng kết quả phụ thuộc vào tính đơn cardinality của mối quan hệ và bộ lọc. Ràng buộc khóa ngoại áp đặt quy tắc mối quan hệ; nó không tự động mã hóa dữ liệu cá nhân.
  • Thiết kế một tập dữ liệu đơn giản tổng hợp người dùng-đơn hàng không chứa thông tin cá nhân thật. Khai báo khóa, kiểm tra chèn trùng lặp và thiếu tham chiếu, sau đó đối chiếu kết quả truy vấn với bảng dự kiến đã tính tay.

Bắt đầu từ các đại lượng đã biết

  • Nêu các giá trị đã biết và đơn vị của chúng. Chọn công thức vì các giả thiết của nó phù hợp với trường hợp này, sau đó biến đổi trước khi thay số.
  • Đã biết: bốn khách hàng có tương ứng 2, 0, 3 và 1 đơn hàng. Phép inner join từ khách hàng sang đơn hàng trả về 2+0+3+1 = 6 hàng. Phép left join cũng giữ lại khách hàng không có đơn hàng như một hàng khớp null, cho ra 7 ở đây.

Ví dụ:

Ba khách hàng có 1, 3 và 2 đơn hàng. Phép inner join giữa khách hàng và đơn hàng sẽ trả về bao nhiêu hàng? Sử dụng cùng trình tự: đại lượng đã biết → mô hình → mối quan hệ → thay thế → đơn vị và diễn giải.


Kiểm tra kết luận và giới hạn của nó

  • Khóa chính không nhất thiết phải là tên người. Một phép join không phải là sự nối đơn giản của các bảng. Sử dụng truy vấn tham số hóa cho đầu vào không đáng tin cậy thay vì xây dựng SQL từ chuỗi thô.
  • Quay trở lại quan sát ban đầu. Giải thích kết quả hỗ trợ điều gì, những điều kiện nào mà nó giả định, và một cách để kiểm chứng một giải thích cạnh tranh.

Cảnh báo:

Khóa ngoại tự động mã hóa mọi hàng. Tuyên bố này là sai: Khóa chính không nhất thiết phải là tên người. Một phép join không phải là sự nối đơn giản của các bảng. Sử dụng truy vấn tham số hóa cho đầu vào không đáng tin cậy thay vì xây dựng SQL từ chuỗi thô.

Tóm tắt:

Cơ sở dữ liệu quan hệ: khóa và mối quan hệ: Một phép join (nối) kết hợp các hàng theo điều kiện đã chỉ định. Số lượng kết quả phụ thuộc vào tính đơn cardinality của mối quan hệ và bộ lọc. Ràng buộc khóa ngoại áp đặt quy tắc mối quan hệ; nó không tự động mã hóa dữ liệu cá nhân.

Chuỗi thực thi chạy được và ranh giới

import sqlite3
db = sqlite3.connect(":memory:")
db.executescript("""CREATE TABLE c(id INTEGER PRIMARY KEY);
CREATE TABLE o(id INTEGER PRIMARY KEY, cid INTEGER);
INSERT INTO c VALUES(1),(2),(3);
INSERT INTO o VALUES(10,1),(11,1),(12,3);""")
for kind in ["INNER", "LEFT"]:
    sql = f"SELECT COUNT(*),COUNT(o.id) FROM c {kind} JOIN o ON c.id=o.cid"
    print(kind, db.execute(sql).fetchone())
db.close()

Kết quả mong đợi:

INNER (3, 3)
LEFT (4, 3)

Left join giữ lại customer 2 với các trường order là null. COUNT(*) bao gồm dòng đó, trong khi COUNT(o.id) loại bỏ null. Khóa chính phân biệt các bản ghi; số lượng khách hàng không phải là số lượng đơn hàng. Từ khóa join được nội suy đến từ một danh sách cố định bên trong, không phải từ đầu vào người dùng.

Từ vựng Luyện tập
English Tiếng Việt
primary key/ˈpraɪməri kiː/ khóa chính
foreign key/ˈfɒrən kiː/ khóa ngoại

Nhiều chủ đề hơn trong Tổ chức Baccalaureate Quốc tế · IB Diploma · Computer Science · SL

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

IGCSE, A-Level & AP