Mục lục bài họcĐang ở d05-b1
Relational databases and normalisation
Why not a single flat file
A flat file repeats the same data on every row. That wastes space, but the real cost is update anomalies: change a customer's address and you must find every row containing it, and any row you miss now holds a contradiction. A relational database stores each fact once.
The vocabulary
An entity becomes a table; an attribute becomes a field; a record is one row. A primary key uniquely identifies a record. A foreign key is a primary key of another table used to link them. A composite key uses two or more fields together, which is what a link table needs. Referential integrity means a foreign key must match an existing primary key — the database refuses to create an orphan record.
Normalisation
1NF: no repeating groups; every field holds a single atomic value. 2NF: in 1NF, and every non-key field depends on the whole primary key — this only bites when the key is composite. 3NF: in 2NF, and no non-key field depends on another non-key field (no transitive dependency).
Many-to-many
A relational database cannot store a many-to-many relationship directly. It is resolved by a link table whose primary key is the composite of the two foreign keys — students and courses become students, courses and enrolments.
What normalisation costs
Fewer anomalies and less redundancy, but more tables, so queries need more joins and can run more slowly. That trade-off is the evaluation point: a data warehouse used only for reading is often deliberately denormalised.
Vì sao không dùng một tệp phẳng duy nhất
Tệp phẳng lặp lại cùng một dữ liệu ở mọi dòng. Điều đó tốn chỗ, nhưng cái giá thật sự là bất thường khi cập nhật: đổi địa chỉ một khách hàng thì phải tìm mọi dòng chứa nó, và bất kỳ dòng nào bỏ sót sẽ trở thành một mâu thuẫn. Cơ sở dữ liệu quan hệ lưu mỗi dữ kiện đúng một lần.
Từ vựng
Một thực thể thành một bảng; một thuộc tính thành một trường; một bản ghi là một dòng. Khoá chính xác định duy nhất một bản ghi. Khoá ngoại là khoá chính của bảng khác, dùng để nối hai bảng. Khoá gộp dùng hai trường trở lên kết hợp, và đó chính là thứ bảng trung gian cần. Toàn vẹn tham chiếu nghĩa là khoá ngoại phải khớp với một khoá chính đang tồn tại — cơ sở dữ liệu từ chối tạo ra bản ghi mồ côi.
Chuẩn hoá
1NF: không có nhóm lặp; mỗi trường chứa đúng một giá trị nguyên tử. 2NF: đã ở 1NF, và mọi trường không khoá phụ thuộc vào toàn bộ khoá chính — điều này chỉ có ý nghĩa khi khoá là khoá gộp. 3NF: đã ở 2NF, và không trường không khoá nào phụ thuộc vào một trường không khoá khác (không có phụ thuộc bắc cầu).
Quan hệ nhiều–nhiều
Cơ sở dữ liệu quan hệ không lưu trực tiếp được quan hệ nhiều–nhiều. Nó được tách bằng một bảng trung gian có khoá chính là tổ hợp của hai khoá ngoại — học sinh và môn học trở thành học sinh, môn học và đăng ký.
Chuẩn hoá phải trả giá gì
Ít bất thường hơn và ít dư thừa hơn, nhưng nhiều bảng hơn, nên truy vấn cần nhiều phép nối và có thể chạy chậm hơn. Chính sự đánh đổi đó là chỗ ăn điểm đánh giá: một kho dữ liệu chỉ dùng để đọc thường được cố tình phi chuẩn hoá.
Một bảng duy nhất lưu đơn hàng:
ma_don, ngay, ma_kh, ten_kh, dia_chi_kh, ma_sp, ten_sp, don_gia, so_luong
Một đơn hàng có thể chứa nhiều sản phẩm. Chuẩn hoá về 3NF.
Bước 1 — về 1NF. Vì một đơn có nhiều sản phẩm, các trường sản phẩm tạo thành nhóm lặp. Tách dòng để mỗi dòng là một sản phẩm trong một đơn. Khoá chính khi đó phải là khoá gộp (ma_don, ma_sp).
Bước 2 — về 2NF: bỏ phụ thuộc vào MỘT PHẦN khoá.
• ngay, ma_kh, ten_kh, dia_chi_kh chỉ phụ thuộc ma_don, không phụ thuộc ma_sp ⇒ tách ra bảng DON_HANG.
• ten_sp, don_gia chỉ phụ thuộc ma_sp ⇒ tách ra bảng SAN_PHAM.
• so_luong phụ thuộc cả hai ⇒ ở lại bảng trung gian.
Bước 3 — về 3NF: bỏ phụ thuộc bắc cầu. Trong bảng DON_HANG, ten_kh và dia_chi_kh phụ thuộc ma_kh, mà ma_kh lại phụ thuộc ma_don — đó là phụ thuộc bắc cầu. Tách ra bảng KHACH_HANG.
Kết quả — bốn bảng:
KHACH_HANG(ma_kh, ten_kh, dia_chi_kh)
SAN_PHAM(ma_sp, ten_sp, don_gia)
DON_HANG(ma_don, ngay, ma_kh*)
CHI_TIET_DON(ma_don*, ma_sp*, so_luong)
(gạch chân $=$ khoá chính, dấu $*$ $=$ khoá ngoại)
Lợi ích cụ thể. Khách hàng chuyển nhà thì sửa đúng MỘT dòng trong KHACH_HANG thay vì tìm hết mọi dòng đơn hàng của họ — và vì sửa một chỗ nên không thể phát sinh mâu thuẫn.
Đọc xong rồi — làm thử ngay
Bài tập của chương Databases and Data Security gồm 14 câu trắc nghiệm và 3 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.