1.分析每张表记录的数据内容
对于数据表较多的系统,可以采用分模块的方式进行分析。
2.分析每张表重要字段设置
非空字段,外键字段
3.数据库级别 表与表之间的关系
外键关系
4.表与表之间的业务关系
在分析表与表之间的业务关系时,一定要建立在某种业务意义基础上分析
假设存在这样的用户购买商品的需求,要求设计如下数据表。
用户表(user),订单表(orderForm),订单明细表(orderDetails),商品表(commodity)
需求分析后,存在如下关系
1.user--->orderForm:
一个用户可以创建多个订单:一对多
一份订单只能被一个用户创建: 一对一
2.orderForm--->orderDetails:
一份订单可以包含多条订单明细:一对多
一条订单明细只能包含在一份订单内:一对一
3.orderDtails--->commodity:
一条订单明细内只能包含一种商品:一对一
一种商品可以包含在多条订单明细中:一对多
4.orderForm--->commodity:
一份订单内可以存在多种商品:一对多
一种商品内可以包含在多份订单内:一对多
5.user--->commodity:
一个用户可以购买多种商品:一对多
一种商品可以被多个用户购买:一对多
所以数据库实体关系模型大致可以画为:
根据关系设计数据库
用户表:
订单表:
订单明细表:
商品表:
附带建表语句:
drop table if exists user;
create table user (
id int not null auto_increment,
u_name varchar(32) not null,
u_sex char(1),
u_age int,
birthday datetime,
address varchar(255),
remark varchar(100),
primary key(id)
)ENGINE=innodb character set utf8 collate utf8_general_ci;
drop table if exists orderForm;
create table orderForm(
id int not null auto_increment,
u_id int not null,
number varchar(32) not null,
createDate datetime not null,
remark varchar(100),
primary key(id),
foreign key(u_id) references user(id)
)ENGINE=innodb character set utf8 collate utf8_general_ci;
drop table if exists orderDetails;
create table orderDetails(
id int not null auto_increment,
order_id int not null,
c_id int not null,
c_amount int not null,
primary key(id),
foreign key(order_id) references orderForm(id),
foreign key(c_id) references commodity(id)
)ENGINE=innodb character set utf8 collate utf8_general_ci;
drop table if exists commodity;
create table commodity(
id int not null auto_increment,
c_name char(255) not null,
price double(9,2) not null,
description varchar(255),
c_picture varchar(512),
c_createDate datetime,
primary key(id)
)ENGINE=innodb character set utf8 collate utf8_general_ci;