Bắt đầu ngayBắt đầu miễn phí

Bình thường hóa quá mức

Hãy nhớ lại định nghĩa của bảng loan.

CREATE TABLE loan (
    borrower_id INTEGER REFERENCES borrower(id),
    bank_id INTEGER REFERENCES bank(id),
    approval_date DATE NOT NULL DEFAULT CURRENT_DATE,
    gross_approval DECIMAL(9, 2) NOT NULL,
    term_in_months SMALLINT NOT NULL,
    revolver_status BOOLEAN NOT NULL DEFAULT FALSE,
    initial_interest_rate DECIMAL(4, 2) NOT NULL
);

Một thiết kế mới cho bảng này đã được đề xuất để thỏa mãn 1NF. Định nghĩa bảng sửa đổi thay approval_date bằng approval_month, approval_dayapproval_year:

CREATE TABLE loan (
    ...
    approval_month SMALLINT,
    approval_day SMALLINT,
    approval_year SMALLINT,
    ...
);

Bài tập này minh họa cách việc bình thường hóa quá mức có thể cho phép chèn dữ liệu không hợp lệ.

Bài tập này là một phần của khóa học

Tạo cơ sở dữ liệu PostgreSQL

Xem khóa học

Hướng dẫn bài tập

  • Xóa câu lệnh INSERT INTO mà nếu thực thi sẽ dẫn đến dữ liệu không hợp lệ được chèn vào bảng.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

INSERT INTO loan (
  	borrower_id, bank_id, approval_month, approval_day,
  	approval_year, gross_approval, term_in_months,
  	revolver_status, initial_interest_rate
) VALUES (12, 14, 12, 1, 2013, 421115, 120, false, 4.42);

INSERT INTO loan (
  	borrower_id, bank_id, approval_month, approval_day,
  	approval_year, gross_approval, term_in_months,
  	revolver_status, initial_interest_rate
) VALUES (3, 201, 6, 42, 2017, 30015, 60, true, 3.25);

INSERT INTO loan (
  	borrower_id, bank_id, approval_month, approval_day,
  	approval_year, gross_approval, term_in_months,
  	revolver_status, initial_interest_rate
) VALUES (19, 5, 8, 19, 2018, 200000, 120, false, 6.3);
Chỉnh sửa và Chạy Mã