Java Web基础入门第八十七讲 在线网上书店(二)——设计实体及其相对应的数据库表
发布日期:2021-06-30 18:04:21 浏览次数:2 分类:技术文章

本文共 6435 字,大约阅读时间需要 21 分钟。

设计实体

我们若要做出一个这样的在线网上书店,肯定就要考虑需要设计几个对象,一般来说大概至少需要以下五个对象:

在这里插入图片描述
现在我们来思考这几个对象之间的关系,万事万物总该有那么一点联系吧!

  • 图书的分类和图书之间的关系:一个分类下会有多本图书,因此他俩之间是一对多的关系;
  • 图书和订单项之间的关系:一个图书会出现在多个订单项里面,一个订单项里面只能出现一本书(即一类书),这是一对多的关系;
  • 订单项和订单之间的关系:一个订单对应多个订单项,因此他俩之间也是一对多的关系;
  • 订单和用户之间的关系:一个用户可以拥有多个订单,因此他俩之间同样也是一对多的关系。

明了上述内容之后,下面我们就来设计这五个对象。

创建实体Category

Category类算是非常简单的了,其代码如下:

package cn.liayun.domain;public class Category {
private String id; private String name; private String description; public String getId() {
return id; } public void setId(String id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getDescription() {
return description; } public void setDescription(String description) {
this.description = description; }}

创建实体Book

在设计一个这样的在线网上书店的时候,我们应该想到:图书和分类是有关系的,即一个分类可以对应多本图书。为什么要这样设计?这样更加人性化,用户在购买书籍的时候,他能够查看相关分类下的图书,而不是全部图书都显示给用户,让用户一个一个去找。

package cn.liayun.domain;public class Book {
private String id; private String name; private double price; private String author; private String image;//记住书的图片的名称,不需要保存路径,因为整个上传的文件都在images目录下 private String description; private Category category; public String getId() {
return id; } public void setId(String id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public double getPrice() {
return price; } public void setPrice(double price) {
this.price = price; } public String getAuthor() {
return author; } public void setAuthor(String author) {
this.author = author; } public String getImage() {
return image; } public void setImage(String image) {
this.image = image; } public String getDescription() {
return description; } public void setDescription(String description) {
this.description = description; } public Category getCategory() {
return category; } public void setCategory(Category category) {
this.category = category; }}

创建实体User

User类也算是非常简单的了,其代码如下:

package cn.liayun.domain;public class User {
private String id; private String username; private String password; private String phone; private String cellphone; private String email; private String address; public String getId() {
return id; } public void setId(String id) {
this.id = id; } public String getUsername() {
return username; } public void setUsername(String username) {
this.username = username; } public String getPassword() {
return password; } public void setPassword(String password) {
this.password = password; } public String getPhone() {
return phone; } public void setPhone(String phone) {
this.phone = phone; } public String getCellphone() {
return cellphone; } public void setCellphone(String cellphone) {
this.cellphone = cellphone; } public String getEmail() {
return email; } public void setEmail(String email) {
this.email = email; } public String getAddress() {
return address; } public void setAddress(String address) {
this.address = address; }}

创建实体Order

订单应该包含id、收货人信息、下单的时间、订单的总价、订单的状态【有无发货】,而不应该包含商品的信息的。商品的信息用一个专门的”订单项“来表示。我们还应想到:订单项和订单之间的关系,一个订单对应多个订单项,这是一对多的关系!

package cn.liayun.domain;import java.util.Date;import java.util.HashSet;import java.util.Set;public class Order {
private String id; private Date ordertime;//下单时间 private boolean status;//订单状态 private double price;//订单总价 private User user;//记住下单人 private Set
orderitems = new HashSet
();//记住订单所有的订单项 public String getId() {
return id; } public void setId(String id) {
this.id = id; } public Date getOrdertime() {
return ordertime; } public void setOrdertime(Date ordertime) {
this.ordertime = ordertime; } public boolean isStatus() {
return status; } public void setStatus(boolean status) {
this.status = status; } public double getPrice() {
return price; } public void setPrice(double price) {
this.price = price; } public User getUser() {
return user; } public void setUser(User user) {
this.user = user; } public Set
getOrderitems() {
return orderitems; } public void setOrderitems(Set
orderitems) {
this.orderitems = orderitems; }}

创建实体OrderItem

订单项应该包含id、所购买图书的信息、所购买图书的数量、订单项的总价。没有必要定义一个属性来记住它属于哪一个订单,这个是为什么没有呢?因为订单项是随着订单来显示的,是显示订单的时候就显示订单项,我们从来就没有说去显示某个单独的订单项的时候。

package cn.liayun.domain;public class OrderItem {
private String id; private Book book;//记住订单项代表的是哪一本书 private int quantity; private double price; /* * 还有没有必要一个属性记住它属于哪一个订单?没有,这个是为什么没有呢?因为订单项是随着订单来显示的, * 是显示订单的时候就显示订单项,我们从来就没有说去显示某个单独的订单项的时候,去这样写。 */ //private Order order; public String getId() {
return id; } public void setId(String id) {
this.id = id; } public Book getBook() {
return book; } public void setBook(Book book) {
this.book = book; } public int getQuantity() {
return quantity; } public void setQuantity(int quantity) {
this.quantity = quantity; } public double getPrice() {
return price; } public void setPrice(double price) {
this.price = price; }}

设计实体相对应的数据库表

该项目涉及到了5个表:user、orders、orderitem、category、book。E-R图如下:

在这里插入图片描述
E-R图设计中最难的地方就是做到订单管理模块那里!!!

设计category表

create table category(	id varchar(40) primary key,	name varchar(40) not null unique,	description varchar(255));

设计book表

create table book(	id varchar(40) primary key,	name varchar(40) not null unique,	price decimal(8,2) not null,	author varchar(40) not null,	image varchar(255) not null,	description varchar(255),	category_id varchar(40),	constraint category_id_FK foreign key(category_id) references category(id));

设计user表

create table user(	id varchar(40) primary key,	username varchar(40) not null unique,	password varchar(40) not null,	phone varchar(20) not null,	cellphone varchar(20) not null,	email varchar(40) not null,	address varchar(255) not null);

设计order表

create table orders(	id varchar(40) primary key,	ordertime datetime not null,	status boolean not null,	price decimal(8,2) not null,	user_id varchar(40),	constraint user_id_FK foreign key(user_id) references user(id));

设计orderitem表

create table orderitem(	id varchar(40) primary key,	quantity int not null,	price decimal(8,2) not null,	book_id varchar(40),	order_id varchar(40),	constraint book_id_FK foreign key(book_id) references book(id),	constraint order_id_FK foreign key(order_id) references orders(id));

至此,实体及其相对应的数据库表的设计就算是OK了!

转载地址:https://liayun.blog.csdn.net/article/details/91153403 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java Web基础入门第八十八讲 在线网上书店(三)——编写dao层
下一篇:Java Web基础入门第八十六讲 在线网上书店(一)——搭建开发环境

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月06日 02时10分29秒