• 数据库优化注意事项


    基于Hibernate
    customer order表

    1.一个order中有一个customer单项多对一(n-1)先保存一再保存多,因为这样再保存多的时候外键值已经确定,这时候时多的一方维护外键,再保存order时会带着保存外键的customerID,可以不用在update n中的外键,

    2.一个customer中有多个order这个时候由一的一方维护外键,保存order时不会跟新外键customerID,所以无论哪个先保存都会跟新order中的外键

    3.一个order中有一个customer+一个customer中有多个order双向一对多的时候,这个时候双方都会维持外键,注意这个时候两个表的外键需要一致,order中的外键是customerID,cuntomer表中的外键也是cuntomerID,也就是自己的主键

    • 若先保存n的一端,默认情况下会多m条update语句,m为n的对象数,因为不知道外键是啥值
    • 若先保存1的一端,默认情况下回多x条update语句,这个x是1的对象数,因为customer还要再维护一遍自己的外键
    • 所以建议使用n的一方来维护关系,而1的那方不维护关系,这样就想上面第二条一样先保存1端就不会customer自己再跟新维护一遍自己的外键了。

    4.双向一对一的时候,也放弃一方不维护外键关系,这个时候需要外键unique=true,也是先保存不维护关系的那一方,理由同上。但是再取值的时候有问题

    • 如果取维护关系的一方,会默认通过左外连接获取它所关联的对象,但是可以通过修改加载策略来实现懒加载,因为可以通过外键值是否为null来判断是否有关联的对象
    • 如果取不维护关系的一方,无论是什么加载策略都会发送sql语句来初始化其所关联的对象,还不如使用左外连接,总比发送两条sql好,所以不建议更改加载策略

    5.多对多

    写的有点难懂,sorry

  • 相关阅读:
    go多种uuid生成方式
    go访问mysql基本语法
    go实现分布式唯一ID-snowflake(雪花算法)
    指定时间生成cron表达式
    zookeeper注册与发现
    短地址服务(二)
    java-redis
    短地址服务(一)
    cron表达式详解
    以后本blog所有内容全部转移,并在自建blog更新
  • 原文地址:https://www.cnblogs.com/wei1/p/9582047.html
Copyright © 2020-2023  润新知