关于数据库设计的一些思考

 

1(被动):1(主动)关系

1:n关系

n(被动):n(主动)关系

示例

会员卡号:客户

客户级别:客户

功能:角色

分析

存在主被动关系,比如一般是为客户设置会员卡号,而不是把会员卡号分配给客户,虽然都可以,但是第一种更符合用户习惯

 

存在主被动关系,比如一般是为角色设置功能,而不是把功能分配给角色,虽然都可以,但是第一种更符合用户习惯

表设计

在被动方增加是否使用字段,在主动方增加被动方字段,减少关联

在n方中增加1方的id、索引

增加关联表,在关联表中增加两方的id、索引

 

1方(被动)

1方(主动)

1方

n方

n方(被动)

n方(主动)

自身

自身 + 被动方字段

需要先判断被动方是否存在和是否可用,然后修改被动方使用状态

自身

自身 + 1方id

需要先判断1方是否存在和是否可用

自身

自身

需要先判断是否使用

修改被动方使用状态

需要先在n方中判断是否使用

自身

需要先在关联表中判断是否使用

需要在关联表中删除数据

自身

自身,被动方字段不能修改

自身

自身,1方id是否能修改取决于是否影响其他关联

自身

自身

自身

自身 + 被动方字段

自身

自身 + 1方

自身

自身

再分析

 

 

 

 

在主动方增加查询和修改关联表接口,如:

/roles/{id}/functions GET 表示查询id为xx的角色对应的功能

/roles/{id}/functions UPDATE 表示修改id为xx的角色对应的功能

查询很简单,不再赘述,至于修改怎么做?一个简单的方式是先删除后新增,适用场景:

  1. 为角色设置功能
  2. 为商品设置标签

特例

 

 

 

 

客户和优惠券也是n:n的关系,但是无法区分主被动关系,可以将某种优惠券发放给客户,也可以为某个客户发放优惠券,两种场景都合理,并且关联表中还存在另外的字段,如数量、过期时间等。这种情况在两方中都增加查询和修改关联表接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值