Проблемы с обновлением таблиц базы данных 1nf
У меня есть две таблицы базы данных:
отчет(идентификатор, описание) (ключ: идентификатор) и
регистрация(a, b, id_report) (ключ: (a, b));
id_report - это внешний ключ, который ссылается на идентификатор отчета.
В регистрации таблицы есть функциональная зависимость a -> id_report.
Таким образом, регистрация таблицы 1nf, но не 2nf.
Несмотря на это я не могу найти проблемы вставки / обновления / удаления в регистрации таблицы. Является ли это возможным?
Спасибо
2 ответа
Вы сказали в комментарии, что не можете "найти, как могут возникнуть проблемы". (Акцент добавлен.) Вот как.
Допустим, ваша таблица "регистрация" начинается с таких данных.
a b id_report
--
1 10 13
1 11 13
1 12 13
2 27 14
2 33 14
Функциональная зависимость a->id_report все еще сохраняется. Когда мы знаем значение для "a", мы находим одно и только одно значение для "id_report".
Но dbms не может напрямую навязать эту зависимость. Это означает, что dbms разрешит выполнение этого оператора обновления без ошибок.
update registration
set id_report = 15
where a = 1 and b = 10;
a b id_report
--
1 10 15
1 11 13
1 12 13
2 27 14
2 33 14
Теперь ваши данные повреждены. Когда мы знаем значение для "a", мы теперь находим два значения для "id_report". В предыдущей таблице, зная, что "a" равнялся 1, мы знали, что "id_report" равнялся 13. Мы больше не знаем этого; если "а" равно 1, id_report может быть 13 или 15.
Таблица может быть денормализована и при этом не иметь никаких существующих проблем ссылочной целостности.
Причиной нормализации является усложнение или невозможность создания аномалий вставки, обновления и удаления. Возможно, но довольно сложно управлять всеми избыточными данными, чтобы они оставались согласованными.
Еще лучше использовать базу данных в 3NF (или выше, если применимо), чтобы не полагаться на программистов и пользователей, чтобы они не создавали проблем. Рано или поздно произойдут ошибки.