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、数据库设计的重要性
提高数据管理效率、支持业务需求、降低成本和风险、提升系统性能、遵守法规和标准