MySQL数据库进阶-数据库设计实践-Java

1、软件生命周期

获取过程,供应过程:可行性研究、需求分析

开发过程:概要设计、详细设计、实现、组装、集成测试、确认测试

运行过程:使用

维护过程:维护、退役

2、数据库设计步骤

需求分析:分析或读懂需求文档

概念设计:实体-关系模型(E-R图)、类图

逻辑设计:将概念设计转化为具体的数据库结构,包括表结构和视图定义

物理设计:数据库的存储细节

3、实例:租房网

C端:Consumer,直接面向最终消费者的产品或服务。

B端:Business,面向企业或商业客户的产品或服务。

3.1功能架构

3.2理解需求文档

此处主要是站在C端角度分析

3.3需求分析

3.3.1提取概念类

根据需求文档和原型图提取相关名词,区分哪些名词为属性,哪些名词应该舍弃。

C端用户属性列表:手机号、微信一键登录、头像、昵称、用户、平台用户、用户ID

:用户

属性:用户ID、手机号、头像、昵称、密码(在数据库中保存时应该存密文,MD5加密)、盐(打乱密码的随机字符串)、openID、个人简介

|-----------|--------------|---------|---------|-----|----------|
| 字段 | 类型 | 非空(Y/N) | 主键(Y/N) | 默认值 | 备注 |
| id | bigint | Y | Y | | 编号 |
| nick_name | varchar(64) | Y | N | | 昵称 |
| phone_num | varchar(64) | N | N | | 电话 |
| open_id | varchar(64) | N | N | | 微信openID |
| password | varchar(64) | N | N | | 密码 |
| salt | varchar(64) | N | N | | 盐 |
| avatar | varchar(255) | N | N | | 头像地址 |
| remark | varchar(255) | N | N | | 个人简介 |

sql 复制代码
-- 创建C端用户表app_user
create table app_user(
  id bigint primary key auto_increment,
  nick_name varchar(64) not null,
  phone_num varchar(64),
  open_id varchar(64),
  password varchar(64),
  salt varchar(64),
  avatar varchar(255),
  remark varchar(255)
);

3.3.2概念设计

(1)绘制E-R图:

B端用户属性列表:用户昵称、电话号码、密码、盐、用户身份、状态、备注

行政区域类属性列表:ID、区划编码、父ID、父编码、区划名称、区划全称、城市拼音、省市区标识(级别)、经度、纬度

字典类型域类属性列表:字典名称、字典类型、状态、备注

字典条目详情类属性列表:字典值、字典键、排序、状态、备注

房源标签类属性列表:标签码、标签名、排序

房源出租状态类属性列表:房源编号、房源状态、出租时长、开始出租时间、结束出租时间

房源类属性列表:房东的用户编号、标题、所在城市、所在区域、所在社区、详细地址 、经度、纬度、租房类型、户型、所在楼层、总楼层、居室、面积(平方米)、朝向、价格(元)、房屋介绍、包含设备、标题图片、房源图列表

房源-城市类属性列表:城市编号、城市名、房源编号

聊天会话类属性列表:发起会话用户、对方用户

聊天内容类属性列表:会话编号、发送方用户、接收方用户、消息类型(语言、文本、图片、视频)、消息正文、消息状态

系统参数类属性列表:参数编码、参数名称、参数键名、参数键值、系统内置、备注

(2)建立关系:

字典类型&字典条目(1:n)

聊天会话&聊天内容(1:n)

房源&关联表:出租状态&房源(1:1),房源&标签(n:n),房源&行政区域(n:1)

3.3.3逻辑设计

(1)数据库名:bit-zufang

常见表名前缀:系统表(sys_),业务表(app_),字典表(dic_),关系表(rel_),统计表(sta_)

公共字段:无特殊情况说明下,每张表必须有长整型的自增主键,删除状态、创建时间、更新时间

(2)编写SQL脚本
sql 复制代码
-- 删除数据库
drop database if exists bit_zufang;
-- 创建数据库
create database if not exists bit_zufang character set utf8mb4 collate
utf8mb4_0900_ai_ci;
-- 选择数据库
use bit_zufang;

-- 创建B端⽤⼾表sys_usre
create table sys_usre (
id bigint primary key auto_increment comment '编号,主键⾃增',
nick_name varchar(64) not null comment '昵称',
phone_num varchar(64) not null comment '电话',
password varchar(64) not null comment '密码',
salt varchar(64) not null comment '盐',
identity varchar(16) not null comment '⾝份',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建⾏政区域表sys_region
create table sys_region (
id bigint primary key auto_increment comment '编号,主键⾃增',
code varchar(20) not null comment '区划编码',
parent_id bigint comment '⽗级id',
parent_code varchar(20) comment '⽗级编码',
name varchar(40) not null comment '区划名称',
full_name varchar(40) not null comment '区划全称',
pinyin varchar(50) not null comment '城市拼⾳',
level tinyint not null default 0 comment '省-1,市-2,区-3',
longitude decimal(12,7) not null comment '经度',
latitude decimal(12,7) not null comment '纬度',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建字典类型表sys_dic_type
create table sys_dic_type (
id bigint primary key auto_increment comment '编号,主键⾃增',
`key` varchar(255) not null comment '字典类型键',
`value` varchar(1024) not null comment '字典类型值',
remark varchar(1024) not null comment '备注',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建字典条⽬表sys_dic_data
create table sys_dic_data (
id bigint primary key auto_increment comment '编号,主键⾃增',
type_key varchar(255) not null comment '字典类型名',
`key` varchar(255) not null comment '字典键',
`value` varchar(1024) not null comment '字典值',
sort int not null default 1 comment '排序',
remark varchar(1024) not null comment '备注',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建房源标签表dic_tag
create table dic_tag (
id bigint primary key auto_increment comment '编号,主键⾃增',
tag_code varchar(20) not null comment '标签码',
tag_name varchar(30) not null comment '标签名',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建房源出租状态表app_house_status
create table app_house_status (
id bigint primary key auto_increment comment '编号,主键⾃增',
house_id bigint not null comment '房源id',
house_status varchar(10) not null comment '房源状态',
rent_time_code varchar(64) comment '出租时⻓',
rent_start_time bigint comment '出租开始时间(时间戳)',
rent_end_time bigint comment '出租结束时间(时间戳)',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建房源表app_house
create table app_house (
id bigint primary key auto_increment comment '编号,主键⾃增',
user_id bigint not null comment '房东编号,关联app_user',
title varchar(50) not null comment '标题',
rent_type varchar(20) not null comment '租房类型,关联sys_dic_data',
floor int not null comment '所在楼层',
all_floor int not null comment '总楼层',
house_type varchar(20) not null comment '⼾型',
rooms varchar(20) not null comment '居室,关联sys_dic_data',
position varchar(20) not null comment '朝向,关联sys_dic_data',
area decimal(10,2) not null comment '⾯积(平⽅⽶)',
price decimal(10,2) not null comment '价格(元)',
devices varchar(255) comment '设备',
head_image varchar(255) not null comment '头图',
images varchar(2047) comment '房源图',
city_id bigint not null comment '城市编号,关联sys_region',
city_name varchar(40) not null comment '城市名,sys_region',
region_id bigint not null comment '区域编号,关联sys_region',
region_name varchar(40) not null comment '区域名,sys_region',
community_name varchar(100) not null comment '社区名',
detail_address varchar(255) not null comment '详细地址',
longitude decimal(12,7) not null comment '经度',
latitude decimal(12,7) not null comment '纬度',
intro text comment '房屋介绍',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建房源-城市关联表rel_house_city
create table rel_house_city (
id bigint primary key auto_increment comment '编号,主键⾃增',
city_id bigint not null comment '城市id',
city_name varchar(20) not null comment '城市名',
house_id bigint not null comment '房源id',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建房源-标签关联表rel_house_tag
create table rel_house_tag (
id bigint primary key auto_increment comment '编号,主键⾃增',
tag_code varchar(20) not null comment '标签码',
house_id bigint not null comment '房源id',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建聊天会话表app_session
create table app_session (
id bigint primary key auto_increment comment '编号,主键⾃增',
send_user_id bigint not null comment '发送⽅⽤⼾编号',
receiver_user_id bigint not null comment '接收⽅⽤⼾编号',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建聊天内容表app_message
create table app_message (
id bigint primary key auto_increment comment '编号,主键⾃增',
session_id bigint not null comment '会话Id',
send_user_id bigint not null comment '发送⽅⽤⼾编号',
type varchar(64) not null comment '消息类型',
content varchar(1024) not null comment '消息正⽂',
visited tinyint not null default 0 comment '0语⾳未读,1语⾳已读',
state tinyint not null default 0 comment '0⽂本未读,1⽂本已读',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建C端⽤⼾表app_usre
create table app_usre (
id bigint primary key auto_increment comment '编号,主键⾃增',
nick_name varchar(64) not null comment '昵称',
phone_num varchar(64) comment '电话',
open_id varchar(64) comment '微信openId',
password varchar(64) comment '密码',
salt varchar(64) comment '盐',
avatar varchar(255) comment '头像地址',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);

-- 创建系统参数表sys_argument
create table sys_argument (
id bigint primary key auto_increment comment '编号,主键⾃增',
name varchar(255) not null comment '参数名称',
`key` varchar(255) not null comment '参数键',
`value` varchar(1024) not null comment '参数值',
remark varchar(1024) not null comment '备注',
state tinyint not null default 0 comment '状态,0正常,1禁⽤',
deleteState tinyint not null default 0 comment '是否删除,0否,1是',
createTime datetime not null comment '创建时间,精确到秒',
updateTime dateTime not null comment '创建时间,精确到秒'
);


show databases;
use `bit_zufang`;
show tables;
(3)逆向导出EER图

4、数据库设计的重要性

提高数据管理效率、支持业务需求、降低成本和风险、提升系统性能、遵守法规和标准

相关推荐
遇事不決洛必達1 小时前
【数据库系列】本地映射云服务器Mysql的方法
服务器·数据库·mysql·定时任务
海鸥-w1 小时前
用python (fastapi)做项目第一天创建项目结构,数据建表,ORM配置安装,写第一个接口
数据库·python·fastapi
zfoo-framework2 小时前
通过redis-cli+lua脚本查询redis数据
数据库·redis·lua
牛栓柱2 小时前
【后端实战】用 Supabase + React/TS 零成本构建高并发 Multi-Agent 服务
前端·数据库·人工智能·后端·react.js·前端框架
yuezhilangniao2 小时前
xtr备份prepare到底变化了啥
mysql
yyk的萌2 小时前
创建属于自己的mysql的mcp
mysql·adb·ai·mcp
流烟默2 小时前
腾讯云Centos7.6使用yum安装MySQL8
mysql·centos·腾讯云
仙俊红2 小时前
如何优化 MySQL 深分页 SQL
android·sql·mysql
yyuuuzz2 小时前
谷歌云基础服务的入门认知
linux·运维·服务器·数据库·人工智能·github