设计遵循的基本原则
- 范式原则 【参见:> 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. 事务尽量短 事务中避免任何等待 调整锁的隔离级别【较低级别的隔离 可以执行更高的并发 同时也能降低系统的开销】
posted @
2020-08-13 22:22
C余L小R鱼
阅读(
135)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现