我有一个表存储从亚马逊提取的书籍数据的项目。当用户浏览网站时,这个亚马逊数据被插入到项目中,所以任何发生的INSERT都需要高效。我应该使这张桌子正常吗?
这里的表:
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。
- 检查作者的SELECT作者ID,否则插入它并使用mysql_insert_id()获得Authors_ID。
- 检查标题中的标题以选择Title_ID,否则插入它并使用mysql_insert_id()来获得Title_ID。
- 使用这些标识的最终插入项目(这实际上可能是一个重复的,所以这整个过程将是一种浪费。)
这是否反对正常化此表?
注意:项目的目标是而不是来创建书籍的综合数据库,以便用户可以说“通过发布商X向我展示所有图书”。 Items表仅用于为用户的搜索结果缓存Items。
哦,不要忘记在那里放一个复选标记:] – pixelbobby 2011-05-16 20:07:29
我不会,只是等待所有的反馈进来 – babonk 2011-05-16 20:32:25