เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การ Normalize มากเกินไป

ทบทวนนิยามของตาราง 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
);

มีการเสนอการออกแบบตารางใหม่เพื่อให้เป็นไปตาม 1NF โดยแทนที่คอลัมน์ approval_date ด้วย approval_month, approval_day และ approval_year:

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

แบบฝึกหัดนี้แสดงให้เห็นว่าการ Normalize มากเกินไปอาจเปิดช่องให้แทรกข้อมูลที่ไม่ถูกต้องเข้าไปในตารางได้

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การสร้างฐานข้อมูล PostgreSQL

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ลบคำสั่ง INSERT INTO ที่หากรันแล้วจะทำให้ข้อมูลที่ไม่ถูกต้องถูกแทรกเข้าไปในตารางออกให้หมด

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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);
แก้ไขและรันโค้ด