Проблемы с обновлением таблиц базы данных 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 (или выше, если применимо), чтобы не полагаться на программистов и пользователей, чтобы они не создавали проблем. Рано или поздно произойдут ошибки.