Да, вы правы, Author Nationality
также нарушает 3NF.
Объяснение следующее.Book
может идентифицировать author
, но не наоборот.Поэтому author
функционально зависит от книги.То же самое для author
и author nationality
.Author nationality
функционально зависит от author
.Там у вас есть переходная зависимость: author nationality
-> author
-> book
.
Еще одна вещь, которую можно оптимизировать в таблице книг, - это столбец thickness
.Это функционально зависит от pages
.Однако иметь это в дополнительной таблице было бы излишним, поскольку эту информацию можно легко получить из pages
.Я лично не буду хранить эту информацию в базе данных.Если вы хотите сохранить эту информацию в базе данных, вы можете создать представление, например
CREATE VIEW v_book AS
SELECT b.*,
case when pages between 0 and 100 then 'slim' else 'thick' end as thickness
FROM book b;
Таблица книг должна выглядеть как
book | author_id | pages | genre_id | publisher_id
с другим автором таблицы
author_id | author_name | author_nationality