今日学习内容总结如下:
表和表之间的关系
数据库设计方法:试凑法、规范化法和
CAD
法
数据库设计工具:
powerdesigner
在实际开发中,一个项目经常会涉及很多方面的数据。例如产品和类目
商品编号
|
商品名称
|
价格
|
类别名称
|
等级
|
1 |
哇哈哈
|
2.5 |
饮料
|
3 |
1 |
茅台
|
3000 |
饮料
|
3 |
1 |
Java
从入门到放弃
|
50.5 |
书籍
|
2 |
数据冗余和外键
数据冗余:类别信息重复
数据冗余导致的问题:空间浪费、增加异常、删除异常和修改异常
解决方案:引入外键约束
产品表
商品编号
|
商品名称
|
商品价格
|
所属类别编号
|
1 | 哇哈哈 | 2.5 | 1 |
2 | 茅台 | 3000 | 1 |
3 | Java从入门到放弃 | 50.5 | 2 |
类目表
类别编号
|
类别名称
|
等级
|
1 |
饮料
|
3 |
2 |
书籍
|
2 |
通过引入新的表,同时使用外键约束保证取值的合理性,从而减少数据冗余
create table tb_catalog(id bigint primary key auto_increment , -- 实体完整性title varchar ( 32 ) not null) comment ' 类别表 ' ;create table tb_product(id bigint primary key auto_increment comment ' 商品标号 ' ,name varchar ( 32 ) not null ,price numeric ( 8 , 2 ) default 0 ,-- 引入额外的列用于表示商品所属于的类别catalog_id bigint , -- 外键列,允许为 null-- 外键表示该列的允许取的值必须在 tb_catalog 的 id 列中出现foreign key (catalog_id) references tb_catalog(id)) comment ' 商品表 ' ;
- 类目表中的id为主键,产品表中的列参照于类目表中的主键,所以一般类目表会被称为主表,产品表称为从表,产品表中的catalog_id称为外键
- 通过主表的主键和从表中的外键来描述的主外键关系,呈现的是一种一对多的关系
- 一个类目有多个商品
- 一个商品只能属于一个类目
- 在MySQL中innodb支持外键和事务,MyISAM不支持外键和事务
- 在具体开发中,为了提高性能,会故意删除外键约束,通过代码来控制数据的合理性
外键的特点
- 从表中的外键的值是对应主表中主键值的引用
- 从表中的外键数据类型必须和主表中的主键数据类型一致
基础语法
引入外键的目的在于保证数据的参照完整性
创建外键语法
1
:
create table tb_product(id bigint primary key auto_increment comment ' 商品标号 ' ,-- 引入额外的列用于表示商品所属于的类别catalog_id bigint , -- 外键列,允许为 null-- 外键表示该列的允许取的值必须在 tb_catalog 的 id 列中出现foreign key (catalog_id) references tb_catalog(id)) comment ' 商品表 ' ;