日期:2014-05-18  浏览次数:20569 次

第一次发帖请教问题,一个数据库设计问题
如果有各种设备,例如空调,广告灯...这些设备都是存在不同的属性,空调有风速,温度;广告灯有亮度;而且这些设备的属性值都会用到,而且属性可能会新增
现在问题是,如果以后会动态新增一个排气扇设备,有风速等属性,我的表该如何设计才能更好地扩展,在新增各种设备以及属性的时候不需要改动表结构...

请大家支招吧...
数据库 设计 扩展 Java 结构

------解决方案--------------------
能否把非公共的这些属性值弄成一个聚合,存放在一个字段中?
比如json格式字符串。
我也没什么经验,期待高手解答
------解决方案--------------------
设计方案很多啊。


推荐一种适合初学者的吧:
1、首先归集产品的通用属性,只需要80%产品有这种属性即可,比如:重量、颜色、尺寸这类;
2、通用属性直接作为字段存在;
3、附加属性用违反 1NF 的方式,直接用JSON或其它方式组装,存入一个扩展域字段。


通用属性往往需要在列表中:显示(Select)、过滤(where)、排序(Order);所以需要直接成为字段。
非通用属性一般都是在显示某产品明细信息时才需要使用,所以存储时可以做组装。
------解决方案--------------------
你需要把以前设计表的横向思维习惯改成纵向考虑,你就会有答案了。。。
------解决方案--------------------
引用:
设计两张表:设备表:id,name。

我晕,还没写完就出去了。
属性表:id,name,fk。
这样增加任何设备,任何属性都可以啊
------解决方案--------------------
引用:
其实我做过这种表设计,有7张表,你可以存任何设备,而且可以扩展任何类型的属性。
你认为不靠谱就算了。


我猜测下你的主体设计,看是否类似:
1、存储表采用横表,也就是一行即可存储一个完整设备的所有属性;
2、存储表的字段,大部分是不含业务语义的,取名可以是 F01、F02、F03;
3、有分类表和字段语义对照表,分类表包含所有设备种类;
4、字段语义对照表,标明每个设备种类在存储表中的字段,其业务语义是啥,比如F01是 重量;
是否类似这种?
------解决方案--------------------
引用:
设计两张表:设备表:id,name。


垂直表(属性表)的设计模型,首要面临的问题是属性操作能力上的严重削弱,比如需要中要针对比如“重量”进行过滤 和 排序,这个怎么考虑?
------解决方案--------------------
1.不更改表结构,一定要有预留字段。
2.你是如何区分各种设备的?
3.都在一个表内?
4.属性值存放在那个字段内都无所谓,查询出来能对于就行。
------解决方案--------------------
我觉得好多人都想简单了,自己做了就知道了,
你要想想如何不改变表任何表的设计就可以任意添加各种类型的属性,包括int,string,date型等等,
然后这些属性的值又如何存储,
最后又如何查询某一种设备的某一个属性值,
这绝不是2,3张表可以搞定的。。。
------解决方案--------------------