数据库设计的困扰

04-09-08 iter
数据库的设计

一个网上购物系统,有多类产品,每类下面有多个产品,同一类的产品属性相近,不同类属性(意思是有的要10个字段,有的可能需要20个字段)差别较大。有客户订制系统,比如订制一台电脑,可能是需要一个P4 2.8G 的cpu, 1024兆的内存(可能是两个512的),一个显示器,等等,主要意思是客户的一个order里面需要包含不同的产品(比如单买一个P4 2.8G 的cpu,单买一个手机等),也要包含订制的产品(比如上面定制的那台机器,一个定制茶产品包含一对多的子部件等),主要是这个需求,那么问题来了:

产品如何存储,按类别放在不同的表里?还是统统放在一个表里?

客户的订单如何设计表格,订单的产品如何实现这个一对多再对多的三级关系(此三级非彼三级耶)?

请各位兄弟指点,谢谢。

vegetable318
2004-09-08 17:06
个人认为一类的产品应该归为一类,就是表分开建,但是其实是没有机器表这边一说的,,按我的思想我会把这些类用builder设计模式的方法产生一个成品的机器,当然也可以有单个的零件,,当然也可以有机器表,,保存售出的成品,,不知道我的思想对不对?

SportsBaby1980
2004-09-08 17:16
我这里有一个想法:

一个汽车 有很多零件。

有相同的零件,也有不同的。

那么他们是组合到一起,是一个汽车。

而你的一个定单也有很多产品

可能有相同的,也会有不同的。

那么他们组合一起就是一个定单。

汽车的零件是如何保存的?

分类保存:一类零件就是一个定义

你的产品该如何保存?

那么汽车零件的保存就是一个比较相当的模型。

   
public class Car{
  private List 零件s = null;
  //setter
  //getter 
}

public class Order{
  private List items = null;
  //setter
  //getter 
}
<p>

SportsBaby1980
2004-09-08 17:17
忘了说:Order是一个定单。

banq
2004-09-09 12:35
>产品如何存储,按类别放在不同的表里?还是统统放在一个表里?

设计一个核心产品表,它有各种属性,属性可以灵活自动加入的。如下:

CREATE TABLE item_attrs (

itemAttrsId char(10) not null,

itemId char(10) default '', 与item是n:1关系

name VARCHAR(100) default '' ,

attr VARCHAR(250) default '',

fieldSize CHAR(3) default '',

KEY itemId (itemId),

PRIMARY KEY (itemAttrsId)

)TYPE=InnoDB;

>客户的订单如何设计表格,订单的产品如何实现这个一对多再对多的三级关系(此三级非彼三级耶)?

订单和产品roduct是一对多关系,而产品和属性规格是一对多关系,模型设计简单,复杂的是界面显示,Struts对于前台1对多 或嵌套关系显示功能强大,它的1.2版本尤其增强这方面功能。当然使用起来比较玄妙,加上调试不方便,这是一个大问题。

猜你喜欢