首先我们先了解一下业务,什么是“货运管理”?
“货运管理”是国际物流的概念,往常我们货物送到国内没有那么多事情,但是货物发往国外就多了很多手续,依靠小物流公司我们是很不可能的,需要行业的大背景的支撑。下面我们来看看它是怎么做的

a)业务:购销合同

当我们的客户通过展会、其它渠道跟杰信公司联系上以后,他们看上杰信的货物样品,他们会跟杰信签订一个购买合同(样式要求,货物数量),客户就要支付一笔定金。然后杰信就拿这个定金去找下游的生产厂家,把一部分定金给生产厂家下定金,要生产客户需要的产品,这个时候杰信就要和生产厂家签订一个“购销合同”,所以我们的“购销合同”就是这么来的。

购销合同的内容
购销合同包括合同主信息,多个货物信息,多个附件信息。(整个购销合同是体现客户的订单,具体货物由哪个生产厂家制作,把整个购销合同分拆,分成每一个厂家一份)。一个购销合同包括多个货物信息,一个货物信息包括多个附件信息。两层一对多。

在购销合同打印时,默认一个页面只能放两款货物,货物必须是同一个生产厂家的货物,如果不是一个厂家的,另起一页。

购销合同样板:

b)分析设计:

1)表
名词:合同表、货物表、附件表

2)每个表的每个字段
客户会给我们提供原始的表格,有的还有数据
静态资源内容不在数据中出现。
一定不能拿客户所说的唯一性的内容作为关键字,以UUID或者自增作为主键,代理主键。

3)表之间的关系
合同和货物一对多,货物和附件一对多

4)业务逻辑
购销合同总金额=所有货物的数量*货物的单价的总和 + 所有附件的数量*附件的单价的总和

注意:
在oracle中NUMBER(5,2)
整数2位,小数2位。

11.数据库设计基础原则:三范式
1)表必须有主键
2)字段内容不能是其他的字段加工而成
3)行数据不能相同

12.现今业界主流数据库设计原则:反三范式
1)表不是必须有主键
2)字段存一些加工后的中间的结果,冗余设计
3)记录冗余

三范式追求的目标存储空间尽量小;反三范式追求的目标是查询速度。
创建数据库设计时首先按三范式设计,然后局部优化。
(因为以前的硬件贵,存储空间贵,所以推崇三范式,后来存储空间廉价了,开始追求速度了,这个时候为了提高查询速度来使用冗余设计)

冗余设计有一个致命的缺点,就是数据来源不唯一。
当相关数据发生改变的时候,就要在多出增加修改和维护数据的代码,工作量又大了。所以我们要局部优化

c)购销合同表设+货物表设计
我们使用PowerDesigner来设计合同表与货物表:

图6.3-购销合同下的货物表设计

三张表的关系如图(货物表拥有生产厂家以及购销合同的外键):

关于购销合同中的货物还有包装盒等附件,这个我们下面来讨论附件信息+PD创建表原则

其实附件和货物需要的基本信息是差不多的,我们根据用户需求设计好附件表,看看它和货物表有什么区别:

差异我们发现,在附件中有一个附件的“类型”这个字段,附件“类型”的内容是从哪里来的呢?我们有一个基本信息表,

其中有附件的分类信息,回头用到再说具体字段的用处。

好,这样就构成了我们的3张表,附件与生产厂家(附件也要有生产厂家生产)和货物(货物需要附件来包装)都有关系,所以加了外键。

接下来就要把我们的建模自动生成的SQL语句进行执行。我们要把我们上面的四张表全部建立起来怎么办?

我们点击PowerDesigner的“数据库(D)”按钮选项,选择其中的Generate Database选项,从这里我们可以选取整个数据库建模的SQL语句:

我们点击后会弹出一个对话框,其中包含“Option:建表语句约束设置”、“Format:备注信息的语言格式”等,在Preview中我们可以看到所有的建表语句:

我们可以在Selection选项中选择我们要创建的是那几张表的sql语句(默认是全选的)

选择完毕之后,回到General选项,指定sql文件的输出目录之后,在对应的盘下就可以看到生成的sql文件了,将sql文件导入数据库就可以建表了。(或者回到Preview中复制相应的sql语句来建表)

在创建表之前,我们注意以下问题:
在实际工作中,如何从PD中挑选执行SQL建表
1)不创建外键
什么时候需要外键什么时候不需要外键?
需求调研  设计 开发  测试 试运行  正式上线运行 维护
  否            否            否           否            否                   是                  是

2)不创建备注信息
保护软件资源

所以刚刚我们最好不要去创建外键和备注信息,因为在开发和测试阶段,我们录入数据的时候会非常麻烦,备注信息泄露了也不利于软件资源的保护。所以我们暂时不需要

这里是所有的建表语句,我们从Preview中只复制创建表的语句,来一张一张的去创建表。(即“Table: CONTRACT_PRODUCT_C ”等下的语句)

[sql] view plaincopy
  1. alter table CONTRACT_PRODUCT_C
  2. drop constraint FK_CONTRACT_REFERENCE_CONTRACT;
  3. alter table CONTRACT_PRODUCT_C
  4. drop constraint FK_CONTRACT_REFERENCE_FACTORY_;
  5. alter table EXT_CPRODUCT_C
  6. drop constraint FK_EXT_CPRO_REFERENCE_FACTORY_;
  7. alter table EXT_CPRODUCT_C
  8. drop constraint FK_EXT_CPRO_REFERENCE_CONTRACT;
  9. drop table CONTRACT_C cascade constraints;
  10. drop table CONTRACT_PRODUCT_C cascade constraints;
  11. drop table EXT_CPRODUCT_C cascade constraints;
  12. drop table SYS_CODE_B cascade constraints;
  13. /*==============================================================*/
  14. /* Table: CONTRACT_C                                            */
  15. /*==============================================================*/
  16. create table CONTRACT_C  (
  17. CONTRACT_ID          VARCHAR2(40)                    not null,
  18. OFFEROR              VARCHAR2(200),
  19. CONTRACT_NO          VARCHAR2(50),
  20. SIGNING_DATE         TIMESTAMP,
  21. INPUT_BY             VARCHAR2(30),
  22. CHECK_BY             VARCHAR2(30),
  23. INSPECTOR            VARCHAR2(30),
  24. TOTAL_AMOUNT         NUMBER(10,2),
  25. IMPORT_NUM           INT,
  26. CREQUEST             VARCHAR2(2000),
  27. CUSTOM_NAME          VARCHAR2(200),
  28. DELIVERY_PERIOD      TIMESTAMP,
  29. SHIP_TIME            TIMESTAMP,
  30. TRADE_TERMS          VARCHAR2(30),
  31. REMARK               VARCHAR2(600),
  32. PRINT_STYLE          CHAR(1),
  33. OLD_STATE            INT,
  34. STATE                INT,
  35. OUT_STATE            INT,
  36. CREATE_BY            VARCHAR2(40),
  37. CREATE_DEPT          VARCHAR2(40),
  38. CREATE_TIME          TIMESTAMP,
  39. constraint PK_CONTRACT_C primary key (CONTRACT_ID)
  40. );
  41. comment on table CONTRACT_C is
  42. '界面参考用户提供的《供销合同》
  43. 八个字段从《购销合同》中获取,加一个“总金额”冗余字段
  44. 四个字段从《出货表》中获取
  45. 六个控制字段
  46. 三个权限字段';
  47. comment on column CONTRACT_C.CONTRACT_NO is
  48. '自动产生';
  49. comment on column CONTRACT_C.TOTAL_AMOUNT is
  50. '冗余,自动计算,数量*单价';
  51. comment on column CONTRACT_C.IMPORT_NUM is
  52. '打印时标识几个星,对应说明中的内容
  53. 直接存放星星可以吗?可以CHAR(6)。但jsp页面jstl判断星星特殊字符失败。';
  54. comment on column CONTRACT_C.CUSTOM_NAME is
  55. '出处:出货表';
  56. comment on column CONTRACT_C.DELIVERY_PERIOD is
  57. '出处:出货表';
  58. comment on column CONTRACT_C.SHIP_TIME is
  59. '出处:出货表';
  60. comment on column CONTRACT_C.TRADE_TERMS is
  61. '出处:出货表';
  62. comment on column CONTRACT_C.PRINT_STYLE is
  63. '宽2:一页两个货物  窄1:一页一个货物';
  64. comment on column CONTRACT_C.OLD_STATE is
  65. '归档前状态, 方便回退';
  66. comment on column CONTRACT_C.STATE is
  67. '0草稿 1已上报待报运
  68. 归档后, 其他选择合同的地方均去除.
  69. 表示合同已完成, 不论是否合同的货物是否全部真的走完, 因为有赔付等其他情况';
  70. comment on column CONTRACT_C.OUT_STATE is
  71. '0未走货 1部分 2全部
  72. 归档后, 其他选择合同的地方均去除.
  73. 表示合同已完成, 不论是否合同的货物是否全部真的走完, 因为有赔付等其他情况';
  74. /*==============================================================*/
  75. /* Table: CONTRACT_PRODUCT_C                                    */
  76. /*==============================================================*/
  77. create table CONTRACT_PRODUCT_C  (
  78. CONTRACT_PRODUCT_ID  VARCHAR2(40)                    not null,
  79. CONTRACT_ID          VARCHAR2(40),
  80. FACTORY_ID           VARCHAR2(40),
  81. FACTORY_NAME         VARCHAR2(50),
  82. PRODUCT_NO           VARCHAR2(50),
  83. PRODUCT_IMAGE        VARCHAR2(200),
  84. PRODUCT_DESC         VARCHAR2(600),
  85. CNUMBER              INT,
  86. OUT_NUMBER           INT,
  87. LOADING_RATE         VARCHAR2(10),
  88. BOX_NUM              INT,
  89. PACKING_UNIT         VARCHAR2(10),
  90. PRICE                NUMBER(10,2),
  91. AMOUNT               NUMBER(10,2),
  92. FINISHED             INT,
  93. EXTS                 VARCHAR2(50),
  94. ORDER_NO             INT,
  95. constraint PK_CONTRACT_PRODUCT_C primary key (CONTRACT_PRODUCT_ID)
  96. );
  97. comment on table CONTRACT_PRODUCT_C is
  98. '装率和箱数报运业务使用,合同业务不使用。';
  99. comment on column CONTRACT_PRODUCT_C.FACTORY_NAME is
  100. '冗余';
  101. comment on column CONTRACT_PRODUCT_C.OUT_NUMBER is
  102. '分次走货';
  103. comment on column CONTRACT_PRODUCT_C.LOADING_RATE is
  104. '报运业务使用X/Y';
  105. comment on column CONTRACT_PRODUCT_C.BOX_NUM is
  106. '报运业务使用=数量除以装率的分母,不够进位为整数
  107. 先将玻璃杯装小纸箱子,然后在装集装箱';
  108. comment on column CONTRACT_PRODUCT_C.PACKING_UNIT is
  109. 'PCS/SETS';
  110. comment on column CONTRACT_PRODUCT_C.AMOUNT is
  111. '冗余 自动计算: 数量x单价';
  112. comment on column CONTRACT_PRODUCT_C.FINISHED is
  113. '0未完成1完成';
  114. comment on column CONTRACT_PRODUCT_C.EXTS is
  115. '冗余,出处:出货表
  116. 附件对应SYS_CODE中的附件分类名称,多个用换行符隔开,没有附件是写无。附件分类相同时合并。';
  117. /*==============================================================*/
  118. /* Table: EXT_CPRODUCT_C                                        */
  119. /*==============================================================*/
  120. create table EXT_CPRODUCT_C  (
  121. EXT_CPRODUCT_ID      VARCHAR2(40)                    not null,
  122. CONTRACT_PRODUCT_ID  VARCHAR2(40),
  123. FACTORY_ID           VARCHAR2(40),
  124. FACTORY_NAME         VARCHAR2(50),
  125. CTYPE                INT,
  126. PRODUCT_NO           VARCHAR2(50),
  127. PRODUCT_IMAGE        VARCHAR2(200),
  128. PRODUCT_DESC         VARCHAR2(600),
  129. CNUMBER              INT,
  130. PACKING_UNIT         VARCHAR2(10),
  131. PRICE                NUMBER(10,2),
  132. AMOUNT               NUMBER(10,2),
  133. PRODUCT_REQUEST      VARCHAR2(2000),
  134. ORDER_NO             INT,
  135. constraint PK_EXT_CPRODUCT_C primary key (EXT_CPRODUCT_ID)
  136. );
  137. comment on table EXT_CPRODUCT_C is
  138. '附件和货物的不同:多了附件类型和要求;同时货物从属合同,附件从属货物。';
  139. comment on column EXT_CPRODUCT_C.FACTORY_NAME is
  140. '冗余';
  141. comment on column EXT_CPRODUCT_C.CTYPE is
  142. 'SYS_CODE_B 0104';
  143. comment on column EXT_CPRODUCT_C.AMOUNT is
  144. '自动计算: 数量x单价';
  145. /*==============================================================*/
  146. /* Table: SYS_CODE_B                                            */
  147. /*==============================================================*/
  148. create table SYS_CODE_B  (
  149. SYS_CODE_ID          VARCHAR2(40)                    not null,
  150. NAME                 VARCHAR2(100),
  151. PARENT_ID            VARCHAR2(40),
  152. PARENT_NAME          VARCHAR2(100),
  153. LAYER_NUM            INT,
  154. IS_LEAF              INT,
  155. QUOTE_NUM            INT,
  156. CNOTE                VARCHAR2(100),
  157. ICO                  VARCHAR2(20),
  158. ORDER_NO             INT,
  159. STATE                CHAR(1),
  160. CREATED_BY           VARCHAR2(40),
  161. CREATED_TIME         TIMESTAMP,
  162. UPDATED_BY           VARCHAR2(40),
  163. UPDATED_TIME         TIMESTAMP,
  164. constraint PK_SYS_CODE_B primary key (SYS_CODE_ID)
  165. );
  166. comment on table SYS_CODE_B is
  167. '数据字典';
  168. comment on column SYS_CODE_B.STATE is
  169. '0停用1启用';
  170. alter table CONTRACT_PRODUCT_C
  171. add constraint FK_CONTRACT_REFERENCE_CONTRACT foreign key (CONTRACT_ID)
  172. references CONTRACT_C (CONTRACT_ID);
  173. alter table EXT_CPRODUCT_C
  174. add constraint FK_EXT_CPRO_REFERENCE_CONTRACT foreign key (CONTRACT_PRODUCT_ID)
  175. references CONTRACT_PRODUCT_C (CONTRACT_PRODUCT_ID);

现在我们使用这个sql语句来创建“合同货物”、“合同附件”、“购销合同”以及“系统代码”这四张表:

创建成功!
下一片总结我们就开始对购销合同的业务进行编写

附-Oracle数据库备份和恢复
1)备份pl/sql

2)恢复

SQL形式备份(.sql),备份不能含有大字段,但是.bmp文件可以含有大字段

如果sql在导入时出现二进制乱码时,不直接用工具,直接拷贝sql语句,进行执行

【springmvc+mybatis项目实战】杰信商贸-11.购销合同业务相关推荐

  1. 【springmvc+mybatis项目实战】杰信商贸-6.重点知识回顾

    1.重点知识回顾 Maven 1)覆盖仓库文件,实际企业开发,公司会架一个测试服务器,在测试服务器中架私服.我们开发人员的程序,都连接私服.当本地没有项目中要使用的jar,Myeclipse mave ...

  2. 【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息

    通过上几次我们已经将购销合同的所有业务完成了,接下来我们要完成的是在购销合同下的货物的业务 我们的购销合同相对于货物是一对多的,所以我们需要配置对象之间的关联关系. 首先先编写实体类ContractP ...

  3. 【springmvc+mybatis项目实战】杰信商贸-2.数据库配置

    首先我们来了解项目的架构 我们分别使用了MySql和Oracle数据库,即是异构数据库.我们做到一个平台支持多个数据库. 数据库 建模我们使用Sybase公司的PowerDesigner(以后简称PD ...

  4. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)

    JavaEE:Spring+SpringMVC+Mybatis项目-企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 ...

  5. Rasa 3.X 项目实战之保险行业Insurance Bot智能业务对话机器人

    课程标题:Rasa 3.X 项目实战之保险行业Insurance Bot智能业务对话机器人 课程关键字:Rasa Application.Insurance Bot.Debugging.Custome ...

  6. Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十二)

    一.Rasa项目实战之银行金融Financial Bot智能业务对话机器人支付业务流程解析与演示 支付业务是银行金融业务中的核心功能,对于本项目来说,先来看一下这个业务流程是如何工作的.首先运行Ras ...

  7. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十九)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

  8. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人配置详解与Debugging演示(八十七)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统所使用的各项配置进行详细剖析,并通过debug模式来理解在下面展示的Rasa graph archite ...

  9. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十一)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

最新文章

  1. iOS -- UIApplication
  2. python sort 多级排序_Python sort和class实现多级排序
  3. 关于Windows平台下安装mysql软件
  4. printf 指针地址_数组指针和指针数组
  5. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)
  6. linux文件末尾 m,Linux7-删除nginx配置文件末尾的^M字符
  7. 戴尔推出PowerEdge T30,主打小型办公和家庭办公市场
  8. golang中base64编码_Rust 中的字符集编码 Rust 实践指南
  9. java 映射servlet,java – 将映射或对象从jsp传递到servlet
  10. 台式计算机模拟软件,仿真软件 计算机仿真模拟常用软件有那些?
  11. matlab 非线性辨识,非线性系统辨识Matlab实现
  12. UA PHYS515A 电磁理论IV 时变电磁场理论4 电磁场的动量与麦克斯韦压缩能张量
  13. 车辆路径问题(VRP)初探
  14. Servlet实现登录带有验证码验证案例
  15. angular 万年历_jQuery实现的简单日历组件定义与用法示例
  16. 专门为某种用途设计的计算机称为,专门为某种用途而设计的计算机,称为( )计算机。...
  17. 20、斐⽒数列是公元13世纪数学家斐波拉契发明的。即: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ……, 输出其前15项。
  18. Java插件自动保存浏览器书签_EverSync插件,浏览器书签同步插件,支持Chrome和Firefox书签同步...
  19. 【案例】云卷云舒,ArcGIS成就时空交错的新闻播报
  20. 有赞、微盟“卷”向海外

热门文章

  1. linux 安全狗 屏蔽ip,网站安全狗ip黑名单功能及使用方法教程
  2. vue3实现一键复制\剪切内容
  3. 【读书笔记】《游戏改变世界》
  4. APP后台上传Nginx+Tomcat服务器后图片可以上传但无法访问问题解决
  5. JVM系列:jvm基本结构
  6. tkinter滚动事件详解
  7. [carla入门教程]-5 使用ROS与carla通信
  8. 中国大学慕课 C语言翁恺 学习笔记
  9. ARouter源码详解
  10. Microsoft Store应用商城上架「正式版」苹果iCloud同步客户端