在数据库设计中,我们进行垂直分表或者是某些业务场景需要分多个表但是又得使这些表有联系的, 就必须设立一个关联字段让两个表关联。
这样就产生了表关系,有一对多 一对一 多对一 多对多等。
一对多,一个用户对应多个账户类型,一个用户对应多个订单,多个购物车 等
一对一,这种在一个表字段太多,垂直分表常见,或者 需要分表满足特殊功能
多对一,多个商品对应一个购买或者奖励规则,多个用户对应同一种类型用户,消息推送分组等
多对多 ,权限配置,权限表,职位表,用户表
1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。
2,用外键要适当,不能过分追求
3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库
注 (主外键主要是为了保证程序无法保证的数据完整和一致性 。但是 对于系统性能有影响 , 操作表慢,删除表数据时有外键删除不了 )
4 用mybatis持久化系统写sql最好用联查代替子查询
5 用到hibernate持久化系统主外键不能乱删