可变属性的需求:我们需要在数据库里面存储很多电器,比如电视,冰箱等等。通常,在程序中,我们的类图为:
EVA设计
对于这种继承下来的可变属性时,有一种办法是创建另外一张表,将属性当成行来存储。
其中存储的数据类似下面这样:
这样的设计称为:实体-属-值,简称:EVA,或者又叫开放架构、无模式。
这种设计有如下3种好处:
1、这两张表的列都很少。
2、新增的属性不会对现有的表结构造成影响,不需要新增列。
3、避免由于空值而造成的表内容混乱。
但是这样也有如下缺点:
1、查询属性
本来,我们想要按出厂日期查询,只需要:
SELECT ElectricId,DateOfManufacture FROM Electric
但是这种方式不行,它需要这样:
SELECT ElectricId,AttrValue AS 'DateOfManufacture