一,数据库设计需求阶段要考虑的作用点:
1,数据是什么?
2,数据有哪些属性?
3,数据和属性有哪些特点?
二,以一个小型商务系统,一般可以分成以下几个模块。
1, 用户模块。2,商品模块。3,订单模块。4,购物车模块。5,供应商模块。
1, 用户模块,包括属性:用户名,密码,电话,邮箱,身份证号码,地址,姓名,昵称
2, 商品模块,包括属性:编码,名称,描述,品类,供应商名称,重量,有效期,价格。
可唯一标识的可以是商品编码
3, 订单模块,订单模块是和用户模块密切相关的
包括的属性:订单号,用户姓名,用户电话,收货地址,商品编号,商品名称,数量,价格,订单状态,支付状态,订单类型。
唯一标识的属性可以是订单号。
4,购物车模块。 包括的属性:用户名,商品编号,商品名称,商品价格,商品描述,商品分类,加入时间,商品数量。
购物车模块中的记录不必要永久储存,可以定时清理。
5, 供应商模块。 包括的属性:供应商编号,供应商名称,联系人,电话,营业执照号,地址,法人。。
电子商务网站对应模块之间的关系如下图:
供应商和商品是多对多
用户和订单是一对多关系
用户和商品也是多对多
电子商务网站的er图:
第一范式:
定义:数据表中的所有字段都是单一属性,不可再分的。换句话说就是数据表是二维表
第二范式:
定义:数据库的中的表不存在非关键字段对任一候选字段的部分函数依赖,
部分函数依赖指的是存在着组合关键字中的某一关键字决定非关键字的情况
换句话说,所有单关键字的表都符合第二范式
第三范式:
传递依赖
数据库物理设计
1,选择数据库
2,定义数据库,表,字段的命名规范
3,选择字段类型
4,存储引擎的选择
1,myisam,不支持事务,不支持行级锁,当进行频繁的读写操作是尽量不要用
字段类型选择的原则
1,当一个字段可以选择多个数据类型时,优先考虑数字类型,其次是日期或二进制,最后是字符串,优先选择占用空间小的数据类型
2,一般字节在50字节以上的时候我们不建议使用char
外键
什么是子表?具有外键列的表成为子表。
具有外键约束的表所用的存储引擎必须是innodb
父表和字表必须有相同的字段类型,如果是int,必须都是int,如果是字符型,
外键列和参照列必须创建索引,如果外键列没有索引的话,mysql将自动创建索引
on delete cascade 父表删除或更新自动删除或更新子表中的内容。
set null 父表删除或者更新行并设置字表中的外键列为null
foreign key (name)references tablename(name)定义一个表中的一个列是另一个表的外键
各种语句
1,insert into tablename select 条件from tablename1:联表查询,可以把一张表的数据导入另一张表