我有一個表存儲從亞馬遜提取的書籍數據的項目。當用戶瀏覽網站時,這個亞馬遜數據被插入到項目中,所以任何發生的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