数据库设计中,经常遇到一个决策:究竟是使用视图,还是中间表?
    考虑库存管理的一个场景:最普通的单据是入库和出库单,库管员需要看到当前的库存。对库存的处理,我们有两个方案:一是使用视图,所有的入库减去所有的出库,就是当前库存;另外就是使用中间表,建立一个库存表,记录当前的库存。
    1、使用视图的方案
    入库时,系统记录入库单据;
    出库时,系统查询库存视图,判断是否有充足的库存可以出库,然后记录出库单据;
    可见,系统只需要记录入库和出库单据,库存的计算是由DBMS在查询视图时进行的;

2、使用库存表的方案

    入库时,系统记录入库单据,同时增加相应的库存;
    出库时,系统查询库存表,判断是否有充足的库存可以出库,然后记录出库单据,减少相应的库存;
    可见,系统除了记录入库和出库单据外,还需要更新库存表的当前库存数量;
    3、方案的比较
    对系统本身的设计和编码来说,视图方案易于实现,测试方便;库存表方案则稍微复杂。从这点上看,视图方案可以在原型阶段大展身手。
    用户体验到的性能方面,视图方案的性能压力在查询库存上,库存表方案的性能压力在业务处理上:
    视图方案:由于每次查询库存,DBMS都需要扫描入库和出库单据,查询时间长;还可能会对入库和出库单据加锁,导致入库和出库处理延长,甚至失败(尤其是查询库存视图在一个事务中时);库存视图如果和其它表或者视图连接,构成复杂的SQL时,由于索引不能有效(或无法)使用,查询速度会更慢;
    库存表方案:库存表上可以建索引,查询速度比视图会快很多;在入库和出库时,更新库存表的SQL会对出入库处理的速度有一些影响,但是由于更新只影响出入库的SKU,与查询库存表并发时,加锁时间非常短,影响会比较小。
    4、结论
    视图方案适用情形:原型,数据量比较小;
    库存表方案适用情形:数据量比较大,针对库存的分析较多;

数据库设计-视图与中间表的比较相关推荐

  1. 5.7.2 使用设计视图创建交叉表查询

    交叉表查询由三部分组成,行标题字段.列标题字段和值字段.按照Access的规定,列标题字段和值字段只能各有一个,行标题字段最多可以有3个. (1)打开"罗斯文"数据库,在" ...

  2. 大数据量下数据库设计及分库分表拆分原则

    在设计数据库的建设前,首先准备工作是了解业务,然后根据业务数据进行数据库设计,设计的同时需要考虑业务数据量.可改造性.数据弱一致性.读写分离.复杂SQL多样化等: 首先,可数据根据读弱一致性可以考虑添 ...

  3. MySQL数据库设计概念(多表查询事务操作)

    每天进步一点点 数据库设计概念 数据库设计简介 表关系(多对多) 表关系(一对多) 表关系之一对一 多表查询 笛卡尔积现象 内连接查询 外连接查询 嵌套查询(子查询) 事务操作 事务的概念 手动提交事 ...

  4. 【数据库】视图和基本表区别

     视图和基本表的主要区别如下: 视图是已经编译好的SQL语句,而基本表不是. 视图没有实际的物理记录,而基本表有具体数据(记录). 基本表是具体的数据结构及内容,视图是可见的窗口. 基本表古用物理(存 ...

  5. 数据库设计层次3:构建表

    源自:Stairway to Database Design Level 3: Building Tables 作者Joe Celko, 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 译文: 对于设计和创建数 ...

  6. php空间 数据库设计,php进阶之数据库设计/ 选择合适的表引擎

    什么是表引擎 我们看到的表结构,它的本质是数据在硬盘中的存储.根据不同的特性,数据的存储方式不同.比如:对于每一条数据,在硬盘中它是怎么存储的,怎么压缩的,怎么建立索引和优化的,它的读取和写入是怎么实 ...

  7. python读取erp的数据库_【ERP系统设计】【数据库设计】对数据表重命名和读取建表的SQL语句...

    今天做了一个小Model,就是把另一数据库中的表复制到目标数据库中,但是复制到目标数据库中的表中的记录为空 思路: 1 读取建表的SQL语句 2 通过jdbc执行 3 对新建表进行重新命名 精要: 1 ...

  8. 数据库中视图和基本表的区别

    1.视图和表的区别? 视图是虚拟的表,视图展示的数据来自于 基本表. 视图中不存储具体的数据,而存储的是sql逻辑,基本表的数据发生改变,视图的展示结果也会随着发生改变,它占用较小的物理空间:而表中保 ...

  9. 数据库设计之area区域表

    这个用起来还可以的比较全,是2015年更新的 在这个版本的数据上我做了个小的改动,如果你使用不方便可以参考改版后的数据:http://blog.csdn.net/u012012240/article/ ...

  10. 数据库设计之area区域表改版后,数据库设计之区域表

    原先版本:http://blog.csdn.net/u012012240/article/details/51221080 原先版本直辖市的省级别和市级别为1条记录,1条记录即代表省又代表市,操作起来 ...

最新文章

  1. windows下mysql启动脚本
  2. 【从零学习openCV】opecv操作像素
  3. jQuery中 trigger() bind() 使用心得
  4. 阿里云服务器Tomcat无法从外部访问
  5. 计算机视觉:基于YOLO-V3林业病虫害目标检测
  6. uni-app 实现小程序rsa加密(非对称加密原理)
  7. hook 与aspectj_将AspectJ与NetBeans平台开发集成
  8. 获取按钮点击次数_无限次数使用,不会吧?不会吧?
  9. 上班族如何当老板 五大模式任你选
  10. 如何开发rest接口服务_如何简化网络请求接口开发
  11. 自动轮播与按钮的联动
  12. 多次导入excel实现及excel导入逻辑插件清空数据
  13. Chrome浏览器直接下载pdf文件的设置步骤
  14. 5行python代码帮你搞定百度文库复制问题
  15. Activiti6新特性
  16. 【Java小项目实训】编写一个窗体程序显示的日历 万年历
  17. Windows_5种方法解除Windows密码
  18. 电子商务网站建设系统战略规划报告
  19. 台湾J2ME专家王森北京讲座---掌上开发专业研讨
  20. 人民银行新闻发布会:详细解读2020年上半年金融统计数据

热门文章

  1. sqlite3:深入理解sqlite3_stmt 机制
  2. 在ubuntu系统下下载和卸载skype
  3. 看完就能学会如何使用热敏电阻!
  4. MySQL表空间碎片产生原因和优化
  5. java 在pdf中插入图片_如何在PDF文档内容中插入/添加图片文件
  6. python+Aritest自动化——03—test_cace.py—写自动化测试用例
  7. 日本公司推出第一款MR购物应用,今秋上市
  8. 华为OS操作系统,最早今秋面世!
  9. NAS媒体库资源归集整理工具nas-tools
  10. 指数函数为例的超越函数的逼近拟合误差分析