大数据量下数据表设计问题,请高手帮忙!着急啊!!!顶者有分!

时间:2021-06-06 12:17:44
做一个评价系统模块:
    如对汽车进行评价打分,大类车型:奔驰、宝马、红旗、大众。。。。。。==主体
           我们假设每款车评价三个方面:价格、质量、外形。。。。。==“一级评价属性”
                  而对于“价格”,我们有三个选择“高(5分)、中(3分)、低(0分)”
                  而对于“质量”,有“好(15分)、较好(10分)、一般(5分)、差(0分)”
                  而对于“外形”,有“漂亮(10分)、一般(5分)、差(0分)”
                      。。。。。。。。。。。。。===“二级评价属性”。
        另一种表述:
              对A、B、C等产品,它们分别有个数不同的属性a、b、c、d等,而对
              每个a、b、c、d有1、2、3、4个数不同的几种级别的评价,每个级别对应一种评分。
   要求: 
       若要使页面根据数据库内容动态生成(根据属性情况生成页面控件、内容等)评价完自动算出总分。估计要评价的产品数量极大(估计“主体”5000个以上,“一级评价属性”10到20个不等,“二级评价属性”2到5个不等)。速度与冗余都应考虑,数据库表应该如何设计?
       另外,我于某一时间增加“一级评价属性”或某个“一级评价属性”的“二级评价属性”,随着其对应分值的变化,我如何能保证历史纪录能够回现历史?
       您设计的大概调用流程是什么?
                 谢谢!

5 个解决方案

#1


小弟简要描述一下自己的做法.
create table car(carid number(8),carname varchar2(256));
insert into car(carid,carname) values(1,'奔驰');

create table property(p_id number(8),p_name varchar2(512));
insert into property(p_id,p_name)values(1,'价格');

create table desc_score(ds_id number(8),desc_ varchar2(128),score number(3));
insert into desc_score(ds_id,desc_,score)values(1,'高',5);

create table property_desc(pd_id number(16),p_id number(8),ds_id number(8));--(id,属性编号,相关评价描述)
insert into property_desc(1,1,1);

create table value_class(class_id number(3),class_name varchar2(128));
insert into value_class(class_id,class_name)values(1,'一级评价属性');

create table propertype_class(pc_id number(12),p_id number(8),class_id number(3));
insert into perperty_class(p_id,class_id)values(1,1,1);--(id,属性编号,所在等级)
//以上是系统管理者定义的基本数据.


create table car_property(carid number(8),pc_id number(12),pd_id number(16));
//用户评价数据表

请赐教!

#2


谢谢 weiwenking(伟文) 兄弟指点!
     我确认一下,你的意思是:建立、维护一些属性的基础数据表,以属性从属关系表表示其调用关系。这是一种常用也是很好的方法。
     当然这种想法我之前想过,但感觉得出有两个缺点:
           1.表property_desc,特别是表car_property数据两会不可想象的大,因为我们的产品种类很多。当然这些交给Oracle应该问题不大。================可以较少考虑
           2.另外,一旦出现这样的情况:我评价“奔驰”仅用“性价比”属性,而“性价比”评价“高、中、低”那么我可能设置“价格”的“高”得(100分)、“中”(60)........
             一段时间后,我们要评价“宝马”,此时用了3个属性“价格”、“外观”、“性价比”。这个时候“性价比”在评价体系中所占比例改变了(30分)。每评价一次都能做得很顺,但是一旦改完后,我调出“奔驰”的评价历史页面,那么它由100分变成了30分。原本提倡买,现在查到历史纪录,数据告诉我们当时我们应该极力反对!在这里我自己想改进一下,如果我在属性添加过程中同时维护进去“评分值”历史纪录也许能解决。
          要考虑的问题太多了,有点心虚。欢迎各位讨论,更期待做过这样的数据库开发的朋友不吝赐教!
           

#3


还没解决啊!谁有好办法,或谈谈自己的经验

#4


下周结帖!欢迎指导!

#5


up

#1


小弟简要描述一下自己的做法.
create table car(carid number(8),carname varchar2(256));
insert into car(carid,carname) values(1,'奔驰');

create table property(p_id number(8),p_name varchar2(512));
insert into property(p_id,p_name)values(1,'价格');

create table desc_score(ds_id number(8),desc_ varchar2(128),score number(3));
insert into desc_score(ds_id,desc_,score)values(1,'高',5);

create table property_desc(pd_id number(16),p_id number(8),ds_id number(8));--(id,属性编号,相关评价描述)
insert into property_desc(1,1,1);

create table value_class(class_id number(3),class_name varchar2(128));
insert into value_class(class_id,class_name)values(1,'一级评价属性');

create table propertype_class(pc_id number(12),p_id number(8),class_id number(3));
insert into perperty_class(p_id,class_id)values(1,1,1);--(id,属性编号,所在等级)
//以上是系统管理者定义的基本数据.


create table car_property(carid number(8),pc_id number(12),pd_id number(16));
//用户评价数据表

请赐教!

#2


谢谢 weiwenking(伟文) 兄弟指点!
     我确认一下,你的意思是:建立、维护一些属性的基础数据表,以属性从属关系表表示其调用关系。这是一种常用也是很好的方法。
     当然这种想法我之前想过,但感觉得出有两个缺点:
           1.表property_desc,特别是表car_property数据两会不可想象的大,因为我们的产品种类很多。当然这些交给Oracle应该问题不大。================可以较少考虑
           2.另外,一旦出现这样的情况:我评价“奔驰”仅用“性价比”属性,而“性价比”评价“高、中、低”那么我可能设置“价格”的“高”得(100分)、“中”(60)........
             一段时间后,我们要评价“宝马”,此时用了3个属性“价格”、“外观”、“性价比”。这个时候“性价比”在评价体系中所占比例改变了(30分)。每评价一次都能做得很顺,但是一旦改完后,我调出“奔驰”的评价历史页面,那么它由100分变成了30分。原本提倡买,现在查到历史纪录,数据告诉我们当时我们应该极力反对!在这里我自己想改进一下,如果我在属性添加过程中同时维护进去“评分值”历史纪录也许能解决。
          要考虑的问题太多了,有点心虚。欢迎各位讨论,更期待做过这样的数据库开发的朋友不吝赐教!
           

#3


还没解决啊!谁有好办法,或谈谈自己的经验

#4


下周结帖!欢迎指导!

#5


up