У меня есть таблица Items, в которой хранятся данные выбранных книг из Amazon. Эти данные Amazon вставляются в элементы по мере того, как пользователи просматривают сайт, поэтому любая ВСТАВКА, которая происходит, должна быть эффективной.
Вот таблица:
CREATE TABLE IF NOT EXISTS `items` (
`Item_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Item_ISBN` char(13) DEFAULT NULL,
`Title` varchar(255) NOT NULL,
`Edition` varchar(20) DEFAULT NULL,
`Authors` varchar(255) DEFAULT NULL,
`Year` char(4) DEFAULT NULL,
`Publisher` varchar(50) DEFAULT NULL,
PRIMARY KEY (`Item_ID`),
UNIQUE KEY `Item_Data` (`Item_ISBN`,`Title`,`Edition`,`Authors`,`Year`,`Publisher`),
KEY `ISBN` (`Item_ISBN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=1 ;
Нормализация этой таблицы, вероятно, будет означать создание таблиц для названий, авторов и издателей. Моя задача состоит в том, чтобы вставка стала слишком сложной. Чтобы вставить один элемент, мне нужно:
- Проверьте, чтобы издатель в издателях выбрал Publisher_ID, в противном случае вставьте его и используйте mysql_insert_id (), чтобы получить Publisher_ID.
- Проверьте, чтобы Авторы в Авторах ВЫБИРАЛИ Authors_ID, в противном случае вставьте его и используйте mysql_insert_id (), чтобы получить Authors_ID.
- Проверьте заголовок в заголовках, чтобы ВЫБЕРИТЬ Title_ID, в противном случае вставьте его и используйте mysql_insert_id (), чтобы получить Title_ID.
- Используйте эти идентификаторы для окончательной вставки предмета (который на самом деле может быть дубликатом, поэтому весь этот процесс был бы бесполезным).
Это противоречит нормализации для этой таблицы?
Примечание: цель Предметов - , а не , чтобы создать всеобъемлющую базу данных книг, чтобы пользователь сказал: «Покажите мне все книги Издателя X». Таблица «Предметы» просто используется для кэширования «Предметов» для результатов поиска моих пользователей.