eBay数据库设计与实现.docx

上传人:b****6 文档编号:3193396 上传时间:2022-11-20 格式:DOCX 页数:17 大小:942.29KB
下载 相关 举报
eBay数据库设计与实现.docx_第1页
第1页 / 共17页
eBay数据库设计与实现.docx_第2页
第2页 / 共17页
eBay数据库设计与实现.docx_第3页
第3页 / 共17页
eBay数据库设计与实现.docx_第4页
第4页 / 共17页
eBay数据库设计与实现.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

eBay数据库设计与实现.docx

《eBay数据库设计与实现.docx》由会员分享,可在线阅读,更多相关《eBay数据库设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。

eBay数据库设计与实现.docx

eBay数据库设计与实现

挑战2eBay数据库设计和实现

挑战数据:

提供十年前从eBay网站下载的大量拍卖数据,数据格式为XML。

挑战要求:

要求设计一个合理的关系数据模式(数据库),同时编写C++程序将XML格式的数据,基于设计的数据模式转换成SQLServer/PostgreSQL能够导入的文本格式,并在SQLServer/PostgreSQL上建立设计的数据模式,导入转换得到的数据,并通过SQL查询操作进行测试和验证。

挑战步骤:

PartA设计关系数据模式

根据xml说明文档和实际的eBay拍卖数据,设计一个合理的关系数据模式,回答以下5个步骤。

1.列出你设计的所有关系,为每个关系指定主码,此阶段可以不指定数据类型。

users(userid,rating,location,country);

item(itemid,name,currently,Buy_Price,First_Bid,Number_of_Bids,Started,Ends,seller,Description);

category(category);

item_category(itemid,category);

item_bids(itemid,time,bidder,amount)

2.列出你设计的关系中的所有函数依赖,也可以回答“没有”。

users:

userid→rating,location,country;

item:

itemid→name,currently,Buy_Price,First_Bid,Number_of_Bids,Started,Ends,seller,Description;

item_bids:

itemid,time→bidder,amount)

3.你设计的关系是否属于Boyce-CoddNormalForm(BCNF)范式?

如果不是,请重新设计,或者解释为什么采用非BCNF较好。

属于BC范式

4.列出你设计的关系中的所有多值依赖,也可以回答“没有”。

item_category:

itemid→→category;

5.你设计的关系是否属于第4范式?

如果不是,请重新设计,或者解释为什么采用非4-NF较好。

属于第4范式

PartB编写数据转换程序

1.考虑到对XML代码处理的效率,使用c#进行编程,使用其自带的System.Xml进行XML文件的读取。

2.XML文件存放在程序Debug文件夹下。

3.根据设计的关系数据库模型,同步生成4个文本文件(item.txt、item_bid.txt、item_ca.txt、user.txt)。

4.数据处理过程中,考虑对元数据中可能影响数据导入的因素进行处理,包括日期、单引号、逗号等,使用“《《》》”作为列分隔符。

5.由于SQLServer的数据导入导出工具的文本数据转换出错,所以直接利用C#对生成的四个文本文件进行再处理,生成包含SQL插入语句的文本文件(iitem.txt、iitem_bid.txt、iitem_ca.txt、iuser.txt)。

6.文件均生成在程序Debug文件夹下。

PartC将转换生成的数据导入SQLServer

1.在SQLServer上新建数据库(eBay),创建设计的关系数据模式,即createtable,并指定主码还外码,执行create.sql。

注意:

XML拍卖数据中的Description数据长度较长,部分超过8000字符,应将类型设计为varchar(MAX),保证数据在插入过程中不因截断而出错。

数据库初始大小为100M。

2.表创建后,利用程序生成的文本文件,进行数据导入导入。

在数据导入的过程中,执行单个insert文件时间较长,且提示“资源池'internal'没有足够的系统内存来运行此查询。

”将部分数据导入分批进行,依次导入insert-1.sql~insert_8.sql,可以保证所有数据导入成功。

3.由于直接生成的文本数据存在一定的重复,不满足部分表的主键要求,所以创建临时表——userstem、item_categorytem,在此基础上进行唯一查询后,再将数据导入相关表。

最后删除临时表。

此操作包含在insert.sql文件中。

insertintousers

selectdistinct*

fromuserstem;

droptableuserstem;

insertintocategory

selectdistinctcategory

fromitem_categorytem;

insertintoitem_category

selectdistinct*

fromitem_categorytem;

droptableitem_categorytem;

PartD测试你生成的数据库

SQLServer/PostgreSQL导入数据后,首先对每个关系进行测试验证是否正确导入,然后实现以下查询来检查数据库的正确性。

1.关系验证

1)users——存在locating、country为空的用户,黄色显示,为空值,

2)item——日期、金额数据正常,空值保留

Description数据字段最长字节13960

Description数据字段内容

3)category

4)item_category——存在多值依赖

5)item_bids——日期、金额数据正常

2.用户人数。

selectcount(*)

fromusers

3.来自NewYork的用户人数(即用户的location为“NewYork”,区分大小写)。

selectcount(*)

fromusers

wherelocation='NewYork';

4.所属类别(category)个数为4的拍卖(auction)次数。

selectCOUNT(*)

from(

selectitemid,count(*)ascount

fromitem_category

groupbyitemid

)a

wherecount=4

5.当前价格最高的拍卖(aucion)的ID。

selectitemid,currently

fromitem

wherecurrently=(selectmax(currently)

fromitem

6.等级(rating)大于1000的卖家(seller)人数。

selectCOUNT(*)

fromusers

whererating>1000anduseridin(selectseller

fromitem

7.既是卖家(seller)又是投标人(bidder)的用户人数。

selectCOUNT(*)

fromusers

whereuseridin(selectseller

fromitem

anduseridin(selectbidder

fromitem_bids

8.类别(category)至少包含一个投标(bid)大于$100的物体(item),这样类别的数目。

selectCOUNT(*)

fromcategory

wherecategoryin(

selectcategory

fromitem,item_bids,item_category

whereitem.itemid=item_bids.itemid

anditem.itemid=item_category.itemid

andamount>100

9.上述查询时间均不超过10s。

挑战感想:

挑战二对是对eBay拍卖数据进行建库,数据来源于XML文件,XML的标签使得数据比较明晰,主要的难度在于如何批量的处理XML文件,获得商品的各项信息。

考虑到C#本身就有处理XML的类库,我就是用C#编程,处理数据,在简单学习相关函数和对象后,基本实现了数据的提取。

在利用数据库导入工具时,由于部分字段的转化错误,所以决定在原有文本文件的基础上,直接生成数据插入的sql文件。

在实际数据导入的过程中,数据量一度接近百兆,导致内存不存,数据导入失败。

通过分析,我将数据分阶段导入,利用临时表进行处理,完成了数据的导入。

在整个过程中,我根据数据导入过程中出现的异常,不断修改程序,使得生成的文件更利于导入。

在不断的尝试中,一点点的达成目的,数据库的设计也越来越完善,通过创建的商品的类型表,极大的提高了查询的效率,提高了数据的完整性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1