作业帮 > 数学 > 作业

帮我按照这个需求设计数据库架构

来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/12 16:03:20
帮我按照这个需求设计数据库架构
某商城有250万个产品,分为45个大类,每个大类下有若干小类,整个商城有900个小类.每个小类下有若干产品,总的产品数250万个.属于每个小类的产品具有一组相同属性,区别在于属性的值不同.例如,“高度”是某个小类的一组属性中的一个属性,属于这个小类的产品A和产品B都具有“高度”属性,区别在于产品A的高度是1cm,而产品B的高度是2cm.整个商城的所有商品共有1200个互不相同的产品属性.属性对产品小类是多对多关系.属性对产品也是多对多关系.属性对产品大类也是多对多关系.即一个属性可能对应几个不同的小类,一个小类也可能对应几个不同的属性.属性和大类也是这样的关系.属性和产品也是这样的关系.每个产品都有一个价格和库存数属性.价格和库存单独作两张表.要求在显示某个产品编号时,列出产品的所有属性,属性值,所属大类,所属小类,该产品库存数,产品价格.本问题的目的是帮助我理解设计数据库的多表关联方法,请以此需求为例设计一个数据库架构并解释让我理解.我的实验环境是MySQL数据库.笔记本上的.
我基本上解决这个问题了
帮我按照这个需求设计数据库架构
1、首先要清楚,多对多的关系,必须要有一张关系表.
2、大类和小类,本质是一样的,可以放在一张表中,通过父子ID区分,同时也便于扩展,下面细说
3、LZ可能自己没注意到,你描述的产品其实是产品小类,这个是有区别的,比如说你卖的是一款劳力士,那么虽然同一款劳力士有很多个,但是这款下的每一个劳力士手表都应该有它独特的标识,如生产时间、购买者等等,所以这些商品不能放在一条记录里面,用一个库存数量直接统计,它必须每个商品都作为一条记录.然后有是否售出的字段,最后用count统计出库存数量,而还有些商品,比如说牙膏,某种型号的牙膏,其产品全部相同,不会有人关心其中某只的具体情况,那么这类商品可以直接加个库存数量的字段(事实上,一般的商品都会像对劳力士手表那样设计数据库,给每个商品区分对待)
4、“价格和库存单独做两张表”,这个我没有理解,一般来说,价格是直接写在产品分类里,实际情况的话,可能会有多个价格字段,比如说进货价,阳光价,指导价之类的,根据需要添加字段,另外,也可以把价格当成属性写在属性表里.库存单独做一张表,我也不太理解,产品交易的时候,会产生一条交易的记录存到数据库的‘交易明细表’.难道你指的是通过统计这个交易记录来计算库存?
5、下面的设计是根据楼主要求 加上 我的理解来的,仅作理解.实际生产中,还会添加很多其他字段,比如用于记录日志的操作人,操作时间,更新时间,创建时间,用于防止并发的版本号(ver),用于逻辑删除的标识字段(D_key),还需要有某些用于产生关帐的字段等等,不一一列出.
Classification
IDF_IDGrade(分类等级)NAME
11电器
21家具
312彩电
412冰箱
522床
622电脑桌
733海尔冰箱
853红星床
974海尔冰箱(型号Y1)
1084红星实木双人床
1184红星实木单人床
attribute
IDNAME
1长
2宽
3高
4成本价
Product
IDNAMEClassification_ID
1海尔冰箱(型号Y1)9
2海尔冰箱(型号Y1)9
3红星实木双人床10
4红星实木单人床11
Operate_detail
IDProduct_idOperate_type_idOperate_date
1112011-11-11
2212011-11-11
3122011-11-30
Operate_type
IDNAME
1进货
2卖出
Relation_classification_ attribute
IDClassification_IDAttribute_IDAttribute_VALUEUnit_ID
19 3 1.5 1
211 2 2 1
Unit
IDNAME
1米
2千克
3元
每一个产品不必要和属性对应,如产品中的1和2,拿它所属的分类对应就好了,1和2基本完全相同,不相同的地方,如出厂日期等等通用的字段,可以直接再产品里面加字段标出,如果还觉得不能满足需求,再加张产品和属性的关系表吧,方法和Relation_classification_ attribute一样
Classification中 F_ID表示当前记录所属的分类,比如记录9、海尔冰箱(型号Y1),它的F_ID是记录7 海尔冰箱,Grade表示分类的等级,理解成上级分类的层数+1就好了.
Relation_classification_ attribute中
1表示海尔冰箱(型号Y1)的长度为1.5米
2表示海尔冰箱(型号Y1)的宽度为1.5米
你要得到这个商品的所有属性和值的话,
select * from Relation_classification_ attribute a inner join Classification b on a.Classification_ID = b.id where a.name = ‘海尔冰箱(型号Y1)'
另外,商品库存数量是通过操作明细得到的,某类产品进货的总数减去卖出的总数,就是库存数量.如上面的海尔冰箱(型号Y1) 进了两个,卖了一个,那么库存数量就是1
写了两个小时,不知道楼主满意否?