首页 > 数据库 >实战 - 数据库设计

实战 - 数据库设计

时间:2023-01-15 01:44:31浏览次数:41  
标签:实战 goods varchar utf8mb4 DEFAULT 数据库 10zhancom 设计 NULL

本节中,我们将围绕功能模块,进行数据库设计。你将学习到实际开发中的一些数据库设计技巧。请确保在你的开发环境下,已经准备好了一个 MySQL数据库。

1. 创建库
首先,我们先给商品管理项目创建一个数据库,命名为10zhancom_goods_cms,cms为Content Management System(内容管理系统)的缩写。

链接数据库,执行以下 SQL:

CREATE DATABASE `10zhancom_goods_cms` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
2. 创建表
2.1 通用字段
有一定数据库设计经验的同学都知道,一个数据库中的数据表都会有一些通用字段。关于通用字段有哪些、如何命名以及如何选定字段类型都有一定的套路,不仅受个人开发习惯的影响,也受到团队开发规范的约束。

该项目,所有的数据表都包含以下字段:

字段名称 字段类型 字段长度 允许为 NULL 默认值 注释
id int 0 否 无 表主键,自增长
create_time timestamp - 否 CURRENT_TIMESTAMP 创建时间
update_time timestamp - 否 CURRENT_TIMESTAMP 更新时间
delete_time timestamp - 是 无 删除时间
另外,除了通用字段,该项目中的所有表都以5axxw开头。

2.2 用户表
由于该系统鉴权模块使用用户名和密码进行鉴权,需要设计一个用户表5axxw_user,用户表包含如下字段(已省略通用字段):

字段名称 字段类型 字段长度 允许为 NULL 默认值 注释
nickname varchar 50 是 空字符串 昵称
username varchar 50 否 无 用户名
password char 32 否 无 密码
Tips:password字段的类型为char,这是因为我们在实现代码时,将使用MD5算法进行加密,加密后的密码长度为32,因此使用定长字符串更加节省存储空间。

链接MySQL并选择5axxw_goods_cms数据库,执行以下 SQL:

-- ----------------------------
-- Table structure for 5axxw_user
-- ----------------------------
DROP TABLE IF EXISTS `5axxw_user`;
CREATE TABLE `10zhancom_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT "昵称",
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT "用户名",
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT "密码",
`create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`delete_time` timestamp(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of 5axxw_user
-- ----------------------------
INSERT INTO `10zhancom_user` VALUES (1, '很酷的站长', 'admin', '123456', '2020-07-20 16:53:19', '2020-07-20 16:53:19', NULL);

2.3 商品表
商品模块需要一个商品表10zhancom_goods,商品表包含如下字段(已省略通用字段):

字段名称 字段类型 字段长度 允许为 NULL 默认值 注释
name varchar 100 否 无 商品名
description varchar 255 是 空字符串 简介
category_id int 11 是 0 分类id
price dicimal 10, 2 否 无 价格
stock int 11 是 0 库存
链接MySQL并选择10zhancom_goods_cms数据库,执行以下 SQL:

-- ----------------------------
-- Table structure for 10zhancom_goods
-- ----------------------------
DROP TABLE IF EXISTS `10zhancom_goods`;
CREATE TABLE `10zhancom_goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
`category_id` int(11) NULL DEFAULT 0,
`price` decimal(10, 2) NOT NULL,
`stock` int(11) NULL DEFAULT 0,
`create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`delete_time` timestamp(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of 5axxw_goods
-- ----------------------------
INSERT INTO `10zhancom_goods` VALUES (1, '测试商品1', '', 0, 12.30, 3, '2020-07-20 16:53:19', '2020-07-20 16:53:19', NULL);
INSERT INTO `10zhancom_goods` VALUES (2, '测试商品2', '', 0, 33.20, 10, '2020-07-20 17:17:53', '2020-07-20 17:17:53', NULL);
INSERT INTO `10zhancom_goods` VALUES (3, '测试商品3', '', 0, 20.00, 50, '2020-07-20 17:18:09', '2020-07-20 17:18:09', NULL);

2.4 分类表
分类模块需要一个商品表10zhancom_category,分类表包含如下字段(已省略通用字段):

字段名称 字段类型 字段长度 允许为 NULL 默认值 注释
name varchar 100 否 无 商品名
description varchar 255 是 空字符串 简介
链接MySQL并选择10zhancom_goods_cms数据库,执行以下 SQL:

-- ----------------------------
-- Table structure for 10zhancom_category
-- ----------------------------
DROP TABLE IF EXISTS `10zhancom_category`;
CREATE TABLE `10zhancom_category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

本文:很酷的站长
网站:https://www.10zhan.com
至此,我们的数据库和表已经建立完成。

3. 小结
本小节,我们一起创建了数据库和表,表结构比较简单。

标签:实战,goods,varchar,utf8mb4,DEFAULT,数据库,10zhancom,设计,NULL
From: https://www.cnblogs.com/10zhan/p/17052958.html

相关文章

  • Java使用MyBatis-Plus生成动态数据库表XML配置
    <updateid="createSpiderTable"parameterType="com.quanchengle.app.spider.CreateSpiderTableAndTableName">CREATETABLEIFNOTEXISTS${tableName}(<if......
  • 模拟oracle数据库块损坏后表数据的恢复—exp&imp恢复
    文档课题:模拟oracle数据库块损坏后表数据的恢复—exp&imp恢复.数据库:oracle19.12多租户说明:此次测试在无备份的情况下出现块损坏后运用exp&imp恢复表数据,此方法会存在丢失......
  • 数据库表操作
    1:创建表(表结构)createtablestudent( idint(10)primarykeyauto_increment, namevarchar(10)notnull, ageint(4)default11, addressvarchar(200), iphoneint(......
  • 程序设计实践读后感
    程序设计实践读后感风格程序代码不仅要能高效执行,还要可读性强。代码应该是清楚的和简单的—具有直截了当的逻辑、自然的表达式、通行的语言使用方式、有意义的名字和有......
  • day3 | 203.移除链表元素、707.设计链表、206.反转链表
    题目链接:203.移除链表元素-力扣(LeetCode)题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点......
  • Dubbo架构设计详解
    摘要:这篇文章,详细的介绍了Dubbo的架构设计。Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松......
  • Gradle配置对数据库集成测试的方法
    Gradle管理Java项目,标准项目布局仅定义了一个测试目录( src/test ),如果将集成测试添加到与单元测试相同的目录中。这是一个糟糕的主意,因为集成测试通常比单元测试慢很......
  • Web安全入门与靶场实战(5)- 安装DVWA
    搭建好LAMP环境之后,我们再继续通过安装一个真实的网站,从而更加真切地了解网站的整体架构,这里我们要安装的网站是DVWA。DVWA(DamnVulnerableWebApp)是用PHP+MySQL编写的一个......
  • 【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南
    Redis基本简介Redis是一个开源(BSD许可)、内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合等数据类型。内置复......
  • CS5260最新版规格书|CS5260设计方案|TYPEC转VGA转换芯片
    CS5260最新版规格书|CS5260设计方案|TYPEC转VGA转换芯片CS5260是一款低功耗、DisplayPort信号转VGA转换器芯片,通过USBType-C连接器。它是适用于USBType-C至VGA转换器,适......