【发布时间】:2011-08-26 17:11:03
【问题描述】:
我有一个表 Items 存储从亚马逊获取的图书数据。当用户浏览网站时,此亚马逊数据会插入到商品中,因此发生的任何 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 ;
规范化此表可能意味着为 Titles、Authors 和 Publishers 创建表。这样做我担心的是插入会变得过于复杂。要插入单个项目,我必须:
- 在 Publishers 中检查 Publisher to SELECT Publisher_ID,否则插入并使用 mysql_insert_id() 获取 Publisher_ID。
- 在 Authors 中检查 Authors to SELECT Authors_ID,否则插入并使用 mysql_insert_id() 获取 Authors_ID。
- 检查 Titles 中的 Title 以 SELECT Title_ID,否则插入并使用 mysql_insert_id() 获取 Title_ID。
- 使用这些 ID 最终插入项目(实际上可能是重复的,所以整个过程将是浪费......)
这是否反对该表的规范化?
注意:Items 的目标不是创建一个全面的图书数据库,以便用户会说“给我看 Publisher X 的所有图书”。 Items 表仅用于缓存我的用户搜索结果的 Items。
【问题讨论】:
-
哦,别忘了在下面打勾:]
-
我不会,只是等待所有反馈进来
标签: mysql sql database normalization