数据库设计的困扰

数据库的设计

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

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

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

请各位兄弟指点,谢谢。

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

我这里有一个想法:
一个汽车 有很多零件。
有相同的零件,也有不同的。
那么他们是组合到一起,是一个汽车。

而你的一个定单也有很多产品
可能有相同的,也会有不同的。
那么他们组合一起就是一个定单。

汽车的零件是如何保存的?
分类保存:一类零件就是一个定义

你的产品该如何保存?
那么汽车零件的保存就是一个比较相当的模型。

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

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

忘了说:Order是一个定单。

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

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


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版本尤其增强这方面功能。当然使用起来比较玄妙,加上调试不方便,这是一个大问题。