實(shí)戰(zhàn) - 數(shù)據(jù)庫(kù)設(shè)計(jì)
經(jīng)過(guò)上一小節(jié)的需求分析,我們將系統(tǒng)分為了鑒權(quán)模塊、商品模塊和分類模塊,本節(jié)中,我們將圍繞功能模塊,進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。你將學(xué)習(xí)到實(shí)際開發(fā)中的一些數(shù)據(jù)庫(kù)設(shè)計(jì)技巧。請(qǐng)確保在你的開發(fā)環(huán)境下,已經(jīng)準(zhǔn)備好了一個(gè) MySQL
數(shù)據(jù)庫(kù)。
1. 創(chuàng)建庫(kù)
首先,我們先給商品管理項(xiàng)目創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),命名為imooc_goods_cms
,cms
為Content Management System
(內(nèi)容管理系統(tǒng))的縮寫。
鏈接數(shù)據(jù)庫(kù),執(zhí)行以下 SQL:
CREATE DATABASE `imooc_goods_cms` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

2. 創(chuàng)建表
2.1 通用字段
有一定數(shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn)的同學(xué)都知道,一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表都會(huì)有一些通用字段。關(guān)于通用字段有哪些、如何命名以及如何選定字段類型都有一定的套路,不僅受個(gè)人開發(fā)習(xí)慣的影響,也受到團(tuán)隊(duì)開發(fā)規(guī)范的約束。
該項(xiàng)目,所有的數(shù)據(jù)表都包含以下字段:
字段名稱 | 字段類型 | 字段長(zhǎng)度 | 允許為 NULL | 默認(rèn)值 | 注釋 |
---|---|---|---|---|---|
id | int | 0 | 否 | 無(wú) | 表主鍵,自增長(zhǎng) |
create_time | timestamp | - | 否 | CURRENT_TIMESTAMP | 創(chuàng)建時(shí)間 |
update_time | timestamp | - | 否 | CURRENT_TIMESTAMP | 更新時(shí)間 |
delete_time | timestamp | - | 是 | 無(wú) | 刪除時(shí)間 |
另外,除了通用字段,該項(xiàng)目中的所有表都以imooc
開頭。
2.2 用戶表
由于該系統(tǒng)鑒權(quán)模塊使用用戶名和密碼進(jìn)行鑒權(quán),需要設(shè)計(jì)一個(gè)用戶表imooc_user
,用戶表包含如下字段(已省略通用字段):
字段名稱 | 字段類型 | 字段長(zhǎng)度 | 允許為 NULL | 默認(rèn)值 | 注釋 |
---|---|---|---|---|---|
nickname | varchar | 50 | 是 | 空字符串 | 昵稱 |
username | varchar | 50 | 否 | 無(wú) | 用戶名 |
password | char | 32 | 否 | 無(wú) | 密碼 |
Tips:
password
字段的類型為char
,這是因?yàn)槲覀冊(cè)趯?shí)現(xiàn)代碼時(shí),將使用MD5
算法進(jìn)行加密,加密后的密碼長(zhǎng)度為32
,因此使用定長(zhǎng)字符串更加節(jié)省存儲(chǔ)空間。
鏈接MySQL
并選擇imooc_goods_cms
數(shù)據(jù)庫(kù),執(zhí)行以下 SQL:
-- ----------------------------
-- Table structure for imooc_user
-- ----------------------------
DROP TABLE IF EXISTS `imooc_user`;
CREATE TABLE `imooc_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 imooc_user
-- ----------------------------
INSERT INTO `imooc_user` VALUES (1, '小慕', 'admin', '123456', '2020-07-20 16:53:19', '2020-07-20 16:53:19', NULL);

2.3 商品表
商品模塊需要一個(gè)商品表imooc_goods
,商品表包含如下字段(已省略通用字段):
字段名稱 | 字段類型 | 字段長(zhǎng)度 | 允許為 NULL | 默認(rèn)值 | 注釋 |
---|---|---|---|---|---|
name | varchar | 100 | 否 | 無(wú) | 商品名 |
description | varchar | 255 | 是 | 空字符串 | 簡(jiǎn)介 |
category_id | int | 11 | 是 | 0 | 分類id |
price | dicimal | 10, 2 | 否 | 無(wú) | 價(jià)格 |
stock | int | 11 | 是 | 0 | 庫(kù)存 |
鏈接MySQL
并選擇imooc_goods_cms
數(shù)據(jù)庫(kù),執(zhí)行以下 SQL:
-- ----------------------------
-- Table structure for imooc_goods
-- ----------------------------
DROP TABLE IF EXISTS `imooc_goods`;
CREATE TABLE `imooc_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 imooc_goods
-- ----------------------------
INSERT INTO `imooc_goods` VALUES (1, '測(cè)試商品1', '', 0, 12.30, 3, '2020-07-20 16:53:19', '2020-07-20 16:53:19', NULL);
INSERT INTO `imooc_goods` VALUES (2, '測(cè)試商品2', '', 0, 33.20, 10, '2020-07-20 17:17:53', '2020-07-20 17:17:53', NULL);
INSERT INTO `imooc_goods` VALUES (3, '測(cè)試商品3', '', 0, 20.00, 50, '2020-07-20 17:18:09', '2020-07-20 17:18:09', NULL);
2.4 分類表
分類模塊需要一個(gè)商品表imooc_category
,分類表包含如下字段(已省略通用字段):
字段名稱 | 字段類型 | 字段長(zhǎng)度 | 允許為 NULL | 默認(rèn)值 | 注釋 |
---|---|---|---|---|---|
name | varchar | 100 | 否 | 無(wú) | 商品名 |
description | varchar | 255 | 是 | 空字符串 | 簡(jiǎn)介 |
鏈接MySQL
并選擇imooc_goods_cms
數(shù)據(jù)庫(kù),執(zhí)行以下 SQL:
-- ----------------------------
-- Table structure for imooc_category
-- ----------------------------
DROP TABLE IF EXISTS `imooc_category`;
CREATE TABLE `imooc_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;

至此,我們的數(shù)據(jù)庫(kù)和表已經(jīng)建立完成。
3. 小結(jié)
本小節(jié),我們一起創(chuàng)建了數(shù)據(jù)庫(kù)和表,表結(jié)構(gòu)比較簡(jiǎn)單,大家可以去我的代碼倉(cāng)庫(kù)找到SQL
文件,并直接在你的數(shù)據(jù)庫(kù)中執(zhí)行,下一小節(jié),我們將著手業(yè)務(wù)代碼的實(shí)現(xiàn)。