-
数据库设计优化(一)--基础
设计遵循的基本原则
- 范式原则 【参见:> https://www.cnblogs.com/Alicia-meng/p/13493506.html】
- 命名风格--最好是模块功能的缩写 英文 首字母大写
- 自增ID--数据库自增 int/bigint型 是sqlserver的默认聚集索引 一般作为主键 可以有业务意义【但是 多库环境、不同环境的数据库容易出现id冲突】
- GUID--具有唯一性 可以避免错误join 【但是空间占用大--32位 非自增 没有聚集索引】
- 外键-- 可保证数据完整性 类的关系也比较清楚
- 外键可进行数据校验 级联删除 Eg:表User 具有外键CompanyId 就可确保
1. user创建时 对应指定Company也存在【不存在时--先创建Company 再创建User 在同一事务中】;
2. 如果Company删除 则对应关联的所有User也会被删除
- 一般在有严格数据关系时 使用外键
- 缺点--导入麻烦 增删改都需要额外操作 所以一般都通过程序 建立虚拟外键来完成
建议
尽量少用外键 一般大型互联网项目瓶颈即数据库 所以尽量减少数据库的额外操作
- 数据库事务--多条Sql做一个整体提交 要么全部成功 要么全部失败 作为一个逻辑单元 具有以下特性
- 原子性(atomicity):事务作为最小工作单元 要么全成功 要么全失败 即事务的原子性
- 一致性(consistency):从一个一致性状态 转换到另一个一致性状态 即事务执行完 数据都是正确的(事务一旦出错 整个事务都不会提交)
- 隔离性(isolation): 一个事务修改在最终提交之前,对其他事务是不可看见的; 两个事务A B同时操作一张表时 会通过锁表使A B依次执行
- 持久性(durability):一旦事务提交 所做的修改就会永久保存到数据库中 即数据提交后 就固化了
使用事务会存在一些问题
- 比如高并发的系统 不可避免会出现死锁【死锁:多个事务在同一资源上 相互占用 请求锁住对方 1. 当多个事务尝试以不同顺序锁定资源时 可能会产生死锁; 2. 当多个事务同时锁定同一个资源时 也会产生死锁】 想尽量减少死锁 可执行一下操作
1. 按照固定顺序操作数据
2. 事务尽量短 事务中避免任何等待 调整锁的隔离级别【较低级别的隔离 可以执行更高的并发 同时也能降低系统的开销】
-
相关阅读:
创业公司新品如何寻求科技媒体的报道?
DevStore分享:详析消费者十大心理学
DevStore教你如何玩转饥饿营销?
iClap分享:如何优雅的在 APP 中实现测试?
java内部类
Tostring 的用法
Java 集合详解
Java集合浅析
异常--解析
is-a 、have-a、和 like-a的区别
-
原文地址:https://www.cnblogs.com/Alicia-meng/p/13493751.html
Copyright © 2020-2023
润新知