合理施用外键

2张数据表:订单Order,订单进度OrderProgress

笔者们接下去要对就要用来实验的订单商品数据模型实行剖析。

兼备思路生龙活虎、

1.Order:oid,userid,postInfo,isDel

2.OrderProgress:opId,oid,createTime,PayTime,isDel

如此设计,oid做外键,当拿到三个Order对象,在MVC里无法透过该对象得到订单进程.要求基于oid再查表OrderProgress;

 

首先在MySql中开创数据库,在里头创立以下表:

设计思路二、

1.Order:oid,userid,postInfo,opId,isDel

2.OrderProgress:opId,createTime,PayTime,,isDel

如此设计,opId做外键,当得到多少个Order对象,在MVC里很实惠获取相应的订单进度.

 

民用以为:外键效率越来越高.因为早就清楚了opid,要找寻此条数据实惠(主键-索引卡塔尔;而规划思路风姿浪漫,还要再度查找.

 

思索:外键本质是怎么回事?

 

CREATE TABLE `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '商品名称',
  `price` float(10,1) NOT NULL COMMENT '商品定价',
  `detail` text COMMENT '商品描述',
  `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
  `createtime` datetime NOT NULL COMMENT '生产日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


CREATE TABLE `orderdetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `orders_id` int(11) NOT NULL COMMENT '订单id',
  `items_id` int(11) NOT NULL COMMENT '商品id',
  `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
  PRIMARY KEY (`id`),
  KEY `FK_orderdetail_1` (`orders_id`),
  KEY `FK_orderdetail_2` (`items_id`),
  CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) NOT NULL COMMENT '订单号',
  `createtime` datetime NOT NULL COMMENT '创建订单时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

  (1State of Qatar.每张表记录的多少内容:分模块对每张表记录的剧情开展谙习,相当于你学习系统必要(成效State of Qatar的经过;

  (2卡塔尔(قطر‎.每张表主要的字段设置:非空字段、外键字段;

  (3State of Qatar.数据库品级表与表之间的关联:外键关系;

  (4卡塔尔国.表与表之间的事体关联:在解析表与表之间的政工关系时肯定要创建在有些业务意义底工上去分析。

  3.针对订单商品模型的数据库思路解析:

  用户表:t_user–>记录了购买商品的客户新闻

  订单表:orders–>记录了顾客所创办的订单(购买商品的订单卡塔尔(قطر‎

  订单明细表:orderdetail–>记录了订单的详细消息即购买商品的音讯

  商品表:items–>记录了商品新闻

  表与表之间的专门的学业涉及:

  在深入分析表与表之间的事情涉及时须要营造在有个别业务意义底工上去深入分析。

  先分析数据等第之间有关系的表之间的事务关系:

  t_user和orders:

  t_user—->orders:一个顾客能够创造七个订单,后生可畏对多

  orders—>t_user:叁个订单只由二个顾客创制,生机勃勃对后生可畏

  orders和orderdetail:

  orders—>orderdetail:一个订单能够回顾七个订单明细,因为三个订单能够买入五个商品,各类商品的选购音信在orderdetail记录,生机勃勃对多涉及

  orderdetail–>orders:贰个订单明细只可以包罗在叁个订单中,生机勃勃对生龙活虎

  orderdetail和itesm:

  orderdetail—>itesms:三个订单明细只对应一个商品消息,风度翩翩对风度翩翩

  items–>orderdetail:一个商品能够包蕴在七个订单明细,后生可畏对多

  再解析数据库品级未有涉及的表之间是还是不是有事情涉嫌:

  orders和items:

  orders和items之间能够透过orderdetail表创立关系。

  4.深入分析过后画出相应的图,方便直观的刺探事情涉嫌

图片 1

  二、大器晚成对黄金年代查询

  2.1.须要:查询订单音讯,关联合检查询客户音信;

  2.2.resultType实现

  2.2.1.sql语句

  分明询问的主表:订单表,鲜明询问的关联表:顾客表。

  1 SELECT t1.*,

  2 t2.username,

  3 t2.sex,

  4 t2.address

  5 FROM

  6 orders t1,

  7 t_user t2

  8 WHERE t1.user_id=t2.id

  2.2.2.创建entity实体

  客户实体:User.java

  package com.mybatis.entity;

  import java.util.Date;

  import java.util.List;

  /**

  * @ClassName: User

  * @Description: TODO(客户实体卡塔尔国

  * @author 阿赫瓦里

  */

  public class User {

  private Integer id;

  // 姓名

  private String username;

  // 性别

  private String sex;

  // 地址

  private String address;

  // 生日

  private Date birthday;

  // 客户创设的订单列表

  private List<Orders> ordersList;

  // getter and setter ……

  }

  订单实体:orders.java

  package com.mybatis.entity;

  import java.util.Date;

  import java.util.List;

  /**

  * @ClassName: Orders

  * @Description: TODO(订单实体State of Qatar

  * @author 阿赫瓦里

  */

  public class Orders {

  /** 主键订单Id */

  private Integer id;

  /** 下单客商id */

  private Integer userid;

  /** 订单号 */

  private String number;

  /** 创立订单时间 */

  private Date createTime;

  /** 备注 */

  private String note;

  // 顾客音信

  private User user;

  // 订单明细

  private List<OrderDetail> orderdetails;

  // getter and setter ……

  }

  商品实体:Items.java

  package com.mybatis.entity;

  import java.util.Date;

  /**

  * @ClassName: Items

  * @Description: TODO(商品实体类卡塔尔

  * @author 阿赫瓦里

  */

  public class Items {

  /** 商品表主键Id */

  private Integer id;

  /** 商品名称 */

  private String itemsName;

  /** 商品定价 */

  private float price;

  /** 商品描述 */

  private String detail;

  /** 商品图片 */

  private String picture;

  /** 临蓐日期 */

  private Date createTime;

  // getter and setter ……

  }

  订单明细实体:OrderDetail.java

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图