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_day và approval_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
Hướng dẫn bài tập
- Xóa câu lệnh
INSERT INTOmà 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);