| 发表于:2008-02-27 14:13:35 楼主 |
需求:如有一产品,原定义的属性有name、code,现出于可扩展原因在不改变原数据库结构的情况下,可以自行定义原产品的数据结构,用户可以定义的结构包括了属性名称、属性数据类型、属性与父属性的关系(可以是一对多的关系)。 一个模拟实现:有一种产品目前定义的结构是(名称、代码),现在客户可以追加定义规格、生产商两个属性,其中规格又可以定义颜色、重量、大小三个属性,生产商定义了名称、地址等属性并且可以是多个的,同时生产商的地址也是能为多个的 基于上面的需求,我设计了这下面的库结构 1、产品表 product 字段: id(number) name(varchar) code(varchar) exp(number) - 外键productexp表 2、产品引申属性主表 productexp 字段: id(number) name(varchar) code(varchar) 3、产品引申属性定义表 productexpattr 字段: id(number) peid(number) - 外键productexp表 peaid(number) - 父属性id(用于树结构的关键字段) attrname(varchar) - 属性名称(用户自定义的属性名称) attrtype(number) - 属性类型(1:integer 2:double 3:shortstring 4:longstring 5:date) attrrela(number) - 属性与父属性的关系(1:1-1、2:1-n) canblank(number) - 是否可以为空(1:可为空、2:不能为空) 4、产品引申属性值表 productexpattrvalue(最终用户存放子定义属性值的表) 字段: id(number) pid(number) - 外键产品表 peaid(number) - 外键productexpattr表 intvalue(number) - 整形值 ssrvalue(varchar) - 短字符型值 lsrvalue(varchar) - 长字符型值 douvalue(number) - 双精度值 datvalue(date) - 日期型值 3、4表类似于一个数据库表的定义 例如一个产品一按模拟实现的那种定义,则在数据中的记录体现为: table:product id name code exp productid1 产品一 productcode productexpid1 table:productexp id name code productexpid1 产品扩展属性一 expcode1 table:productexpattr id peid peaid attrname attrtype attrrela canblank peaid1 productexpid1 —— 规格 —— —— 1 peaid2 —— peaid1 颜色 3 1 1 peaid3 —— peaid1 重量 2 1 1 peaid4 —— peaid1 大小 2 1 1 peaid5 productexpid1 —— 生产商 —— 2 1 peaid6 —— peaid5 名称 3 1 2 peaid7 —— peaid5 地址 4 2 1 table:productexpattrvalue id pid peaid pevid intvalue ssrvalue lsrvalue douvalue datvalue pevid1 productid1 peaid1 —— —— —— —— —— —— pevid2 productid1 peaid2 pevid1 —— red —— —— —— pevid3 productid1 peaid3 pevid1 —— —— —— 3.2 —— pevid4 productid1 peaid4 pevid1 —— —— —— 9.0 —— pevid5 productid1 peaid5 —— —— —— —— —— —— pevid6 productid1 peaid6 pevid5 —— 生产商一 —— —— —— pevid7 productid1 peaid7 pevid5 —— —— 生产商一地址一 —— —— pevid8 productid1 peaid7 pevid5 —— —— 生产商一地址二 —— —— pevid9 productid1 peaid5 —— —— —— —— —— —— pevid10 productid1 peaid6 pevid9 —— 生产商二 —— —— —— pevid11 productid1 peaid7 pevid9 —— —— 生产商二地址一 —— —— 在数据库段我是这样实现的,感觉也没有什么问题,但是在后台实现的时候却不知道设计一个什么样的模型,在产品添加和查询的时候也有些疑问,不知如何在现有的结构上进行迭代的遍历,只要是有个可以1对多的关系在结构中,望那位高人能指点一下,或指点一下这样的结构是否存在什么问题,或提供一个比较好的解决方案,谢谢! |
|
|
|
|