作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主
文章目录
sql
会员等级表
CREATE TABLE t_level(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
`level` varchar(200) not null COMMENT "等级",
discount DECIMAL(10,2) unsigned not null COMMENT "折扣"
) COMMENT="会员等级表";
数据
客户表
CREATE table t_customer(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
username varchar(200) not null COMMENT "用户名",
`password` varchar(2000) not null COMMENT "密码(AES加密)",
wechat varchar(200) COMMENT "微信号",
tel char(11) COMMENT "手机号",
level_id int unsigned COMMENT "会员等级",
create_time timestamp not null DEFAULT now() COMMENT "添加时间",
last_update_time timestamp not null DEFAULT now() COMMENT "最后修改时间",
INDEX idx_username(username),
UNIQUE unq_username(username)
) COMMENT="客户表";
数据
收货地址表
CREATE TABLE t_customer_address(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
customer_id int unsigned not null COMMENT "客户id",
`name` varchar(200) not null COMMENT "收货人姓名",
tel char(11) not null COMMENT "收货人电话",
address varchar(200) not null COMMENT "收货地址",
prime boolean not null COMMENT "是否为缺省收货地址",
INDEX idx_customer_id(customer_id)
) COMMENT="收获地址表";
数据
会员等级表(解析)
CREATE TABLE t_level(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
`level` varchar(200) not null COMMENT "等级",
discount DECIMAL(10,2) unsigned not null COMMENT "折扣"
) COMMENT="会员等级表";
字段解析:
你看啊。会员等级表啊。既然说是等级是不是得要有一个字段。代表他的级别level.比如白银级别。黄金级别。的会员。
那这个会员有什么作用呢?折扣。办会员的话,是不是可以享受折扣啊。没错。还要有个折扣字段.
类型大小
level是什么类型的呢?因为是填写汉字或者英文的。所以varchar对吧.
那这个折扣是不是钱啊。所以得是decimal类型啊.
为什么decimal类型呢?
因为用float double类型不精确,
decimal详解:
在mysql中,价格用“DECIMAL”类型。Decimal是专门为财务相关问题设计的数据类型,它实际上是以字符串的形式存放的,可在定义时划定整数部分以及小数部分的位数;在对精度要求比较高时(如货币、科学数据),用DECIMAL类型比较好。
DECIMAL(10,2)的意思?
decimal(10,2)中的“2”表示小数部分的位数,如果插入的值未指定小数部分或者小数部分不足两位则会自动补到2位小数,若插入的值小数部分超过了2为则会发生截断,截取前2位小数。
“10”指的是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过“10-2”位,否则不能成功插入,会报超出范围的错误。
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT “主键”,
第一:id要自增(AUTO_INCREMENT),作用是什么呢?
1)增加记录时,可以不用指定id字段,不用担心主键重复问题。
2)数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
3)数字型,占用索引空间小,范围查找与排序友好,在程序中传递也方便;
为什么要设置主键,主键作用是什么?
主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个表中只能有一个主键,主键可以包含一个或多个字段。
打个比方,一条记录包括身份正号,姓名,年龄,学校,国籍,性别等。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
设置主键的作用是唯一性。非空的。说明了自增的id不会重复的。
comment是什么?
代表一种注释。别人看懂这是什么字段或者表或者数据库
为什么要用int unsigned类型呢?
因为id是不是整数的。用unsigned是因为某种商品的数量是不是不能是负数呢.UNSIGNED的范围类型就是0~255
level
varchar(200) not null COMMENT “等级”,
解释:等级的名字,比如黄金会员 白金会员等等…
discount DECIMAL(10,2) unsigned not null COMMENT “折扣”
某个会员等级所能享受到的折扣
客户表(解析)
CREATE table t_customer(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
username varchar(200) not null COMMENT "用户名",
`password` varchar(2000) not null COMMENT "密码(AES加密)",
wechat varchar(200) COMMENT "微信号",
tel char(11) COMMENT "手机号",
level_id int unsigned COMMENT "会员等级",
create_time timestamp not null DEFAULT now() COMMENT "添加时间",
last_update_time timestamp not null DEFAULT now() COMMENT "最后修改时间",
INDEX idx_username(username),
UNIQUE unq_username(username)
) COMMENT="客户表";
解析字段
你看啊。这个客户表啊。什么是客户?客户是指通过购买你的产品或服务满足其某种需求的群体。
你看客户如果要使用这个新零售系统来买东西是不是需要录入信息啊?
用户名(真名也行。假名也行。跟某网站一样)+密码+客户愿意可以录微信。手机号客户愿意可以录。然后可以标注客户的等级。注意这里:如果客户不办理会员的情况下。可以为null.
注意:其中用户名为唯一索引。不然不知道那个客户.
收货地址表(解析)
CREATE TABLE t_customer_address(
id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT "主键",
customer_id int unsigned not null COMMENT "客户id",
`name` varchar(200) not null COMMENT "收货人姓名",
tel char(11) not null COMMENT "收货人电话",
address varchar(200) not null COMMENT "收货地址",
prime boolean not null COMMENT "是否为缺省收货地址",
INDEX idx_customer_id(customer_id)
) COMMENT="收获地址表";
你看啊。这个收货地址表啊。收货的是谁?是不是客户。因为我们写了客户表。是不是得关联啊。收货人名字 电话 收货地址 是不是都得有。毕竟送去哪谁接收对不?
INDEX idx_customer_id(customer_id)
让关联表的字段查快一点