Надмірна нормалізація
Згадайте визначення таблиці 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,
...
);
Ця вправа демонструє, як надмірна нормалізація може дозволити вставлення невалідних даних.
Ця вправа є частиною курсу
Створення баз даних 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);