属性组-复合属性

梗概

  • 本质上就是一对多联系
    • 只不过多对一的映射比较少,比较强调一对多的单向映射

实例

  • 一个人对应不定数量的收货地址
    • 一个人一般对应多个收货地址
    • 有很多地址对应不到人

处理多值

多值可以用分隔符连接成单值

实体表示

也可以用一个单独的表来表示

  • 即人(ID,收货地址)
  • 所以很多时候多值都直接用实体表示就行了

适用范围

多值属性组

当多值属性是一个属性组的话, 多值就更适合使用使用实体来表示
这样的话, 属性组就拆散作为这个新实体的属性

实例
  • 订单中可以有多个商品, 及其对应的数量, 等信息
    • 对应一个属性组,在这里称之为商品明细
    • 因为可以有多个商品,所以是多值属性
  • 把商品明细作为一个实体
    • 商品自然作为一个实体被商品明细引用主属性
    • 数量等用来描述商品的信息就作为商品明细的属性
错误的设计

认为商品以及相关信息与订单是多对一的关系, 就直接让商品与订单产生联系
这样的话, 不同的商品就得反映在行里, 而每行还得保存订单的其他属性, 他们的值都是一样的, 就会造成内存的浪费

做冗余

也可以为做冗余, 为可能的多值预留位置

  • 如人(id,收货地址1,收货地址2,收货地址3)