【JavaWeb】:数据库设计

42 阅读2分钟

我正在参加「掘金·启航计划」

数据库设计简介

软件的常见研发步骤

产品经理      架构师    开发工程师  测试工程师   运维工程师
   ^           ^           ^         ^           ^ 
   |           |           |         |           |
需求分析 ----> 设计 ----> 编码 ----> 测试 ----> 安装部署

可以注意到,在设计模块中包括:

  • 软件结构设计
  • 数据库设计
  • 接口设计
  • 过程设计

数据库设计概念

  • 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储。
  • 建立数据库中的表结构以及表与表之间的关联关系的过程。
  • 有哪些表?表里有哪些字段?表和表之间有什么关系?

数据库设计的步骤

一、需求分析

  • 数据是什么?
  • 数据具有哪些属性?
  • 数据与属性的特点是什么?

二、逻辑分析

  • 通过 ER 图对数据库进行逻辑建模
  • 不需要考虑我们所选用的数据库管理系统

三、物理设计

  • 根据数据库自身的特点,把逻辑设计转换为物理设计

四、维护设计

  • 对新的需求进行建表;
  • 表优化

表关系

一对多(多对一)

  • 比如 部门表 和 员工表
  • 一个部门对应多个员工,多个员工同属于一个部门
  • 一对多的关系(或者多对一)在实际应用中也很常见。
  • 实现方式:在多的一方(从表)建立外键,指向一的一方(主表)的主键

多对多

  • 比如:商品表 和 订单表
  • 一个商品对应多个订单,一个订单包含多个商品
  • 实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

image-20230120115937357.png

下面是代码展示:

-- 订单表
CREATE TABLE tb_order(
    id int primary key auto_increment,
    payment double(10, 2),
    payment_type TINYINT,
    status TINYINT
);


-- 商品表
CREATE TABLE tb_goods(
    id int primary key auto_increment,
    title varchar(100),
    price double(10, 2)
);


-- 订单商品中间表
CREATE TABLE tb_order_goods(
    id int primary key auto_increment,
    order_id int,
    goods_id int,
    count int
);


-- 添加外键:为 订单表 和 商品表 添加 多对多 的关系,演示如下:
-- 1. 为订单商品中间表添加外键 order_id
--    此时外键 order_id 可指向订单表(tb_order)中的 id

ALTER TABLE
    tb_order_goods
ADD CONSTRAINT
    fk_order_id
FOREIGN KEY(order_id)
REFERENCES
    tb_order(id);
    
    
-- 2. 为订单商品中间表添加外键 goods_id
--    此时外键 goods_id 可指向商品表(tb_goods)中的 id

ALTER TABLE
    tb_order_goods
ADD CONSTRAINT
    fk_goods_id
FOREIGN KEY(goods_id)
REFERENCES
    tb_goods(id);

一对一

  • 一对一关系 多用于表拆分
  • 将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。
  • 比如:用户表 和 用户详情表
  • 实现方式:为任意一方添加外键,关联另一方主键,并且设置外键为唯一(UNIQUE