虽然园子里面有很多是petShop方面的学习资料,尤其是在我的这个学习资料里面张逸老师所写的《解剖PetShop》系列,是相当精彩的,给大家展示了一个相对比较完整的.NET框架、技术以及相关的设计模式。我写本文也不是说明我把这整个框架理解的有多深刻,说实在话,我也是刚刚接触.NET,是一个初学者,我只是想把我策够理解到的东西记下来,这里面你如果看到有别人写的东西的影子,那说明我也理解到了那个程度,如果有没涉及到的或讲的太粗的,那说明我还没有理解的那么深刻。这是我技术文章的第一篇,请大家多多指教。 
     在下笔之前,我想对自己的学习过程作一个总结,以前,在没有接触到设计模式的时候,我总是认为面向对象就是把数据和方法封装起来,我封装起来了,就说明我已经面向对象了。学习了。NET之后,我又觉得,分层,就是把层序的层次分开了,数据访问,业务流程,分别放在一起,每一层都调用下一层的方法,这样的结构就是分层的了,说实在话,这个问题迷惑了很久,为什么我的代码总是不那么优雅,为什么,每次我都要更改很多东西。我记得一位老师曾经和我说,你把他们封装起来,和没封装都是一样的,没什么区别,只不过代码的位置发生了变化,我开始一直不了解我的为什么就是位置发生了变化,什么样的结构才是好的结构,我怎么样设计我的代码才算是好的。今天,我看到了petshop,我的感觉告诉我,他的设计比我的要好,不管有什么优缺点,我的理念是先吸收优点。
    废话少说,下面,我就以我的理解先从数据库开始学习整个petshop的结构。
    从整体上说,petshop分了四个数据库,他是从功能角度来说,把数据库分开,采用这种方式到底好不好,我觉得从功能上来说,在数据库级上达到了功能的单一,而且,分离了数据量大的定单出来。
    1、MSPetShop4。
    这一个数据库主要是对产品进行管理。这个数据库里面一个有6张表。如下图所示:

AspNet_SqlCacheTablesForChangeNotification是缓存用的。关于这一点,以后再讨论。
    Category表产品分类表。这个分类主要对产品在大类别上进行分类,比如在petshop中,有鱼类,鸟类等。里面的字段的意思我想大家看得很明白,一个是分类ID,一个是类别名称,一个是他的描述,主键是分类ID。
    product表是产品表,这个产品并不是最终的产品,而是一个抽象意义上的产品,比如说鱼,有很多种类的鱼,比如鲨鱼等等,对于一个宠物商店,鲨鱼这个种类有好几个不同和名字的,那么摆在货架上的就是好几个不同的名字的。具体的每个名字的就要用item表来表示了。那么在product这张表中,他的字段是:产品ID,产品分类,产品名字,备注描述,此类产品对应的图片地址。在这张表中,以产品ID为主键,同时建立了四个索引:1.产品名称;2.分类ID;3.产品名称+分类ID;4.产品ID+产品名称+分类ID。有关索引的相关知识,请查阅数据库方面的资料。
    item表是具体的宠物。每一种产品(product)都对应有一种或几种具体的item。在这张表中productID为其对应的产品,并在这个字段上建立外键约束。这个表的字段从上到下的意思分别为:宠物项ID,对应产品ID,宠物价格,unitCost是什么意思我还没搞清楚,供应商ID,状态(我只看到里面的数据为P,但不知道怎么样修改),宠物名字,宠物所对应的图片地址。在这张表里面,itemID为主键,productid、supplier为外键,也就是他们的值是product表和supplier表中的值,建立了一个大的索引:itemid+productID+ListPrice+Name。
     supplier表是供应商表。这张表的作用,我还没看到有多大,只是在这里标识每一种宠物的供应者是谁,在标准的petshop安装后,里面只有两条数据,那么现在我来介绍一下这张表里面的字段的意思。上图中标识主键的为供应商ID,以下分别为供应商名字,status里面的值为AC,我搞不太清楚代表什么意思,Addr1,Addr2想必大家一看就明白是什么意思了,city从字面意思也可以搞清楚,state是代表美国的哪一个州,zip为邮政编码,后面的是电话号码。
    Inventory是宠物的库存表。ItemID为宠物的ID,下面为库存的数目。我个人认为这里的ItemID应该做一个外键约束,但是petshop并没有做,我不知道这是什么原因。
    根据上面的数据库表,petshop抽象出几个数据实体类。让我们先来分析一下,上面的数据库中,一共有六张表,可以表示这么几个概念,分别是缓存,类别,产品(我不知道这么叫好不好),宠物信息,供应商,库存。可以做为数据实体的肯定要去除缓存,库存,因为缓存只是一个技术,库存则是宠物信息里面可以包含的一个属性,我认为,余下的都可以抽象或是说映射。但是petshop中只对类别,产品,宠物信息进行了抽象实体,没有供应商的具体类,究其原因,可能是因为在petshop中,供应商并不是一个主要的矛盾,也就是说宠物商店和供应商没有太大关系,所以没有包含。那么就让我们看一看在程序中是怎么样来抽象的。如下图所示:

大家可以看到,上图中的类,基本上是对数据库里面的表的一个抽象,除了Iteminfo又加了几个字段以外。这个图,我是用vs生成的类图,他们对应于petshop里面的model项目,在这个项目里面,不止抽象了这个数据库里面的表,还有像定单,定单项等,等分析到其它的数据库,我们再详细介绍。在model项目中,主要是对数据实体的抽象。他为业务层,以及数据访问层提供一个数据库抽象。我们可以简单的把他认为是一种实体关系映射。主要是为了装数据库的记录转换成面向对象里面的对象,并且提供了强类型数据访问。
    今天就写到这里吧,下面的几篇文章里面,我还会对另外的数据库进行分析,可能这并不能看到整个petshop的结构,但我想从最底层一层一层的向上拨,直到我们可以站在一个高的角度来审视这样的一个大的设计思想。

转载于:https://www.cnblogs.com/gang8246-q/archive/2008/04/12/1150296.html

PetShop 4数据库分析一相关推荐

  1. php mysql ppt,7PHP访问数据库分析.ppt

    7PHP访问数据库分析 习题 4. 下列哪个函数可以将结果集的指针移动到指定的位置 A. mysql_fetch_rowB. mysql_fetch_assoc C. mysql_queryD. my ...

  2. 电子商务之数据库分析(二)

    电子商务之数据库分析(二) 在分析数据库之前,我想倡导大家说说自己开发数据库时应用的工具,erwin?Powerdesiger?or Wrod?或者有更好的,我自己用的是Powerdesiger,但是 ...

  3. 数据库课程设计-图书馆管理系统(1.数据库分析部分)

    图书馆管理系统第一部分,数据库分析. 主要是需求分析.设计概要模块.数据库概念结构设计(E-R图).数据库逻辑结构设计(表.存储过程.触发器) 目录 1. 需求分析 1.1 数据流图 1.2 数据字典 ...

  4. 模仿天猫商城数据库分析

    仿天猫商城数据库分析 数据结构图 页面分析 前端 注册页面 - 页面图片 - 功能描述 登陆页面 - 功能描述 账号登陆 - 页面执行的SQL语句 校验账户密码是否匹配,匹配则为1,否则为0 SELE ...

  5. seer文献_文献解读:基于SEER数据库分析

    大家好,这次给大家分享的文献是Signet-Ring Cell Carcinoma as an Independent Prognostic Factor for Patients With Urin ...

  6. 建筑公司员工财务数据库分析

    建筑公司员工财务数据库分析 问题: 假设某建筑公司要设计一个数据库.公司的业务规则概括说明如下: 公司承担多个工程项目,每一项工程有:工程号.工程名称.施工人员等 公司有多名职工,每一名职工有:职工号 ...

  7. 主流时序数据库分析及选型

    目录 一.当前主流的时序数据库 二.主流时序数据库分析 1.Influxdb 2.Timescale 3.Apache Druid 4.Kdb+ 5.Graphite 6.RRDtool 7.Open ...

  8. 云计算下的数据库 分析 以及部分互联网公司眼下採用的新型数据库总结

    云计算下的新型数据库技术 摘要:在这个信息化的时代,我们的一举一动都离不开与数据打交道,特别是云计算和大数据时代的到来,使得传统数据库的性能已无法满足海量数据的实时交易查询需求.在性能和成本的双重压力 ...

  9. [转载] 数据库分析手记 —— InnoDB锁机制分析

    作者:倪煜 InnoDB锁机制常常困扰大家,不同的条件下往往表现出不同的锁竞争,在实际工作中经常要分析各种锁超时.死锁的问题.本文通过不同条件下的实验,利用InnoDB系统给出的各种信息,分析了锁的工 ...

最新文章

  1. Windows下安装Docker图解
  2. Python3 数字转换为字符串str()函数
  3. 获取class文件对象的三种方式
  4. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码
  5. EF中创建、使用Oracle数据库的Sequence(序列)功能
  6. 数据可视化(data visualization)—— seaborn
  7. input只能输入数字和小数点_Python 3 学习笔记:数字和布尔
  8. office 2010 安装
  9. Redis集群原理详解
  10. 香港内推 | 上海千象资产招聘海外CTA量化研究实习生
  11. ems苹果专线投递速度_苹果官网运抵速度让人欲罢不能
  12. 【Python笔记】第5章 if语句
  13. 江阴学计算机,江阴学习计算机平面设计
  14. [路由][教程]OpenWrt通过LAN连接上级路由做交换机+无线功能教程
  15. Windows 7 专业版(SP1)32位操作系统安装Opencv 2.4.10
  16. python scipy.optimize.minimize多变量多参数优化
  17. 【机器学习】生成式模型和判别式模型
  18. 1.3 创建弧形轴网
  19. Chaos Vantage这款渲染器有多强,一起来了解一下
  20. 装置案例| MODBUS转PROFINET网关连接智能低压电动机

热门文章

  1. 3.4.2 停止等待协议
  2. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  3. git创建本地版本仓库及注意事项
  4. CIC滤波器溢出处理
  5. C++实现用堆求最小的k个数
  6. #ifndef 在头文件中的作用
  7. 猜想 这样做可能让神经网络更经济
  8. 使用pytorch最关键的几个点
  9. Android O 8.0 以上 bitmap内存分配
  10. 这38个小技巧告诉你如何快速学习MySQL数据库