javaweb学习3 -2024/9/25

今天学习了数据库的表关系和多表查询

一对一

  • 用户和用户详细
  • 一对一关系用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提高查询性能

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

一对多(多对一)

  • 如员工表 和 部门表
  • 一个部门对应多个员工,一个员工对应一个部门

实现方式:在多的一方建立外键,指向一的一方的主键

image-20240925191604030

alter table emp3 add constraint fk_emp3_dept foreign key(dep_id) references dept(id);#添加外键

alter table emp3 drop foreign key fk_emp3_dept; # 删除外键

create table dept(
    id int primary key auto_increment,
    dep_name varchar(20),
    addr varchar(20)
);

create table emp3(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int
);

多对多

  • 订单和商品
  • 一个商品对应多个订单,一个订单包含多个商品

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

create table tb_order (
    id int primary key auto_increment,
    payment double(7,2),
    payment_type TINYINT,
    status tinyint
);

create table tb_goods(
    id int primary key auto_increment,
    title varchar(100),
    price double(7,2)
);

create table tb_order_goods(
    id int primary key auto_increment,
    order_id int ,
    goods_id int,
    count int
);

alter table tb_order_goods add constraint foreign key (order_id) references tb_order(id);
alter table tb_order_goods add constraint foreign key (goods_id) references tb_goods(id);

一对一

  • 用户和用户详细
  • 一对一关系用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提高查询性能

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

一对多(多对一)

  • 如员工表 和 部门表
  • 一个部门对应多个员工,一个员工对应一个部门

实现方式:在多的一方建立外键,指向一的一方的主键

image-20240925191604030

alter table emp3 add constraint fk_emp3_dept foreign key(dep_id) references dept(id);#添加外键

alter table emp3 drop foreign key fk_emp3_dept; # 删除外键

create table dept(
    id int primary key auto_increment,
    dep_name varchar(20),
    addr varchar(20)
);

create table emp3(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int
);

多对多

  • 订单和商品
  • 一个商品对应多个订单,一个订单包含多个商品

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

create table tb_order (
    id int primary key auto_increment,
    payment double(7,2),
    payment_type TINYINT,
    status tinyint
);

create table tb_goods(
    id int primary key auto_increment,
    title varchar(100),
    price double(7,2)
);

create table tb_order_goods(
    id int primary key auto_increment,
    order_id int ,
    goods_id int,
    count int
);

alter table tb_order_goods add constraint foreign key (order_id) references tb_order(id);
alter table tb_order_goods add constraint foreign key (goods_id) references tb_goods(id);

posted @ 2024-09-25 22:12  XYu1230  阅读(6)  评论(0编辑  收藏  举报